<?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>96147</bug_id>
          
          <creation_ts>2012-09-07 14:09:36 -0700</creation_ts>
          <short_desc>[V8] DOM wrapper creation involves a bunch of sketchy code related to finding the Frame</short_desc>
          <delta_ts>2012-09-08 11:17:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>96154</dependson>
    
    <dependson>96174</dependson>
          <blocked>96038</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>714957</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 14:09:36 -0700</bug_when>
    <thetext>[V8] DOM wrapper creation involves a bunch of sketchy code related to finding the Frame</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714958</commentid>
    <comment_count>1</comment_count>
      <attachid>162866</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 14:09:50 -0700</bug_when>
    <thetext>Created attachment 162866
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714967</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 14:16:34 -0700</bug_when>
    <thetext>This patch works great, it&apos;s just slow.

== Before ==

Running Bindings/first-child.html (1 of 1)
DESCRIPTION: This benchmark covers &apos;firstChild&apos;, &apos;lastChild&apos;, &apos;nextSibling&apos; and &apos;previousSibling&apos; in Dromaeo/dom-traverse.html, and other DOM attributes that return a Node object.
RESULT Bindings: first-child= 791.916889238 runs/s
median= 793.650793651 runs/s, stdev= 6.87585793436 runs/s, min= 781.25 runs/s, max= 803.011292346 runs/s
RESULT Bindings: first-child: JSHeap= 1329937.6 bytes
median= 1326148.0 bytes, stdev= 12365.9021765 bytes, min= 1319928.0 bytes, max= 1367472.0 bytes
RESULT Bindings: first-child: Malloc= 0.0 bytes
median= 0.0 bytes, stdev= 0.0 bytes, min= 0.0 bytes, max= 0.0 bytes

== After ==

Running Bindings/first-child.html (1 of 1)
DESCRIPTION: This benchmark covers &apos;firstChild&apos;, &apos;lastChild&apos;, &apos;nextSibling&apos; and &apos;previousSibling&apos; in Dromaeo/dom-traverse.html, and other DOM attributes that return a Node object.
RESULT Bindings: first-child= 365.905414836 runs/s
median= 369.393139842 runs/s, stdev= 10.5470471025 runs/s, min= 325.814536341 runs/s, max= 372.836218375 runs/s
RESULT Bindings: first-child: JSHeap= 1329978.4 bytes
median= 1326000.0 bytes, stdev= 12336.8814471 bytes, min= 1319856.0 bytes, max= 1367488.0 bytes
RESULT Bindings: first-child: Malloc= 0.0 bytes
median= 0.0 bytes, stdev= 0.0 bytes, min= 0.0 bytes, max= 0.0 bytes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715100</commentid>
    <comment_count>3</comment_count>
      <attachid>162897</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 16:23:01 -0700</bug_when>
    <thetext>Created attachment 162897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715102</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 16:24:35 -0700</bug_when>
    <thetext>This patch works and is fast, but might be too large to review.  Here&apos;s the patch broken down into a number of smaller steps:

https://github.com/abarth/webkit/compare/master...CreationContext

I&apos;ll post each step as an individual patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715106</commentid>
    <comment_count>5</comment_count>
      <attachid>162900</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 16:32:23 -0700</bug_when>
    <thetext>Created attachment 162900
Now with test progression</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715119</commentid>
    <comment_count>6</comment_count>
      <attachid>162904</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 16:45:49 -0700</bug_when>
    <thetext>Created attachment 162904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715212</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 18:38:41 -0700</bug_when>
    <thetext>Committed r127955: &lt;http://trac.webkit.org/changeset/127955&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715257</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-07 21:58:12 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 96174</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715352</commentid>
    <comment_count>9</comment_count>
      <attachid>162959</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-08 10:26:00 -0700</bug_when>
    <thetext>Created attachment 162959
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715366</commentid>
    <comment_count>10</comment_count>
      <attachid>162959</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-08 11:17:17 -0700</bug_when>
    <thetext>Comment on attachment 162959
Patch for landing

Clearing flags on attachment: 162959

Committed r127972: &lt;http://trac.webkit.org/changeset/127972&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715367</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-08 11:17:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162866</attachid>
            <date>2012-09-07 14:09:50 -0700</date>
            <delta_ts>2012-09-07 16:23:00 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-96147-20120907140930.patch</filename>
            <type>text/plain</type>
            <size>19174</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3ODc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDU2YjQ2MTE2Y2FjNWVlMzk1MGI2
ZTliMTcwYWU4YThlODczMzE5ODMuLjVhNDg3MjMwY2NiN2Y2M2U4YjVhMTNkMjQ4ZTExZmFjMjE5
N2ZiM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCkBAIC0xMDg3LDcgKzEwODcsNyBAQCBFTkQKICAgICByZXR1cm4gdmFsdWU7
CiBFTkQKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgIiAuIFJldHVybk5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUs
ICRyZXN1bHQsICJpbmZvLkdldElzb2xhdGUoKSIpLiI7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIFJldHVybk5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsICRyZXN1bHQsICJpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQo
KSIsICJpbmZvLkdldElzb2xhdGUoKSIpLiI7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MzM1OSwzNyArMzM1OSwxNCBAQCBFTkQKICAgICB9CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
RnJhbWUuaCIpOwotICAgIG15ICRmcmFtZSA9ICIwIjsKLSAgICBpZiAoSXNOb2RlU3ViVHlwZSgk
ZGF0YU5vZGUpKSB7Ci0gICAgICAgICMgRG9jdW1lbnRUeXBlIG5vZGVzIGFyZSB0aGUgb25seSBu
b2RlcyB0aGF0IG1heSBoYXZlIGEgTlVMTCBkb2N1bWVudC4KLSAgICAgICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJEb2N1bWVudFR5cGUiKSB7Ci0gICAgICAgICAgICAkZnJhbWUgPSAiaW1wbC0+
ZG9jdW1lbnQoKSA/IGltcGwtPmRvY3VtZW50KCktPmZyYW1lKCkgOiAwIjsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICRmcmFtZSA9ICJpbXBsLT5kb2N1bWVudCgpLT5mcmFtZSgpIjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAgIEZy
YW1lKiBmcmFtZSA9ICRmcmFtZTsKLUVORAogCiAgICAgaWYgKElzU3ViVHlwZSgkZGF0YU5vZGUs
ICJEb2N1bWVudCIpKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci0gICAg
aWYgKGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+Y29udGV4dCgpLklz
RW1wdHkoKSAmJiBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5l
ZWRlZCgpKSB7Ci0gICAgICAgIC8vIGluaXRpYWxpemVJZk5lZWRlZCBtYXkgaGF2ZSBjcmVhdGVk
IGEgd3JhcHBlciBmb3IgdGhlIG9iamVjdCwgcmV0cnkgZnJvbSB0aGUgc3RhcnQuCi0gICAgICAg
IHJldHVybiAke2NsYXNzTmFtZX06OndyYXAoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKLSAgICB9Ci1FTkQKLSAgICB9Ci0KLSAgICAjIEZJWE1FOiBXZSBuZWVkIGEgYmV0
dGVyIHdheSBvZiByZWNvdmVyaW5nIHRoZSBjb3JyZWN0IHByb3RvdHlwZSBjaGFpbgotICAgICMg
Zm9yIGV2ZXJ5IHNvcnQgb2Ygb2JqZWN0LiBGb3Igbm93LCB3ZSBzcGVjaWFsLWNhc2UgY3Jvc3Mt
b3JpZ2luIHZpc2libGUKLSAgICAjIG9iamVjdHMgKGkuZS4sIHRob3NlIHdpdGggQ2hlY2tTZWN1
cml0eSkuCi0gICAgaWYgKElzVmlzaWJsZUFjcm9zc09yaWdpbnMoJGRhdGFOb2RlKSkgewotICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRnJhbWUuaCIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgPDxFTkQpOwotICAgIGlmIChpbXBsLT5mcmFtZSgpKSB7Ci0gICAgICAgIGZyYW1lID0g
aW1wbC0+ZnJhbWUoKTsKLSAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5p
bml0aWFsaXplSWZOZWVkZWQoKTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUo
KSkgeworICAgICAgICBpZiAoZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250ZXh0
KCkuSXNFbXB0eSgpICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdGlhbGl6
ZUlmTmVlZGVkKCkpIHsKKyAgICAgICAgICAgIC8vIGluaXRpYWxpemVJZk5lZWRlZCBtYXkgaGF2
ZSBjcmVhdGVkIGEgd3JhcHBlciBmb3IgdGhlIG9iamVjdCwgcmV0cnkgZnJvbSB0aGUgc3RhcnQu
CisgICAgICAgICAgICByZXR1cm4gJHtjbGFzc05hbWV9Ojp3cmFwKGltcGwuZ2V0KCksIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIH0KICAgICB9CiBFTkQKICAgICB9CkBAIC0z
NDA0LDE4ICszMzgxLDEyIEBAIEVORAogICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgp
KTsKICAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKICAgICB9Ci1FTkQKIAotICAgIHB1c2goQGlt
cGxDb250ZW50LCA8PEVORCk7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlh
dGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOwotRU5ECisgICAgd3JhcHBlciA9
IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CiAK
LSAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogICAgIGlmICghY29udGV4dC5Jc0VtcHR5
KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKLUVORAogCi0gICAgcHVzaChAaW1wbENvbnRl
bnQsIDw8RU5EKTsKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKIEVORApAQCAtMzU5MSw3ICszNTYyLDcgQEAgc3ViIEdlbmVyYXRl
RnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICB9CiAKICAgICAkcmV0dXJuIC49ICIucmVsZWFzZSgp
IiBpZiAoJHJldHVybklzUmVmKTsKLSAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5OYXRp
dmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkdldElzb2xh
dGUoKSIpIC4gIjtcbiI7CisgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gUmV0dXJuTmF0aXZlVG9K
U1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAiYXJncy5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCkiLCAiYXJncy5HZXRJc29sYXRlKCkiKSAuICI7XG4iOwogCiAgICAgcmV0
dXJuICRyZXN1bHQ7CiB9CkBAIC00MDE3LDExICszOTg4LDEyIEBAIHN1YiBJc0RPTU5vZGVUeXBl
CiAgICAgcmV0dXJuIDA7CiB9CiAKLQogc3ViIE5hdGl2ZVRvSlNWYWx1ZQogewogICAgIG15ICRz
aWduYXR1cmUgPSBzaGlmdDsKICAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteSAkZ2V0Q3Jl
YXRpb25Db250ZXh0ID0gc2hpZnQ7CisgICAgbXkgJGdldENyZWF0aW9uQ29udGV4dEFyZyA9ICRn
ZXRDcmVhdGlvbkNvbnRleHQgPyAiLCAkZ2V0Q3JlYXRpb25Db250ZXh0IiA6ICIiOwogICAgIG15
ICRnZXRJc29sYXRlID0gc2hpZnQ7CiAgICAgbXkgJGdldElzb2xhdGVBcmcgPSAkZ2V0SXNvbGF0
ZSA/ICIsICRnZXRJc29sYXRlIiA6ICIiOwogICAgIG15ICR0eXBlID0gR2V0VHlwZUZyb21TaWdu
YXR1cmUoJHNpZ25hdHVyZSk7CkBAIC00MDc4LDE4ICs0MDUwLDE4IEBAIHN1YiBOYXRpdmVUb0pT
VmFsdWUKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRzZXF1ZW5jZVR5cGUuaCIp
OwogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRzZXF1ZW5jZVR5cGUuaCIpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiAidjhBcnJheSgkdmFsdWUsICRnZXRJc29sYXRlKSI7Cisg
ICAgICAgIHJldHVybiAidjhBcnJheSgkdmFsdWUkZ2V0SXNvbGF0ZUFyZykiOwogICAgIH0KIAog
ICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAKICAgICAjIHNwZWNpYWwgY2FzZSBmb3Ig
bm9uLURPTSBub2RlIGludGVyZmFjZXMKICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsK
LSAgICAgICAgcmV0dXJuICJ0b1Y4KCR7dmFsdWV9LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pigp
IiAuICgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmV0dXJuTmV3T2JqZWN0In0g
PyAiJGdldElzb2xhdGVBcmcsIHRydWUpIiA6ICIkZ2V0SXNvbGF0ZUFyZykiKTsKKyAgICAgICAg
cmV0dXJuICJ0b1Y4KCR7dmFsdWV9JGdldENyZWF0aW9uQ29udGV4dEFyZyRnZXRJc29sYXRlQXJn
IiAuICgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmV0dXJuTmV3T2JqZWN0In0g
PyAiLCB0cnVlKSIgOiAiKSIpOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRUYXJn
ZXQiKSB7Ci0gICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRU
b1Y4T2JqZWN0KCR2YWx1ZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSRnZXRJc29sYXRlQXJn
KSI7CisgICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4
T2JqZWN0KCR2YWx1ZSRnZXRDcmVhdGlvbkNvbnRleHRBcmckZ2V0SXNvbGF0ZUFyZykiOwogICAg
IH0KIAogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKQEAgLTQxMDYsNyArNDA3
OCw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICBBZGRUb0ltcGxJbmNsdWRlcygid3RmL1Jl
ZlB0ci5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoInd0Zi9HZXRQdHIuaCIpOwogCi0gICAg
cmV0dXJuICJ0b1Y4KCR2YWx1ZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSRnZXRJc29sYXRl
QXJnKSI7CisgICAgcmV0dXJuICJ0b1Y4KCR2YWx1ZSRnZXRDcmVhdGlvbkNvbnRleHRBcmckZ2V0
SXNvbGF0ZUFyZykiOwogfQogCiBzdWIgUmV0dXJuTmF0aXZlVG9KU1ZhbHVlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAppbmRleCBjMTNlNDlmYjJlNmFiMzM2MTcwZGVj
ZmFlN2I3Nzc4YjlhZjdlZTRlLi5mOTIxNDg2NTYxZDgwOTNlYTg3ZmVlOWZlNDQ0ODRmYjA4ODkx
YzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKQEAgLTI1NCw2
ICsyNTQsMTEgQEAgUGFzc1JlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IHRvWFBhdGhOU1Jlc29sdmVy
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKICAgICByZXR1cm4gcmVzb2x2ZXI7CiB9CiAK
K3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gdG9Jbm5lckdsb2JhbE9iamVjdCh2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjb250ZXh0KQoreworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KGNvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7Cit9CisKIERPTVdpbmRv
dyogdG9ET01XaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKIHsKICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAppbmRleCAzOGQ1Y2FiMTA3YTc4MWQ2ODVkMmM5
MWQ4ZTMzZDkwOTM2OGU0ZGMxLi43OTk0MDU3Njg0MDhlYjNhZGJmMjdjN2EwMTJjYmE3OTk3M2Yx
YjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaApAQCAtMzUzLDEwICsz
NTMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gdG9ET01TdHJpbmdMaXN0KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAgUGFzc1JlZlB0
cjxYUGF0aE5TUmVzb2x2ZXI+IHRvWFBhdGhOU1Jlc29sdmVyKHY4OjpIYW5kbGU8djg6OlZhbHVl
Pik7CiAKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvSW5uZXJHbG9iYWxPYmplY3Qodjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCk7CiAgICAgRE9NV2luZG93KiB0b0RPTVdpbmRv
dyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
dG9TY3JpcHRFeGVjdXRpb25Db250ZXh0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KTsKIAotICAg
IC8vIFJldHVybnMgdGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGEgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC4KICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHRvVjhDb250ZXh0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmKTsKIAogICAgIC8vIFJl
dHVybnMgdGhlIGZyYW1lIG9iamVjdCBvZiB0aGUgd2luZG93IG9iamVjdCBhc3NvY2lhdGVkIHdp
dGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAK
aW5kZXggMTFlNDJjNTRkYzJmOWYyZTVhZDBiNzUyNDg1ODljMjJiOWEwZTBhYi4uMWQwNDkyMDhl
OGYwOWExZDJmNTc3ZTAxN2ZhMjFiNjZjMWI2NjE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKQEAgLTE3MCwxMSArMTcwLDYgQEAgc3Rh
dGljIHZvaWQgY2hlY2tEb2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVyLCBEb2N1bWVudCogZG9jdW0KICAgICBBU1NFUlQoIWRvY3VtZW50LT5pc0hUTUxEb2N1bWVu
dCgpIHx8IChWOERvY3VtZW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KHdyYXBwZXItPkdldFByb3RvdHlwZSgpKSkgPT0gZG9jdW1lbnQpKTsKIH0KIAotc3RhdGljIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gdG9Jbm5lckdsb2JhbE9iamVjdCh2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjb250ZXh0KQotewotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGNvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7Ci19Ci0KIFBhc3NSZWZQdHI8
VjhET01XaW5kb3dTaGVsbD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4RE9NV2luZG93U2hlbGwoZnJhbWUpKTsKQEAg
LTE5MywxOCArMTg4LDE5IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlh
bGl6ZWQoKQogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0KCkKIHsKLSAg
ICBpZiAoIW1fY29udGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCkt
PmNsaWVudCgpLT53aWxsUmVsZWFzZVNjcmlwdENvbnRleHQobV9jb250ZXh0LmdldCgpLCAwKTsK
LSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0KLSAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhh
dCBkaXNwb3NpbmcgdGhlIGNvbnRleHQgaGFzIGNyZWF0ZWQgYSBsb3Qgb2YKLSAgICAgICAgLy8g
Z2FyYmFnZS4gTm90aWZ5IFY4IGFib3V0IHRoaXMgc28gaXQnbGwgaGF2ZSBhIGNoYW5jZSBvZiBj
bGVhbmluZwotICAgICAgICAvLyBpdCB1cCB3aGVuIGlkbGUuCi0gICAgICAgIGJvb2wgaXNNYWlu
RnJhbWUgPSBtX2ZyYW1lLT5wYWdlKCkgJiYgKG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkg
PT0gbV9mcmFtZSk7IAotICAgICAgICBWOEdDRm9yQ29udGV4dERpc3Bvc2U6Omluc3RhbmNlKCku
bm90aWZ5Q29udGV4dERpc3Bvc2VkKGlzTWFpbkZyYW1lKTsKLSAgICB9Ci0KICAgICBtX3BlckNv
bnRleHREYXRhLmNsZWFyKCk7CisKKyAgICBpZiAobV9jb250ZXh0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT53aWxsUmVsZWFz
ZVNjcmlwdENvbnRleHQobV9jb250ZXh0LmdldCgpLCAwKTsKKyAgICBtX2NvbnRleHQuY2xlYXIo
KTsKKworICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQgZGlzcG9zaW5nIHRoZSBjb250ZXh0IGhhcyBj
cmVhdGVkIGEgbG90IG9mCisgICAgLy8gZ2FyYmFnZS4gTm90aWZ5IFY4IGFib3V0IHRoaXMgc28g
aXQnbGwgaGF2ZSBhIGNoYW5jZSBvZiBjbGVhbmluZworICAgIC8vIGl0IHVwIHdoZW4gaWRsZS4K
KyAgICBib29sIGlzTWFpbkZyYW1lID0gbV9mcmFtZS0+cGFnZSgpICYmIChtX2ZyYW1lLT5wYWdl
KCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpOyAKKyAgICBWOEdDRm9yQ29udGV4dERpc3Bvc2U6
Omluc3RhbmNlKCkubm90aWZ5Q29udGV4dERpc3Bvc2VkKGlzTWFpbkZyYW1lKTsKIH0KIAogdm9p
ZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95R2xvYmFsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IDk2ZTBhNTYzMWMxNzVlN2Q1NDUyNDQ4N2M1
NmFlMjkxNjVmNjAwMGUuLmYxMmM0Y2Y5OGZlZTRmYzY5MTAwZTJkMmYyYjJhYmYyN2M0ZGM0NjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMTU3
LDQ4ICsxNTcsMTkgQEAgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiBWOERPTVdyYXBwZXI6OndyYXBO
YXRpdmVOb2RlRmlsdGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPgogICAgIHJldHVybiBOb2RlRmls
dGVyOjpjcmVhdGUoVjhOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUoZmlsdGVyKSk7CiB9CiAK
LXY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3Qo
RnJhbWUqIGZyYW1lLCBXcmFwcGVyVHlwZUluZm8qIHR5cGUsIHZvaWQqIGltcGwpCit2ODo6TG9j
YWw8djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KFdyYXBwZXJU
eXBlSW5mbyogdHlwZSwgdm9pZCogaW1wbCkKIHsKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBX
b3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gMDsKLSNlbmRpZgotICAgIGlmICghZnJhbWUp
IHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpDb250ZXh0
OjpHZXRDdXJyZW50KCk7Ci0gICAgICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsUHJvdG90eXBlID0gdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChjb250ZXh0LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpOwot
ICAgICAgICAgICAgaWYgKGlzV3JhcHBlck9mVHlwZShnbG9iYWxQcm90b3R5cGUsICZWOERPTVdp
bmRvdzo6aW5mbykpIHsKLSAgICAgICAgICAgICAgICBGcmFtZSogZ2xvYmFsRnJhbWUgPSBWOERP
TVdpbmRvdzo6dG9OYXRpdmUoZ2xvYmFsUHJvdG90eXBlKS0+ZnJhbWUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoZ2xvYmFsRnJhbWUgJiYgZ2xvYmFsRnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRl
U2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgICAgICAgICAgICAgIGZy
YW1lID0gZ2xvYmFsRnJhbWU7Ci0gICAgICAgICAgICB9Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0g
ICAgICAgICAgICBlbHNlIGlmIChpc1dyYXBwZXJPZlR5cGUoZ2xvYmFsUHJvdG90eXBlLCAmVjhX
b3JrZXJDb250ZXh0OjppbmZvKSkKLSAgICAgICAgICAgICAgICB3b3JrZXJDb250ZXh0ID0gVjhX
b3JrZXJDb250ZXh0Ojp0b05hdGl2ZShsb29rdXBET01XcmFwcGVyKFY4V29ya2VyQ29udGV4dDo6
R2V0VGVtcGxhdGUoKSwgY29udGV4dC0+R2xvYmFsKCkpKTsKLSNlbmRpZgotICAgICAgICB9Ci0g
ICAgfQorICAgIFY4UGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRhID0gVjhQZXJDb250ZXh0
RGF0YTo6Y3VycmVudCgpOwogCi0gICAgVjhQZXJDb250ZXh0RGF0YSogY29udGV4dERhdGEgPSAw
OwotICAgIGlmIChmcmFtZSkKLSAgICAgICAgY29udGV4dERhdGEgPSBwZXJDb250ZXh0RGF0YUZv
ckN1cnJlbnRXb3JsZChmcmFtZSk7Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgZWxzZSBpZiAo
d29ya2VyQ29udGV4dCkKLSAgICAgICAgY29udGV4dERhdGEgPSBwZXJDb250ZXh0RGF0YSh3b3Jr
ZXJDb250ZXh0KTsKLSNlbmRpZgorICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZSA9
IHBlckNvbnRleHREYXRhID8gcGVyQ29udGV4dERhdGEtPmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUo
dHlwZSkgOiBWOE9iamVjdENvbnN0cnVjdG9yOjpuZXdJbnN0YW5jZSh0eXBlLT5nZXRUZW1wbGF0
ZSgpLT5HZXRGdW5jdGlvbigpKTsKKyAgICBpZiAoaW5zdGFuY2UuSXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CisKKyAgICBzZXRET01XcmFwcGVyKGluc3RhbmNlLCB0eXBlLCBp
bXBsKTsKKworICAgIGlmICh0eXBlID09ICZWOEhUTUxEb2N1bWVudDo6aW5mbykKKyAgICAgICAg
aW5zdGFuY2UgPSBWOEhUTUxEb2N1bWVudDo6d3JhcEluU2hhZG93T2JqZWN0KGluc3RhbmNlLCBz
dGF0aWNfY2FzdDxOb2RlKj4oaW1wbCkpOwogCi0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGlu
c3RhbmNlOwotICAgIGlmIChjb250ZXh0RGF0YSkKLSAgICAgICAgaW5zdGFuY2UgPSBjb250ZXh0
RGF0YS0+Y3JlYXRlV3JhcHBlckZyb21DYWNoZSh0eXBlKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
djg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSB0eXBlLT5nZXRUZW1wbGF0ZSgpLT5H
ZXRGdW5jdGlvbigpOwotICAgICAgICBpbnN0YW5jZSA9IFY4T2JqZWN0Q29uc3RydWN0b3I6Om5l
d0luc3RhbmNlKGZ1bmN0aW9uKTsKLSAgICB9Ci0gICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxlZCBh
bGxvY2F0aW9ucy4KLSAgICAgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5jZSwgdHlwZSwgaW1wbCk7
Ci0gICAgICAgIGlmICh0eXBlID09ICZWOEhUTUxEb2N1bWVudDo6aW5mbykKLSAgICAgICAgICAg
IGluc3RhbmNlID0gVjhIVE1MRG9jdW1lbnQ6OndyYXBJblNoYWRvd09iamVjdChpbnN0YW5jZSwg
c3RhdGljX2Nhc3Q8Tm9kZSo+KGltcGwpKTsKLSAgICB9CiAgICAgcmV0dXJuIGluc3RhbmNlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCmluZGV4IDNiYjUx
ZTM1YTVmOTM4OWQzNDdlYWMzMDA3YjU1NzkwN2YwZmUzYWUuLjZiODUxYmUxYjYwNTFhNTJjZjM1
YTdmMzZlY2VjMDNjYWI4YzY3YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V3JhcHBlci5oCkBAIC0xMTksNyArMTE5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBzdGF0aWMgdm9pZCBzZXROYW1lZEhpZGRlblJlZmVyZW5jZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHBhcmVudCwgY29uc3QgY2hhciogbmFtZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoaWxk
KTsKICAgICAgICAgc3RhdGljIHZvaWQgc2V0TmFtZWRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJh
bWUqLCBjb25zdCBjaGFyKiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKIAotICAgICAgICBzdGF0
aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoRnJhbWUqLCBXcmFw
cGVyVHlwZUluZm8qLCB2b2lkKik7CisgICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gaW5zdGFudGlhdGVWOE9iamVjdChXcmFwcGVyVHlwZUluZm8qLCB2b2lkKik7CiAKICAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2V0Q2FjaGVkV3JhcHBlcihOb2RlKiBu
b2RlKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEhpZGRlblByb3BlcnR5TmFtZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRk
ZW5Qcm9wZXJ0eU5hbWUuaAppbmRleCA0MGM3MDBmNmIzOGFjZmQ2NzY0YjU3ZDc1N2MyMDlhNzky
N2RkOTFjLi5kZjZmZjg2OGU4Mjg4YTMzNjU1M2RlNWRiYzc4M2Y2NmQ1Zjc1MGY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgKQEAg
LTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFYoZG9tVHJhbnNhY3Rpb25E
YXRhKSBcCiAgICAgVihldmVudCkgXAogICAgIFYobGlzdGVuZXIpIFwKKyAgICBWKHBlckNvbnRl
eHREYXRhKSBcCiAgICAgVihvd25lck5vZGUpIFwKICAgICBWKHNjcmlwdFN0YXRlKSBcCiAgICAg
VihzbGVlcEZ1bmN0aW9uKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFBlckNvbnRleHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVy
Q29udGV4dERhdGEuY3BwCmluZGV4IGU1NzAyOWJmZDcyNGI4OTY1NTY2NWVkMWI2NWRlMjE0NTQ2
ODIwMTQuLmU3YmI4NmY1OWI0OWVhMGViMmE3MjNhYjFiZmU0NTEwZDQ0YzEyZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCkBAIC0zMSwx
MiArMzEsMjUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWOFBlckNvbnRleHRE
YXRhLmgiCiAKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhpZGRlblByb3Bl
cnR5TmFtZS5oIgogI2luY2x1ZGUgIlY4T2JqZWN0Q29uc3RydWN0b3IuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitWOFBlckNvbnRleHREYXRhKiBWOFBlckNvbnRleHREYXRhOjpjdXJyZW50
KCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlZFBlckNvbnRleHREYXRhID0g
dG9Jbm5lckdsb2JhbE9iamVjdCh2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKS0+R2V0SGlkZGVu
VmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OnBlckNvbnRleHREYXRhKCkpOworICAgIGlmICh3
cmFwcGVkUGVyQ29udGV4dERhdGEuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VjhQZXJDb250ZXh0RGF0YSo+KHY4OjpFeHRlcm5hbDo6VW53cmFw
KHdyYXBwZWRQZXJDb250ZXh0RGF0YSkpOworfQorCiB2b2lkIFY4UGVyQ29udGV4dERhdGE6OmRp
c3Bvc2UoKQogeworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kZVNjb3BlOworICAgIHRvSW5uZXJH
bG9iYWxPYmplY3QobV9jb250ZXh0KS0+RGVsZXRlSGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0
eU5hbWU6OnBlckNvbnRleHREYXRhKCkpOworCiAgICAgewogICAgICAgICBXcmFwcGVyQm9pbGVy
cGxhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV93cmFwcGVyQm9pbGVycGxhdGVzLmJlZ2luKCk7CiAg
ICAgICAgIGZvciAoOyBpdCAhPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuZW5kKCk7ICsraXQpIHsK
QEAgLTczLDYgKzg2LDggQEAgdm9pZCBWOFBlckNvbnRleHREYXRhOjpkaXNwb3NlKCkKIAogYm9v
bCBWOFBlckNvbnRleHREYXRhOjppbml0KCkKIHsKKyAgICB0b0lubmVyR2xvYmFsT2JqZWN0KG1f
Y29udGV4dCktPlNldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpwZXJDb250ZXh0
RGF0YSgpLCB2ODo6RXh0ZXJuYWw6OldyYXAodGhpcykpOworCiAgICAgdjg6OkhhbmRsZTx2ODo6
U3RyaW5nPiBwcm90b3R5cGVTdHJpbmcgPSB2ODo6U3RyaW5nOjpOZXdTeW1ib2woInByb3RvdHlw
ZSIpOwogICAgIGlmIChwcm90b3R5cGVTdHJpbmcuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRl
eHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmgK
aW5kZXggMjBlOTEwYzE2OWVkYmQxNDVlNzE1MjE0ZjMwNmRjODY1N2I4NDk1My4uOGExMTcxYmU5
NWU1ZTcyNWIyZmFlNGI3NWY4NWQzODQzYjk4YmUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFY4UGVyQ29udGV4dERhdGEgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPFY4UGVyQ29udGV4dERhdGE+IGNyZWF0ZSh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFY4UGVyQ29udGV4dERhdGE+IGNy
ZWF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4dCkKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgVjhQZXJDb250ZXh0RGF0YShjb250ZXh0KSk7CiAgICAgfQpA
QCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAgICAgICAgIGRpc3Bvc2UoKTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgVjhQZXJDb250ZXh0RGF0YSogY3VycmVudCgpOworCiAgICAgYm9vbCBpbml0KCk7
CiAKICAgICAvLyBUbyBjcmVhdGUgSlMgV3JhcHBlciBvYmplY3RzLCB3ZSBjcmVhdGUgYSBjYWNo
ZSBvZiBhICdib2lsZXIgcGxhdGUnCkBAIC03MSw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgZXhwbGljaXQgVjhQZXJDb250ZXh0RGF0YSh2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjb250ZXh0KQorICAgIGV4cGxpY2l0IFY4UGVyQ29udGV4dERhdGEodjg6OlBlcnNp
c3RlbnQ8djg6OkNvbnRleHQ+IGNvbnRleHQpCiAgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQp
CiAgICAgewogICAgIH0KQEAgLTg5LDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIFdU
Rjo6SGFzaE1hcDxXcmFwcGVyVHlwZUluZm8qLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+
ID4gQ29uc3RydWN0b3JNYXA7CiAgICAgQ29uc3RydWN0b3JNYXAgbV9jb25zdHJ1Y3Rvck1hcDsK
IAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICB2ODo6UGVyc2lz
dGVudDx2ODo6Q29udGV4dD4gbV9jb250ZXh0OwogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6OlZh
bHVlPiBtX2Vycm9yUHJvdG90eXBlOwogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6OlZhbHVlPiBt
X29iamVjdFByb3RvdHlwZTsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDdhZDliYWIwMTBkNzY5NTg5Y2Q3ZGQ5Y2JmZWFlNzZmNzc3NWExYTEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMt
ZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotVGVzdCB0aGUgZGF0
YWJhc2UgYXV0aG9yaXplci4KLUJlZ2lubmluZyB3cml0ZSB0cmFuc2FjdGlvbjoKLVNRTElURV9D
UkVBVEVfVEFCTEUgYWxsb3dlZC4KLVNRTElURV9DUkVBVEVfSU5ERVggYWxsb3dlZC4KLVNRTElU
RV9DUkVBVEVfVEVNUF9UQUJMRSBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIg
YWxsb3dlZC4KLVNRTElURV9DUkVBVEVfVEVNUF9WSUVXIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRF
X1RSSUdHRVIgYWxsb3dlZC4KLVNRTElURV9DUkVBVEVfVklFVyBhbGxvd2VkLgotU1FMSVRFX0NS
RUFURV9WVEFCTEUgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElU
RV9SRUFEIGFsbG93ZWQuCi1TUUxJVEVfU0VMRUNUIGFsbG93ZWQuCi1TUUxJVEVfREVMRVRFIGFs
bG93ZWQuCi1TUUxJVEVfSU5TRVJUIGFsbG93ZWQuCi1TUUxJVEVfVVBEQVRFIGFsbG93ZWQuCi1T
UUxJVEVfUFJBR01BIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJ
VEVfQUxURVJfVEFCTEUgYWxsb3dlZC4KLVNRTElURV9BTFRFUl9UQUJMRSBhbGxvd2VkLgotU1FM
SVRFX1RSQU5TQUNUSU9OIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1T
UUxJVEVfQVRUQUNIIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJ
VEVfREVUQUNIIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVf
UkVJTkRFWCBhbGxvd2VkLgotU1FMSVRFX0FOQUxZWkUgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FM
RXhjZXB0aW9uXSAoNSkKLVNRTElURV9EUk9QX0lOREVYIGFsbG93ZWQuCi1TUUxJVEVfRFJPUF9U
RU1QX1RBQkxFIGFsbG93ZWQuCi1TUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgYWxsb3dlZC4KLVNR
TElURV9EUk9QX1RFTVBfVklFVyBhbGxvd2VkLgotU1FMSVRFX0RST1BfVFJJR0dFUiBhbGxvd2Vk
LgotU1FMSVRFX0RST1BfVklFVyBhbGxvd2VkLgotU1FMSVRFX0RST1BfVEFCTEUgYWxsb3dlZC4K
LVdyaXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZC4KLQotQmVnaW5uaW5nIHJlYWQgdHJhbnNhY3Rp
b25zOgotU1FMSVRFX0NSRUFURV9UQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRp
b25dICg1KQotU1FMSVRFX0NSRUFURV9UQUJMRSBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9JTkRF
WCBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0NSRUFURV9U
RU1QX1RBQkxFIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVf
Q1JFQVRFX1RFTVBfVFJJR0dFUiBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQotU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0
aW9uXSAoNSkKLVNRTElURV9DUkVBVEVfVFJJR0dFUiBub3QgYWxsb3dlZDogW29iamVjdCBTUUxF
eGNlcHRpb25dICg1KQotU1FMSVRFX0NSRUFURV9WSUVXIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNR
TEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQ1JFQVRFX1ZUQUJMRSBub3QgYWxsb3dlZDogW29iamVj
dCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0NSRUFURV9JTkRFWCBhbGxvd2VkLgotU1FMSVRF
X0NSRUFURV9URU1QX1RBQkxFIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBh
bGxvd2VkLgotU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgYWxsb3dlZC4KLVNRTElURV9DUkVBVEVf
VFJJR0dFUiBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9WSUVXIGFsbG93ZWQuCi1TUUxJVEVfQ1JF
QVRFX1ZUQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRF
X1JFQUQgYWxsb3dlZC4KLVNRTElURV9TRUxFQ1QgYWxsb3dlZC4KLVNRTElURV9ERUxFVEUgbm90
IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9JTlNFUlQgbm90IGFs
bG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9VUERBVEUgbm90IGFsbG93
ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9QUkFHTUEgbm90IGFsbG93ZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9BTFRFUl9UQUJMRSBub3QgYWxsb3dl
ZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0FMVEVSX1RBQkxFIG5vdCBhbGxv
d2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfVFJBTlNBQ1RJT04gbm90IGFs
bG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9BVFRBQ0ggbm90IGFsbG93
ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9ERVRBQ0ggbm90IGFsbG93ZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9SRUlOREVYIG5vdCBhbGxvd2VkOiBb
b2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQU5BTFlaRSBub3QgYWxsb3dlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0RST1BfSU5ERVggbm90IGFsbG93ZWQ6IFtv
YmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9EUk9QX1RFTVBfVEFCTEUgbm90IGFsbG93
ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBu
b3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0RST1BfVEVNUF9W
SUVXIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfRFJPUF9U
UklHR0VSIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfRFJP
UF9WSUVXIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfRFJP
UF9UQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotUmVhZCB0cmFu
c2FjdGlvbnMgc3VjY2VlZGVkLgotCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162897</attachid>
            <date>2012-09-07 16:23:01 -0700</date>
            <delta_ts>2012-09-07 16:32:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96147-20120907162241.patch</filename>
            <type>text/plain</type>
            <size>185722</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3OTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDU2YjQ2MTE2Y2FjNWVlMzk1MGI2
ZTliMTcwYWU4YThlODczMzE5ODMuLjg4YTkyZDM0OTg4MDVlNjBiMjliMDc2NWUwNjU5YjgwMGU4
ZTg2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCkBAIC0zODQsNyArMzg0LDcgQEAgRU5ECiAgICAgewogICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJv
bUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5s
aW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBlfSosIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDAke2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyfSk7Cisg
ICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBl
fSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwJHtmb3JjZU5ld09iamVjdFBhcmFtZXRlcn0p
OwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CkBAIC00MDIsNyArNDAy
LDcgQEAgRU5ECiAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJIVE1MRG9jdW1lbnQiKSB7CiAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAgIHN0YXRpYyB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gd3JhcEluU2hhZG93T2JqZWN0KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB3cmFwcGVy
LCBOb2RlKiBpbXBsKTsKLSAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROYW1lZFBy
b3BlcnR5KEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGtl
eSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSop
OworICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5hbWVkUHJvcGVydHkoSFRNTERv
Y3VtZW50KiBodG1sRG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIEVORAogICAgIH0K
IApAQCAtNDc3LDEzICs0NzcsMTMgQEAgRU5ECiAgICAgbXkgJHdyYXBTbG93QXJndW1lbnRUeXBl
ID0gR2V0UGFzc1JlZlB0clR5cGUoJG5hdGl2ZVR5cGUpOwogICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIDw8RU5EKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcFNsb3coJHt3cmFwU2xvd0FyZ3VtZW50VHlwZX0sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwU2xvdygke3dyYXBTbG93QXJndW1lbnRUeXBlfSwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCiBFTkQKIAog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
JHtjbGFzc05hbWV9Ojp3cmFwKCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUke2ZvcmNlTmV3T2Jq
ZWN0SW5wdXR9KQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiAke2NsYXNzTmFtZX06OndyYXAoJHtu
YXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlJHtmb3JjZU5ld09iamVjdElucHV0fSkKIHsKIEVORAogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgaWYgKCFmb3JjZU5ld09iamVjdCkge1xuIikgaWYg
SXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSk7CkBAIC01MDUsNyArNTA1LDcgQEAgRU5ECiAg
ICAgfSBlbHNpZiAoISgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Ub0pT
T2JqZWN0In0gb3IgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDdXN0b21Ub0pT
T2JqZWN0In0pKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIAotaW5s
aW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9
KQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGws
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDAke2ZvcmNlTmV3T2JqZWN0UGFyYW1l
dGVyfSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2so
aXNvbGF0ZSk7CkBAIC01MTUsMTQgKzUxNSwxNCBAQCBFTkQKICAgICB9IGVsc2lmICgkaW50ZXJm
YWNlTmFtZSBuZSAnTm9kZScpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQp
OwogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9Kiwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgdjg6Oklzb2xhdGUqID0gMCR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9KTsKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUq
ID0gMCR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9KTsKIEVORAogICAgIH0gZWxzZSB7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjhTbG93KE5vZGUqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiwgYm9vbCk7Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOFNsb3coTm9k
ZSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSos
IGJvb2wpOwogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTm9kZSogaW1wbCwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwLCBib29sIGZvcmNlTmV3T2JqZWN0
ID0gZmFsc2UpCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTm9kZSogaW1wbCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCwgYm9vbCBmb3JjZU5ld09iamVjdCA9
IGZhbHNlKQogewogICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCiAgICAgICAgIHJldHVybiB2OE51
bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CkBAIC01MzcsNyArNTM3LDcgQEAgRU5ECiAgICAgfQogCiAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFBhc3NSZWZQdHI8ICR7bmF0aXZlVHlwZX0gPiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDAke2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyfSkKK2lubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCAke25hdGl2ZVR5cGV9ID4g
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCR7Zm9yY2VOZXdPYmplY3RQ
YXJhbWV0ZXJ9KQogewogICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSR7Zm9yY2VOZXdPYmplY3RDYWxsfSk7CiB9CkBAIC01NjAsNiArNTYwLDExIEBA
IHN1YiBHZXRJbnRlcm5hbEZpZWxkcwogICAgIG15ICRuYW1lID0gJGRhdGFOb2RlLT5uYW1lOwog
CiAgICAgbXkgQGN1c3RvbUludGVybmFsRmllbGRzID0gKCk7CisKKyAgICBpZiAoJG5hbWUgZXEg
IkRPTVdpbmRvdyIgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJD
b250ZXh0In0pIHsKKyAgICAgICAgcHVzaChAY3VzdG9tSW50ZXJuYWxGaWVsZHMsICJwZXJDb250
ZXh0RGF0YUluZGV4Iik7CisgICAgfQorCiAgICAgIyBXZSBjYW4ndCBhc2sgd2hldGhlciBhIHBh
cmVudCB0eXBlIGhhcyBhIGdpdmVuIGV4dGVuZGVkQXR0cmlidXRlLAogICAgICMgc28gc3BlY2lh
bC1jYXNlIEFic3RyYWN0V29ya2VyIGFuZCBXb3JrZXJDb250ZXh0IHRvIGluY2x1ZGUgYWxsIHN1
Yi10eXBlcy4KICAgICAjIEV2ZW50IGxpc3RlbmVycyBvbiBET00gbm9kZXMgYXJlIGV4cGxpY2l0
bHkgc3VwcG9ydGVkIGluIHRoZSBHQyBjb250cm9sbGVyLgpAQCAtMTAwNyw3ICsxMDEyLDcgQEAg
RU5ECiAgICAgICAgIG15ICRkb21NYXBGdW5jdGlvbiA9IEdldERvbU1hcEZ1bmN0aW9uKCRkYXRh
Tm9kZSwgJGludGVyZmFjZU5hbWUsICJpbmZvLkdldElzb2xhdGUoKSIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0g
cmVzdWx0LmdldCgpID8gJHtkb21NYXBGdW5jdGlvbn0uZ2V0KHJlc3VsdC5nZXQoKSkgOiB2OFVu
ZGVmaW5lZCgpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYg
KHdyYXBwZXIuSXNFbXB0eSgpKSB7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkhvbGRlcigpLT5D
cmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSwg
aW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpXG4iKTsKICAg
ICAgICAgaWYgKCRkYXRhTm9kZS0+bmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIkZyYW1lLmgiKTsKQEAgLTEwMjYsNyArMTAzMSw3IEBAIEVORAog
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXR0clR5cGUuaCIpOwogICAgICAgICBteSAk
c3ZnTmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVlZGluZ1RlYXJPZmYo
JGF0dHJUeXBlKTsKICAgICAgICAgIyBDb252ZXJ0IGZyb20gYWJzdHJhY3QgU1ZHUHJvcGVydHkg
dG8gcmVhbCB0eXBlLCBzbyB0aGUgcmlnaHQgdG9KUygpIG1ldGhvZCBjYW4gYmUgaW52b2tlZC4K
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDwkc3ZnTmF0aXZlVHlwZSo+KCRyZXN1bHQpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8JHN2Z05hdGl2ZVR5cGUqPigk
cmVzdWx0KSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CiAgICAgfSBl
bHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhdHRyVHlwZSkg
YW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJWOCRhdHRyVHlwZS5oIik7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTVkdQ
cm9wZXJ0eVRlYXJPZmYuaCIpOwpAQCAtMTA0OSwxOSArMTA1NCwxOSBAQCBFTkQKICAgICAgICAg
ICAgICAgICAgICAgJHJlc3VsdCA9fiBzL21hdHJpeC9zdmdNYXRyaXgvOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0
dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSh3cmFwcGVyLCAkcmVz
dWx0LCAkdXBkYXRlTWV0aG9kKSksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBp
bmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVh
dGUod3JhcHBlciwgJHJlc3VsdCwgJHVwZGF0ZU1ldGhvZCkpLCBpbmZvLkhvbGRlcigpLCBpbmZv
LkdldElzb2xhdGUoKSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIik7CiAgICAg
ICAgICAgICAgICAgJHRlYXJPZmZUeXBlID1+IHMvU1ZHUHJvcGVydHlUZWFyT2ZmPC9TVkdTdGF0
aWNQcm9wZXJ0eVRlYXJPZmY8JGltcGxDbGFzc05hbWUsIC87CiAKLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVh
ck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0LCAkdXBkYXRlTWV0aG9kKSksIGluZm8uSG9s
ZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6
Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0LCAkdXBkYXRlTWV0aG9k
KSksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2lmICgkdGVhck9mZlR5cGUgPX4gL1NWR1N0YXRpY0xpc3RQcm9wZXJ0
eVRlYXJPZmYvKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJl
dHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0
KSksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRv
VjgoV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZShpbXAsICRyZXN1bHQpKSwgaW5m
by5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CiAgICAgICAgIH0gZWxzaWYgKCR0
ZWFyT2ZmVHlwZSA9fiAvU1ZHKFBvaW50fFBhdGhTZWcpTGlzdC8pIHsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHJlc3Vs
dCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRv
VjgoV1RGOjpnZXRQdHIoJHJlc3VsdCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTtcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRl
KCRyZXN1bHQpKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNv
bGF0ZSgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBy
ZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRlKCRyZXN1bHQpKSwg
aW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CiAgICAgICAgIH0KICAgICB9
IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIk1lc3NhZ2VQb3J0QXJyYXki
KSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJNZXNzYWdlUG9ydC5oIik7CkBAIC0xMDc0
LDcgKzEwNzksNyBAQCBFTkQKICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzQ29weSgqcG9ydHMp
OwogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9IHY4OjpBcnJheTo6TmV3KHBv
cnRzQ29weS5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9ydHNDb3B5LnNp
emUoKTsgKytpKQotICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJ
c29sYXRlKCkpLCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRp
b25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKSk7CisgICAgICAgIHBvcnRBcnJheS0+U2V0
KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHRvVjgocG9ydHNDb3B5W2ldLmdldCgp
LCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSkpOwogICAgIHJldHVybiBwb3J0QXJy
YXk7CiBFTkQKICAgICB9IGVsc2UgewpAQCAtMTA4Nyw3ICsxMDkyLDcgQEAgRU5ECiAgICAgcmV0
dXJuIHZhbHVlOwogRU5ECiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgICIgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5HZXRJc29sYXRlKCkiKS4iO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIgLiBSZXR1cm5OYXRpdmVUb0pTVmFs
dWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5Ib2xkZXIoKSIsICJpbmZv
LkdldElzb2xhdGUoKSIpLiI7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAzNSw3ICsy
MDQwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOCR7aW1wbENsYXNzTmFtZX1D
b25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmcKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUg
ZG9jdW1lbnQgaXMgYWRkZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3RoZXJ3aXNlLCB0aGUgJHtp
bXBsQ2xhc3NOYW1lfSBpbnN0YW5jZQogICAgIC8vIG1heSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkg
bm9kZSBpbiB0aGUgbWFwIGFuZCBnZXQgZ2FyYmFnZS1jb2xsZWN0ZWQgcHJlbWF0dXJlbHkuCi0g
ICAgdG9WOChkb2N1bWVudCwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKKyAgICB0b1Y4KGRvY3VtZW50LCBhcmdzLkhvbGRlcigpLCBhcmdzLkdl
dElzb2xhdGUoKSk7CiAKIEVORAogCkBAIC0yNjIzLDcgKzI2MjgsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJU
eXBlZEFycmF5In0pIHsKICAgICAgICAgbXkgJHZpZXdUeXBlID0gR2V0VHlwZU5hbWVPZkV4dGVy
bmFsVHlwZWRBcnJheSgkZGF0YU5vZGUpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxF
TkQpOwotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJGltcGxDbGFzc05hbWUqIGltcGwsIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgkaW1wbENsYXNzTmFtZSogaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29s
YXRlKTsKQEAgLTMzNDgsNyArMzM1Myw3IEBAIHN1YiBHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzCiAK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+
ICR7Y2xhc3NOYW1lfTo6d3JhcFNsb3coJHt3cmFwU2xvd0FyZ3VtZW50VHlwZX0gaW1wbCwgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gJHtjbGFzc05hbWV9Ojp3cmFwU2xvdygke3dyYXBT
bG93QXJndW1lbnRUeXBlfSBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyOwogRU5ECkBAIC0zMzU5LDM3ICszMzY0LDE0IEBAIEVORAogICAgIH0KIAogICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCJGcmFtZS5oIik7Ci0gICAgbXkgJGZyYW1lID0gIjAiOwotICAg
IGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKLSAgICAgICAgIyBEb2N1bWVudFR5cGUg
bm9kZXMgYXJlIHRoZSBvbmx5IG5vZGVzIHRoYXQgbWF5IGhhdmUgYSBOVUxMIGRvY3VtZW50Lgot
ICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRvY3VtZW50VHlwZSIpIHsKLSAgICAgICAg
ICAgICRmcmFtZSA9ICJpbXBsLT5kb2N1bWVudCgpID8gaW1wbC0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KSA6IDAiOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGZyYW1lID0gImltcGwtPmRv
Y3VtZW50KCktPmZyYW1lKCkiOwotICAgICAgICB9Ci0gICAgfQotICAgIHB1c2goQGltcGxDb250
ZW50LCA8PEVORCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gJGZyYW1lOwotRU5ECiAKICAgICBpZiAo
SXNTdWJUeXBlKCRkYXRhTm9kZSwgIkRvY3VtZW50IikpIHsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKLSAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dT
aGVsbCgpLT5jb250ZXh0KCkuSXNFbXB0eSgpICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hl
bGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpIHsKLSAgICAgICAgLy8gaW5pdGlhbGl6ZUlmTmVl
ZGVkIG1heSBoYXZlIGNyZWF0ZWQgYSB3cmFwcGVyIGZvciB0aGUgb2JqZWN0LCByZXRyeSBmcm9t
IHRoZSBzdGFydC4KLSAgICAgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6d3JhcChpbXBsLmdldCgp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwotICAgIH0KLUVORAotICAgIH0KLQotICAgICMg
RklYTUU6IFdlIG5lZWQgYSBiZXR0ZXIgd2F5IG9mIHJlY292ZXJpbmcgdGhlIGNvcnJlY3QgcHJv
dG90eXBlIGNoYWluCi0gICAgIyBmb3IgZXZlcnkgc29ydCBvZiBvYmplY3QuIEZvciBub3csIHdl
IHNwZWNpYWwtY2FzZSBjcm9zcy1vcmlnaW4gdmlzaWJsZQotICAgICMgb2JqZWN0cyAoaS5lLiwg
dGhvc2Ugd2l0aCBDaGVja1NlY3VyaXR5KS4KLSAgICBpZiAoSXNWaXNpYmxlQWNyb3NzT3JpZ2lu
cygkZGF0YU5vZGUpKSB7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJGcmFtZS5oIik7Ci0g
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci0gICAgaWYgKGltcGwtPmZyYW1lKCkp
IHsKLSAgICAgICAgZnJhbWUgPSBpbXBsLT5mcmFtZSgpOwotICAgICAgICBmcmFtZS0+c2NyaXB0
KCktPndpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpOworICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBpbXBsLT5mcmFtZSgpKSB7CisgICAgICAgIGlmIChmcmFtZS0+c2NyaXB0KCktPndp
bmRvd1NoZWxsKCktPmNvbnRleHQoKS5Jc0VtcHR5KCkgJiYgZnJhbWUtPnNjcmlwdCgpLT53aW5k
b3dTaGVsbCgpLT5pbml0aWFsaXplSWZOZWVkZWQoKSkgeworICAgICAgICAgICAgLy8gaW5pdGlh
bGl6ZUlmTmVlZGVkIG1heSBoYXZlIGNyZWF0ZWQgYSB3cmFwcGVyIGZvciB0aGUgb2JqZWN0LCBy
ZXRyeSBmcm9tIHRoZSBzdGFydC4KKyAgICAgICAgICAgIHJldHVybiAke2NsYXNzTmFtZX06Ondy
YXAoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgfQogICAg
IH0KIEVORAogICAgIH0KQEAgLTMzOTcsMjUgKzMzNzksMTkgQEAgRU5ECiAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7
Ci0gICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dCAh
PSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CisgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQu
SXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNv
bnRleHQ6OkdldEN1cnJlbnQoKSkgewogICAgICAgICAvLyBGb3IgcGVyZm9ybWFuY2UsIHdlIGVu
dGVyIHRoZSBjb250ZXh0IG9ubHkgaWYgdGhlIGN1cnJlbnRseSBydW5uaW5nIGNvbnRleHQKICAg
ICAgICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhlIGNvbnRleHQgdGhhdCB3ZSBhcmUgYWJvdXQg
dG8gZW50ZXIuCi0gICAgICAgIGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
Y3JlYXRpb25Db250ZXh0KTsKKyAgICAgICAgY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4
dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKTsKICAgICAgICAgQVNT
RVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CiAgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CiAgICAg
fQotRU5ECiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAgIHdyYXBwZXIgPSBW
OERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoZnJhbWUsICZpbmZvLCBpbXBsLmdldCgp
KTsKLUVORAorICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3Qo
JmluZm8sIGltcGwuZ2V0KCkpOwogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAg
ICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7Ci1FTkQK
IAotICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiAgICAgaWYgKFVOTElLRUxZKHdyYXBw
ZXIuSXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiBFTkQKQEAgLTM1ODEsNyAr
MzU1Nyw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCiAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJWOCRyZXR1cm5UeXBlLmgiKTsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIlNWR1Byb3BlcnR5VGVhck9mZi5oIik7CiAgICAgICAgIG15ICRzdmdOYXRpdmVUeXBlID0g
JGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVhck9mZigkcmV0dXJuVHlwZSk7Ci0g
ICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3N2
Z05hdGl2ZVR5cGV9OjpjcmVhdGUoJHJldHVybikpLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpO1xuIjsKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5k
ZW50IC4gInJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7c3ZnTmF0aXZlVHlwZX06OmNyZWF0ZSgk
cmV0dXJuKSksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTtcbiI7CiAgICAgICAg
IHJldHVybiAkcmVzdWx0OwogICAgIH0KIApAQCAtMzU5MSw3ICszNTY3LDcgQEAgc3ViIEdlbmVy
YXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICB9CiAKICAgICAkcmV0dXJuIC49ICIucmVsZWFz
ZSgpIiBpZiAoJHJldHVybklzUmVmKTsKLSAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5O
YXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkdldElz
b2xhdGUoKSIpIC4gIjtcbiI7CisgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gUmV0dXJuTmF0aXZl
VG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAiYXJncy5Ib2xkZXIoKSIs
ICJhcmdzLkdldElzb2xhdGUoKSIpIC4gIjtcbiI7CiAKICAgICByZXR1cm4gJHJlc3VsdDsKIH0K
QEAgLTQwMjIsNiArMzk5OCw4IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKIHsKICAgICBteSAkc2ln
bmF0dXJlID0gc2hpZnQ7CiAgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkgJGdldENyZWF0
aW9uQ29udGV4dCA9IHNoaWZ0OworICAgIG15ICRnZXRDcmVhdGlvbkNvbnRleHRBcmcgPSAkZ2V0
Q3JlYXRpb25Db250ZXh0ID8gIiwgJGdldENyZWF0aW9uQ29udGV4dCIgOiAiIjsKICAgICBteSAk
Z2V0SXNvbGF0ZSA9IHNoaWZ0OwogICAgIG15ICRnZXRJc29sYXRlQXJnID0gJGdldElzb2xhdGUg
PyAiLCAkZ2V0SXNvbGF0ZSIgOiAiIjsKICAgICBteSAkdHlwZSA9IEdldFR5cGVGcm9tU2lnbmF0
dXJlKCRzaWduYXR1cmUpOwpAQCAtNDA3OCwxOCArNDA1NiwxOCBAQCBzdWIgTmF0aXZlVG9KU1Zh
bHVlCiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkc2VxdWVuY2VUeXBlLmgiKTsK
ICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkc2VxdWVuY2VUeXBlLmgiKTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gInY4QXJyYXkoJHZhbHVlLCAkZ2V0SXNvbGF0ZSkiOworICAg
ICAgICByZXR1cm4gInY4QXJyYXkoJHZhbHVlJGdldElzb2xhdGVBcmcpIjsKICAgICB9CiAKICAg
ICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOwogCiAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIG5v
bi1ET00gbm9kZSBpbnRlcmZhY2VzCiAgICAgaWYgKElzRE9NTm9kZVR5cGUoJHR5cGUpKSB7Ci0g
ICAgICAgIHJldHVybiAidG9WOCgke3ZhbHVlfSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSIg
LiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybk5ld09iamVjdCJ9ID8g
IiRnZXRJc29sYXRlQXJnLCB0cnVlKSIgOiAiJGdldElzb2xhdGVBcmcpIik7CisgICAgICAgIHJl
dHVybiAidG9WOCgke3ZhbHVlfSRnZXRDcmVhdGlvbkNvbnRleHRBcmckZ2V0SXNvbGF0ZUFyZyIg
LiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybk5ld09iamVjdCJ9ID8g
IiwgdHJ1ZSkiIDogIikiKTsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIkV2ZW50VGFyZ2V0
IikgewotICAgICAgICByZXR1cm4gIlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9W
OE9iamVjdCgkdmFsdWUsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCkkZ2V0SXNvbGF0ZUFyZyki
OworICAgICAgICByZXR1cm4gIlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9i
amVjdCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElzb2xhdGVBcmcpIjsKICAgICB9
CiAKICAgICBpZiAoJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiKSB7CkBAIC00MTA2LDcgKzQwODQs
NyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoInd0Zi9SZWZQ
dHIuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJ3dGYvR2V0UHRyLmgiKTsKIAotICAgIHJl
dHVybiAidG9WOCgkdmFsdWUsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCkkZ2V0SXNvbGF0ZUFy
ZykiOworICAgIHJldHVybiAidG9WOCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElz
b2xhdGVBcmcpIjsKIH0KIAogc3ViIFJldHVybk5hdGl2ZVRvSlNWYWx1ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJh
eS5jcHAKaW5kZXggZDNlNWY3MDg0MjdlNTcxNmI3M2U1Y2FiZGIzYjkzZTdlN2NlYmVlMC4uZTQ3
MDNiYzkxZGNjMTllOGI0Y2UzM2MzNDc5OTBlZjA2YjBiOTkyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXku
Y3BwCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZm9vQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICAgICAgcmV0dXJuIHRocm93Tm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIEZsb2F0NjRBcnJh
eSogaW1wID0gVjhGbG9hdDY0QXJyYXk6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEVY
Q0VQVElPTl9CTE9DSyhGbG9hdDMyQXJyYXkqLCBhcnJheSwgVjhGbG9hdDMyQXJyYXk6Okhhc0lu
c3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5l
ZCkpID8gVjhGbG9hdDMyQXJyYXk6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNh
c3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkp
IDogMCk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5mb28oYXJyYXkpLCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT5mb28o
YXJyYXkpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2V0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXRDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogCiB9IC8vIG5hbWVzcGFjZSBGbG9hdDY0
QXJyYXlWOEludGVybmFsCiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEZsb2F0NjRBcnJh
eSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEZsb2F0NjRBcnJheSog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhD
aGVjayhpc29sYXRlKTsKQEAgLTE0NywxMiArMTQ3LDI1IEBAIGJvb2wgVjhGbG9hdDY0QXJyYXk6
Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIH0KIAogCi12ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IFY4RmxvYXQ2NEFycmF5Ojp3cmFwU2xvdyhQYXNzUmVmUHRyPEZsb2F0
NjRBcnJheT4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhGbG9hdDY0QXJy
YXk6OndyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8QXJyYXlCdWZmZXJWaWV3Kj4oaW1wbC5nZXQoKSkpID09IHN0YXRp
Y19jYXN0PHZvaWQqPihpbXBsLmdldCgpKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gMDsKLSAgICB3
cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywg
aW1wbC5nZXQoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OworICAg
IGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0
aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8g
Rm9yIHBlcmZvcm1hbmNlLCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50
bHkgcnVubmluZyBjb250ZXh0CisgICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb250
ZXh0IHRoYXQgd2UgYXJlIGFib3V0IHRvIGVudGVyLgorICAgICAgICBjb250ZXh0ID0gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkp
OworICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKKyAgICAgICAgY29udGV4dC0+
RW50ZXIoKTsKKyAgICB9CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0
ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIGlmICghY29udGV4dC5Jc0VtcHR5
KCkpCisgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVy
LklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZv
ckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmgKaW5kZXgg
M2Y2NjA5NTU4OTkyMWE2ODQxN2VlOWVkZDY4MDQwOGRkMDA1YjFkNi4uYzBmZTk3MjA4NWViODFm
ZTMzMjMyZDgyOTJhMmNlOTllYjQ3MWI0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmgKQEAgLTQyLDE3ICs0
MiwxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxG
bG9hdDY0QXJyYXkqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdy
YXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcChGbG9hdDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
cmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSog
PSAwKTsKKyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChGbG9h
dDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIHZvaWQg
ZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01E
YXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwogICAgIHN0YXRp
YyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogICAgIHN0YXRpYyBj
b25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5Piwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5Piwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IFY4RmxvYXQ2NEFycmF5Ojp3cmFwKEZsb2F0NjRBcnJheSogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhGbG9hdDY0QXJyYXk6OndyYXAoRmxv
YXQ2NEFycmF5KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IGdldERPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCkBAIC02MCw4ICs2MCw4IEBAIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhGbG9hdDY0QXJyYXk6OndyYXAoRmxvYXQ2NEFycmF5KiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpDCiAgICAgcmV0dXJuIFY4RmxvYXQ2NEFycmF5Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChGbG9h
dDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKLWlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBGbG9hdDY0QXJyYXkgPiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChGbG9hdDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CitpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgRmxvYXQ2NEFycmF5ID4gaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4gdG9W
OChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCBiMzBmMWQ4MGI2N2YzMTJmMzEwOThlNTc1YzlhNDlh
MzJkNjFlYTFkLi5iOTk2YzgxNTViZWY4ZmJmOTY0ZDJhMzA3MDE0NmFiYmIyMzJlYTYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMTc2LDMxICsxNzYsMjQgQEAgYm9v
bCBWOFRlc3RBY3RpdmVET01PYmplY3Q6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSkKIH0KIAogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFjdGl2ZURPTU9i
amVjdDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0QWN0aXZlRE9NT2JqZWN0PiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RBY3RpdmVET01PYmplY3Q6OndyYXBTbG93
KFBhc3NSZWZQdHI8VGVzdEFjdGl2ZURPTU9iamVjdD4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKLSAgICBGcmFtZSogZnJhbWUgPSAwOwotICAgIGlm
IChpbXBsLT5mcmFtZSgpKSB7Ci0gICAgICAgIGZyYW1lID0gaW1wbC0+ZnJhbWUoKTsKLSAgICAg
ICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5pbml0aWFsaXplSWZOZWVkZWQoKTsK
LSAgICB9CiAKLSAgICAvLyBFbnRlciB0aGUgbm9kZSdzIGNvbnRleHQgYW5kIGNyZWF0ZSB0aGUg
d3JhcHBlciBpbiB0aGF0IGNvbnRleHQuCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29u
dGV4dDsKLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
dW5kZXJseWluZ0hhbmRsZSA9IGZyYW1lLT5zY3JpcHQoKS0+dW5zYWZlSGFuZGxlVG9DdXJyZW50
V29ybGRDb250ZXh0KCk7Ci0gICAgICAgIGlmICh2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpICE9
IHVuZGVybHlpbmdIYW5kbGUpIHsKLSAgICAgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2Ug
ZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAot
ICAgICAgICAgICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhlIGNvbnRleHQgdGhhdCB3ZSBhcmUg
YWJvdXQgdG8gZW50ZXIuCi0gICAgICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250
ZXh0Pjo6TmV3KHVuZGVybHlpbmdIYW5kbGUpOwotICAgICAgICAgICAgaWYgKCFjb250ZXh0Lklz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5FbnRlcigpOwotICAgICAgICB9Cisg
ICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+Q3Jl
YXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgeworICAgICAgICAv
LyBGb3IgcGVyZm9ybWFuY2UsIHdlIGVudGVyIHRoZSBjb250ZXh0IG9ubHkgaWYgdGhlIGN1cnJl
bnRseSBydW5uaW5nIGNvbnRleHQKKyAgICAgICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhlIGNv
bnRleHQgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gZW50ZXIuCisgICAgICAgIGNvbnRleHQgPSB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQo
KSk7CisgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOworICAgICAgICBjb250ZXh0
LT5FbnRlcigpOwogICAgIH0KLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0
ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7Ci0gICAgLy8gRXhpdCB0aGUgbm9k
ZSdzIGNvbnRleHQgaWYgaXQgd2FzIGVudGVyZWQuCisKKyAgICB3cmFwcGVyID0gVjhET01XcmFw
cGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwogICAgIGlmICgh
Y29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChV
TkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3Rp
dmVET01PYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RBY3RpdmVET01PYmplY3QuaAppbmRleCAxYTYzMDM5MTFkMTUyMzQ4MTI5ZTcxZWM4M2Qy
NDgwNmVjODU2MTgzLi4yNTgwM2E0NTE5MjYxOWJmYzg0NzRjNTViMjVhNWExYWFlZDY2Mjk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
QWN0aXZlRE9NT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3RBY3RpdmVET01PYmpl
Y3QqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmpl
Y3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcChUZXN0QWN0aXZlRE9NT2JqZWN0Kiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3Jl
YXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0g
MCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEFj
dGl2ZURPTU9iamVjdCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMg
dm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRET01XcmFwcGVy
KERPTURhdGFTdG9yZSosIHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAg
c3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwpAQCAtNDksMTAgKzQ5LDEwIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBuYW1lZFNlY3VyaXR5Q2hlY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGhvc3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGtleSwgdjg6OkFjY2Vzc1R5cGUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IGRhdGEpOwogICAgIHN0YXRpYyBib29sIGluZGV4ZWRTZWN1cml0eUNoZWNr
KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob3N0LCB1aW50MzJfdCBpbmRleCwgdjg6OkFjY2Vzc1R5
cGUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGRhdGEpOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PYmpl
Y3Q+LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
Kik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0
cjxUZXN0QWN0aXZlRE9NT2JqZWN0Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVz
dEFjdGl2ZURPTU9iamVjdDo6d3JhcChUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQor
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RBY3RpdmVET01PYmplY3Q6OndyYXAoVGVzdEFj
dGl2ZURPTU9iamVjdCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAg
ICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQpAQCAtNjAsMTMgKzYwLDEzIEBAIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwKFRlc3RBY3RpdmVET01PYmpl
Y3QqIGltcGwsIHY4CiAgICAgcmV0dXJuIFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6d3JhcFNsb3co
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAotaW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwsIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4
OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUgPSAwKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVj
ayhpc29sYXRlKTsKICAgICByZXR1cm4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwKGltcGws
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdEFjdGl2ZURPTU9iamVjdCA+IGltcGwsIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0QWN0aXZlRE9NT2JqZWN0ID4gaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCks
IHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4gdG9WOChpbXBsLmdldCgp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAKaW5kZXgg
MGQyMDYxN2I0ZmQ0ZDA3YTc1Mzc4M2FlNTYxYTEzOTdkMDE1YTBjMS4uZWQyZGU2ZWU2YmI1YzZh
YjQ4NjU2NjZmZWY0ZmZlMmI1NTliZWQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCkBAIC04Niw3
ICs4Niw3IEBAIGJvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENs
YXNzMSogY2xhc3MxUGFyYW0pCiAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250
ZXh0KTsKIAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzczFQYXJhbUhhbmRsZSA9IHRv
VjgoY2xhc3MxUGFyYW0sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCkpOworICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjbGFzczFQYXJhbUhhbmRsZSA9IHRvVjgoY2xhc3MxUGFyYW0pOwogICAg
IGlmIChjbGFzczFQYXJhbUhhbmRsZS5Jc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKCFpc1Njcmlw
dENvbnRyb2xsZXJUZXJtaW5hdGluZygpKQogICAgICAgICAgICAgQ1JBU0goKTsKQEAgLTExNCw3
ICsxMTQsNyBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShD
bGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmCiAKICAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgc2NvcGUodjhDb250ZXh0KTsKIAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzczJQ
YXJhbUhhbmRsZSA9IHRvVjgoY2xhc3MyUGFyYW0sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCkp
OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzczJQYXJhbUhhbmRsZSA9IHRvVjgoY2xh
c3MyUGFyYW0pOwogICAgIGlmIChjbGFzczJQYXJhbUhhbmRsZS5Jc0VtcHR5KCkpIHsKICAgICAg
ICAgaWYgKCFpc1NjcmlwdENvbnRyb2xsZXJUZXJtaW5hdGluZygpKQogICAgICAgICAgICAgQ1JB
U0goKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dp
dGhTdHJpbmdMaXN0KFJlZlB0cjxET01TdHJpbmdMaXN0PiBsaXN0UGFyYW0pCiAKICAgICB2ODo6
Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKIAotICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBsaXN0UGFyYW1IYW5kbGUgPSB0b1Y4KGxpc3RQYXJhbSwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxpc3RQYXJhbUhhbmRsZSA9IHRv
VjgobGlzdFBhcmFtKTsKICAgICBpZiAobGlzdFBhcmFtSGFuZGxlLklzRW1wdHkoKSkgewogICAg
ICAgICBpZiAoIWlzU2NyaXB0Q29udHJvbGxlclRlcm1pbmF0aW5nKCkpCiAgICAgICAgICAgICBD
UkFTSCgpOwpAQCAtMjA3LDEzICsyMDcsMTMgQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tSZXF1aXJlc1RoaXNUb1Bhc3MoQ2xhc3M4KiBjbGFzczhQYXJhbSwgVGhpc0NsYXNzKgogCiAg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY2xhc3M4UGFyYW1IYW5kbGUgPSB0b1Y4KGNsYXNzOFBhcmFtLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PigpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3M4UGFy
YW1IYW5kbGUgPSB0b1Y4KGNsYXNzOFBhcmFtKTsKICAgICBpZiAoY2xhc3M4UGFyYW1IYW5kbGUu
SXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVybWluYXRpbmco
KSkKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdGhpc0NsYXNzUGFyYW1IYW5kbGUgPSB0b1Y4KHRoaXND
bGFzc1BhcmFtLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdGhpc0NsYXNzUGFyYW1IYW5kbGUgPSB0b1Y4KHRoaXNDbGFzc1BhcmFtKTsKICAg
ICBpZiAodGhpc0NsYXNzUGFyYW1IYW5kbGUuSXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICghaXNT
Y3JpcHRDb250cm9sbGVyVGVybWluYXRpbmcoKSkKICAgICAgICAgICAgIENSQVNIKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCAwMTM3NmU2ZmMzMGE4ODliYjA4
YjYzNjVmYTI3ZGJiNTQzNDVlNTExLi43YzMyYmU2ZTAxZWRlMGQwMjAwYjZlYWFjMGQ5OGQ5MzY3
ZDkyNTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTExMCwx
MSArMTEwLDI0IEBAIGJvb2wgVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6Okhhc0luc3RhbmNlKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIH0KIAogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RDdXN0b21O
YW1lZEdldHRlcj4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVy
PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotICAg
IEZyYW1lKiBmcmFtZSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlh
dGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dDsKKyAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkg
JiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0
Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNv
bnRleHQgb25seSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAgICAvLyBp
cyBkaWZmZXJlbnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4K
KyAgICAgICAgY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVhdGlvbkNv
bnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1w
dHkoKSk7CisgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CisgICAgfQorCisgICAgd3JhcHBlciA9
IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisK
KyAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisK
ICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhE
T01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oCmluZGV4IDdjYTU2OWU5N2ZlY2I3
NjE3Y2M0NjMwMzkxMjYzNzlhZjI2NTBkYzMuLjQ3Mzg1OGYyZWZmYzEwYTg3ZWE3MDJjMzUzNzRl
ODA5MWVlZDE5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oCkBAIC00MSwx
NyArNDEsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFs
RmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiwgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXAoVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJ
c29sYXRlKiA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBz
dGF0aWMgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOwogICAgIHN0YXRpYyBj
b25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVyPiwgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVk
R2V0dGVyPiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29s
YXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEN1c3RvbU5hbWVkR2V0
dGVyOjp3cmFwKFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8
djg6Ok9iamVjdD4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXAoVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGdldERPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCkBAIC01OSwxMyArNTksMTMgQEAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6d3JhcChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIq
IGltcGwKICAgICByZXR1cm4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KGltcGws
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSA9IDApCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNr
KGlzb2xhdGUpOwogICAgIHJldHVybiBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6d3JhcChpbXBs
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RDdXN0b21OYW1lZEdldHRlciA+IGltcGwsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgPiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4KGltcGwu
Z2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAKaW5kZXggZjUzOTExNTBkMmZhMWMyNGMxMTZlZTU4ZTU3MWI2NGJkMjgw
ZWM5My4uYjNhMzUzNGYyNGFiNzZmNTFkYmViNWU0NTdlNDZmYzUxNTI5NDJmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMTQ3LDExICsxNDcsMjQgQEAgYm9vbCBW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUpCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVj
dG9yOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9yPiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwU2xv
dyhQYXNzUmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9yPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotICAgIEZyYW1lKiBmcmFtZSA9IDA7Ci0gICAg
d3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8s
IGltcGwuZ2V0KCkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKKyAg
ICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVh
dGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CisgICAgICAgIC8v
IEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0aGUgY3VycmVu
dGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29u
dGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4KKyAgICAgICAgY29udGV4dCA9IHY4OjpM
b2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgp
KTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CisgICAgICAgIGNvbnRleHQt
PkVudGVyKCk7CisgICAgfQorCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlh
dGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICBpZiAoIWNvbnRleHQuSXNFbXB0
eSgpKQorICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3JhcHBl
ci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJG
b3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuaAppbmRleCA3YzUzZjg4ZmI5YzVlNjE2ZGEzZjMxMDE1MTM0MGYyNjJjZDI0MzZh
Li42OTI2Y2ViZDRiZDk5M2M2NzJiN2JkNTYxYWNhYjQ1ZTEzOWRhZWMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudENvbnN0cnVjdG9yLmgKQEAgLTQyLDE3ICs0MiwxNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0RXZlbnRDb25zdHJ1Y3Rvcio+KG9i
amVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4
KSk7CiAgICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
KFRlc3RFdmVudENvbnN0cnVjdG9yKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25D
b250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7Cisg
ICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV2ZW50Q29u
c3RydWN0b3IqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIHZvaWQg
ZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01E
YXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwogICAgIHN0YXRp
YyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogICAgIHN0YXRpYyBj
b25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+LCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXZlbnRDb25zdHJ1
Y3Rvcj4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0
ZSopOwogfTsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVjdG9y
Ojp3cmFwKFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwKFRlc3RFdmVudENvbnN0cnVjdG9y
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9
IGdldERPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlmICghd3JhcHBl
ci5Jc0VtcHR5KCkpCkBAIC02MCwxMyArNjAsMTMgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwKFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsLAog
ICAgIHJldHVybiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoVGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBp
c29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0RXZlbnRD
b25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQg
PSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsK
ICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7
CiAgICAgcmV0dXJuIFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OndyYXAoaW1wbCwgY3JlYXRpb25D
b250ZXh0LCBpc29sYXRlKTsKIH0KLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQ
YXNzUmVmUHRyPCBUZXN0RXZlbnRDb25zdHJ1Y3RvciA+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQ
YXNzUmVmUHRyPCBUZXN0RXZlbnRDb25zdHJ1Y3RvciA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDFl
MGMyYjA2MjAzMjI1NjFmYjcyNmMyZmIwODkzMDM5ZDFkNDlkMjYuLmI3ODM2OWU5NTVmNGVkNzZm
M2RiODhlOTI5NmUwN2YzYTdlMjRiNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAt
NTUsNyArNTUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGl0ZW1DYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwog
ICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQotICAgIHJldHVybiB0b1Y4KGltcC0+aXRlbShpbmRl
eCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gdG9WOChpbXAtPml0ZW0oaW5kZXgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xh
dGUoKSk7CiAgICAgfQogICAgIGZhaWw6CiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywg
YXJncy5HZXRJc29sYXRlKCkpOwpAQCAtMTcxLDExICsxNzEsMjQgQEAgYm9vbCBWOFRlc3RFdmVu
dFRhcmdldDo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogfQogCiAK
LXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0RXZlbnRUYXJnZXQ6OndyYXBTbG93KFBhc3NS
ZWZQdHI8VGVzdEV2ZW50VGFyZ2V0PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RFdmVudFRhcmdldDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+
IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAg
RnJhbWUqIGZyYW1lID0gMDsKLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0
ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjb250ZXh0OworICAgIGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAm
JiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRD
dXJyZW50KCkpIHsKKyAgICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlLCB3ZSBlbnRlciB0aGUgY29u
dGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0CisgICAgICAgIC8vIGlz
IGRpZmZlcmVudCBmcm9tIHRoZSBjb250ZXh0IHRoYXQgd2UgYXJlIGFib3V0IHRvIGVudGVyLgor
ICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNyZWF0aW9uQ29u
dGV4dC0+Q3JlYXRpb25Db250ZXh0KCkpOworICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0
eSgpKTsKKyAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKKyAgICB9CisKKyAgICB3cmFwcGVyID0g
VjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwor
ICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwog
ICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFw
cGVyOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERP
TVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RFdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmgKaW5kZXggNjI2YjAxYmNmNGFjZTJiMDM4NmFiOWY2NTJm
MmYzODg2ZTFjOTVlZS4uNjE4MmIyNzU4ZWQwZDg0NzI3OTEwMTkxMWZmN2VlZDIwYjQ0YTkzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEV2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGVzdEV2ZW50VGFyZ2V0Kj4ob2JqZWN0
LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsK
ICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVz
dEV2ZW50VGFyZ2V0Kiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0g
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CisgICAgaW5saW5l
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV2ZW50VGFyZ2V0Kiwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+KCksIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZv
aWQqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9p
ZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJ
bmZvIGluZm87CkBAIC01MCwxMCArNTAsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBp
bnQgZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXggPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVs
ZENvdW50ICsgMDsKICAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4
RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOwogcHJpdmF0ZToKLSAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RFdmVudFRh
cmdldD4sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVm
UHRyPFRlc3RFdmVudFRhcmdldD4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSopOwogfTsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RF
dmVudFRhcmdldDo6d3JhcChUZXN0RXZlbnRUYXJnZXQqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50VGFyZ2V0Ojp3cmFwKFRlc3RFdmVudFRhcmdldCogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRE
T01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQpAQCAtNjEsMTMgKzYxLDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0
RXZlbnRUYXJnZXQ6OndyYXAoVGVzdEV2ZW50VGFyZ2V0KiBpbXBsLCB2ODo6SGFuZGxlCiAgICAg
cmV0dXJuIFY4VGVzdEV2ZW50VGFyZ2V0Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEV2
ZW50VGFyZ2V0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQg
PSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEV2ZW50VGFyZ2V0KiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIGlmICghaW1wbCkKICAg
ICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKICAgICByZXR1cm4gVjhUZXN0
RXZlbnRUYXJnZXQ6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KLWlu
bGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0RXZlbnRUYXJn
ZXQgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdEV2ZW50VGFyZ2V0ID4g
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4g
dG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhj
ZXB0aW9uLmNwcAppbmRleCBkYzEzYTMwZjViNjU4NDUzMmQyNjkzMTRjYjYzZGZkZGMyZGU0M2Jh
Li5kODAxOTlkOWYxMTljODlkNzAwM2Y5NmEyNzQ0MTdiY2I3M2JmN2RjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhj
ZXB0aW9uLmNwcApAQCAtMTAxLDExICsxMDEsMjQgQEAgYm9vbCBWOFRlc3RFeGNlcHRpb246Okhh
c0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIH0KIAogCi12ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4VGVzdEV4Y2VwdGlvbjo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXhj
ZXB0aW9uPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFeGNlcHRp
b246OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV4Y2VwdGlvbj4gaW1wbCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKLSAgICBGcmFtZSogZnJhbWUgPSAwOwot
ICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoZnJhbWUsICZp
bmZvLCBpbXBsLmdldCgpKTsKKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7
CisgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+
Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgeworICAgICAg
ICAvLyBGb3IgcGVyZm9ybWFuY2UsIHdlIGVudGVyIHRoZSBjb250ZXh0IG9ubHkgaWYgdGhlIGN1
cnJlbnRseSBydW5uaW5nIGNvbnRleHQKKyAgICAgICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhl
IGNvbnRleHQgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gZW50ZXIuCisgICAgICAgIGNvbnRleHQgPSB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRl
eHQoKSk7CisgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOworICAgICAgICBjb250
ZXh0LT5FbnRlcigpOworICAgIH0KKworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3Rh
bnRpYXRlVjhPYmplY3QoJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgaWYgKCFjb250ZXh0Lklz
RW1wdHkoKSkKKyAgICAgICAgY29udGV4dC0+RXhpdCgpOworCiAgICAgaWYgKFVOTElLRUxZKHdy
YXBwZXIuSXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yRE9NT2JqZWN0KGltcGwsIHdyYXBwZXIsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5o
CmluZGV4IDY1ZTZkMDFhMTllOGMzNDVjYjJkZTE5ZjY1ZDEyOWVmZTE1NzA5YzQuLjZmMjAxMGRh
Y2U0ZTc4NTdiNmZlMWEyYzkzZjFhYjIyN2ZjYzFlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmgKQEAg
LTQxLDE2ICs0MSwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUZXN0RXhjZXB0aW9uKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmll
bGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV4Y2VwdGlvbiosIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4
OjpJc29sYXRlKiA9IDApOworICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwKFRlc3RFeGNlcHRpb24qLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAg
c3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9N
V3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4p
OwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0aWMgY29uc3QgaW50
IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQg
KyAwOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xv
dyhQYXNzUmVmUHRyPFRlc3RFeGNlcHRpb24+LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXhjZXB0aW9uPiwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4VGVzdEV4Y2VwdGlvbjo6d3JhcChUZXN0RXhjZXB0aW9uKiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFeGNlcHRpb246OndyYXAoVGVzdEV4
Y2VwdGlvbiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBnZXRET01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAo
IXdyYXBwZXIuSXNFbXB0eSgpKQpAQCAtNTgsMTMgKzU4LDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhUZXN0RXhjZXB0aW9uOjp3cmFwKFRlc3RFeGNlcHRpb24qIGltcGwsIHY4OjpIYW5k
bGU8djg6CiAgICAgcmV0dXJuIFY4VGVzdEV4Y2VwdGlvbjo6d3JhcFNsb3coaW1wbCwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFRlc3RFeGNlcHRpb24qIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRl
ID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0RXhjZXB0aW9uKiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIGlmICghaW1w
bCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKICAgICByZXR1cm4g
VjhUZXN0RXhjZXB0aW9uOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdEV4Y2Vw
dGlvbiA+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0RXhjZXB0aW9uID4g
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4g
dG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50
ZXJmYWNlLmNwcAppbmRleCAyMTA4YmQ4MWZhOGRiYWE4NGU3MjBhZjMzNWQ5NTU4YTk4ZDNhMDky
Li5jNTM1MDc2NzE1NTQ1ODA0MmYyMjhiMmRkMWFiYWM1NTlmYTNjMTliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50
ZXJmYWNlLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gc3VwcGxlbWVudGFsTm9kZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdEludGVyZmFjZS5zdXBwbGVtZW50YWxOb2RlLl9nZXQi
KTsKICAgICBUZXN0SW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RJbnRlcmZhY2U6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbE5vZGUoaW1wKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRl
KCkpOworICAgIHJldHVybiB0b1Y4KFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUo
aW1wKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCkBAIC0xNjgsNyArMTY4
LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxNZXRob2QyQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXIKICAgICBSZWZQdHI8VGVzdE9iaj4gcmVzdWx0
ID0gVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMihzY3JpcHRDb250ZXh0LCBp
bXAsIHN0ckFyZywgb2JqQXJnLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAg
Z290byBmYWlsOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1
bHQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgfQog
ICAgIGZhaWw6CiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRl
KCkpOwpAQCAtMzQ0LDExICszNDQsMjQgQEAgQWN0aXZlRE9NT2JqZWN0KiBWOFRlc3RJbnRlcmZh
Y2U6OnRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWMKICAgICBy
ZXR1cm4gdG9OYXRpdmUob2JqZWN0KTsKIH0gICAgICAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RJbnRlcmZhY2U6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEludGVyZmFjZT4gaW1w
bCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJmYWNlOjp3cmFwU2xv
dyhQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAgRnJhbWUqIGZyYW1lID0gMDsKLSAgICB3cmFwcGVy
ID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5n
ZXQoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OworICAgIGlmICgh
Y3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29u
dGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8gRm9yIHBl
cmZvcm1hbmNlLCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVu
bmluZyBjb250ZXh0CisgICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb250ZXh0IHRo
YXQgd2UgYXJlIGFib3V0IHRvIGVudGVyLgorICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4
OjpDb250ZXh0Pjo6TmV3KGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkpOworICAg
ICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKKyAgICAgICAgY29udGV4dC0+RW50ZXIo
KTsKKyAgICB9CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2Jq
ZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCisg
ICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1w
dHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckFjdGl2
ZURPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuaAppbmRl
eCAxNDc2ZjhlNWQwNzhlMjU1OTg5MDNmYzdmNzQ2ZDE5YzVlMjNhYTI3Li5hNzIxMTgyMjM5MGYw
OGI1MzAzNzliOGZmMTEwNGEyMTY4YWY5MDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5oCkBAIC00Myw3
ICs0Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFRlc3RJbnRlcmZhY2UqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERP
TVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcChUZXN0SW50ZXJmYWNlKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xh
dGUqID0gMCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAo
VGVzdEludGVyZmFjZSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMg
dm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRET01XcmFwcGVy
KERPTURhdGFTdG9yZSosIHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAg
c3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwpAQCAtNTIsMTAgKzUyLDEwIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5hbWVkUHJvcGVydHlTZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+LCB2ODo6TG9jYWw8djg6OlZhbHVlPiwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYpOwogICAgIHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEludGVyZmFj
ZT4sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRy
PFRlc3RJbnRlcmZhY2U+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqKTsKIH07CiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJm
YWNlOjp3cmFwKFRlc3RJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IFY4VGVzdEludGVyZmFjZTo6d3JhcChUZXN0SW50ZXJmYWNlKiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAg
ICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldEFjdGl2ZURPTU9iamVj
dE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkp
CkBAIC02MywxMyArNjMsMTMgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RJbnRlcmZh
Y2U6OndyYXAoVGVzdEludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODoKICAgICByZXR1cm4g
VjhUZXN0SW50ZXJmYWNlOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEludGVyZmFjZSog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogICAgIHJldHVybiBWOFRlc3RJbnRlcmZhY2U6Ondy
YXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KLWlubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0SW50ZXJmYWNlID4gaW1wbCwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RJbnRlcmZhY2UgPiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggY2EzM2ZlNWVkNjgxNzc4NWJmMzJhMzJkZjQyZDhlMTAw
M2NiZTRhZS4uMjRjNGRmNjk4NThhNjA2NmZjZjQ1NTNlYTI2MjgwODg1NzIxZDJkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMTEwLDExICsx
MTAsMjQgQEAgYm9vbCBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyOwotICAgIEZyYW1lKiBmcmFtZSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4
RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkp
OworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKKyAgICBpZiAoIWNyZWF0
aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQo
KSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZvciBwZXJmb3Jt
YW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcg
Y29udGV4dAorICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdl
IGFyZSBhYm91dCB0byBlbnRlci4KKyAgICAgICAgY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKTsKKyAgICAgICAg
QVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CisgICAgICAgIGNvbnRleHQtPkVudGVyKCk7Cisg
ICAgfQorCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgm
aW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAg
ICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkp
KQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qo
aW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuaAppbmRleCBhN2I4ODFjOGUwYTJjMTkxMmYzZDU4MmRkZGQ2MGIwM2FlNjc4OGZj
Li5hZGYzNDVlZDg1NDMwMGMyZjhhY2EzZDk3ZjdjMjk4OWZmNTgzMDg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKQEAgLTQxLDE2ICs0MSwxNiBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcio+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9N
V3JhcHBlck9iamVjdEluZGV4KSk7CiAgICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgdjg6Oklzb2xhdGUqID0gMCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXAoVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklz
b2xhdGUqID0gMCk7CiAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0
YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4pOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAg
ICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAwOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Piwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSop
OworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIH07CiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcjo6d3JhcChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmpl
Y3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgp
KQpAQCAtNTgsMTMgKzU4LDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lcjo6d3JhcChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0CiAgICAgcmV0dXJu
IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUg
PSAwKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhp
c29sYXRlKTsKICAgICByZXR1cm4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcChp
bXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQotaW5saW5lIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyID4gaW1w
bCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
ID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1
cm4gdG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IDAyMmE3Zjg4ZDg0ZGZiOGI3YzJjMTJk
N2YyYjBhYjFiODNkOWFmNjAuLjZlMjYyZDQzYzRmNThjZjQzMzE1MmZkM2IzMDQxNjFkNDk2MDNl
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTYxLDcgKzYxLDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODoKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1l
bnQgaXMgYWRkZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3RoZXJ3aXNlLCB0aGUgVGVzdE5hbWVk
Q29uc3RydWN0b3IgaW5zdGFuY2UKICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5v
ZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5LgotICAg
IHRvVjgoZG9jdW1lbnQsIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdl
dElzb2xhdGUoKSk7CisgICAgdG9WOChkb2N1bWVudCwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJ
c29sYXRlKCkpOwogCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CkBAIC0xNTQs
MTEgKzE1NCwyNCBAQCBBY3RpdmVET01PYmplY3QqIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OnRv
QWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdAogICAgIHJldHVybiB0b05hdGl2
ZShvYmplY3QpOwogfSAgICAgIAogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5hbWVk
Q29uc3RydWN0b3I6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IGlt
cGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6
OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsK
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAgRnJhbWUqIGZyYW1lID0g
MDsKLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1l
LCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0OworICAgIGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRl
eHQtPkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsKKyAg
ICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlLCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRo
ZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0CisgICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9t
IHRoZSBjb250ZXh0IHRoYXQgd2UgYXJlIGFib3V0IHRvIGVudGVyLgorICAgICAgICBjb250ZXh0
ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25D
b250ZXh0KCkpOworICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKKyAgICAgICAg
Y29udGV4dC0+RW50ZXIoKTsKKyAgICB9CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpp
bnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIGlmICghY29udGV4
dC5Jc0VtcHR5KCkpCisgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VM
WSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpT
V3JhcHBlckZvckFjdGl2ZURPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1l
ZENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCmluZGV4IDIxMTc2MzU5ZGUyZmFlNGU4MWRmYmQzNzIw
YjViYzEzMGI5MzA1ZGIuLmUxNmUyMTEwNDMwMzFmNmJhYWEwMjYxY2I3NTBlZWYwYTdjYjcxMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROYW1lZENvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuaApAQCAtNDcsMTcgKzQ3LDE3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3ROYW1lZENv
bnN0cnVjdG9yKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFw
cGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXAoVGVzdE5hbWVkQ29uc3RydWN0b3IqLCB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNv
bGF0ZSogPSAwKTsKKyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cChUZXN0TmFtZWRDb25zdHJ1Y3RvciosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25D
b250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRE
T01XcmFwcGVyKERPTURhdGFTdG9yZSosIHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
Pik7CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwogICAgIHN0YXRpYyBBY3RpdmVE
T01PYmplY3QqIHRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwogICAg
IHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlcklu
dGVybmFsRmllbGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+LCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcj4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2
ODo6SXNvbGF0ZSopOwogfTsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yOjp3cmFwKFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp3cmFwKFRlc3ROYW1lZENv
bnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IGdldEFjdGl2ZURPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAg
ICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCkBAIC02NSwxMyArNjUsMTMgQEAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp3cmFwKFRlc3ROYW1lZENvbnN0
cnVjdG9yKiBpbXBsLAogICAgIHJldHVybiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp3cmFwU2xv
dyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoVGVzdE5hbWVkQ29uc3RydWN0b3IqIGltcGwsIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCks
IHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBp
c29sYXRlID0gMCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRo
Q2hlY2soaXNvbGF0ZSk7CiAgICAgcmV0dXJuIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OndyYXAo
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KLWlubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0TmFtZWRDb25zdHJ1Y3RvciA+IGltcGwsIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0TmFtZWRDb25zdHJ1Y3RvciA+IGltcGwsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgcmV0dXJuIHRvVjgoaW1w
bC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcAppbmRleCA0
NTgzNDI4NjA1NTQ5ZjE5ZDg2NDEzYjFmNGQ0NWEyYWQzY2RjNTZiLi41NjU1YThjMDFhNzUzNGEx
ZmYzMGFjZmU2ZTBmZjk5YjE5NmFmZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCkBAIC0xMDksMjggKzEwOSwy
NSBAQCBib29sIFY4VGVzdE5vZGU6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
YWx1ZSkKIH0KIAogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5vZGU6OndyYXBTbG93
KFBhc3NSZWZQdHI8VGVzdE5vZGU+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IFY4VGVzdE5vZGU6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5vZGU+IGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsK
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHZvaWQqPihzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbC5nZXQoKSkpID09IHN0YXRpY19jYXN0
PHZvaWQqPihpbXBsLmdldCgpKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbC0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKIAotICAgIC8vIEVudGVyIHRoZSBub2RlJ3MgY29udGV4dCBhbmQgY3JlYXRl
IHRoZSB3cmFwcGVyIGluIHRoYXQgY29udGV4dC4KICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0OwotICAgIGlmIChmcmFtZSkgewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiB1bmRlcmx5aW5nSGFuZGxlID0gZnJhbWUtPnNjcmlwdCgpLT51bnNhZmVIYW5kbGVUb0N1
cnJlbnRXb3JsZENvbnRleHQoKTsKLSAgICAgICAgaWYgKHY4OjpDb250ZXh0OjpHZXRDdXJyZW50
KCkgIT0gdW5kZXJseWluZ0hhbmRsZSkgewotICAgICAgICAgICAgLy8gRm9yIHBlcmZvcm1hbmNl
LCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250
ZXh0Ci0gICAgICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdl
IGFyZSBhYm91dCB0byBlbnRlci4KLSAgICAgICAgICAgIGNvbnRleHQgPSB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcodW5kZXJseWluZ0hhbmRsZSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnRl
eHQuSXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPkVudGVyKCk7Ci0gICAgICAg
IH0KKyAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0
LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CisgICAg
ICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0aGUg
Y3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0
aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4KKyAgICAgICAgY29udGV4dCA9
IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29u
dGV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CisgICAgICAgIGNv
bnRleHQtPkVudGVyKCk7CiAgICAgfQotICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3Rh
bnRpYXRlVjhPYmplY3QoZnJhbWUsICZpbmZvLCBpbXBsLmdldCgpKTsKLSAgICAvLyBFeGl0IHRo
ZSBub2RlJ3MgY29udGV4dCBpZiBpdCB3YXMgZW50ZXJlZC4KKworICAgIHdyYXBwZXIgPSBWOERP
TVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoJmluZm8sIGltcGwuZ2V0KCkpOworCiAgICAg
aWYgKCFjb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgY29udGV4dC0+RXhpdCgpOworCiAgICAg
aWYgKFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IFY4RE9NV3Jh
cHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RO
b2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9k
ZS5oCmluZGV4IDVkNGI5YzUzZjJiNTRiZWI2NmM3Zjg5NmJlMDE4NzcwNjEzZmU0ZWUuLjQyYTVj
NTRlODUxYTUyZDExNTdiNDU2Y2NiZGNkMWQ4Y2U3ODZlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuaApAQCAtNDEsMTcg
KzQxLDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFRlc3ROb2RlKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFw
cGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXAoVGVzdE5vZGUqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlv
bkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsK
KyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0Tm9kZSos
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMgdm9pZCBkZXJlZk9iamVj
dCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSos
IHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAgc3RhdGljIFdyYXBwZXJU
eXBlSW5mbyBpbmZvOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0
b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CiAgICAgc3RhdGljIGNvbnN0IGludCBp
bnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsg
MDsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3co
UGFzc1JlZlB0cjxUZXN0Tm9kZT4sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3ROb2RlPiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IFY4VGVzdE5vZGU6OndyYXAoVGVzdE5vZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IFY4VGVzdE5vZGU6OndyYXAoVGVzdE5vZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpnZXRDYWNoZWRX
cmFwcGVyKGltcGwpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQpAQCAtNTksMTMg
KzU5LDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0Tm9kZTo6d3JhcChUZXN0Tm9k
ZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4KICAgICByZXR1cm4gVjhUZXN0Tm9kZTo6
d3JhcFNsb3coaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAotaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3ROb2RlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
VGVzdE5vZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAg
ICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwog
ICAgIHJldHVybiBWOFRlc3ROb2RlOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiB9Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVz
dE5vZGUgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxp
bmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE5vZGUgPiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4
KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4
IDE4ZGIyNzJmMWI0NzlkZjRiZjhjNjhkZTg1YTc4ZDZjNTNhNzhkMzguLjQ2YjQxNWQyODFhNTc4
ZDBmMGJhNjgyOTU1NWFjODZhNWU1YTQ0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0xMDIsNyArMTAyLDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seVRlc3RPYmpBdHRyQXR0ckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBSZWZQdHI8VGVzdE9iaj4gcmVzdWx0ID0g
aW1wLT5yZWFkT25seVRlc3RPYmpBdHRyKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdy
YXBwZXIgPSByZXN1bHQuZ2V0KCkgPyBnZXRET01PYmplY3RNYXAoaW5mby5HZXRJc29sYXRlKCkp
LmdldChyZXN1bHQuZ2V0KCkpIDogdjhVbmRlZmluZWQoKTsKICAgICBpZiAod3JhcHBlci5Jc0Vt
cHR5KCkpIHsKLSAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkhvbGRl
cigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICB3cmFw
cGVyID0gdG9WOChyZXN1bHQuZ2V0KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIFY4RE9NV3Jh
cHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2UoaW5mby5Ib2xkZXIoKSwgInJlYWRPbmx5VGVz
dE9iakF0dHIiLCB3cmFwcGVyKTsKICAgICB9CkBAIC0yMjksNyArMjI5LDcgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0ZXN0T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGMKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnRlc3RPYmpBdHRy
Ll9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcC0+dGVzdE9iakF0dHIoKSwgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+
dGVzdE9iakF0dHIoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBz
dGF0aWMgdm9pZCB0ZXN0T2JqQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpAQCAtMjQ1LDcgKzI0NSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gWE1M
T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5YTUxPYmpBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4
KGltcC0+eG1sT2JqQXR0cigpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT54bWxPYmpBdHRyKCksIGluZm8uSG9sZGVy
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgWE1MT2JqQXR0ckF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNDIxLDcgKzQyMSw3IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdHlwZWRBcnJheUF0dHJBdHRyR2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai50eXBl
ZEFycmF5QXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPnR5cGVkQXJyYXlBdHRyKCks
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1
cm4gdG9WOChpbXAtPnR5cGVkQXJyYXlBdHRyKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgdHlwZWRBcnJheUF0dHJBdHRyU2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTU0OCw3ICs1NDgsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0ckdl
dHRlcih2ODo6TAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBn
ZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAg
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENvbnRleHQpLCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShzY3JpcHRDb250ZXh0KSwgaW5mby5I
b2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQpAQCAtNTc2LDcgKzU3Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0ckdldHRlcih2ODo6TG9jYWw8CiAgICAg
ICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRl
LmV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjgodi5yZWxl
YXNlKCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAg
ICByZXR1cm4gdG9WOCh2LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTYwNyw3ICs2MDcsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzQXR0ckdldHRlcgogICAgIFJlZlB0cjxUZXN0T2JqPiB2ID0gaW1wLT53aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhzY3JpcHRDb250ZXh0LCBlYyk7
CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihl
YywgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRv
Vjgodi5yZWxlYXNlKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTYzNSw3ICs2MzUsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGVBdAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRD
b250ZXh0KQogICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChp
bXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3Rh
dGUsIHNjcmlwdENvbnRleHQpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKHN0YXRlLCBzY3JpcHRDb250ZXh0KSwgaW5mby5Ib2xk
ZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlUmEKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRl
KCkpOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4g
dG9WOCh2LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29s
YXRlKCkpOworICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZv
LkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKQEAgLTcwNCw3ICs3MDQsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKHN0YXRlLCBzY3JpcHRD
b250ZXh0KSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOwor
ICAgIHJldHVybiB0b1Y4KGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoc3RhdGUsIHNjcmlwdENvbnRleHQpLCBpbmZvLkhvbGRl
cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC03MzEsNyArNzMxLDcgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmli
dXRlQXR0ckdldHRlcigKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrRm9ySW5zcGVjdG9yKCkpOwogICAgIGlmICghY2FsbFN0YWNrKQog
ICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPndpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoY2FsbFN0YWNrKSwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGlt
cC0+d2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShjYWxsU3RhY2spLCBp
bmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKQEAgLTgyNSw3ICs4MjUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGNhY2hlZEF0dHJpYnV0ZTFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYQogICAgIFJlZlB0cjxhbnk+IHJlc3VsdCA9IGltcC0+Y2FjaGVkQXR0cmlidXRlMSgpOwog
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gcmVzdWx0LmdldCgpID8gZ2V0RE9N
T2JqZWN0TWFwKGluZm8uR2V0SXNvbGF0ZSgpKS5nZXQocmVzdWx0LmdldCgpKSA6IHY4VW5kZWZp
bmVkKCk7CiAgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7Ci0gICAgICAgIHdyYXBwZXIgPSB0
b1Y4KHJlc3VsdC5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8u
R2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZv
LkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCiAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNl
KGluZm8uSG9sZGVyKCksICJjYWNoZWRBdHRyaWJ1dGUxIiwgd3JhcHBlcik7CiAgICAgfQpAQCAt
ODM5LDcgKzgzOSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2FjaGVkQXR0cmli
dXRlMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiAgICAgUmVmUHRyPGFueT4g
cmVzdWx0ID0gaW1wLT5jYWNoZWRBdHRyaWJ1dGUyKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdyYXBwZXIgPSByZXN1bHQuZ2V0KCkgPyBnZXRET01PYmplY3RNYXAoaW5mby5HZXRJc29s
YXRlKCkpLmdldChyZXN1bHQuZ2V0KCkpIDogdjhVbmRlZmluZWQoKTsKICAgICBpZiAod3JhcHBl
ci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZv
LkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAg
ICB3cmFwcGVyID0gdG9WOChyZXN1bHQuZ2V0KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIFY4
RE9NV3JhcHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2UoaW5mby5Ib2xkZXIoKSwgImNhY2hl
ZEF0dHJpYnV0ZTIiLCB3cmFwcGVyKTsKICAgICB9CkBAIC05NDksMTQgKzk0OSwxNCBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnRlbnREb2N1bWVudEF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbQogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvTm9kZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+Y29udGVudERvY3Vt
ZW50KCkpKQogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpOdWxsKGlu
Zm8uR2V0SXNvbGF0ZSgpKSk7CiAKLSAgICByZXR1cm4gdG9WOChpbXAtPmNvbnRlbnREb2N1bWVu
dCgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAg
cmV0dXJuIHRvVjgoaW1wLT5jb250ZW50RG9jdW1lbnQoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5H
ZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG11dGFibGVQ
b2ludEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tdXRhYmxlUG9p
bnQuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoU1ZHU3RhdGljUHJvcGVydHlU
ZWFyT2ZmPFRlc3RPYmosIEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLCBpbXAtPm11dGFibGVQb2lu
dCgpLCAmVGVzdE9iajo6dXBkYXRlTXV0YWJsZVBvaW50KSksIGluZm8uSG9sZGVyKCktPkNyZWF0
aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoV1RGOjpn
ZXRQdHIoU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmPFRlc3RPYmosIEZsb2F0UG9pbnQ+OjpjcmVh
dGUoaW1wLCBpbXAtPm11dGFibGVQb2ludCgpLCAmVGVzdE9iajo6dXBkYXRlTXV0YWJsZVBvaW50
KSksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQg
bXV0YWJsZVBvaW50QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC05
NzIsNyArOTcyLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbW11dGFibGVQb2lu
dEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLmltbXV0YWJsZVBvaW50Ll9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KFdURjo6
Z2V0UHRyKFNWR1Byb3BlcnR5VGVhck9mZjxGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcC0+aW1tdXRh
YmxlUG9pbnQoKSkpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJ
c29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKFNWR1Byb3BlcnR5VGVhck9m
ZjxGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcC0+aW1tdXRhYmxlUG9pbnQoKSkpLCBpbmZvLkhvbGRl
cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGltbXV0YWJsZVBvaW50
QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0xMTExLDcgKzExMTEs
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iak1ldGhvZENhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vYmpN
ZXRob2QiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcC0+b2JqTWV0aG9kKCksIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChpbXAtPm9i
ak1ldGhvZCgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqTWV0aG9kV2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTEyMyw3ICsxMTIzLDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBvYmpNZXRob2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MKICAgICBFWENFUFRJT05fQkxPQ0sobG9uZyBsb25nLCBBcmcsIHRvSW50NjQoTUFZ
QkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwogICAg
IFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8Piwgc3Ry
QXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQp
KTsKICAgICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJ
bnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0SXNVbmRlZmlu
ZWQpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAw
KTsKLSAgICByZXR1cm4gdG9WOChpbXAtPm9iak1ldGhvZFdpdGhBcmdzKEFyZywgc3RyQXJnLCBv
YmpBcmcpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHRvVjgoaW1wLT5vYmpNZXRob2RXaXRoQXJncyhBcmcsIHN0ckFyZywgb2JqQXJn
KSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCkBAIC0xMTYwLDcgKzExNjAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjayhjb25z
dCB2OAogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPm1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcsIGVjKTsKICAgICBpZiAoVU5MSUtFTFko
ZWMpKQogICAgICAgICBnb3RvIGZhaWw7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2Uo
KSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJl
dHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKICAgICB9CiAgICAgZmFpbDoKICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBh
cmdzLkdldElzb2xhdGUoKSk7CkBAIC0xMjY3LDcgKzEyNjcsNyBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZU9iakNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZwogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPndpdGhTY3JpcHRTdGF0
ZU9iaigmc3RhdGUpOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAg
ICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pigp
LCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwg
YXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTMwMCw3ICsxMzAwLDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2
ODo6QXJndW0KICAgICAgICAgZ290byBmYWlsOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVz
dWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0K
ICAgICBmYWlsOgogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKQEAgLTEzNDYsNyArMTM0Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvCiAgICAg
ICAgIGdvdG8gZmFpbDsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0g
ICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCks
IGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICB9CiAgICAgZmFpbDoKICAg
ICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7CkBAIC0xMzYz
LDcgKzEzNjMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQwogICAgIFJlZlB0cjxUZXN0T2Jq
PiByZXN1bHQgPSBpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzKCZzdGF0ZSwgc2NyaXB0Q29udGV4dCk7CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSwgYXJn
cy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9W
OChyZXN1bHQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9
CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xODMzLDcgKzE4
MzMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldFNWR0RvY3VtZW50Q2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBSZWZQdHI8U1ZHRG9jdW1lbnQ+IHJl
c3VsdCA9IGltcC0+Z2V0U1ZHRG9jdW1lbnQoZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykpCiAg
ICAgICAgIGdvdG8gZmFpbDsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRv
VjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwog
ICAgIH0KICAgICBmYWlsOgogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKQEAgLTE4ODcsMTQgKzE4ODcsMTQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBtdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGEKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm11dGFibGVQb2ludEZ1bmN0aW9uIik7
CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
LSAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cihTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2lu
dD46OmNyZWF0ZShpbXAtPm11dGFibGVQb2ludEZ1bmN0aW9uKCkpKSwgYXJncy5Ib2xkZXIoKS0+
Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChX
VEY6OmdldFB0cihTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXAtPm11
dGFibGVQb2ludEZ1bmN0aW9uKCkpKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkp
OwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGltbXV0YWJsZVBvaW50RnVuY3Rp
b25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouaW1tdXRhYmxlUG9pbnRGdW5jdGlvbiIpOwogICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoV1RG
OjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLT5pbW11
dGFibGVQb2ludEZ1bmN0aW9uKCkpKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCks
IGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cihTVkdQcm9w
ZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXAtPmltbXV0YWJsZVBvaW50RnVuY3Rp
b24oKSkpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3JhbmdlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKQEAgLTE5MTksNyArMTkxOSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
c3RyaWN0RnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIFJl
ZlB0cjxib29sPiByZXN1bHQgPSBpbXAtPnN0cmljdEZ1bmN0aW9uKHN0ciwgYSwgYiwgZWMpOwog
ICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAgICAgIGdvdG8gZmFpbDsKLSAgICByZXR1cm4gdG9W
OChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIo
KSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0KICAgICBmYWlsOgogICAgIHJldHVybiBzZXRE
T01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTIzMjEsMTEgKzIzMjEsMjQg
QEAgdm9pZCBWOFRlc3RPYmo6Omluc3RhbGxQZXJDb250ZXh0UHJvcGVydGllcyh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGluc3RhbmNlLCBUZXMKICAgICB9CiB9CiAKLXY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhUZXN0T2JqOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RPYmo+IGltcGwsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUp
Cit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE9iajo6d3JhcFNsb3coUGFzc1JlZlB0cjxU
ZXN0T2JqPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
OwotICAgIEZyYW1lKiBmcmFtZSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5z
dGFudGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKKyAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0Vt
cHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4
dDo6R2V0Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIg
dGhlIGNvbnRleHQgb25seSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAg
ICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBl
bnRlci4KKyAgICAgICAgY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVh
dGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0
LklzRW1wdHkoKSk7CisgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CisgICAgfQorCisgICAgd3Jh
cHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQo
KSk7CisKKyAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0LT5FeGl0
KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1
cm4gd3JhcHBlcjsKICAgICBpbnN0YWxsUGVyQ29udGV4dFByb3BlcnRpZXMod3JhcHBlciwgaW1w
bC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmgKaW5kZXggNjZkMDRhMjc5NzZlZWY5ZTQ1ZTczNDE5MzMyMDg3NzE4MDNi
NDlmMS4uNGQ0MDcyMDI0MzFlMmMyNjg0OTMyYjdiNzBiMTI0OTQ1MDYzZjA1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaApA
QCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUZXN0T2JqKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhE
T01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE9iaiosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9
IDApOworICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RP
YmoqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIHZvaWQgZGVyZWZP
YmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3Rv
cmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwogICAgIHN0YXRpYyBXcmFw
cGVyVHlwZUluZm8gaW5mbzsKQEAgLTU0LDEwICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxG
aWVsZENvdW50ICsgMDsKICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4dFByb3BlcnRp
ZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgVGVzdE9iaiopOwogcHJpdmF0ZToKLSAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RPYmo+LCB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Cisg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0
T2JqPiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
Kik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE9iajo6d3JhcChUZXN0T2Jq
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29s
YXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RPYmo6OndyYXAoVGVz
dE9iaiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBnZXRET01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAoIXdy
YXBwZXIuSXNFbXB0eSgpKQpAQCAtNjUsMTMgKzY1LDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gVjhUZXN0T2JqOjp3cmFwKFRlc3RPYmoqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNyCiAgICAgcmV0dXJuIFY4VGVzdE9iajo6d3JhcFNsb3coaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKIH0KIAotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RP
YmoqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0T2JqKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4
TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKICAgICByZXR1cm4gVjhUZXN0T2JqOjp3cmFwKGltcGws
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE9iaiA+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29s
YXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNz
UmVmUHRyPCBUZXN0T2JqID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0g
MCkKIHsKICAgICByZXR1cm4gdG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcAppbmRleCBmZGM3MzQ0MDJhMGM2NDBhNjE1NjE2Y2U5MTJlNTAxODdhZWU4
MzNmLi5iYTRjNDBkNTY0YWY3ZjQ2ZDBhZDIwZjE1MzFiZWVkMmYyOGUzYWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApA
QCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9ydHNBdHRy
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2CiAgICAgTWVzc2FnZVBv
cnRBcnJheSBwb3J0c0NvcHkoKnBvcnRzKTsKICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBwb3J0
QXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhwb3J0c0NvcHkuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBvcnRzQ29weS5zaXplKCk7ICsraSkKLSAgICAgICAgcG9ydEFycmF5LT5T
ZXQodjhJbnRlZ2VyKGksIGluZm8uR2V0SXNvbGF0ZSgpKSwgdG9WOChwb3J0c0NvcHlbaV0uZ2V0
KCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSkp
OworICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkp
LCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpKTsKICAgICByZXR1cm4gcG9ydEFycmF5OwogfQogCkBAIC0yOTMsMTEgKzI5MywyNCBAQCBi
b29sIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6SGFzSW5zdGFuY2Uodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbAogfQogCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6d3JhcFNs
b3coUGFzc1JlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotICAgIEZyYW1lKiBm
cmFtZSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVj
dChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY29udGV4dDsKKyAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRp
b25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgp
KSB7CisgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25s
eSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAgICAvLyBpcyBkaWZmZXJl
bnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4KKyAgICAgICAg
Y29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNy
ZWF0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7Cisg
ICAgICAgIGNvbnRleHQtPkVudGVyKCk7CisgICAgfQorCisgICAgd3JhcHBlciA9IFY4RE9NV3Jh
cHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICBpZiAo
IWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAo
VU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVy
OjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKaW5k
ZXggMmI4OWUxMDU0OTYwY2YxYTRmNmYxMDllNjQyYjI1MmY3ODQ1ODRhNi4uYjhjM2NkYjE5YTI0
ODg5OGMzY2NhOTFmNWMwOGQxNWUyZDhiMjQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApAQCAtNDMsMTcgKzQzLDE3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxG
aWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3RhdGlj
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CisgICAgaW5saW5lIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURh
dGFTdG9yZSosIHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAgc3RhdGlj
IFdyYXBwZXJUeXBlSW5mbyBpbmZvOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CiAgICAgc3RhdGljIGNv
bnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVs
ZENvdW50ICsgMDsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwor
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwogfTsKIAotdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OndyYXAoVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwKFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKGlzb2xhdGUpLmdldChp
bXBsKTsKICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKQEAgLTYxLDEzICs2MSwxMyBA
QCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6d3JhcChUZXN0U2VyaWFsaXplZAogICAgIHJldHVybiBWOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSA9IDApCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29s
YXRlID0gMCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hl
Y2soaXNvbGF0ZSk7CiAgICAgcmV0dXJuIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6d3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQotaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNv
bnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9
IDApCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRpb25D
b250ZXh0LCBpc29sYXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVRy
YW5zYWN0aW9uLmNwcAppbmRleCA0NDM3OGNmZWRlMDU0YmUwMzUwZGY1NjQ0MDg5NDU4MWI4NDQ1
MDIxLi4yMjVlNWFiYjZmMTc4OGUzYmFlMzZmZWM2ZTExNjZiMTNjYTc3ZTM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01UcmFuc2FjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwCkBAIC0xNDIsNyArMTQy
LDcgQEAgdm9pZCBET01UcmFuc2FjdGlvbjo6Y2FsbEZ1bmN0aW9uKGNvbnN0IGNoYXIqIHByb3Bl
cnR5TmFtZSkKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZWNlaXZlciA9IHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QodG9WOChtX3VuZG9NYW5hZ2VyLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pigp
KSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZWNlaXZlciA9IHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QodG9WOChtX3VuZG9NYW5hZ2VyKSk7CiAgICAgaWYgKHJlY2VpdmVyLklz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwYXJh
bWV0ZXJzWzBdID0geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
SURCQ3VzdG9tQmluZGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQ3Vz
dG9tQmluZGluZ3MuY3BwCmluZGV4IGRlNDBmMThhNGY5MGJhNDM2MzM3ODMxOTQ1MDZkZmExMTIx
OWY5NDcuLjk2OGNjMGM2NGYzNDM1MmU2MTcyYTI3M2FlYjU0Y2ZiNmIzOWM3MGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkN1c3RvbUJpbmRpbmdzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJDdXN0b21CaW5kaW5ncy5jcHAKQEAgLTUw
LDcgKzUwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SURCQ3Vyc29yV2l0aFZhbHVlOjp2
YWx1ZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3QKICAgICB9CiAKICAgICBSZWZQdHI8
SURCQW55PiByZXN1bHQgPSBpbXAtPnZhbHVlKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250
ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3Jh
cHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUo
KSk7CiAgICAgaW5mby5Ib2xkZXIoKS0+U2V0SGlkZGVuVmFsdWUocHJvcGVydHlOYW1lLCB3cmFw
cGVyKTsKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDNiYTIwZGI2YTQ2YmFk
MjFkZGM5MWRlZTIwNjI2YmFkZmU3YzU0MjEuLjQzY2VmZjRlYjY1ZmIwNDI2M2Y2NjdlNjBkYWVm
OWViZTc2MmZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNjM4LDExICs2MzgsMTEgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQoIXRyeUNhdGNoLkhhc0NhdWdodCgpKTsKICAgICAgICAgaWYgKG1lc3NhZ2VQ
b3J0cykgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZXNzYWdlUG9ydHMt
PnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgIG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMu
c2V0KFY4TWVzc2FnZVBvcnQ6OndyYXAobWVzc2FnZVBvcnRzLT5hdChpKS5nZXQoKSwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4oKSwgbV93cml0ZXIuZ2V0SXNvbGF0ZSgpKSwgaSk7CisgICAgICAg
ICAgICAgICAgbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cy5zZXQoVjhNZXNzYWdlUG9ydDo6d3Jh
cChtZXNzYWdlUG9ydHMtPmF0KGkpLmdldCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1f
d3JpdGVyLmdldElzb2xhdGUoKSksIGkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChhcnJheUJ1
ZmZlcnMpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlCdWZmZXJz
LT5zaXplKCk7IGkrKykgIHsKLSAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHY4QXJyYXlCdWZmZXIgPSBWOEFycmF5QnVmZmVyOjp3cmFwKGFycmF5QnVmZmVycy0+YXQoaSku
Z2V0KCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1fd3JpdGVyLmdldElzb2xhdGUoKSk7
CisgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB2OEFycmF5QnVmZmVyID0g
VjhBcnJheUJ1ZmZlcjo6d3JhcChhcnJheUJ1ZmZlcnMtPmF0KGkpLmdldCgpLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIG1fd3JpdGVyLmdldElzb2xhdGUoKSk7CiAgICAgICAgICAgICAgICAg
Ly8gQ29hbGVzY2UgbXVsdGlwbGUgb2NjdXJlbmNlcyBvZiB0aGUgc2FtZSBidWZmZXIgdG8gdGhl
IGZpcnN0IGluZGV4LgogICAgICAgICAgICAgICAgIGlmICghbV90cmFuc2ZlcnJlZEFycmF5QnVm
ZmVycy5jb250YWlucyh2OEFycmF5QnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgbV90cmFu
c2ZlcnJlZEFycmF5QnVmZmVycy5zZXQodjhBcnJheUJ1ZmZlciwgaSk7CkBAIC0xMDU3LDcgKzEw
NTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICghYXJy
YXlCdWZmZXJWaWV3LT5idWZmZXIoKSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcihE
YXRhQ2xvbmVFcnJvciwgbmV4dCk7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bmRl
cmx5aW5nQnVmZmVyID0gdG9WOChhcnJheUJ1ZmZlclZpZXctPmJ1ZmZlcigpLCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PigpLCBtX3dyaXRlci5nZXRJc29sYXRlKCkpOworICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdW5kZXJseWluZ0J1ZmZlciA9IHRvVjgoYXJyYXlCdWZmZXJWaWV3LT5i
dWZmZXIoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBtX3dyaXRlci5nZXRJc29sYXRlKCkp
OwogICAgICAgICBpZiAodW5kZXJseWluZ0J1ZmZlci5Jc0VtcHR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gaGFuZGxlRXJyb3IoRGF0YUNsb25lRXJyb3IsIG5leHQpOwogICAgICAgICBTdGF0ZUJh
c2UqIHN0YXRlT3V0ID0gZG9TZXJpYWxpemUodW5kZXJseWluZ0J1ZmZlciwgMCk7CkBAIC0xNjM0
LDcgKzE2MzQsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQocGl4ZWxBcnJheS0+bGVuZ3Ro
KCkgPj0gcGl4ZWxEYXRhTGVuZ3RoKTsKICAgICAgICAgbWVtY3B5KHBpeGVsQXJyYXktPmRhdGEo
KSwgbV9idWZmZXIgKyBtX3Bvc2l0aW9uLCBwaXhlbERhdGFMZW5ndGgpOwogICAgICAgICBtX3Bv
c2l0aW9uICs9IHBpeGVsRGF0YUxlbmd0aDsKLSAgICAgICAgKnZhbHVlID0gdG9WOChpbWFnZURh
dGEucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOworICAg
ICAgICAqdmFsdWUgPSB0b1Y4KGltYWdlRGF0YS5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0x
NjU2LDcgKzE2NTYsNyBAQCBwcml2YXRlOgogICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFy
cmF5QnVmZmVyID0gZG9SZWFkQXJyYXlCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZl
cikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgKnZhbHVlID0gdG9WOChhcnJh
eUJ1ZmZlci5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNvbGF0ZSk7
CisgICAgICAgICp2YWx1ZSA9IHRvVjgoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMTY4Miw1OCArMTY4Miw1OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBzd2l0Y2ggKHN1YlRhZykgewogICAgICAgICBjYXNlIEJ5dGVBcnJheVRh
ZzoKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoSW50OEFycmF5OjpjcmVhdGUoYXJyYXlCdWZm
ZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSwgbV9pc29sYXRlKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoSW50OEFycmF5
OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBtX2lzb2xhdGUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgVW5zaWduZWRCeXRlQXJyYXlUYWc6Ci0gICAgICAgICAgICAqdmFsdWUg
PSB0b1Y4KFVpbnQ4QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxlYXNlKCksIGJ5dGVPZmZz
ZXQsIGJ5dGVMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCAgbV9pc29sYXRlKTsK
KyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoVWludDhBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVy
LnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCksIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKSwgIG1faXNvbGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnNp
Z25lZEJ5dGVDbGFtcGVkQXJyYXlUYWc6Ci0gICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KFVpbnQ4
Q2xhbXBlZEFycmF5OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBi
eXRlTGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgbV9pc29sYXRlKTsKKyAgICAg
ICAgICAgICp2YWx1ZSA9IHRvVjgoVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZl
ci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTaG9y
dEFycmF5VGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBzaG9ydExlbmd0aCA9IGJ5dGVMZW5n
dGggLyBzaXplb2YoaW50MTZfdCk7CiAgICAgICAgICAgICBpZiAoc2hvcnRMZW5ndGggKiBzaXpl
b2YoaW50MTZfdCkgIT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KEludDE2QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZl
ci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIHNob3J0TGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSwgbV9pc29sYXRlKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoSW50MTZBcnJh
eTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgc2hvcnRMZW5ndGgp
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIFVuc2lnbmVkU2hvcnRBcnJheVRhZzogewogICAg
ICAgICAgICAgdWludDMyX3Qgc2hvcnRMZW5ndGggPSBieXRlTGVuZ3RoIC8gc2l6ZW9mKHVpbnQx
Nl90KTsKICAgICAgICAgICAgIGlmIChzaG9ydExlbmd0aCAqIHNpemVvZih1aW50MTZfdCkgIT0g
Ynl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAq
dmFsdWUgPSB0b1Y4KFVpbnQxNkFycmF5OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBi
eXRlT2Zmc2V0LCBzaG9ydExlbmd0aCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNv
bGF0ZSk7CisgICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KFVpbnQxNkFycmF5OjpjcmVhdGUoYXJy
YXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBzaG9ydExlbmd0aCksIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgSW50QXJyYXlUYWc6IHsKICAgICAgICAgICAgIHVpbnQzMl90IGludExl
bmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2YoaW50MzJfdCk7CiAgICAgICAgICAgICBpZiAoaW50
TGVuZ3RoICogc2l6ZW9mKGludDMyX3QpICE9IGJ5dGVMZW5ndGgpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgKnZhbHVlID0gdG9WOChJbnQzMkFycmF5OjpjcmVh
dGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBpbnRMZW5ndGgpLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOworICAgICAgICAgICAgKnZhbHVlID0gdG9W
OChJbnQzMkFycmF5OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBp
bnRMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFVuc2lnbmVkSW50QXJyYXlUYWc6
IHsKICAgICAgICAgICAgIHVpbnQzMl90IGludExlbmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2Yo
dWludDMyX3QpOwogICAgICAgICAgICAgaWYgKGludExlbmd0aCAqIHNpemVvZih1aW50MzJfdCkg
IT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAqdmFsdWUgPSB0b1Y4KFVpbnQzMkFycmF5OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgp
LCBieXRlT2Zmc2V0LCBpbnRMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lz
b2xhdGUpOworICAgICAgICAgICAgKnZhbHVlID0gdG9WOChVaW50MzJBcnJheTo6Y3JlYXRlKGFy
cmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgaW50TGVuZ3RoKSwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PigpLCBtX2lzb2xhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGbG9hdEFycmF5VGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBmbG9h
dExlbmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2YoZmxvYXQpOwogICAgICAgICAgICAgaWYgKGZs
b2F0TGVuZ3RoICogc2l6ZW9mKGZsb2F0KSAhPSBieXRlTGVuZ3RoKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoRmxvYXQzMkFycmF5Ojpj
cmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBmbG9hdExlbmd0aCksIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNvbGF0ZSk7CisgICAgICAgICAgICAqdmFsdWUg
PSB0b1Y4KEZsb2F0MzJBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9m
ZnNldCwgZmxvYXRMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIERvdWJsZUFycmF5
VGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBmbG9hdExlbmd0aCA9IGJ5dGVMZW5ndGggLyBz
aXplb2YoZG91YmxlKTsKICAgICAgICAgICAgIGlmIChmbG9hdExlbmd0aCAqIHNpemVvZihkb3Vi
bGUpICE9IGJ5dGVMZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgKnZhbHVlID0gdG9WOChGbG9hdDY0QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxl
YXNlKCksIGJ5dGVPZmZzZXQsIGZsb2F0TGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgbV9pc29sYXRlKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoRmxvYXQ2NEFycmF5Ojpj
cmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBmbG9hdExlbmd0aCksIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRGF0YVZpZXdUYWc6Ci0gICAgICAgICAgICAqdmFsdWUg
PSB0b1Y4KERhdGFWaWV3OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgbV9pc29sYXRlKTsKKyAg
ICAgICAgICAgICp2YWx1ZSA9IHRvVjgoRGF0YVZpZXc6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxl
YXNlKCksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCks
IG1faXNvbGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NjgsNyArMTc2OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmICghZG9SZWFkVWludDY0KCZzaXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgUGFzc1JlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKEtVUkwoUGFyc2Vk
VVJMU3RyaW5nLCB1cmwpLCB0eXBlLCBzaXplKTsKLSAgICAgICAgKnZhbHVlID0gdG9WOChibG9i
LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOworICAgICAgICAqdmFsdWUg
PSB0b1Y4KGJsb2IsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNzg1LDcgKzE3ODUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAoIXJlYWRXZWJDb3JlU3RyaW5nKCZ1cmwpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZnMgPSBET01GaWxlU3lzdGVt
OjpjcmVhdGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBuYW1lLCBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpGaWxlU3lzdGVtVHlwZT4odHlwZSksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwp
LCBBc3luY0ZpbGVTeXN0ZW06OmNyZWF0ZSgpKTsKLSAgICAgICAgKnZhbHVlID0gdG9WOChmcy5y
ZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNvbGF0ZSk7CisgICAgICAg
ICp2YWx1ZSA9IHRvVjgoZnMucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1f
aXNvbGF0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgpAQCAtMTgwMiw3
ICsxODAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdHlw
ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFBhc3NSZWZQdHI8RmlsZT4g
ZmlsZSA9IEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdHlw
ZSk7Ci0gICAgICAgICp2YWx1ZSA9IHRvVjgoZmlsZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgbV9pc29sYXRlKTsKKyAgICAgICAgKnZhbHVlID0gdG9WOChmaWxlLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtMTgyNCw3ICsxODI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJM
KFBhcnNlZFVSTFN0cmluZywgdXJsU3RyaW5nKSwgdHlwZSkpOwogICAgICAgICB9Ci0gICAgICAg
ICp2YWx1ZSA9IHRvVjgoZmlsZUxpc3QsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNv
bGF0ZSk7CisgICAgICAgICp2YWx1ZSA9IHRvVjgoZmlsZUxpc3QsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0y
MDIyLDcgKzIwMjIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmIChpbmRleCA+PSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLT5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICpvYmplY3QgPSBWOE1lc3NhZ2VQb3J0Ojp3
cmFwKG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMtPmF0KGluZGV4KS5nZXQoKSwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4oKSwgbV9yZWFkZXIuZ2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgKm9iamVj
dCA9IFY4TWVzc2FnZVBvcnQ6OndyYXAobV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cy0+YXQoaW5k
ZXgpLmdldCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1fcmVhZGVyLmdldElzb2xhdGUo
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjAzNCw3ICsyMDM0LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHJlc3VsdCA9IG1fYXJyYXlCdWZmZXJzLmF0KGluZGV4KTsKICAgICAgICAgaWYg
KHJlc3VsdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFY4QXJyYXlCdWZmZXI6
OndyYXAoQXJyYXlCdWZmZXI6OmNyZWF0ZShtX2FycmF5QnVmZmVyQ29udGVudHMtPmF0KGluZGV4
KSkuZ2V0KCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1fcmVhZGVyLmdldElzb2xhdGUo
KSk7CisgICAgICAgICAgICByZXN1bHQgPSBWOEFycmF5QnVmZmVyOjp3cmFwKEFycmF5QnVmZmVy
OjpjcmVhdGUobV9hcnJheUJ1ZmZlckNvbnRlbnRzLT5hdChpbmRleCkpLmdldCgpLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCksIG1fcmVhZGVyLmdldElzb2xhdGUoKSk7CiAgICAgICAgICAgICBt
X2FycmF5QnVmZmVyc1tpbmRleF0gPSByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgKm9iamVj
dCA9IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXggMzhk
NWNhYjEwN2E3ODFkNjg1ZDJjOTFkOGUzM2Q5MDkzNjhlNGRjMS4uZjYxY2ZiZTRjOGZkNzY2ZmFk
NzhiODhkMGQ0OTIwMmY3NmU5NDNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhCaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0
IFY4VmFsdWVUcmFpdHMgewogICAgICAgICBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBhcnJheVY4VmFsdWUoY29uc3QgVCYgdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cih2YWx1ZSksIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIGlzb2xhdGUpOworICAgICAgICAgICAgcmV0dXJuIHRv
VjgoV1RGOjpnZXRQdHIodmFsdWUpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGlzb2xhdGUp
OwogICAgICAgICB9CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxl
Y3Rpb24uaAppbmRleCA3ZTQzZDlhZTNiYWRhM2M4ZTMxNzJkMDJiYzE5M2JmNThlZDZjMGI5Li5m
YzgwYTVhN2UxNGE1ZjJiN2Q0MWE3MGNkNzZkYmE2ZWExMWVhMDg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBuYW1lZCB1c2lu
ZyB0byogc2luY2UgdGhleSByZXR1cm4gdGhlIGl0ZW0gKGdldCogaXMgdXNlZCBmb3IgbWV0aG9k
IHRoYXQgdGFrZSBhIHJlZiBwYXJhbSkuCiAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI0NjY0LgogCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGdldFY4T2JqZWN0KFQqIGltcGxlbWVudGF0aW9uLCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordGVt
cGxhdGU8Y2xhc3MgVD4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRWOE9iamVjdChU
KiBpbXBsZW1lbnRhdGlvbiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghaW1wbGVtZW50YXRpb24pCiAgICAg
ICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwpAQCAtNTMsMTMgKzUzLDEzIEBAIHRlbXBsYXRlPGNs
YXNzIENvbGxlY3Rpb24+IHN0YXRpYyBDb2xsZWN0aW9uKiB0b05hdGl2ZUNvbGxlY3Rpb24odjg6
OkxvY2FsPHY4OjpPCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29sbGVjdGlvbio+KG9i
amVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4
KSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Z2V0VjhPYmplY3QoUGFzc1JlZlB0cjxUPiBpbXBsZW1lbnRhdGlvbiwgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3RlbXBsYXRl
PGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0VjhPYmplY3QoUGFzc1Jl
ZlB0cjxUPiBpbXBsZW1lbnRhdGlvbiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHJldHVybiBnZXRWOE9iamVjdChp
bXBsZW1lbnRhdGlvbi5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogLy8g
UmV0dXJucyBuYW1lZCBwcm9wZXJ0eSBvZiBhIGNvbGxlY3Rpb24uCi10ZW1wbGF0ZTxjbGFzcyBD
b2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBn
ZXROYW1lZFByb3BlcnR5T2ZDb2xsZWN0aW9uKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordGVtcGxhdGU8Y2xhc3MgQ29sbGVj
dGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TmFt
ZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIC8vIEZJWE1FOiBhc3NlcnQgb2Jq
ZWN0IGlzIGEgY29sbGVjdGlvbiB0eXBlCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVE
T01XcmFwcGVyKG9iamVjdCkpOwpAQCAtNzcsMTEgKzc3LDExIEBAIHRlbXBsYXRlPGNsYXNzIENv
bGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bGxlY3RpCiAgICAgaWYgKGluZm8uSG9sZGVyKCktPkhhc1JlYWxOYW1lZENhbGxiYWNrUHJvcGVy
dHkobmFtZSkpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIGdl
dE5hbWVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVjdGlvbiwgSXRlbVR5cGU+KG5hbWUsIGlu
Zm8uSG9sZGVyKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIGdldE5hbWVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVj
dGlvbiwgSXRlbVR5cGU+KG5hbWUsIGluZm8uSG9sZGVyKCksIGluZm8uSG9sZGVyKCksIGluZm8u
R2V0SXNvbGF0ZSgpKTsKIH0KIAogLy8gUmV0dXJucyB0aGUgcHJvcGVydHkgYXQgdGhlIGluZGV4
IG9mIGEgY29sbGVjdGlvbi4KLXRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1U
eXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEluZGV4ZWRQcm9wZXJ0eU9mQ29s
bGVjdGlvbih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKK3RlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGdldEluZGV4ZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbih1aW50MzJf
dCBpbmRleCwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIC8vIEZJ
WE1FOiBBc3NlcnQgdGhhdCBvYmplY3QgbXVzdCBiZSBhIGNvbGxlY3Rpb24gdHlwZS4KICAgICBB
U1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CkBAIC05Myw3ICs5
Myw3IEBAIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEluZGV4CiAvLyBBIHRlbXBsYXRlIG9mIGluZGV4IGlu
dGVyY2VwdG9yIG9mIGNvbGxlY3Rpb25zLgogdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xh
c3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlvbkluZGV4
ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKLSAgICByZXR1cm4gZ2V0SW5kZXhlZFByb3BlcnR5T2ZDb2xsZWN0aW9uPENvbGxl
Y3Rpb24sIEl0ZW1UeXBlPihpbmRleCwgaW5mby5Ib2xkZXIoKSwgaW5mby5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gZ2V0SW5kZXhl
ZFByb3BlcnR5T2ZDb2xsZWN0aW9uPENvbGxlY3Rpb24sIEl0ZW1UeXBlPihpbmRleCwgaW5mby5I
b2xkZXIoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiAvLyBHZXQg
YW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgaW5kZXhlZCBwcm9wZXJ0aWVzIG9mIEhU
TUxTZWxlY3RFbGVtZW50IGFuZCBIVE1MRm9ybUVsZW1lbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCmluZGV4IDExZTQyYzU0ZGMyZjlmMmU1
YWQwYjc1MjQ4NTg5YzIyYjlhMGUwYWIuLjdlNmU0Y2EwODdlYTlkNTE1ZjY1OTI0NjJjNTIzNDRi
ZDk0YzQzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2lu
ZG93U2hlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93
U2hlbGwuY3BwCkBAIC00ODgsNyArNDg4LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBnZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHByb3BlcnR5LCBjb25zdCB2ODo6QWMKICAg
ICBBdG9taWNTdHJpbmcgbmFtZSA9IHRvV2ViQ29yZUF0b21pY1N0cmluZyhwcm9wZXJ0eSk7CiAg
ICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOEhUTUxEb2N1bWVudDo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7CiAgICAgQVNTRVJUKGh0bWxEb2N1bWVudCk7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHJlc3VsdCA9IFY4SFRNTERvY3VtZW50OjpnZXROYW1lZFByb3BlcnR5KGh0
bWxEb2N1bWVudCwgbmFtZSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8u
R2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gVjhIVE1M
RG9jdW1lbnQ6OmdldE5hbWVkUHJvcGVydHkoaHRtbERvY3VtZW50LCBuYW1lLCBpbmZvLkhvbGRl
cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAgaWYgKCFyZXN1bHQuSXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwcm90b3R5cGUg
PSBpbmZvLkhvbGRlcigpLT5HZXRQcm90b3R5cGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdyYXBwZXIuY3BwCmluZGV4IDk2ZTBhNTYzMWMxNzVlN2Q1NDUyNDQ4N2M1NmFl
MjkxNjVmNjAwMGUuLmM5NGM1NzlhZWUxMTdiZGYzY2UwYTVlMmI0OGE4YzE5M2FmMzExYmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMTU3LDQ4
ICsxNTcsMjAgQEAgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiBWOERPTVdyYXBwZXI6OndyYXBOYXRp
dmVOb2RlRmlsdGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPgogICAgIHJldHVybiBOb2RlRmlsdGVy
OjpjcmVhdGUoVjhOb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUoZmlsdGVyKSk7CiB9CiAKLXY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoRnJh
bWUqIGZyYW1lLCBXcmFwcGVyVHlwZUluZm8qIHR5cGUsIHZvaWQqIGltcGwpCit2ODo6TG9jYWw8
djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KFdyYXBwZXJUeXBl
SW5mbyogdHlwZSwgdm9pZCogaW1wbCkKIHsKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBXb3Jr
ZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gMDsKLSNlbmRpZgotICAgIGlmICghZnJhbWUpIHsK
LSAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpDb250ZXh0OjpH
ZXRDdXJyZW50KCk7Ci0gICAgICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsUHJvdG90eXBlID0gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChjb250ZXh0LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpOwotICAg
ICAgICAgICAgaWYgKGlzV3JhcHBlck9mVHlwZShnbG9iYWxQcm90b3R5cGUsICZWOERPTVdpbmRv
dzo6aW5mbykpIHsKLSAgICAgICAgICAgICAgICBGcmFtZSogZ2xvYmFsRnJhbWUgPSBWOERPTVdp
bmRvdzo6dG9OYXRpdmUoZ2xvYmFsUHJvdG90eXBlKS0+ZnJhbWUoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoZ2xvYmFsRnJhbWUgJiYgZ2xvYmFsRnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2Ny
aXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgICAgICAgICAgICAgIGZyYW1l
ID0gZ2xvYmFsRnJhbWU7Ci0gICAgICAgICAgICB9Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAg
ICAgICAgICBlbHNlIGlmIChpc1dyYXBwZXJPZlR5cGUoZ2xvYmFsUHJvdG90eXBlLCAmVjhXb3Jr
ZXJDb250ZXh0OjppbmZvKSkKLSAgICAgICAgICAgICAgICB3b3JrZXJDb250ZXh0ID0gVjhXb3Jr
ZXJDb250ZXh0Ojp0b05hdGl2ZShsb29rdXBET01XcmFwcGVyKFY4V29ya2VyQ29udGV4dDo6R2V0
VGVtcGxhdGUoKSwgY29udGV4dC0+R2xvYmFsKCkpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAg
fQorICAgIFY4UGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRhID0gVjhQZXJDb250ZXh0RGF0
YTo6Y3VycmVudCgpOwogCi0gICAgVjhQZXJDb250ZXh0RGF0YSogY29udGV4dERhdGEgPSAwOwot
ICAgIGlmIChmcmFtZSkKLSAgICAgICAgY29udGV4dERhdGEgPSBwZXJDb250ZXh0RGF0YUZvckN1
cnJlbnRXb3JsZChmcmFtZSk7Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgZWxzZSBpZiAod29y
a2VyQ29udGV4dCkKLSAgICAgICAgY29udGV4dERhdGEgPSBwZXJDb250ZXh0RGF0YSh3b3JrZXJD
b250ZXh0KTsKLSNlbmRpZgorICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZSA9IHBl
ckNvbnRleHREYXRhID8gcGVyQ29udGV4dERhdGEtPmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUodHlw
ZSkgOiBWOE9iamVjdENvbnN0cnVjdG9yOjpuZXdJbnN0YW5jZSh0eXBlLT5nZXRUZW1wbGF0ZSgp
LT5HZXRGdW5jdGlvbigpKTsKKworICAgIC8vIEF2b2lkIHNldHRpbmcgdGhlIERPTSB3cmFwcGVy
IGZvciBmYWlsZWQgYWxsb2NhdGlvbnMuCisgICAgaWYgKGluc3RhbmNlLklzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOworCisgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5jZSwgdHlw
ZSwgaW1wbCk7CisgICAgaWYgKHR5cGUgPT0gJlY4SFRNTERvY3VtZW50OjppbmZvKQorICAgICAg
ICBpbnN0YW5jZSA9IFY4SFRNTERvY3VtZW50Ojp3cmFwSW5TaGFkb3dPYmplY3QoaW5zdGFuY2Us
IHN0YXRpY19jYXN0PE5vZGUqPihpbXBsKSk7CiAKLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
aW5zdGFuY2U7Ci0gICAgaWYgKGNvbnRleHREYXRhKQotICAgICAgICBpbnN0YW5jZSA9IGNvbnRl
eHREYXRhLT5jcmVhdGVXcmFwcGVyRnJvbUNhY2hlKHR5cGUpOwotICAgIGVsc2UgewotICAgICAg
ICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHR5cGUtPmdldFRlbXBsYXRlKCkt
PkdldEZ1bmN0aW9uKCk7Ci0gICAgICAgIGluc3RhbmNlID0gVjhPYmplY3RDb25zdHJ1Y3Rvcjo6
bmV3SW5zdGFuY2UoZnVuY3Rpb24pOwotICAgIH0KLSAgICBpZiAoIWluc3RhbmNlLklzRW1wdHko
KSkgewotICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHRoZSBET00gd3JhcHBlciBmb3IgZmFpbGVk
IGFsbG9jYXRpb25zLgotICAgICAgICBzZXRET01XcmFwcGVyKGluc3RhbmNlLCB0eXBlLCBpbXBs
KTsKLSAgICAgICAgaWYgKHR5cGUgPT0gJlY4SFRNTERvY3VtZW50OjppbmZvKQotICAgICAgICAg
ICAgaW5zdGFuY2UgPSBWOEhUTUxEb2N1bWVudDo6d3JhcEluU2hhZG93T2JqZWN0KGluc3RhbmNl
LCBzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbCkpOwotICAgIH0KICAgICByZXR1cm4gaW5zdGFuY2U7
CiB9CiAKQEAgLTI0OSw3ICsyMjEsNyBAQCBib29sIFY4RE9NV3JhcHBlcjo6aXNXcmFwcGVyT2ZU
eXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgV3JhcHBlclR5cGVJbmZvKgogICAgICAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxpbnRlcmZhY2VOYW1lKj4odGFyZ2V0KSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKIAogLy8gQSBKUyBvYmplY3Qgb2YgdHlwZSBFdmVudFRhcmdl
dCBpcyBsaW1pdGVkIHRvIGEgc21hbGwgbnVtYmVyIG9mIHBvc3NpYmxlIGNsYXNzZXMuCi12ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2Jq
ZWN0KEV2ZW50VGFyZ2V0KiB0YXJnZXQsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKIHsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhD
aGVjayhpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgK
aW5kZXggM2JiNTFlMzVhNWY5Mzg5ZDM0N2VhYzMwMDdiNTU3OTA3ZjBmZTNhZS4uYTYwOWUzMjc5
OTU4M2I5OGE1NTNjNTBmMmM4MTA0YTI1NjcyNWI2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTgxLDEyICs4MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyogZG9tV3JhcHBlclR5cGUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+
IGV2ZW50VGFyZ2V0LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCisgICAg
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9i
amVjdChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBldmVudFRhcmdldCwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRFdmVudFRhcmdldFRvVjhPYmplY3QoZXZlbnRUYXJnZXQuZ2V0KCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0Kiwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCks
IHY4OjpJc29sYXRlKiA9IDApOwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGdldEV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wg
aXNBdHRyaWJ1dGUsIExpc3RlbmVyTG9va3VwVHlwZSBsb29rdXApOwogCkBAIC0xMTksNyArMTE5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCBzZXROYW1lZEhp
ZGRlblJlZmVyZW5jZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBhcmVudCwgY29uc3QgY2hhciog
bmFtZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoaWxkKTsKICAgICAgICAgc3RhdGljIHZvaWQg
c2V0TmFtZWRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJhbWUqLCBjb25zdCBjaGFyKiwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KTsKIAotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGluc3RhbnRpYXRlVjhPYmplY3QoRnJhbWUqLCBXcmFwcGVyVHlwZUluZm8qLCB2b2lkKik7Cisg
ICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFudGlhdGVWOE9iamVjdChX
cmFwcGVyVHlwZUluZm8qLCB2b2lkKik7CiAKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gZ2V0Q2FjaGVkV3JhcHBlcihOb2RlKiBub2RlKQogICAgICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCmluZGV4IGU1NzAy
OWJmZDcyNGI4OTY1NTY2NWVkMWI2NWRlMjE0NTQ2ODIwMTQuLmJkODhhZmYwOWIxOTgyYjBhMDdj
M2VmYzg5NDk1ZTkxOTcyMGMzYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4UGVyQ29udGV4dERhdGEuY3BwCkBAIC0zMSwxMiArMzEsMjUgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJWOFBlckNvbnRleHREYXRhLmgiCiAKKyNpbmNsdWRlICJWOERPTVdp
bmRvdy5oIgogI2luY2x1ZGUgIlY4T2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJWOFdv
cmtlckNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgaW50
IHBlckNvbnRleHREYXRhSW5kZXggPSBWOERPTVdpbmRvdzo6cGVyQ29udGV4dERhdGFJbmRleDsK
K0NPTVBJTEVfQVNTRVJUKFY4RE9NV2luZG93OjpwZXJDb250ZXh0RGF0YUluZGV4ID09IFY4V29y
a2VyQ29udGV4dDo6cGVyQ29udGV4dERhdGFJbmRleCwgRE9NV2luZG93QW5kV29ya2VyQ29udGV4
dE11c3RIYXZlVGhlU2FtZVBlckNvbnRleHREYXRhSW5kZXgpOworCitWOFBlckNvbnRleHREYXRh
KiBWOFBlckNvbnRleHREYXRhOjpjdXJyZW50KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VjhQZXJDb250ZXh0RGF0YSo+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qodjg6OkNvbnRl
eHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKS0+R2V0UG9pbnRlckZy
b21JbnRlcm5hbEZpZWxkKHBlckNvbnRleHREYXRhSW5kZXgpKTsKK30KKwogdm9pZCBWOFBlckNv
bnRleHREYXRhOjpkaXNwb3NlKCkKIHsKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChtX2NvbnRleHQtPkdsb2JhbCgpLT5H
ZXRQcm90b3R5cGUoKSktPlNldFBvaW50ZXJJbkludGVybmFsRmllbGQocGVyQ29udGV4dERhdGFJ
bmRleCwgMCk7CisKICAgICB7CiAgICAgICAgIFdyYXBwZXJCb2lsZXJwbGF0ZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuYmVnaW4oKTsKICAgICAgICAgZm9yICg7IGl0
ICE9IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5lbmQoKTsgKytpdCkgewpAQCAtNzMsNiArODYsOCBA
QCB2b2lkIFY4UGVyQ29udGV4dERhdGE6OmRpc3Bvc2UoKQogCiBib29sIFY4UGVyQ29udGV4dERh
dGE6OmluaXQoKQogeworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QobV9jb250ZXh0
LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpLT5TZXRQb2ludGVySW5JbnRlcm5hbEZpZWxkKHBl
ckNvbnRleHREYXRhSW5kZXgsIHRoaXMpOworCiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBw
cm90b3R5cGVTdHJpbmcgPSB2ODo6U3RyaW5nOjpOZXdTeW1ib2woInByb3RvdHlwZSIpOwogICAg
IGlmIChwcm90b3R5cGVTdHJpbmcuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmgKaW5kZXggMjBl
OTEwYzE2OWVkYmQxNDVlNzE1MjE0ZjMwNmRjODY1N2I4NDk1My4uOWY2NTFlNjg1ZTViNmFiYzNi
MDJkMGZmMzFiOTVlZWVkZDBjZmM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQZXJDb250ZXh0RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4UGVyQ29udGV4dERhdGEuaApAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGluaXQoKTsKIAorICAgIHN0YXRpYyBWOFBlckNvbnRleHREYXRhKiBjdXJyZW50KCk7CisKICAg
ICAvLyBUbyBjcmVhdGUgSlMgV3JhcHBlciBvYmplY3RzLCB3ZSBjcmVhdGUgYSBjYWNoZSBvZiBh
ICdib2lsZXIgcGxhdGUnCiAgICAgLy8gb2JqZWN0LCBhbmQgdGhlbiBzaW1wbHkgQ2xvbmUgdGhh
dCBvYmplY3QgZWFjaCB0aW1lIHdlIG5lZWQgYSBuZXcgb25lLgogICAgIC8vIFRoaXMgaXMgZmFz
dGVyIHRoYW4gZ29pbmcgdGhyb3VnaCB0aGUgZnVsbCBvYmplY3QgY3JlYXRpb24gcHJvY2Vzcy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VGhyb3dFeGNlcHRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhUaHJvd0V4Y2VwdGlvbi5jcHAKaW5k
ZXggYWUzMjUxYzEwZmEyN2FhZGYxNGQyNjc2OTQ4NTdjZTE2MjJlZmY3Ny4uZjBhZGMwMTJmNjRl
YzM3NjQ2OWVkZTM0YWVkOWZmODk5YmJiMWY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhUaHJvd0V4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhUaHJvd0V4Y2VwdGlvbi5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIHZv
aWQgZG9tRXhjZXB0aW9uU3RhY2tTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmEKIAogI2RlZmluZSBUUllfVE9fQ1JFQVRFX0VYQ0VQVElPTihpbnRlcmZh
Y2VOYW1lKSBcCiAgICAgY2FzZSBpbnRlcmZhY2VOYW1lIyNUeXBlOiBcCi0gICAgICAgIGV4Y2Vw
dGlvbiA9IHRvVjgoaW50ZXJmYWNlTmFtZTo6Y3JlYXRlKGRlc2NyaXB0aW9uKSwgdjg6OkNvbnRl
eHQ6OkdldEN1cnJlbnQoKSwgaXNvbGF0ZSk7IFwKKyAgICAgICAgZXhjZXB0aW9uID0gdG9WOChp
bnRlcmZhY2VOYW1lOjpjcmVhdGUoZGVzY3JpcHRpb24pLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
KCksIGlzb2xhdGUpOyBcCiAgICAgICAgIGJyZWFrOwogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhUaHJvd0V4Y2VwdGlvbjo6c2V0RE9NRXhjZXB0aW9uKGludCBlYywgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhC
bG9iQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JD
dXN0b20uY3BwCmluZGV4IGE5MDg0NzUwNGFmOTZkOTE0OTcyOGUzOWVlNGRhYjkxN2U4YWE4MDQu
LmVhMmEzYTFkYWNlNjllZTc2ZDc1NWVmZTFjYThhYzJhYzk0NmVkOWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCkBAIC00Myw3
ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoQmxvYiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEJsb2Iq
IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRo
Q2hlY2soaXNvbGF0ZSk7CkBAIC03MSw3ICs3MSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEJsb2I6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIAog
ICAgIGlmICghYXJncy5MZW5ndGgoKSkgewogICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJs
b2I6OmNyZWF0ZSgpOwotICAgICAgICByZXR1cm4gdG9WOChibG9iLmdldCgpLCBhcmdzLkhvbGRl
cigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgICAgICByZXR1
cm4gdG9WOChibG9iLmdldCgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAg
ICAgfQogCiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZmlyc3RBcmcgPSBhcmdzWzBdOwpAQCAt
MTM4LDcgKzEzOCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEJsb2I6OmNvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICB9CiAKICAgICBSZWZQdHI8
QmxvYj4gYmxvYiA9IGJsb2JCdWlsZGVyLT5nZXRCbG9iKHR5cGUsIEJsb2JDb25zdHJ1Y3RlZEJ5
Q29uc3RydWN0b3IpOwotICAgIHJldHVybiB0b1Y4KGJsb2IuZ2V0KCksIGFyZ3MuSG9sZGVyKCkt
PkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgo
YmxvYi5nZXQoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENTU1J1bGVDdXN0b20uY3BwCmluZGV4IDlmYWQyZDU0ZWM3MTczNTcwYjdkMGRm
OWI4ZTZhYzRmY2MxYjVlN2UuLjhiMTBhZDVjYjA2ODcxNDU1MmU4ODNlNzIyOGE4MWU1M2Y4Yjcz
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1J1
bGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENT
U1J1bGVDdXN0b20uY3BwCkBAIC00Myw3ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQ1NTUnVsZSogaW1wbCwgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KENTU1J1bGUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIWlt
cGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHAK
aW5kZXggNTIzMGJmMzJkYzdiNDNiNGE2MWI0NTQ4OGQ3ODMxNWMyYTYxNzc4Ni4uMjYyZDhlMWVi
M2U5ODQ3M2M0Mjg4MTQ2YmQxNjFlYTIyOTY2MzUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTVmFsdWVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcApAQCAtNDYsNyAr
NDYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KENTU1ZhbHVlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQ1NT
VmFsdWUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51
bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcAppbmRleCAzYjhlNDlkOTk1ZDNmYmI3OWI2ZmFlMTFjN2NlYTY0MTMwZThlNjNhLi40
NmQzMzI0ODNjYzBiYzA1ZGIyMzg3NDM4ODk1NjdmMmE0YWZmMDFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhPYmplY3Qo
Q2FudmFzU3R5bGUqIHN0eWxlLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4T2JqZWN0KENhbnZhc1N0eWxlKiBzdHlsZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmIChzdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKSkKICAgICAgICAgcmV0dXJuIHRvVjgoc3R5bGUtPmNhbnZhc0dyYWRpZW50
KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBQ
YXNzUmVmUHRyPENhbnZhc1N0eWxlPiB0b0NhbnZhc1N0eWxlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSkKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c3Ryb2tlU3R5bGVBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqIGltcGwgPSBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjhPYmplY3QoaW1wbC0+c3Ryb2tlU3R5bGUoKSwgaW5m
by5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gdG9WOE9iamVjdChpbXBsLT5zdHJva2VTdHlsZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZv
LkdldElzb2xhdGUoKSk7CiB9CiAKIHZvaWQgVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0
cm9rZVN0eWxlQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAt
ODgsNyArODgsNyBAQCB2b2lkIFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VTdHls
ZUFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPgogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGVBY2Nlc3NvckdldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
IHsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjhPYmpl
Y3QoaW1wbC0+ZmlsbFN0eWxlKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBp
bmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW1wbC0+ZmlsbFN0eWxl
KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdm9pZCBWOENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFN0eWxlQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcAppbmRleCA2ZGIzM2M1ZTQzNmVmYzk0MGU3NzFkNDJl
NTRkYmViZjhjMjZhYTZjLi5kMjljMWFlMDlmYjM3NmRiY2MwNmRkZTk4NjNmMmVlNWJhOTg5ZGI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xl
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25z
b2xlQ3VzdG9tLmNwcApAQCAtOTIsNyArOTIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhD
b25zb2xlOjptZW1vcnlBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZQog
ewogICAgIElOQ19TVEFUUygiRE9NLkNvbnNvbGUubWVtb3J5QWNjZXNzb3JHZXR0ZXIiKTsKICAg
ICBDb25zb2xlKiBpbXAgPSBWOENvbnNvbGU6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IHJldHVybiB0b1Y4KGltcC0+bWVtb3J5KCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4
dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT5tZW1vcnkoKSwg
aW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhE
T01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCA5YjZhY2M0ODAxYTI5MTg2YzViNjFhOWNkNzhlYTYy
M2ZhMGMxNTdiLi5lNTdjNmQxYjQzZDZlMTE4MGMxZjhhMTdlYzUxODY4NjU4MWU4MTg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRv
d0N1c3RvbS5jcHAKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhE
T01XaW5kb3c6Om9wZW5DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIGlm
ICghb3BlbmVkV2luZG93KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAg
cmV0dXJuIHRvVjgob3BlbmVkV2luZG93LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRp
b25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChvcGVuZWRX
aW5kb3cucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAK
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6aW5kZXhlZFByb3BlcnR5R2V0dGVy
KHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNDgyLDcg
KzQ4Miw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6aW5kZXhlZFByb3Bl
cnR5R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2CiAKICAgICBGcmFtZSogY2hpbGQgPSBm
cmFtZS0+dHJlZSgpLT5zY29wZWRDaGlsZChpbmRleCk7CiAgICAgaWYgKGNoaWxkKQotICAgICAg
ICByZXR1cm4gdG9WOChjaGlsZC0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIGluZm8uSG9sZGVy
KCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgICAgIHJldHVy
biB0b1Y4KGNoaWxkLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgaW5mby5Ib2xkZXIoKSwgaW5m
by5HZXRJc29sYXRlKCkpOwogCiAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CkBAIC01MDQs
NyArNTA0LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjpuYW1lZFByb3Bl
cnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW0KICAgICBBdG9taWNTdHJpbmcgcHJv
cE5hbWUgPSB0b1dlYkNvcmVBdG9taWNTdHJpbmcobmFtZSk7CiAgICAgRnJhbWUqIGNoaWxkID0g
ZnJhbWUtPnRyZWUoKS0+c2NvcGVkQ2hpbGQocHJvcE5hbWUpOwogICAgIGlmIChjaGlsZCkKLSAg
ICAgICAgcmV0dXJuIHRvVjgoY2hpbGQtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCBpbmZvLkhv
bGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICBy
ZXR1cm4gdG9WOChjaGlsZC0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIGluZm8uSG9sZGVyKCks
IGluZm8uR2V0SXNvbGF0ZSgpKTsKIAogICAgIC8vIFNlYXJjaCBJREwgZnVuY3Rpb25zIGRlZmlu
ZWQgaW4gdGhlIHByb3RvdHlwZQogICAgIGlmICghaW5mby5Ib2xkZXIoKS0+R2V0UmVhbE5hbWVk
UHJvcGVydHkobmFtZSkuSXNFbXB0eSgpKQpAQCAtNTE4LDggKzUxOCw4IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtCiAgICAgICAgICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGl0ZW1zID0g
ZG9jLT53aW5kb3dOYW1lZEl0ZW1zKHByb3BOYW1lKTsKICAgICAgICAgICAgIGlmICghaXRlbXMt
PmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGlmIChpdGVtcy0+aGFzRXhhY3RseU9uZUl0
ZW0oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvVjgoaXRlbXMtPml0ZW0oMCksIGlu
Zm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRvVjgoaXRlbXMucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLT5D
cmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdG9WOChpdGVtcy0+aXRlbSgwKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29s
YXRlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KGl0ZW1zLnJlbGVhc2UoKSwgaW5m
by5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtNTk5LDcgKzU5OSw3IEBAIGJvb2wgVjhET01XaW5kb3c6OmluZGV4ZWRTZWN1
cml0eUNoZWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob3N0LCB1aW50MzJfdCBpbmRlCiAgICAg
cmV0dXJuIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEJpbmRpbmdT
dGF0ZTo6aW5zdGFuY2UoKSwgdGFyZ2V0LCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpOwogfQog
Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChET01XaW5kb3cqIHdpbmRvdywgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KERPTVdpbmRvdyogd2luZG93LCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAg
Ly8gTm90aWNlIHRoYXQgd2UgZXhwbGljaXRseSBpZ25vcmUgY3JlYXRpb25Db250ZXh0IGJlY2F1
c2UgdGhlIERPTVdpbmRvdyBpcyBpdHMgb3duIGNyZWF0aW9uQ29udGV4dC4KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YVZpZXdDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YVZpZXdDdXN0b20uY3Bw
CmluZGV4IGVkZDZkZjZmMjk3NTAyNjA1NDMxYjkxNWM1OTdmOTIyMjViODFhOTEuLjZkZTljZThl
MmRjMzVjNTE2OWEzZGVjYjhmY2VjMTY4NDcyNzk1NzkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFWaWV3Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhVmlld0N1c3RvbS5jcHAKQEAgLTU2LDcg
KzU2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RGF0YVZpZXc6OmNvbnN0cnVjdG9yQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1cm4gY29uc3RydWN0V2Vi
R0xBcnJheVdpdGhBcnJheUJ1ZmZlckFyZ3VtZW50PERhdGFWaWV3LCBjaGFyPihhcmdzLCAmaW5m
bywgdjg6OmtFeHRlcm5hbEJ5dGVBcnJheSwgZmFsc2UpOwogfQogCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChEYXRhVmlldyogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KERhdGFWaWV3KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1
cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDEzZGJlNDkzODRj
ZTc5YzNjZGUxM2U5NWEzZTdlNDVhYzMyZjFlODUuLjU5MTE0NGY4YjY1Njg4ZDYzNjgzNWM1MWMy
ZjQ0OTQ4ZWEyNGFlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTkyLDcgKzkyLDcgQEAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4RG9jdW1lbnQ6OmV2YWx1YXRlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24o
ZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNl
KCksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7
CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5H
ZXRJc29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEb2N1bWVudDo6Z2V0
Q1NTQ2FudmFzQ29udGV4dENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0x
MDgsMTYgKzEwOCwxNiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEb2N1bWVudDo6Z2V0Q1NT
Q2FudmFzQ29udGV4dENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudAogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIGlmIChyZXN1bHQtPmlzMmQo
KSkKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEKj4ocmVzdWx0KSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEKj4ocmVzdWx0KSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkp
OwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBlbHNlIGlmIChyZXN1bHQtPmlzM2QoKSkKLSAgICAg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4ocmVzdWx0
KSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
KyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4o
cmVzdWx0KSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChEb2N1bWVudCogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KERvY3VtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYmplY3QpCiB7CiAgICAgaWYgKCFp
bXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwpAQCAtMTQ3LDcg
KzE0Nyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERvY3VtZW50OjpjcmVhdGVUb3VjaExp
c3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhCiAgICAgICAgIHRvdWNoTGlzdC0+YXBw
ZW5kKHRvdWNoKTsKICAgICB9CiAKLSAgICByZXR1cm4gdG9WOCh0b3VjaExpc3QucmVsZWFzZSgp
LCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOwor
ICAgIHJldHVybiB0b1Y4KHRvdWNoTGlzdC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExvY2F0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20uY3BwCmlu
ZGV4IDEwOGMxOTFjNzMxMjg2NTFjMWY4MGVhMzg0OGZjZmU2ZjNlZmM5MGQuLjgzYmNlYjczZGM4
OWMyMzY3NGViNjc2MDVlZjMxZjc1OGQyODZjMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20u
Y3BwCkBAIC00MCw3ICs0MCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERvY3VtZW50Ojps
b2NhdGlvbkFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuCiAgICAgICAgIHJl
dHVybiB2ODo6TnVsbChpbmZvLkdldElzb2xhdGUoKSk7CiAKICAgICBET01XaW5kb3cqIHdpbmRv
dyA9IGRvY3VtZW50LT5kb21XaW5kb3coKTsKLSAgICByZXR1cm4gdG9WOCh3aW5kb3ctPmxvY2F0
aW9uKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUo
KSk7CisgICAgcmV0dXJuIHRvVjgod2luZG93LT5sb2NhdGlvbigpLCBpbmZvLkhvbGRlcigpLCBp
bmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHZvaWQgVjhEb2N1bWVudDo6bG9jYXRpb25BY2Nlc3Nv
clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeUN1c3RvbS5jcHAKaW5kZXggYzRhMzg5YThm
NzQ4OWU3ODg4ZmJjNjQwYzE3ZjRlNTIxYzBiMTE2Ny4uYjM1ZTEzMzJhNGZiNWZjY2Y1MzgwYWRk
ZGNlMzU1YTk4MGZhNWYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RW50cnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEVudHJ5Q3VzdG9tLmNwcApAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEVudHJ5KiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRW50cnkqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBp
ZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeVN5bmNDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RW50cnlTeW5jQ3Vz
dG9tLmNwcAppbmRleCBhODk2ZThkM2VlNjZmYzMwMGRjMmYyY2EzOTg0MjFjM2Q2ZjYxZjE1Li41
NDVkZDFmYzg1OTdiMGE5ODU4OGI2MTE1ZTM4NDU1OTQyN2U0ODAxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeVN5bmNDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVudHJ5U3luY0N1c3RvbS5jcHAK
QEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChFbnRyeVN5bmMqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChFbnRyeVN5bmMqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25D
b250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAg
IHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAKaW5kZXggZWY1NWUxYmE2Yjhi
MzAwN2Q5YzdkNmNlMzQ3MzhjODY0MTVhZjU1NS4uNzVlNmJiY2JlYjE4YzQyZDdhMjJiMWQ2NmQ0
N2NjZDc4YmY4NTUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RXZlbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcApAQCAtNTMsNyArNTMsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhFdmVudDo6ZGF0YVRyYW5zZmVyQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+CiAgICAgRXZlbnQqIGV2ZW50ID0gVjhFdmVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7CiAKICAgICBpZiAoZXZlbnQtPmlzRHJhZ0V2ZW50KCkpCi0gICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpLCBpbmZvLkhvbGRl
cigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5jbGlwYm9hcmQoKSwgaW5m
by5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKIH0KQEAgLTYzLDcgKzYzLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RXZlbnQ6
OmNsaXBib2FyZERhdGFBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBF
dmVudCogZXZlbnQgPSBWOEV2ZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKIAogICAgIGlm
IChldmVudC0+aXNDbGlwYm9hcmRFdmVudCgpKQotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxDbGlwYm9hcmRFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCksIGluZm8uSG9sZGVyKCkt
PkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PENsaXBib2FyZEV2ZW50Kj4oZXZlbnQpLT5jbGlwYm9hcmQoKSwgaW5m
by5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKIH0KQEAgLTcyLDcgKzcyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RXZlbnQ6
OmNsaXBib2FyZERhdGFBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBp
ZiAoZXZlbnROYW1lcygpLmludGVyZmFjZUZvciMjaW50ZXJmYWNlTmFtZSA9PSBkZXNpcmVkSW50
ZXJmYWNlKSBcCiAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PGludGVyZmFjZU5hbWUq
PihldmVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAKLXY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KEV2ZW50KiBldmVudCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25D
b250ZXh0LCB2ODo6SXNvbGF0ZSAqaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KEV2ZW50KiBldmVudCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlICppc29sYXRlKQogewogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiB2
OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20uY3BwCmluZGV4IDIzYmRjZmI4Mjhm
YTNkOTVhODQ0ZDMzMjg5ODI1YzUzMTY0MjE0N2YuLmI0OWExNTNlN2UxYzUzZGFmMThkMjY0MDli
MzRkNjUzOTBiYjdkOWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20uY3BwCkBAIC00Niw3ICs0Niw3IEBAIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOEZpbGVSZWFkZXI6OnJlc3VsdEFjY2Vzc29yR2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBp
bmZvLkhvbGRlcigpOwogICAgIEZpbGVSZWFkZXIqIGltcCA9IFY4RmlsZVJlYWRlcjo6dG9OYXRp
dmUoaG9sZGVyKTsKICAgICBpZiAoaW1wLT5yZWFkVHlwZSgpID09IEZpbGVSZWFkZXJMb2FkZXI6
OlJlYWRBc0FycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gdG9WOChpbXAtPmFycmF5QnVmZmVy
UmVzdWx0KCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xh
dGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGltcC0+YXJyYXlCdWZmZXJSZXN1bHQoKSwgaW5m
by5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogICAgIHJldHVybiB2OFN0cmluZ09yTnVs
bChpbXAtPnN0cmluZ1Jlc3VsdCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBbGxDb2xsZWN0aW9u
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBbGxD
b2xsZWN0aW9uQ3VzdG9tLmNwcAppbmRleCA2MzE1NTMzODJjYzhkZTFjMzY0M2Q0YzMxNDg0YWY1
NmM4MDg4NWYxLi42MjcwNThjMTg4M2U2MGRiYmYzOWEzN2RmYmQzNWQ4MjI5OTVjZTJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVj
dGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROYW1lZEl0ZW1z
KEhUTUxBbGxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBBdG9taWNTdHJpbmcgbmFtZSwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
K3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TmFtZWRJdGVtcyhIVE1MQWxsQ29sbGVj
dGlvbiogY29sbGVjdGlvbiwgQXRvbWljU3RyaW5nIG5hbWUsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBWZWN0b3I8
UmVmUHRyPE5vZGU+ID4gbmFtZWRJdGVtczsKICAgICBjb2xsZWN0aW9uLT5uYW1lZEl0ZW1zKG5h
bWUsIG5hbWVkSXRlbXMpOwpAQCAtNTQsNyArNTQsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGdldE5hbWVkSXRlbXMoSFRNTEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIEF0b21p
YwogICAgIHJldHVybiB0b1Y4KFY4TmFtZWROb2Rlc0NvbGxlY3Rpb246OmNyZWF0ZShuYW1lZEl0
ZW1zKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBnZXRJdGVtKEhUTUxBbGxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gYXJndW1lbnQsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGdldEl0ZW0oSFRNTEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBhcmd1bWVudCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpMb2NhbDx2ODo6VWludDMyPiBpbmRl
eCA9IGFyZ3VtZW50LT5Ub0FycmF5SW5kZXgoKTsKICAgICBpZiAoaW5kZXguSXNFbXB0eSgpKSB7
CkBAIC04MCwyMSArODAsMjEgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEFsbENvbGxl
Y3Rpb246Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHIKICAgICAgICAgcmV0
dXJuIHY4VW5kZWZpbmVkKCk7CiAKICAgICBIVE1MQWxsQ29sbGVjdGlvbiogaW1wID0gVjhIVE1M
QWxsQ29sbGVjdGlvbjo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIGdldE5h
bWVkSXRlbXMoaW1wLCB0b1dlYkNvcmVBdG9taWNTdHJpbmcobmFtZSksIGluZm8uSG9sZGVyKCkt
PkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIGdldE5h
bWVkSXRlbXMoaW1wLCB0b1dlYkNvcmVBdG9taWNTdHJpbmcobmFtZSksIGluZm8uSG9sZGVyKCks
IGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEFs
bENvbGxlY3Rpb246Oml0ZW1DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIElOQ19TVEFUUygiRE9NLkhUTUxBbGxDb2xsZWN0aW9uLml0ZW0oKSIpOwogICAgIEhUTUxB
bGxDb2xsZWN0aW9uKiBpbXAgPSBWOEhUTUxBbGxDb2xsZWN0aW9uOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKLSAgICByZXR1cm4gZ2V0SXRlbShpbXAsIGFyZ3NbMF0sIGFyZ3MuSG9sZGVyKCkt
PkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIGdldEl0
ZW0oaW1wLCBhcmdzWzBdLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAK
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1DYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkhU
TUxBbGxDb2xsZWN0aW9uLm5hbWVkSXRlbSgpIik7CiAgICAgSFRNTEFsbENvbGxlY3Rpb24qIGlt
cCA9IFY4SFRNTEFsbENvbGxlY3Rpb246OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBnZXROYW1lZEl0ZW1zKGltcCwgdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5H
ZXRJc29sYXRlKCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBnZXROYW1l
ZEl0ZW1zKGltcCwgdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCBhcmdzLkhvbGRlcigpLCBhcmdz
LkdldElzb2xhdGUoKSk7CiAKICAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTExMSw3ICsxMTEsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIVE1MQWxsQ29sbGVjdGlvbjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayhjb25zdCB2
ODo6QXJndQogICAgIEhUTUxBbGxDb2xsZWN0aW9uKiBpbXAgPSBWOEhUTUxBbGxDb2xsZWN0aW9u
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDEp
Ci0gICAgICAgIHJldHVybiBnZXRJdGVtKGltcCwgYXJnc1swXSwgYXJncy5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIGdldEl0
ZW0oaW1wLCBhcmdzWzBdLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAKICAg
ICAvLyBJZiB0aGVyZSBpcyBhIHNlY29uZCBhcmd1bWVudCBpdCBpcyB0aGUgaW5kZXggb2YgdGhl
IGl0ZW0gd2Ugd2FudC4KICAgICBTdHJpbmcgbmFtZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQWxsQ29s
bGVjdGlvbjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndQogICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgaWYgKE5vZGUqIG5vZGUgPSBpbXAtPm5hbWVk
SXRlbVdpdGhJbmRleChuYW1lLCBpbmRleC0+VWludDMyVmFsdWUoKSkpCi0gICAgICAgIHJldHVy
biB0b1Y4KG5vZGUsIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElz
b2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KG5vZGUsIGFyZ3MuSG9sZGVyKCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKIAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggNzM3OTA1ZTRjZTBjODY1NzVjZDFlODA5ZDlmOTRk
MzYwYmQxNjJkOC4uYWI2Yzc1YWI5NWI1YzQ2MWNlMjQ3NDQwMGYxNjFjNTczNjBjODk4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcApAQCAtODcsNyArODcsNyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dENhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudAogICAgICAgICByZXR1cm4gdjg6Ok51bGwoYXJncy5HZXRJc29sYXRlKCkp
OwogCiAgICAgaWYgKHJlc3VsdC0+aXMyZCgpKQotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihyZXN1bHQpLCBhcmdzLkhvbGRlcigpLT5D
cmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgICAgICByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihyZXN1bHQpLCBhcmdzLkhv
bGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGVsc2Ug
aWYgKHJlc3VsdC0+aXMzZCgpKSB7CiAgICAgICAgIC8vIDNEIGNhbnZhcyBjb250ZXh0cyBjYW4g
aG9sZCBvbiB0byBsb3RzIG9mIEdQVSByZXNvdXJjZXMsIGFuZCB3ZSB3YW50IHRvIHRha2UgYW4K
QEAgLTk2LDcgKzk2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENhbnZhc0VsZW1l
bnQ6OmdldENvbnRleHRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnQKICAgICAgICAgVjhQZXJJ
c29sYXRlRGF0YSogcGVySXNvbGF0ZURhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgcGVySXNvbGF0ZURhdGEtPnNldFNob3VsZENvbGxl
Y3RHYXJiYWdlU29vbigpOwogCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFJlc3Vs
dCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4ocmVzdWx0KSwgYXJn
cy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4UmVzdWx0ID0gdG9WOChzdGF0aWNfY2FzdDxXZWJH
TFJlbmRlcmluZ0NvbnRleHQqPihyZXN1bHQpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xh
dGUoKSk7CiAgICAgICAgIGlmIChJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5k
cygpKSB7CiAgICAgICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0
ZTo6Zm9yQ29udGV4dCh2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKTsKICAgICAgICAgICAgIFNj
cmlwdE9iamVjdCBnbENvbnRleHQoc2NyaXB0U3RhdGUsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QodjhSZXN1bHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAppbmRleCBjY2JmNjM4YjBj
NTY5YmUyNmY3ODJkMThlY2M5YzM2ZjQ1YjQwMWU3Li5kYmZmMjkyNDYxOTNkYzUyNGViMjY5M2E5
MDc0ODJkYTYxODZmNzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCkBAIC00Miw3ICs0Miw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBnZXROYW1lZEl0ZW1zKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBBdG9taWNTdHJpbmcg
bmFtZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSkKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TmFtZWRJdGVtcyhI
VE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgQXRvbWljU3RyaW5nIG5hbWUsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAg
ICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbmFtZWRJdGVtczsKICAgICBjb2xsZWN0aW9uLT5uYW1l
ZEl0ZW1zKG5hbWUsIG5hbWVkSXRlbXMpOwpAQCAtNjksMTQgKzY5LDE0IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOEhUTUxDb2xsZWN0aW9uOjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogCiAgICAgSFRNTENv
bGxlY3Rpb24qIGltcCA9IFY4SFRNTENvbGxlY3Rpb246OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OwotICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGltcCwgdG9XZWJDb3JlQXRvbWljU3RyaW5nKG5h
bWUpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkp
OworICAgIHJldHVybiBnZXROYW1lZEl0ZW1zKGltcCwgdG9XZWJDb3JlQXRvbWljU3RyaW5nKG5h
bWUpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1DYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxDb2xsZWN0aW9uLm5h
bWVkSXRlbSgpIik7CiAgICAgSFRNTENvbGxlY3Rpb24qIGltcCA9IFY4SFRNTENvbGxlY3Rpb246
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1
bHQgPSBnZXROYW1lZEl0ZW1zKGltcCwgdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCBhcmdzLkhv
bGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBnZXROYW1lZEl0ZW1zKGltcCwgdG9XZWJDb3JlU3Ry
aW5nKGFyZ3NbMF0pLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAKICAgICBp
ZiAocmVzdWx0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAg
LTg0LDcgKzg0LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENvbGxlY3Rpb246Om5h
bWVkSXRlbUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGEKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChIVE1MQ29sbGVjdGlvbiogaW1wbCwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxDb2xsZWN0aW9uKiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCiB7CiAgICAgaWYgKGltcGwtPnR5cGUoKSA9PSBEb2NBbGwpCiAgICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PEhUTUxBbGxDb2xsZWN0aW9uKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAppbmRleCAzYjI0NzBlMDIzZGY3ZjBlYTA5
N2NlMDFkZWJmMDVhN2FmZDNlMWJjLi5jYTM5NzU0N2RiMDQxMzIyYWJmNWZlMWY3YTczZGUwMjdl
ZDE4OWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MRG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IFY4SFRNTERvY3VtZW50Ojp3cmFwSW5TaGFkb3dPYmplY3Qodjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IHcKICAgICByZXR1cm4gc2hhZG93OwogfQogCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIVE1MRG9jdW1lbnQ6OmdldE5hbWVkUHJvcGVydHkoSFRNTERvY3VtZW50KiBodG1s
RG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4SFRNTERvY3VtZW50OjpnZXROYW1lZFByb3BlcnR5KEhUTUxEb2N1bWVudCogaHRt
bERvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghaHRt
bERvY3VtZW50LT5oYXNOYW1lZEl0ZW0oa2V5LmltcGwoKSkgJiYgIWh0bWxEb2N1bWVudC0+aGFz
RXh0cmFOYW1lZEl0ZW0oa2V5LmltcGwoKSkpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgp
OwpAQCAtMTcxLDcgKzE3MSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxEb2N1bWVu
dDo6YWxsQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiAgICAgSU5DX1NU
QVRTKCJET00uSFRNTERvY3VtZW50LmFsbC5fZ2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwogICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3Vt
ZW50ID0gVjhIVE1MRG9jdW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7Ci0gICAgcmV0dXJuIHRvVjgo
aHRtbERvY3VtZW50LT5hbGwoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChodG1sRG9jdW1lbnQtPmFsbCgpLCBp
bmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHZvaWQgVjhIVE1MRG9jdW1l
bnQ6OmFsbEFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTE4
MCw3ICsxODAsNyBAQCB2b2lkIFY4SFRNTERvY3VtZW50OjphbGxBY2Nlc3NvclNldHRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OgogICAgIGluZm8uVGhpcygpLT5G
b3JjZVNldChuYW1lLCB2YWx1ZSk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhU
TUxEb2N1bWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3Y4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KEhUTUxEb2N1bWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGZvcmNlTmV3T2Jq
ZWN0KQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhp
c29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA5ZmU0ODRlNjdjYjFkMTY2NjllZGVlMTM2
MWNkODJkZjRhM2Y1ZDQwLi4yNTFmNzYyMmM4Y2JkNjg5OTBmODlkMmZjNjkyMGFhZTAxMGRhYzc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRWxl
bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTEVsZW1lbnRDdXN0b20uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUsIGJvb2wgZm9yY2VOZXdPYmplY3QpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChIVE1M
RWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGZvcmNlTmV3T2JqZWN0KQogewogICAgIGlmICghaW1w
bCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKQEAgLTUxLDcgKzUx
LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ28KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhU
TUxFbGVtZW50OjppdGVtVmFsdWVBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBIVE1MRWxlbWVudCog
aW1wbCA9IFY4SFRNTEVsZW1lbnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVy
biB0b1Y4KGltcGwtPml0ZW1WYWx1ZSgpLmdldCgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcGwtPml0ZW1W
YWx1ZSgpLmdldCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHZv
aWQgVjhIVE1MRWxlbWVudDo6aXRlbVZhbHVlQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggNzkyYjNkMGExMTZh
MTJkMGE5YzIzOWM4MTE1NmVkYzM1OTJkODg2Mi4uYWM5YjlhZmUyOGQwYTBmZmQxZTgyMGNkZDg5
NWZiNGU3MzYxZjYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwCkBAIC00OCw3ICs0OCw3
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxGb3JtRWxlbWVudDo6aW5kZXhlZFByb3Bl
cnR5R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjCiAgICAgUmVmUHRyPE5vZGU+IGZvcm1FbGVtZW50
ID0gZm9ybS0+ZWxlbWVudHMoKS0+aXRlbShpbmRleCk7CiAgICAgaWYgKCFmb3JtRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHRvVjgoZm9ybUVsZW1l
bnQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJ
c29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGZvcm1FbGVtZW50LnJlbGVhc2UoKSwgaW5mby5I
b2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhIVE1MRm9ybUVsZW1lbnQ6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC03NCw5ICs3NCw5IEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxGb3JtRWxlbWVudDo6bmFtZWRQcm9wZXJ0eUdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluCiAgICAgQVNTRVJUKCFlbGVtZW50cy5pc0VtcHR5KCkp
OwogCiAgICAgaWYgKGVsZW1lbnRzLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gdG9WOChl
bGVtZW50cy5hdCgwKS5yZWxlYXNlKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgp
LCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGVsZW1lbnRzLmF0KDAp
LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogCi0gICAgcmV0
dXJuIHRvVjgoVjhOYW1lZE5vZGVzQ29sbGVjdGlvbjo6Y3JlYXRlKGVsZW1lbnRzKSwgaW5mby5I
b2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1
cm4gdG9WOChWOE5hbWVkTm9kZXNDb2xsZWN0aW9uOjpjcmVhdGUoZWxlbWVudHMpLCBpbmZvLkhv
bGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFt
ZVNldEVsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKaW5kZXggMDBjZGMzZDFjYmFmYTZiNDJh
MmM4ZTIzNDljNjUxNDNmMGI1YmFiNi4uZjhiZjM1NThmMzMxOTE3YjJlNTJlYzNlY2JmNzlkNzc2
N2MzMzdhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKQEAgLTU4LDcgKzU4
LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEZyYW1lU2V0RWxlbWVudDo6bmFtZWRQ
cm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlMKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVk
KCk7CiAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZp
bmVkKCk7Ci0gICAgcmV0dXJuIHRvVjgoZG9jdW1lbnQtPmRvbVdpbmRvdygpLCBpbmZvLkhvbGRl
cigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0
b1Y4KGRvY3VtZW50LT5kb21XaW5kb3coKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENv
bnN0cnVjdG9yLmNwcAppbmRleCAxYTk2NzgyYTg2MTQzZDA2YWE5MzJjYzI3ZGU1YTc3ZjYxNGYw
YThhLi45ZThkZmU4MzAzOTczM2E3OWE4MzlkM2VlOWIwOGVkMmNlMTM5MzQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNr
KGNvbnN0IHY4OjpBcmcKICAgICAvLyBGSVhNRTogVGhlIGNvcnJlY3Qgd2F5IHRvIGRvIHRoaXMg
d291bGQgYmUgdG8gbWFrZSBIVE1MSW1hZ2VFbGVtZW50IGRlcml2ZSBmcm9tCiAgICAgLy8gQWN0
aXZlRE9NT2JqZWN0IGFuZCB1c2UgaXRzIGludGVyZmFjZSB0byBrZWVwIGl0cyB3cmFwcGVyIGFs
aXZlLiBUaGVuIHdlIHdvdWxkCiAgICAgLy8gcmVtb3ZlIHRoaXMgY29kZSBhbmQgdGhlIHNwZWNp
YWwgY2FzZSBpbiBpc09ic2VydmFibGVUaHJvdWdoRE9NLgotICAgIHRvVjgoZG9jdW1lbnQsIGFy
Z3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAg
dG9WOChkb2N1bWVudCwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogCiAgICAg
aW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTExpbmtFbGVtZW50Q3VzdG9tLmNwcAppbmRl
eCAyMDhmNWU0NjdiNDg2MmJlMzJkMzg3MjczY2ZiNzY0ODZiNmI2NjVmLi42OTlmODc1MmM3MmI0
NDgxN2ZlODc3MjkxOTQ5M2FkNzZkMDYyYWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAK
QEAgLTQxLDcgKzQxLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTExpbmtFbGVtZW50
OjpzaXplc0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW4KIHsKICAgICBJTkNfU1RB
VFMoIkRPTS5IVE1MTGlua0VsZW1lbnQuc2l6ZXMuX2dldCIpOwogICAgIEhUTUxMaW5rRWxlbWVu
dCogaW1wID0gVjhIVE1MTGlua0VsZW1lbnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IHJldHVybiB0b1Y4KGltcC0+c2l6ZXMoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChpbXAtPnNpemVzKCksIGlu
Zm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdm9pZCBWOEhUTUxMaW5rRWxl
bWVudDo6c2l6ZXNBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9u
c0NvbGxlY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAppbmRleCAxZTY5YTRiYTdjMzRmMDZm
NzdhZjExNWNhYjFmOWU1NTRiOGU4NmFjLi40MzdkN2Q0ODYzMGI0NDJmNDU1YTk3NDZiZTVmNTU4
ZTFjMjM4MWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAKQEAgLTEy
MCw3ICsxMjAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MT3B0aW9uc0NvbGxlY3Rp
b246OmluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbgogICAgIGlmICghcmVzdWx0KQog
ICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5y
ZWxlYXNlKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xh
dGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKSwg
aW5mby5HZXRJc29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MT3B0
aW9uc0NvbGxlY3Rpb246OmluZGV4ZWRQcm9wZXJ0eVNldHRlcih1aW50MzJfdCBpbmRleCwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3V0cHV0
RWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MT3V0cHV0RWxlbWVudEN1c3RvbS5jcHAKaW5kZXggNjk0YmYwNGE4YmYyOGNjNGRmZGM3MzM2
MTUxMDBhMjQwZmNhOGE2OC4uYmE1MWExZDE3MjFjMzRjZmI1NDg4YmZlNThiMjI1OTk2MDYyOGYx
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE91
dHB1dEVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxPdXRwdXRFbGVtZW50Q3VzdG9tLmNwcApAQCAtNDEsNyArNDEsNyBAQCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MT3V0cHV0RWxlbWVudDo6aHRtbEZvckFjY2Vzc29yR2V0
dGVyKHY4OjpMb2NhbDx2ODo6UwogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxPdXRwdXRFbGVt
ZW50Lmh0bWxGb3IuX2dldCIpOwogICAgIEhUTUxPdXRwdXRFbGVtZW50KiBpbXAgPSBWOEhUTUxP
dXRwdXRFbGVtZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChp
bXAtPmh0bWxGb3IoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0
SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChpbXAtPmh0bWxGb3IoKSwgaW5mby5Ib2xkZXIo
KSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiB2b2lkIFY4SFRNTE91dHB1dEVsZW1lbnQ6Omh0
bWxGb3JBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVu
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2Vs
ZWN0RWxlbWVudEN1c3RvbS5jcHAKaW5kZXggZjI3YWFmYjFhNDY4MWI2YTI1ZDAwY2EyZjg1MDAx
Y2NiODk3ODJiZS4uOTE5YzkxMzUwNjA1MDg4NmIzMWFjZDE5MTQ3YjA2ZDBiOWIyNDRhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVs
ZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcApAQCAtNTIsNyArNTIsNyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKHVp
bnQzMl90IGluZGV4LAogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gdjhVbmRlZmlu
ZWQoKTsKIAotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGluZm8uSG9sZGVyKCkt
PkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgo
cmVzdWx0LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQog
CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhlZFByb3Bl
cnR5U2V0dGVyKHVpbnQzMl90IGluZGV4LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOElEQkFueUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhJREJBbnlDdXN0b20uY3BwCmluZGV4IDExNjUwMWIzODUzZGRjNjhk
NzIzMDZlMTE4YTg2ZDFmYTRlMjU2NWQuLmU2MjU3ZWVjMzdmNmExMTJjMDY1Mzg0YTIwMWQ5ZmFh
N2U4MzY3YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OElEQkFueUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SURCQW55Q3VzdG9tLmNwcApAQCAtNDUsNyArNDUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KElEQkFueSogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KElEQkFueSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICgh
aW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQktleUN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJLZXlDdXN0b20uY3BwCmlu
ZGV4IGMwYjk3OWJhY2JiMWRlODcxNTNmMjY0YTAzMGIyODRkY2Y3MGY2MjIuLjIzNDAwMzE0NzBm
ZTQ1OGFlNjJlN2E5MDNmMTE1N2NhZWJmOWYyOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQktleUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCS2V5Q3VzdG9tLmNwcApAQCAtMzgsNyArMzgsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KElE
QktleSoga2V5LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSURCS2V5KiBrZXks
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKIHsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhp
c29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEltYWdlRGF0YUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhJbWFnZURhdGFDdXN0b20uY3BwCmluZGV4IDFiOTQ2OWM4M2FiMWRjNjQ1NDVhYjE0M2JkYzIx
NDAzMWE0ZmI3YzYuLjg5MGU0MTI2YWIxOWYxODYzZTRhMDhhNmUwNWU5ZWMxMzUzODc4ZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEltYWdlRGF0YUN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW1hZ2VE
YXRhQ3VzdG9tLmNwcApAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEltYWdlRGF0YSogaW1wbCwgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KEltYWdlRGF0YSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICgh
aW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNw
cAppbmRleCA1MzJlMDNhZWZhZjE2OWY1MjM5MTViMDhhNjE5YzE5NjIzZTc2YzZlLi40NWZkY2U3
OWIyNGNkYzBlZjdjMjZkYjgyOWE2YTYwYTA1ZmE2ODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCkBAIC0yNzAs
NyArMjcwLDcgQEAgYm9vbCBWOExvY2F0aW9uOjpuYW1lZFNlY3VyaXR5Q2hlY2sodjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IGhvc3QsIHY4OjpMb2NhbDx2ODo6VmEKICAgICByZXR1cm4gQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoQmluZGluZ1N0YXRlOjppbnN0YW5jZSgp
LCBpbXAtPmZyYW1lKCksIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcik7CiB9CiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KExvY2F0aW9uKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoTG9jYXRpb24qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAg
ICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29u
c3RydWN0b3IuY3BwCmluZGV4IDgwZjUzZjVhZTllMTAwM2NhMmExOWY2ODM1YzZjMmZjMGIxMmMy
OTkuLjc4Y2Y0ZjMxOWY2ZjY4YTJiZDIzNGFhN2ZhYzZhNmFmNWIwNGE5OWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3Nh
Z2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCkBAIC02OSw4ICs2OSw4IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOE1lc3NhZ2VDaGFubmVsOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmCiAgICAgLy8gQ3JlYXRlIHJlZmVyZW5jZXMgZnJvbSB0aGUgTWVzc2FnZUNoYW5u
ZWwgd3JhcHBlciB0byB0aGUgdHdvCiAgICAgLy8gTWVzc2FnZVBvcnQgd3JhcHBlcnMgdG8gbWFr
ZSBzdXJlIHRoYXQgdGhlIE1lc3NhZ2VQb3J0IHdyYXBwZXJzCiAgICAgLy8gc3RheSBhbGl2ZSBh
cyBsb25nIGFzIHRoZSBNZXNzYWdlQ2hhbm5lbCB3cmFwcGVyIGlzIGFyb3VuZC4KLSAgICBWOERP
TVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNlKG1lc3NhZ2VDaGFubmVsLCAicG9ydDEi
LCB0b1Y4KG9iai0+cG9ydDEoKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFy
Z3MuR2V0SXNvbGF0ZSgpKSk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXROYW1lZEhpZGRlblJlZmVy
ZW5jZShtZXNzYWdlQ2hhbm5lbCwgInBvcnQyIiwgdG9WOChvYmotPnBvcnQyKCksIGFyZ3MuSG9s
ZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSkpOworICAgIFY4RE9N
V3JhcHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2UobWVzc2FnZUNoYW5uZWwsICJwb3J0MSIs
IHRvVjgob2JqLT5wb3J0MSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSkpOwor
ICAgIFY4RE9NV3JhcHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2UobWVzc2FnZUNoYW5uZWws
ICJwb3J0MiIsIHRvVjgob2JqLT5wb3J0MigpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xh
dGUoKSkpOwogCiAgICAgLy8gU2V0dXAgdGhlIHN0YW5kYXJkIHdyYXBwZXIgb2JqZWN0IGludGVy
bmFsIGZpZWxkcy4KICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIobWVzc2FnZUNoYW5u
ZWwsICZpbmZvLCBvYmouZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VFdmVudEN1c3RvbS5jcHAKaW5kZXggMzExYzYxZTFk
OGY2YjFkNmY0NWU4MGZjZTVhMzJiZGFiZDFjNWIzZi4uNmU1YmM1NjdjMmZiNzg2OGQ3YWE2OGI1
ZWZiMmQwYmRlNDJkN2ViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0b20uY3BwCkBAIC03MiwxMSArNzIsMTEg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TWVzc2FnZUV2ZW50OjpkYXRhQWNjZXNzb3JHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG4KICAgICB9CiAKICAgICBjYXNlIE1lc3NhZ2VFdmVu
dDo6RGF0YVR5cGVCbG9iOgotICAgICAgICByZXN1bHQgPSB0b1Y4KGV2ZW50LT5kYXRhQXNCbG9i
KCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7
CisgICAgICAgIHJlc3VsdCA9IHRvVjgoZXZlbnQtPmRhdGFBc0Jsb2IoKSwgaW5mby5Ib2xkZXIo
KSwgaW5mby5HZXRJc29sYXRlKCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTWVzc2Fn
ZUV2ZW50OjpEYXRhVHlwZUFycmF5QnVmZmVyOgotICAgICAgICByZXN1bHQgPSB0b1Y4KGV2ZW50
LT5kYXRhQXNBcnJheUJ1ZmZlcigpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwg
aW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICByZXN1bHQgPSB0b1Y4KGV2ZW50LT5kYXRhQXNB
cnJheUJ1ZmZlcigpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMTAwLDcgKzEwMCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOE1lc3NhZ2VFdmVudDo6cG9ydHNBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4KIAogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9IHY4OjpBcnJheTo6TmV3
KHBvcnRzQ29weS5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9ydHNDb3B5
LnNpemUoKTsgKytpKQotICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5H
ZXRJc29sYXRlKCkpLCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKSk7CisgICAgICAgIHBvcnRBcnJheS0+
U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHRvVjgocG9ydHNDb3B5W2ldLmdl
dCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSkpOwogCiAgICAgcmV0dXJuIHBv
cnRBcnJheTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE1pY3JvRGF0YUl0ZW1WYWx1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhNaWNyb0RhdGFJdGVtVmFsdWVDdXN0b20uY3BwCmluZGV4IGM5M2ZjZTk1
OWY3NTg2NmQzOTIxYmI4NWE4M2E2MjQ4ZDUwNjg3YjUuLjZjMjg0NDc0ODU3N2NiNTMyZDUwYWRi
M2QxMzM0NDAwM2FjOGExYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE1pY3JvRGF0YUl0ZW1WYWx1ZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWljcm9EYXRhSXRlbVZhbHVlQ3VzdG9tLmNwcApAQCAt
MzksNyArMzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KE1pY3JvRGF0YUl0ZW1WYWx1ZSogaXRlbVZhbHVlLCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoTWljcm9EYXRhSXRlbVZhbHVlKiBpdGVtVmFsdWUsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsK
ICAgICBpZiAoIWl0ZW1WYWx1ZSkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFw
Q3VzdG9tLmNwcAppbmRleCBhNTYzMTE5NGVlZjZjOWJmOGRkZDc2ZjFjYmI3NTY4ZWQ5ZDkyNmEw
Li5hNWI5ZjI0YmI4OTk2N2IzOTZiNGFjNTZiZTNjMjY2ZjdmM2RhZjM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1
c3RvbS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TmFtZWRO
b2RlTWFwOjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnMKICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4g
dG9WOChyZXN1bHQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwg
aW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGlu
Zm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4TmFtZWROb2RlTWFwOjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNjcsNyArNjcsNyBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOYW1lZE5vZGVNYXA6Om5hbWVkUHJvcGVydHlHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVy
biB2OFVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5m
by5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xh
dGUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAKaW5kZXggMjRiMDEyMDdhMjg2
Y2NjM2JhZTliYWExMGM5YTRlYzIyMGI4MTk0MS4uNmVmNDZkYWY3ODY3M2M3ZGI4MTQzZjRkMDcy
Nzc3N2Y0YTk4NTNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUN1c3RvbS5jcHAKQEAgLTEyNSw3ICsxMjUsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhOb2RlOjphcHBlbmRDaGlsZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpCiAgICAgcmV0dXJuIHY4OjpOdWxsKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjhTbG93KE5vZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdP
YmplY3QpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOFNsb3coTm9kZSogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBi
b29sIGZvcmNlTmV3T2JqZWN0KQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4
TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcAppbmRleCAwNTJhNDlkZTllY2FlMjkx
YzFiODU2OWU1OWE5MTY5YzEyZTVlOTI1Li40ZThjYjU1Nzk0NTgzNjJhOTdkOTM1NTA0MDcxN2Qw
NjlhZTAyOTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhOb2RlTGlzdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCkBAIC01Niw3ICs1Niw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOE5vZGVMaXN0OjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgp
OwogCi0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1
bHQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHZv
aWQgVjhOb2RlTGlzdDo6dmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQq
IG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRp
b25DZW50ZXJDdXN0b20uY3BwCmluZGV4IGVmYTU1Njc3YjJhZTJmZmFmZDE4NjViNmU1YmEyYzI0
OTI0YWQwZDEuLjA5OTFmYjE4OGJjNDY5MGE2OTQyOTU4YTEyYjk1Zjk4NmZkODExYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNl
bnRlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcApAQCAtNTksNyArNTksNyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhOb3RpZmljYXRpb25DZW50ZXI6OmNyZWF0ZUhUTUxOb3RpZmljYXRpb25D
YWxsYmFjayhjb25zdAogICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdl
dElzb2xhdGUoKSk7CiAKICAgICBub3RpZmljYXRpb24tPnJlZigpOwotICAgIHJldHVybiB0b1Y4
KG5vdGlmaWNhdGlvbi5nZXQoKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChub3RpZmljYXRpb24uZ2V0KCksIGFy
Z3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4Tm90aWZpY2F0aW9uQ2VudGVyOjpjcmVhdGVOb3RpZmljYXRpb25DYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtNzQsNyArNzQsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhOb3RpZmljYXRpb25DZW50ZXI6OmNyZWF0ZU5vdGlmaWNhdGlvbkNhbGxiYWNrKGNv
bnN0IHY4OgogICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xh
dGUoKSk7CiAKICAgICBub3RpZmljYXRpb24tPnJlZigpOwotICAgIHJldHVybiB0b1Y4KG5vdGlm
aWNhdGlvbi5nZXQoKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChub3RpZmljYXRpb24uZ2V0KCksIGFyZ3MuSG9s
ZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
Tm90aWZpY2F0aW9uQ2VudGVyOjpyZXF1ZXN0UGVybWlzc2lvbkNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhQZXJmb3JtYW5jZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhQZXJmb3JtYW5jZUN1c3RvbS5jcHAKaW5kZXggYWNhMDgxMTUyMmVkZGU5YWM3
NTdiYmRjZTBiYjUxNjZlODY5ZjU3Ni4uN2NmZTNkMzVmZjZiNGRlMThjNGUzMjdmODcwMzcyN2M5
NjExZjdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
UGVyZm9ybWFuY2VDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFBlcmZvcm1hbmNlQ3VzdG9tLmNwcApAQCAtNDUsNyArNDUsNyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhQZXJmb3JtYW5jZTo6bWVtb3J5QWNjZXNzb3JHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+CiB7CiAgICAgSU5DX1NUQVRTKCJET00uUGVyZm9ybWFuY2UubWVtb3J5QWNj
ZXNzb3JHZXR0ZXIiKTsKICAgICBQZXJmb3JtYW5jZSogaW1wID0gVjhQZXJmb3JtYW5jZTo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5tZW1vcnkoKSwgaW5m
by5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gdG9WOChpbXAtPm1lbW9yeSgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBlcmZvcm1hbmNlRW50cnlDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5j
cHAKaW5kZXggOWQ2NzAyOWJmMzc1MjJiZjQ1NDJjMzU0ZDExZmM2ODRlMDdkYjA5OS4uMzk3ZTNm
OWFlNWMwNDNjNjBlMmYwYjcyOGI3YzExZjA5NTJiZDIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VFbnRyeUN1
c3RvbS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQZXJmb3JtYW5jZUVudHJ5KiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGVyZm9ybWFuY2VFbnRyeSogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewog
ICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0
b20uY3BwCmluZGV4IDNhYWNkNGE5YTgxZDIwMjgxYzMyYzQ5Mzc2Mzg1MmE4ZGEwNzZjOWMuLjM3
MDlhMGNlOTE0ODk3ODUzYmI2YWViMzgyYzFhNzVkOWU4ZWI3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0
b20uY3BwCkBAIC03Miw3ICs3Miw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFBvcFN0YXRl
RXZlbnQ6OnN0YXRlQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+CiAgICAgYm9v
bCBpc1NhbWVTdGF0ZSA9IGhpc3RvcnktPmlzU2FtZUFzQ3VycmVudFN0YXRlKGV2ZW50LT5zZXJp
YWxpemVkU3RhdGUoKSk7CiAKICAgICBpZiAoaXNTYW1lU3RhdGUpIHsKLSAgICAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB2OEhpc3RvcnkgPSB0b1Y4KGhpc3RvcnksIGluZm8uSG9sZGVyKCkt
PkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSkuQXM8djg6Ok9iamVjdD4oKTsK
KyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB2OEhpc3RvcnkgPSB0b1Y4KGhpc3Rvcnks
IGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKS5Bczx2ODo6T2JqZWN0PigpOwogICAg
ICAgICBpZiAoIWhpc3RvcnktPnN0YXRlQ2hhbmdlZCgpKSB7CiAgICAgICAgICAgICByZXN1bHQg
PSB2OEhpc3RvcnktPkdldEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpzdGF0ZSgp
KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LklzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvblN5
bmNDdXN0b20uY3BwCmluZGV4IDFhZWM1MjM3M2Y4NTE3OTYwZjRmNDM3YzQzZjY3NjgyN2YzYzc3
MzQuLjFhYjY2MjY3OGZlY2I0NWQzYjliNjEyMTRkNTg0YTliMDc0Y2FmM2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uU3luY0N1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJh
bnNhY3Rpb25TeW5jQ3VzdG9tLmNwcApAQCAtODksNyArODksNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTcWxDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbgogICAgIFNRTFRyYW5zYWN0aW9uU3luYyogdHJhbnNhY3Rpb24gPSBWOFNRTFRyYW5z
YWN0aW9uU3luYzo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gdG9WOCh0cmFuc2Fj
dGlvbi0+ZXhlY3V0ZVNRTChzdGF0ZW1lbnQsIHNxbFZhbHVlcywgZWMpLCBhcmdzLkhvbGRlcigp
LT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiByZXN1bHQgPSB0b1Y4KHRyYW5zYWN0aW9uLT5leGVjdXRlU1FMKHN0YXRlbWVu
dCwgc3FsVmFsdWVzLCBlYyksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAg
ICBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTVkdEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggZmZmZWM0YmQ5NWQyMzgyODNhNTRkODJjNGZh
OTRjY2VkYmFiZWQ5ZC4uYTZmNDFiNmRiNTI2NWFhMGQ2YmFhMmZmYzhjNjg3MmM0NDkzYWNiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1l
bnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNW
R0RvY3VtZW50Q3VzdG9tLmNwcApAQCAtMzgsNyArMzgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNWR0RvY3VtZW50KiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
LCBib29sIGZvcmNlTmV3T2JqZWN0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU1ZHRG9j
dW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBmb3JjZU5ld09iamVjdCkKIHsKICAgICBpZiAoIWltcGwp
CiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3Bw
CmluZGV4IDUyZjQ4NTFlOGUxODllMzhmM2RjNWFjMjgzZDcxYjgzZjcyZmZmNWUuLjg4NjIxMTg4
MGE0MWVmMDI2YzExZTI0Nzk1OTk3M2Q1YjU2ZGM1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3BwCkBAIC0z
Nyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoU1ZHRWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNWR0VsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBmb3Jj
ZU5ld09iamVjdCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRo
Q2hlY2soaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwCmluZGV4IGMwMWIyMDMxMDU1NzJjYzU4NTFh
YjMyNDVmMTc0MWQ0MDU4ZGRhODcuLmQ0NWNiZTI0YmY3MzViMjRiNzE4MTUyNTliODhmYzdjZTM0
MWVlMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNW
R1BhdGhTZWdDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwCkBAIC01Nyw3ICs1Nyw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU1ZHUGF0aFNlZyogaW1wbCwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNWR1BhdGhTZWcqIGltcGwsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
IHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTY3Jp
cHRQcm9maWxlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFNjcmlwdFByb2ZpbGVDdXN0b20uY3BwCmluZGV4IDY2MGJkYzE1NGM2ZDZiOWNiZDA3NDU0NGNh
NzQ0Njg2YjdlYmNhNzEuLmYyZmE3MjdjZjhjODNiYzdmNjAwNTUwNzc2NjczMzgxODNkMTQwOWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFBy
b2ZpbGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFNjcmlwdFByb2ZpbGVDdXN0b20uY3BwCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU2NyaXB0UHJvZmlsZSogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNjcmlwdFByb2ZpbGUqIGltcGws
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2so
aXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTY3JpcHRQcm9maWxlTm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhTY3JpcHRQcm9maWxlTm9kZUN1c3RvbS5jcHAKaW5kZXggZDEwZjMxMjBmOTBi
YzY2OGY4ZjM1ZjVhZjE1NjMwZmMzMjIyMjNiNC4uY2IwMzMyYzhkY2FkNzE0OTBhMWE0Y2M2M2My
MjcxOThkMmRhMzI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U2NyaXB0UHJvZmlsZU5vZGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFByb2ZpbGVOb2RlQ3VzdG9tLmNwcApAQCAtNDYsNyAr
NDYsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTY3JpcHRQcm9maWxlTm9kZTo6Y2FsbFVJ
REFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6UwogICAgIHJldHVybiB2ODo6TnVtYmVyOjpO
ZXcoaW1wLT5jYWxsVUlEKCkpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTY3Jp
cHRQcm9maWxlTm9kZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNj
cmlwdFByb2ZpbGVOb2RlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICBy
ZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAppbmRleCBkY2Jl
MTYxMzYxOTZhM2NhZDBjZDU1NjQxOWRlMzZiNjg1NDc5ZjdlLi5lZDA1ZmEyYmQwM2E5ZmZjZGU4
ODE3MzI3MjlmZTUzOGQyNDQ0ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcApAQCAtMzcsNyArMzcsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFN0
eWxlU2hlZXQqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTdHlsZVNo
ZWV0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhOdWxs
V2l0aENoZWNrKGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCmluZGV4IGFhYzYyMDE0
YTBkYzJhNmNhN2U3OGQwZjAwMDkwNjI0MWQ2NjljMWQuLjFkZDIzMDc0NzY0Nzg0YzYxYjE4MWIy
NmIyYzc4NTliYmY1ZGI0ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFN0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAKQEAgLTUxLDcgKzUx
LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U3R5bGVTaGVldExpc3Q6Om5hbWVkUHJvcGVy
dHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmcKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJl
dHVybiB2OFVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIHRvVjgoaXRlbS0+c2hlZXQoKSwgaW5m
by5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gdG9WOChpdGVtLT5zaGVldCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyYWNrRXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJhY2tFdmVudEN1c3RvbS5jcHAKaW5kZXggYTk2
MmE4MGQyYTdkZDliZWJiZjlhOTRhNGY5ZjhjNWQ0MzE0YTVjNy4uOGQxOWVlYjRiYjFkZWFjMGY2
NTUxMTBlNWE0NDAzNzRiZjkxMGJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4VHJhY2tFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJhY2tFdmVudEN1c3RvbS5jcHAKQEAgLTU2LDcgKzU2LDcg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VHJhY2tFdmVudDo6dHJhY2tBY2Nlc3NvckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmEKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAg
IGNhc2UgVHJhY2tCYXNlOjpUZXh0VHJhY2s6Ci0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PFRleHRUcmFjayo+KHRyYWNrKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCks
IGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8VGV4
dFRyYWNrKj4odHJhY2spLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBUcmFja0Jhc2U6OkF1ZGlvVHJhY2s6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAppbmRleCA4MmMzNmEyZGVmNzRjYThjNTFiNDg5ZjAx
MzVjY2I0ZWNiMThlZjY3Li4wNjM1NDk2OWQ0NGQzYzQ2YTU5M2RkYTU1NGEzNWQyZjEwODY5NjZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKQEAgLTExNCw3ICsxMTQs
NyBAQCBzdGF0aWMgaW50KiBqc0FycmF5VG9JbnRBcnJheSh2ODo6SGFuZGxlPHY4OjpBcnJheT4g
YXJyYXksIHVpbnQzMl90IGxlbikKICAgICByZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4T2JqZWN0KGNvbnN0IFdlYkdMR2V0SW5mbyYgaW5mbywgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOE9iamVjdChjb25zdCBXZWJHTEdl
dEluZm8mIGluZm8sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBzd2l0Y2ggKGluZm8uZ2V0VHlwZSgpKSB7CiAgICAg
Y2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9vbDoKQEAgLTE3MiwzOSArMTcyLDM5IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOE9iamVjdChXZWJHTEV4dGVuc2lvbiogZXh0ZW5z
aW9uLCB2ODo6SGFuZGxlPHY4CiAgICAgY29uc3QgY2hhciogcmVmZXJlbmNlTmFtZSA9IDA7CiAg
ICAgc3dpdGNoIChleHRlbnNpb24tPmdldE5hbWUoKSkgewogICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246OldlYktpdFdlYkdMTG9zZUNvbnRleHROYW1lOgotICAgICAgICBleHRlbnNpb25PYmplY3Qg
PSB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMTG9zZUNvbnRleHQqPihleHRlbnNpb24pLCBjb250ZXh0
T2JqZWN0LT5DcmVhdGlvbkNvbnRleHQoKSwgaXNvbGF0ZSk7CisgICAgICAgIGV4dGVuc2lvbk9i
amVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbiksIGNv
bnRleHRPYmplY3QsIGlzb2xhdGUpOwogICAgICAgICByZWZlcmVuY2VOYW1lID0gIndlYktpdFdl
YkdMTG9zZUNvbnRleHROYW1lIjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTmFtZToKLSAgICAgICAgZXh0ZW5zaW9u
T2JqZWN0ID0gdG9WOChzdGF0aWNfY2FzdDxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMqPihl
eHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LT5DcmVhdGlvbkNvbnRleHQoKSwgaXNvbGF0ZSk7Cisg
ICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljKj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdCwgaXNvbGF0ZSk7CiAgICAg
ICAgIHJlZmVyZW5jZU5hbWUgPSAiZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTmFtZSI7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1N0YW5kYXJkRGVyaXZh
dGl2ZXNOYW1lOgotICAgICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PE9F
U1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LT5DcmVhdGlv
bkNvbnRleHQoKSwgaXNvbGF0ZSk7CisgICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3Rh
dGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJpdmF0aXZlcyo+KGV4dGVuc2lvbiksIGNvbnRleHRPYmpl
Y3QsIGlzb2xhdGUpOwogICAgICAgICByZWZlcmVuY2VOYW1lID0gIm9lc1N0YW5kYXJkRGVyaXZh
dGl2ZXNOYW1lIjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VT
VGV4dHVyZUZsb2F0TmFtZToKLSAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNf
Y2FzdDxPRVNUZXh0dXJlRmxvYXQqPihleHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LT5DcmVhdGlv
bkNvbnRleHQoKSwgaXNvbGF0ZSk7CisgICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3Rh
dGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdCwgaXNv
bGF0ZSk7CiAgICAgICAgIHJlZmVyZW5jZU5hbWUgPSAib2VzVGV4dHVyZUZsb2F0TmFtZSI7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1ZlcnRleEFycmF5T2Jq
ZWN0TmFtZToKLSAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2FzdDxPRVNW
ZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbiksIGNvbnRleHRPYmplY3QtPkNyZWF0aW9uQ29u
dGV4dCgpLCBpc29sYXRlKTsKKyAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNf
Y2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbiksIGNvbnRleHRPYmplY3QsIGlz
b2xhdGUpOwogICAgICAgICByZWZlcmVuY2VOYW1lID0gIm9lc1ZlcnRleEFycmF5T2JqZWN0TmFt
ZSI7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdS
ZW5kZXJlckluZm9OYW1lOgotICAgICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19j
YXN0PFdlYkdMRGVidWdSZW5kZXJlckluZm8qPihleHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LT5D
cmVhdGlvbkNvbnRleHQoKSwgaXNvbGF0ZSk7CisgICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRv
Vjgoc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyo+KGV4dGVuc2lvbiksIGNvbnRl
eHRPYmplY3QsIGlzb2xhdGUpOwogICAgICAgICByZWZlcmVuY2VOYW1lID0gIndlYkdMRGVidWdS
ZW5kZXJlckluZm9OYW1lIjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1lOgotICAgICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4
KHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFkZXJzKj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVj
dC0+Q3JlYXRpb25Db250ZXh0KCksIGlzb2xhdGUpOworICAgICAgICBleHRlbnNpb25PYmplY3Qg
PSB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFkZXJzKj4oZXh0ZW5zaW9uKSwgY29udGV4
dE9iamVjdCwgaXNvbGF0ZSk7CiAgICAgICAgIHJlZmVyZW5jZU5hbWUgPSAid2ViR0xEZWJ1Z1No
YWRlcnNOYW1lIjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2Vi
S2l0V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgotICAgICAgICBleHRlbnNpb25PYmpl
Y3QgPSB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKj4oZXh0ZW5z
aW9uKSwgY29udGV4dE9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCksIGlzb2xhdGUpOworICAgICAg
ICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDKj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdCwgaXNvbGF0ZSk7CiAgICAgICAgIHJl
ZmVyZW5jZU5hbWUgPSAid2ViS2l0V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lIjsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViS2l0V2ViR0xEZXB0aFRl
eHR1cmVOYW1lOgotICAgICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PFdl
YkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdC0+Q3JlYXRpb25Db250
ZXh0KCksIGlzb2xhdGUpOworICAgICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19j
YXN0PFdlYkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdCwgaXNvbGF0
ZSk7CiAgICAgICAgIHJlZmVyZW5jZU5hbWUgPSAid2ViS2l0V2ViR0xEZXB0aFRleHR1cmVOYW1l
IjsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0T2JqZWN0UGFyYW1ldGVyKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MsIE9iamVjCiAgICAgfQogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIHNldERPTUV4
Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4T2JqZWN0KGlu
Zm8sIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7
CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbywgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29s
YXRlKCkpOwogfQogCiBzdGF0aWMgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHRvV2ViR0xVbmlmb3Jt
TG9jYXRpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBvaykKQEAgLTI4Nyw3
ICsyODcsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEF0dGFjaGVkU2hhZGVyc0NhbGxiYWNrKGNvbnN0CiAgICAgICAgIHJldHVybiB2ODo6TnVs
bChhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2
ODo6QXJyYXk6Ok5ldyhzaGFkZXJzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBp
aSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQotICAgICAgICBhcnJheS0+U2V0KHY4SW50ZWdlcihp
aSwgYXJncy5HZXRJc29sYXRlKCkpLCB0b1Y4KHNoYWRlcnNbaWldLmdldCgpLCBhcmdzLkhvbGRl
cigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpKTsKKyAgICAgICAgYXJy
YXktPlNldCh2OEludGVnZXIoaWksIGFyZ3MuR2V0SXNvbGF0ZSgpKSwgdG9WOChzaGFkZXJzW2lp
XS5nZXQoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpKTsKICAgICByZXR1cm4g
YXJyYXk7CiB9CiAKQEAgLTMyMyw3ICszMjMsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcgog
ICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIGVjKTsKICAgICBpZiAoZWMpCiAg
ICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAg
ICByZXR1cm4gdG9WOE9iamVjdChpbmZvLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQo
KSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8sIGFyZ3Mu
SG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXJDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQpAQCAtMzM5LDcgKzMzOSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyQ2FsbGJhY2soY29uc3Qgdjg6
OkFyCiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LT5nZXRQYXJhbWV0ZXIocG5hbWUs
IGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4gdG9WOE9iamVjdChpbmZvLCBhcmdzLkhvbGRl
cigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0
b1Y4T2JqZWN0KGluZm8sIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFt
UGFyYW1ldGVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTM1OCw3ICsz
NTgsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFByb2dyYW1QYXJhbWV0ZXJDYWxsYmFjayhjb25zdAogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0g
Y29udGV4dC0+Z2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOwogICAgIGlm
IChlYykKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRl
KCkpOwotICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8sIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9u
Q29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5m
bywgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
ckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0zODMsNyArMzgzLDcgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQ
YXJhbWV0ZXJDYWxsYmFjayhjb25zdAogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+
Z2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUsIGVjKTsKICAgICBpZiAoZWMpCiAgICAg
ICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICBy
ZXR1cm4gdG9WOE9iamVjdChpbmZvLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwg
YXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8sIGFyZ3MuSG9s
ZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTQyNyw3ICs0MjcsNyBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1DYWxsYmFjayhjb25z
dCB2ODo6QXJndQogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+Z2V0VW5pZm9ybShw
cm9ncmFtLCBsb2NhdGlvbiwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIHNldERP
TUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4T2JqZWN0
KGluZm8sIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUo
KSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbywgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJ
c29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFZlcnRleEF0dHJpYkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdv
cmtlckNvbnRleHRDdXN0b20uY3BwCmluZGV4IDk4YjAxZGY4YTcyYjZmZjgxZGQ3MmEzZjg4ZTdm
Mzk3YmE0MTI2NDguLjg5ZWNkYzk4Njc5ZTgzNWI2YzJmZjc2YzVjNTMwZTA2MmFlNjNiOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRl
eHRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdv
cmtlckNvbnRleHRDdXN0b20uY3BwCkBAIC0xMzAsNyArMTMwLDcgQEAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6c2V0SW50ZXJ2YWxDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJgogICAgIHJldHVybiBTZXRUaW1lb3V0T3JJbnRlcnZhbChhcmdzLCBmYWxzZSk7CiB9
CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdvcmtlckNvbnRleHQqIGltcGwsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUp
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChXb3JrZXJDb250ZXh0KiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7
CiAgICAgLy8gTm90aWNlIHRoYXQgd2UgZXhwbGljaXRseSBpZ25vcmUgY3JlYXRpb25Db250ZXh0
IGJlY2F1c2UgdGhlIFdvcmtlckNvbnRleHQgaXMgaXRzIG93biBjcmVhdGlvbkNvbnRleHQuCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAppbmRleCA4MDk5OTYzNzM2YmZlODQ1MWQxNzdkMTkxNjY0
NDQ3MTNlMGFmYjhlLi4xNTRkNjcwNTQyYmI2MTY4Nzk2MjdkMGI1OWI5ZGUwYjQ3MzAyZTQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVx
dWVzdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCkBAIC03Niw3ICs3Niw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyCiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB4bWxIdHRwUmVxdWVz
dC0+cmVzcG9uc2VYTUwoZWMpOwogICAgICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgICAg
IHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0b1Y4KGRvY3VtZW50LCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQo
KSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgoZG9jdW1lbnQs
IGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgfQogCiAgICAgY2Fz
ZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VUeXBlQmxvYjoKQEAgLTg1LDcgKzg1LDcgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlQWNjZXNzb3JHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHIKICAgICAgICAgICAgIEJsb2IqIGJsb2IgPSB4bWxIdHRwUmVx
dWVzdC0+cmVzcG9uc2VCbG9iKGVjKTsKICAgICAgICAgICAgIGlmIChlYykKICAgICAgICAgICAg
ICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdG9WOChibG9iLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQo
KSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgoYmxvYiwgaW5m
by5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogICAgICAgICB9CiAKICAgICBjYXNlIFhN
TEh0dHBSZXF1ZXN0OjpSZXNwb25zZVR5cGVBcnJheUJ1ZmZlcjoKQEAgLTk0LDcgKzk0LDcgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlQWNjZXNzb3JH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHIKICAgICAgICAgICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1
ZmZlciA9IHhtbEh0dHBSZXF1ZXN0LT5yZXNwb25zZUFycmF5QnVmZmVyKGVjKTsKICAgICAgICAg
ICAgIGlmIChlYykKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBp
bmZvLkdldElzb2xhdGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdG9WOChhcnJheUJ1ZmZlciwg
aW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0b1Y4KGFycmF5QnVmZmVyLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwK
aW5kZXggYzg1MzE2NGU2YmNiMTA1NjM0NDM5Yzg0NjhkOWMwMDRjOGZiNjUzNi4uODg3YzFhOWRi
ZmYwYWJjZmMxMTQ1YjgxN2JmZjE3YWFlZjU1MjBmMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMu
cGwKQEAgLTEwNDEsNyArMTA0MSw3IEBAIEVORAogICAgICAgICB9IGVsc2lmICgkd3JhcHBlckZh
Y3RvcnlUeXBlIGVxICJWOCIpIHsKICAgICAgICAgICAgIGlmICgkZW5hYmxlZFRhZ3N7JHRhZ05h
bWV9e3dyYXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlfSkgewogICAgICAgICAgICAgICAgIHBy
aW50IEYgPDxFTkQKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlJHtKU0ludGVy
ZmFjZU5hbWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlJHtKU0ludGVyZmFjZU5h
bWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQog
ewogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGVsZW1lbnQtPmRvY3VtZW50KCktPnNldHRpbmdz
KCk7CiAgICAgaWYgKCFNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSB8fCAoc2V0dGluZ3MgJiYg
IXNldHRpbmdzLT5pc01lZGlhRW5hYmxlZCgpKSkKQEAgLTEwNTQsNyArMTA1NCw3IEBAIEVORAog
ICAgICAgICAgICAgfSBlbHNpZiAoJGVuYWJsZWRUYWdzeyR0YWdOYW1lfXtjb250ZXh0Q29uZGl0
aW9uYWx9KSB7CiAgICAgICAgICAgICAgICAgbXkgJGNvbnRleHRDb25kaXRpb25hbCA9ICRlbmFi
bGVkVGFnc3skdGFnTmFtZX17Y29udGV4dENvbmRpdGlvbmFsfTsKICAgICAgICAgICAgICAgICBw
cmludCBGIDw8RU5ECi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZSR7SlNJbnRl
cmZhY2VOYW1lfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQqIGVsZW1lbnQs
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZSR7SlNJbnRlcmZhY2VO
YW1lfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQqIGVsZW1lbnQsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
IHsKICAgICBpZiAoIUNvbnRleHRGZWF0dXJlczo6JHtjb250ZXh0Q29uZGl0aW9uYWx9RW5hYmxl
ZChlbGVtZW50LT5kb2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJuIFY4JHBhcmFtZXRlcnN7ZmFs
bGJhY2tJbnRlcmZhY2VOYW1lfTo6d3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNl
TmFtZX0oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CkBAIC0xMDY0LDcgKzEw
NjQsNyBAQCBFTkQKIDsKICAgICAgICAgICAgIH0gZWxzaWYgKCR7SlNJbnRlcmZhY2VOYW1lfSBl
cSAiSFRNTEVsZW1lbnQiKSB7CiAgICAgICAgICAgICAgICAgcHJpbnQgRiA8PEVORAotc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVyKCRw
YXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50KiBlbGVtZW50LCB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVyKCRwYXJhbWV0
ZXJze25hbWVzcGFjZX1FbGVtZW50KiBlbGVtZW50LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgcmV0dXJuIFY4JHBh
cmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ6OndyYXAoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKIH0KQEAgLTEwNzMsNyArMTA3Myw3IEBAIEVORAogOwogICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBwcmludCBGIDw8RU5ECi1zdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGNyZWF0ZSR7SlNJbnRlcmZhY2VOYW1lfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFt
ZXNwYWNlfUVsZW1lbnQqIGVsZW1lbnQsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNyZWF0ZSR7SlNJbnRlcmZhY2VOYW1lfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFtZXNwYWNl
fUVsZW1lbnQqIGVsZW1lbnQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDwk
e0pTSW50ZXJmYWNlTmFtZX0qPihlbGVtZW50KSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
IH0KQEAgLTExNTcsNyArMTE1Nyw3IEBAIEVORAogOwogICAgIH0gZWxzaWYgKCR3cmFwcGVyRmFj
dG9yeVR5cGUgZXEgIlY4IikgewogICAgICAgICBwcmludCBGIDw8RU5ECi10eXBlZGVmIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiAoKkNyZWF0ZSRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50V3Jh
cHBlckZ1bmN0aW9uKSgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCosIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKK3R5cGVkZWYgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+ICgqQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRX
cmFwcGVyRnVuY3Rpb24pKCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50Kiwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiAKIEVORAogOwpA
QCAtMTE3Niw3ICsxMTc2LDcgQEAgRU5ECiA7CiAgICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5
VHlwZSBlcSAiVjgiKSB7CiAgICAgICAgIHByaW50IEYgPDxFTkQKLXY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjcmVhdGVWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1XcmFwcGVyKCRwYXJhbWV0ZXJze25h
bWVzcGFjZX1FbGVtZW50KiBlbGVtZW50LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGZvcmNlTmV3T2JqZWN0KQordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZVY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXIo
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQqIGVsZW1lbnQsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBmb3JjZU5l
d09iamVjdCkKIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8V1RGOjpBdG9taWNTdHJpbmdJbXBsKiwg
Q3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+IEZ1bmN0
aW9uTWFwOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoRnVuY3Rpb25NYXAsIG1hcCwgKCkpOwpA
QCAtMTI3OCw3ICsxMjc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgJHBh
cmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y3JlYXRlVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3Bh
Y2V9RWxlbWVudCosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqLCBib29sKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVjgkcGFy
YW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCos
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSosIGJv
b2wpOwogfQogRU5ECiA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162900</attachid>
            <date>2012-09-07 16:32:23 -0700</date>
            <delta_ts>2012-09-07 16:45:47 -0700</delta_ts>
            <desc>Now with test progression</desc>
            <filename>bug-96147-20120907163202.patch</filename>
            <type>text/plain</type>
            <size>189747</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3OTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDU2YjQ2MTE2Y2FjNWVlMzk1MGI2
ZTliMTcwYWU4YThlODczMzE5ODMuLjg4YTkyZDM0OTg4MDVlNjBiMjliMDc2NWUwNjU5YjgwMGU4
ZTg2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCkBAIC0zODQsNyArMzg0LDcgQEAgRU5ECiAgICAgewogICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0LT5HZXRQb2ludGVyRnJv
bUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5s
aW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBlfSosIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDAke2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyfSk7Cisg
ICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBl
fSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwJHtmb3JjZU5ld09iamVjdFBhcmFtZXRlcn0p
OwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CkBAIC00MDIsNyArNDAy
LDcgQEAgRU5ECiAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJIVE1MRG9jdW1lbnQiKSB7CiAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAgIHN0YXRpYyB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gd3JhcEluU2hhZG93T2JqZWN0KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB3cmFwcGVy
LCBOb2RlKiBpbXBsKTsKLSAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROYW1lZFBy
b3BlcnR5KEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGtl
eSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSop
OworICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5hbWVkUHJvcGVydHkoSFRNTERv
Y3VtZW50KiBodG1sRG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYga2V5LCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIEVORAogICAgIH0K
IApAQCAtNDc3LDEzICs0NzcsMTMgQEAgRU5ECiAgICAgbXkgJHdyYXBTbG93QXJndW1lbnRUeXBl
ID0gR2V0UGFzc1JlZlB0clR5cGUoJG5hdGl2ZVR5cGUpOwogICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIDw8RU5EKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcFNsb3coJHt3cmFwU2xvd0FyZ3VtZW50VHlwZX0sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwU2xvdygke3dyYXBTbG93QXJndW1lbnRUeXBlfSwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCiBFTkQKIAog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
JHtjbGFzc05hbWV9Ojp3cmFwKCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUke2ZvcmNlTmV3T2Jq
ZWN0SW5wdXR9KQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiAke2NsYXNzTmFtZX06OndyYXAoJHtu
YXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlJHtmb3JjZU5ld09iamVjdElucHV0fSkKIHsKIEVORAogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgaWYgKCFmb3JjZU5ld09iamVjdCkge1xuIikgaWYg
SXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSk7CkBAIC01MDUsNyArNTA1LDcgQEAgRU5ECiAg
ICAgfSBlbHNpZiAoISgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Ub0pT
T2JqZWN0In0gb3IgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDdXN0b21Ub0pT
T2JqZWN0In0pKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIAotaW5s
aW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9
KQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGws
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDAke2ZvcmNlTmV3T2JqZWN0UGFyYW1l
dGVyfSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2so
aXNvbGF0ZSk7CkBAIC01MTUsMTQgKzUxNSwxNCBAQCBFTkQKICAgICB9IGVsc2lmICgkaW50ZXJm
YWNlTmFtZSBuZSAnTm9kZScpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQp
OwogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9Kiwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgdjg6Oklzb2xhdGUqID0gMCR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9KTsKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUq
ID0gMCR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9KTsKIEVORAogICAgIH0gZWxzZSB7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjhTbG93KE5vZGUqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiwgYm9vbCk7Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOFNsb3coTm9k
ZSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSos
IGJvb2wpOwogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTm9kZSogaW1wbCwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwLCBib29sIGZvcmNlTmV3T2JqZWN0
ID0gZmFsc2UpCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTm9kZSogaW1wbCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCwgYm9vbCBmb3JjZU5ld09iamVjdCA9
IGZhbHNlKQogewogICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCiAgICAgICAgIHJldHVybiB2OE51
bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CkBAIC01MzcsNyArNTM3LDcgQEAgRU5ECiAgICAgfQogCiAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFBhc3NSZWZQdHI8ICR7bmF0aXZlVHlwZX0gPiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDAke2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyfSkKK2lubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCAke25hdGl2ZVR5cGV9ID4g
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCR7Zm9yY2VOZXdPYmplY3RQ
YXJhbWV0ZXJ9KQogewogICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSR7Zm9yY2VOZXdPYmplY3RDYWxsfSk7CiB9CkBAIC01NjAsNiArNTYwLDExIEBA
IHN1YiBHZXRJbnRlcm5hbEZpZWxkcwogICAgIG15ICRuYW1lID0gJGRhdGFOb2RlLT5uYW1lOwog
CiAgICAgbXkgQGN1c3RvbUludGVybmFsRmllbGRzID0gKCk7CisKKyAgICBpZiAoJG5hbWUgZXEg
IkRPTVdpbmRvdyIgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJD
b250ZXh0In0pIHsKKyAgICAgICAgcHVzaChAY3VzdG9tSW50ZXJuYWxGaWVsZHMsICJwZXJDb250
ZXh0RGF0YUluZGV4Iik7CisgICAgfQorCiAgICAgIyBXZSBjYW4ndCBhc2sgd2hldGhlciBhIHBh
cmVudCB0eXBlIGhhcyBhIGdpdmVuIGV4dGVuZGVkQXR0cmlidXRlLAogICAgICMgc28gc3BlY2lh
bC1jYXNlIEFic3RyYWN0V29ya2VyIGFuZCBXb3JrZXJDb250ZXh0IHRvIGluY2x1ZGUgYWxsIHN1
Yi10eXBlcy4KICAgICAjIEV2ZW50IGxpc3RlbmVycyBvbiBET00gbm9kZXMgYXJlIGV4cGxpY2l0
bHkgc3VwcG9ydGVkIGluIHRoZSBHQyBjb250cm9sbGVyLgpAQCAtMTAwNyw3ICsxMDEyLDcgQEAg
RU5ECiAgICAgICAgIG15ICRkb21NYXBGdW5jdGlvbiA9IEdldERvbU1hcEZ1bmN0aW9uKCRkYXRh
Tm9kZSwgJGludGVyZmFjZU5hbWUsICJpbmZvLkdldElzb2xhdGUoKSIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0g
cmVzdWx0LmdldCgpID8gJHtkb21NYXBGdW5jdGlvbn0uZ2V0KHJlc3VsdC5nZXQoKSkgOiB2OFVu
ZGVmaW5lZCgpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYg
KHdyYXBwZXIuSXNFbXB0eSgpKSB7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkhvbGRlcigpLT5D
cmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSwg
aW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpXG4iKTsKICAg
ICAgICAgaWYgKCRkYXRhTm9kZS0+bmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIkZyYW1lLmgiKTsKQEAgLTEwMjYsNyArMTAzMSw3IEBAIEVORAog
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXR0clR5cGUuaCIpOwogICAgICAgICBteSAk
c3ZnTmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVlZGluZ1RlYXJPZmYo
JGF0dHJUeXBlKTsKICAgICAgICAgIyBDb252ZXJ0IGZyb20gYWJzdHJhY3QgU1ZHUHJvcGVydHkg
dG8gcmVhbCB0eXBlLCBzbyB0aGUgcmlnaHQgdG9KUygpIG1ldGhvZCBjYW4gYmUgaW52b2tlZC4K
LSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDwkc3ZnTmF0aXZlVHlwZSo+KCRyZXN1bHQpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8JHN2Z05hdGl2ZVR5cGUqPigk
cmVzdWx0KSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CiAgICAgfSBl
bHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhdHRyVHlwZSkg
YW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJWOCRhdHRyVHlwZS5oIik7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTVkdQ
cm9wZXJ0eVRlYXJPZmYuaCIpOwpAQCAtMTA0OSwxOSArMTA1NCwxOSBAQCBFTkQKICAgICAgICAg
ICAgICAgICAgICAgJHJlc3VsdCA9fiBzL21hdHJpeC9zdmdNYXRyaXgvOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0
dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSh3cmFwcGVyLCAkcmVz
dWx0LCAkdXBkYXRlTWV0aG9kKSksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBp
bmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVh
dGUod3JhcHBlciwgJHJlc3VsdCwgJHVwZGF0ZU1ldGhvZCkpLCBpbmZvLkhvbGRlcigpLCBpbmZv
LkdldElzb2xhdGUoKSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIik7CiAgICAg
ICAgICAgICAgICAgJHRlYXJPZmZUeXBlID1+IHMvU1ZHUHJvcGVydHlUZWFyT2ZmPC9TVkdTdGF0
aWNQcm9wZXJ0eVRlYXJPZmY8JGltcGxDbGFzc05hbWUsIC87CiAKLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVh
ck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0LCAkdXBkYXRlTWV0aG9kKSksIGluZm8uSG9s
ZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6
Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0LCAkdXBkYXRlTWV0aG9k
KSksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2lmICgkdGVhck9mZlR5cGUgPX4gL1NWR1N0YXRpY0xpc3RQcm9wZXJ0
eVRlYXJPZmYvKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJl
dHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0
KSksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRv
VjgoV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZShpbXAsICRyZXN1bHQpKSwgaW5m
by5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CiAgICAgICAgIH0gZWxzaWYgKCR0
ZWFyT2ZmVHlwZSA9fiAvU1ZHKFBvaW50fFBhdGhTZWcpTGlzdC8pIHsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHJlc3Vs
dCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRv
VjgoV1RGOjpnZXRQdHIoJHJlc3VsdCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTtcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRl
KCRyZXN1bHQpKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNv
bGF0ZSgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBy
ZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRlKCRyZXN1bHQpKSwg
aW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CiAgICAgICAgIH0KICAgICB9
IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIk1lc3NhZ2VQb3J0QXJyYXki
KSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJNZXNzYWdlUG9ydC5oIik7CkBAIC0xMDc0
LDcgKzEwNzksNyBAQCBFTkQKICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzQ29weSgqcG9ydHMp
OwogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9IHY4OjpBcnJheTo6TmV3KHBv
cnRzQ29weS5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9ydHNDb3B5LnNp
emUoKTsgKytpKQotICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJ
c29sYXRlKCkpLCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRp
b25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKSk7CisgICAgICAgIHBvcnRBcnJheS0+U2V0
KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHRvVjgocG9ydHNDb3B5W2ldLmdldCgp
LCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSkpOwogICAgIHJldHVybiBwb3J0QXJy
YXk7CiBFTkQKICAgICB9IGVsc2UgewpAQCAtMTA4Nyw3ICsxMDkyLDcgQEAgRU5ECiAgICAgcmV0
dXJuIHZhbHVlOwogRU5ECiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgICIgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5HZXRJc29sYXRlKCkiKS4iO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIgLiBSZXR1cm5OYXRpdmVUb0pTVmFs
dWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5Ib2xkZXIoKSIsICJpbmZv
LkdldElzb2xhdGUoKSIpLiI7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAzNSw3ICsy
MDQwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOCR7aW1wbENsYXNzTmFtZX1D
b25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmcKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUg
ZG9jdW1lbnQgaXMgYWRkZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3RoZXJ3aXNlLCB0aGUgJHtp
bXBsQ2xhc3NOYW1lfSBpbnN0YW5jZQogICAgIC8vIG1heSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkg
bm9kZSBpbiB0aGUgbWFwIGFuZCBnZXQgZ2FyYmFnZS1jb2xsZWN0ZWQgcHJlbWF0dXJlbHkuCi0g
ICAgdG9WOChkb2N1bWVudCwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKKyAgICB0b1Y4KGRvY3VtZW50LCBhcmdzLkhvbGRlcigpLCBhcmdzLkdl
dElzb2xhdGUoKSk7CiAKIEVORAogCkBAIC0yNjIzLDcgKzI2MjgsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJU
eXBlZEFycmF5In0pIHsKICAgICAgICAgbXkgJHZpZXdUeXBlID0gR2V0VHlwZU5hbWVPZkV4dGVy
bmFsVHlwZWRBcnJheSgkZGF0YU5vZGUpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxF
TkQpOwotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJGltcGxDbGFzc05hbWUqIGltcGwsIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgkaW1wbENsYXNzTmFtZSogaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29s
YXRlKTsKQEAgLTMzNDgsNyArMzM1Myw3IEBAIHN1YiBHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzCiAK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+
ICR7Y2xhc3NOYW1lfTo6d3JhcFNsb3coJHt3cmFwU2xvd0FyZ3VtZW50VHlwZX0gaW1wbCwgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gJHtjbGFzc05hbWV9Ojp3cmFwU2xvdygke3dyYXBT
bG93QXJndW1lbnRUeXBlfSBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyOwogRU5ECkBAIC0zMzU5LDM3ICszMzY0LDE0IEBAIEVORAogICAgIH0KIAogICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCJGcmFtZS5oIik7Ci0gICAgbXkgJGZyYW1lID0gIjAiOwotICAg
IGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKLSAgICAgICAgIyBEb2N1bWVudFR5cGUg
bm9kZXMgYXJlIHRoZSBvbmx5IG5vZGVzIHRoYXQgbWF5IGhhdmUgYSBOVUxMIGRvY3VtZW50Lgot
ICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRvY3VtZW50VHlwZSIpIHsKLSAgICAgICAg
ICAgICRmcmFtZSA9ICJpbXBsLT5kb2N1bWVudCgpID8gaW1wbC0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KSA6IDAiOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGZyYW1lID0gImltcGwtPmRv
Y3VtZW50KCktPmZyYW1lKCkiOwotICAgICAgICB9Ci0gICAgfQotICAgIHB1c2goQGltcGxDb250
ZW50LCA8PEVORCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gJGZyYW1lOwotRU5ECiAKICAgICBpZiAo
SXNTdWJUeXBlKCRkYXRhTm9kZSwgIkRvY3VtZW50IikpIHsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKLSAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dT
aGVsbCgpLT5jb250ZXh0KCkuSXNFbXB0eSgpICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hl
bGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpIHsKLSAgICAgICAgLy8gaW5pdGlhbGl6ZUlmTmVl
ZGVkIG1heSBoYXZlIGNyZWF0ZWQgYSB3cmFwcGVyIGZvciB0aGUgb2JqZWN0LCByZXRyeSBmcm9t
IHRoZSBzdGFydC4KLSAgICAgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6d3JhcChpbXBsLmdldCgp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwotICAgIH0KLUVORAotICAgIH0KLQotICAgICMg
RklYTUU6IFdlIG5lZWQgYSBiZXR0ZXIgd2F5IG9mIHJlY292ZXJpbmcgdGhlIGNvcnJlY3QgcHJv
dG90eXBlIGNoYWluCi0gICAgIyBmb3IgZXZlcnkgc29ydCBvZiBvYmplY3QuIEZvciBub3csIHdl
IHNwZWNpYWwtY2FzZSBjcm9zcy1vcmlnaW4gdmlzaWJsZQotICAgICMgb2JqZWN0cyAoaS5lLiwg
dGhvc2Ugd2l0aCBDaGVja1NlY3VyaXR5KS4KLSAgICBpZiAoSXNWaXNpYmxlQWNyb3NzT3JpZ2lu
cygkZGF0YU5vZGUpKSB7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJGcmFtZS5oIik7Ci0g
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci0gICAgaWYgKGltcGwtPmZyYW1lKCkp
IHsKLSAgICAgICAgZnJhbWUgPSBpbXBsLT5mcmFtZSgpOwotICAgICAgICBmcmFtZS0+c2NyaXB0
KCktPndpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpOworICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBpbXBsLT5mcmFtZSgpKSB7CisgICAgICAgIGlmIChmcmFtZS0+c2NyaXB0KCktPndp
bmRvd1NoZWxsKCktPmNvbnRleHQoKS5Jc0VtcHR5KCkgJiYgZnJhbWUtPnNjcmlwdCgpLT53aW5k
b3dTaGVsbCgpLT5pbml0aWFsaXplSWZOZWVkZWQoKSkgeworICAgICAgICAgICAgLy8gaW5pdGlh
bGl6ZUlmTmVlZGVkIG1heSBoYXZlIGNyZWF0ZWQgYSB3cmFwcGVyIGZvciB0aGUgb2JqZWN0LCBy
ZXRyeSBmcm9tIHRoZSBzdGFydC4KKyAgICAgICAgICAgIHJldHVybiAke2NsYXNzTmFtZX06Ondy
YXAoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgfQogICAg
IH0KIEVORAogICAgIH0KQEAgLTMzOTcsMjUgKzMzNzksMTkgQEAgRU5ECiAgICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7
Ci0gICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dCAh
PSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CisgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQu
SXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNv
bnRleHQ6OkdldEN1cnJlbnQoKSkgewogICAgICAgICAvLyBGb3IgcGVyZm9ybWFuY2UsIHdlIGVu
dGVyIHRoZSBjb250ZXh0IG9ubHkgaWYgdGhlIGN1cnJlbnRseSBydW5uaW5nIGNvbnRleHQKICAg
ICAgICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhlIGNvbnRleHQgdGhhdCB3ZSBhcmUgYWJvdXQg
dG8gZW50ZXIuCi0gICAgICAgIGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
Y3JlYXRpb25Db250ZXh0KTsKKyAgICAgICAgY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4
dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKTsKICAgICAgICAgQVNT
RVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CiAgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CiAgICAg
fQotRU5ECiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAgIHdyYXBwZXIgPSBW
OERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoZnJhbWUsICZpbmZvLCBpbXBsLmdldCgp
KTsKLUVORAorICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3Qo
JmluZm8sIGltcGwuZ2V0KCkpOwogCi0gICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAg
ICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7Ci1FTkQK
IAotICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiAgICAgaWYgKFVOTElLRUxZKHdyYXBw
ZXIuSXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiBFTkQKQEAgLTM1ODEsNyAr
MzU1Nyw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCiAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJWOCRyZXR1cm5UeXBlLmgiKTsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIlNWR1Byb3BlcnR5VGVhck9mZi5oIik7CiAgICAgICAgIG15ICRzdmdOYXRpdmVUeXBlID0g
JGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVhck9mZigkcmV0dXJuVHlwZSk7Ci0g
ICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3N2
Z05hdGl2ZVR5cGV9OjpjcmVhdGUoJHJldHVybikpLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpO1xuIjsKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5k
ZW50IC4gInJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7c3ZnTmF0aXZlVHlwZX06OmNyZWF0ZSgk
cmV0dXJuKSksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTtcbiI7CiAgICAgICAg
IHJldHVybiAkcmVzdWx0OwogICAgIH0KIApAQCAtMzU5MSw3ICszNTY3LDcgQEAgc3ViIEdlbmVy
YXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICB9CiAKICAgICAkcmV0dXJuIC49ICIucmVsZWFz
ZSgpIiBpZiAoJHJldHVybklzUmVmKTsKLSAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5O
YXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkdldElz
b2xhdGUoKSIpIC4gIjtcbiI7CisgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gUmV0dXJuTmF0aXZl
VG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAiYXJncy5Ib2xkZXIoKSIs
ICJhcmdzLkdldElzb2xhdGUoKSIpIC4gIjtcbiI7CiAKICAgICByZXR1cm4gJHJlc3VsdDsKIH0K
QEAgLTQwMjIsNiArMzk5OCw4IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKIHsKICAgICBteSAkc2ln
bmF0dXJlID0gc2hpZnQ7CiAgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkgJGdldENyZWF0
aW9uQ29udGV4dCA9IHNoaWZ0OworICAgIG15ICRnZXRDcmVhdGlvbkNvbnRleHRBcmcgPSAkZ2V0
Q3JlYXRpb25Db250ZXh0ID8gIiwgJGdldENyZWF0aW9uQ29udGV4dCIgOiAiIjsKICAgICBteSAk
Z2V0SXNvbGF0ZSA9IHNoaWZ0OwogICAgIG15ICRnZXRJc29sYXRlQXJnID0gJGdldElzb2xhdGUg
PyAiLCAkZ2V0SXNvbGF0ZSIgOiAiIjsKICAgICBteSAkdHlwZSA9IEdldFR5cGVGcm9tU2lnbmF0
dXJlKCRzaWduYXR1cmUpOwpAQCAtNDA3OCwxOCArNDA1NiwxOCBAQCBzdWIgTmF0aXZlVG9KU1Zh
bHVlCiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkc2VxdWVuY2VUeXBlLmgiKTsK
ICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkc2VxdWVuY2VUeXBlLmgiKTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gInY4QXJyYXkoJHZhbHVlLCAkZ2V0SXNvbGF0ZSkiOworICAg
ICAgICByZXR1cm4gInY4QXJyYXkoJHZhbHVlJGdldElzb2xhdGVBcmcpIjsKICAgICB9CiAKICAg
ICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOwogCiAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIG5v
bi1ET00gbm9kZSBpbnRlcmZhY2VzCiAgICAgaWYgKElzRE9NTm9kZVR5cGUoJHR5cGUpKSB7Ci0g
ICAgICAgIHJldHVybiAidG9WOCgke3ZhbHVlfSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSIg
LiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybk5ld09iamVjdCJ9ID8g
IiRnZXRJc29sYXRlQXJnLCB0cnVlKSIgOiAiJGdldElzb2xhdGVBcmcpIik7CisgICAgICAgIHJl
dHVybiAidG9WOCgke3ZhbHVlfSRnZXRDcmVhdGlvbkNvbnRleHRBcmckZ2V0SXNvbGF0ZUFyZyIg
LiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybk5ld09iamVjdCJ9ID8g
IiwgdHJ1ZSkiIDogIikiKTsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIkV2ZW50VGFyZ2V0
IikgewotICAgICAgICByZXR1cm4gIlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9W
OE9iamVjdCgkdmFsdWUsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCkkZ2V0SXNvbGF0ZUFyZyki
OworICAgICAgICByZXR1cm4gIlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9i
amVjdCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElzb2xhdGVBcmcpIjsKICAgICB9
CiAKICAgICBpZiAoJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiKSB7CkBAIC00MTA2LDcgKzQwODQs
NyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoInd0Zi9SZWZQ
dHIuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJ3dGYvR2V0UHRyLmgiKTsKIAotICAgIHJl
dHVybiAidG9WOCgkdmFsdWUsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCkkZ2V0SXNvbGF0ZUFy
ZykiOworICAgIHJldHVybiAidG9WOCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElz
b2xhdGVBcmcpIjsKIH0KIAogc3ViIFJldHVybk5hdGl2ZVRvSlNWYWx1ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJh
eS5jcHAKaW5kZXggZDNlNWY3MDg0MjdlNTcxNmI3M2U1Y2FiZGIzYjkzZTdlN2NlYmVlMC4uZTQ3
MDNiYzkxZGNjMTllOGI0Y2UzM2MzNDc5OTBlZjA2YjBiOTkyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXku
Y3BwCkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZm9vQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICAgICAgcmV0dXJuIHRocm93Tm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIEZsb2F0NjRBcnJh
eSogaW1wID0gVjhGbG9hdDY0QXJyYXk6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEVY
Q0VQVElPTl9CTE9DSyhGbG9hdDMyQXJyYXkqLCBhcnJheSwgVjhGbG9hdDMyQXJyYXk6Okhhc0lu
c3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5l
ZCkpID8gVjhGbG9hdDMyQXJyYXk6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNh
c3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkp
IDogMCk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5mb28oYXJyYXkpLCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT5mb28o
YXJyYXkpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2V0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXRDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogCiB9IC8vIG5hbWVzcGFjZSBGbG9hdDY0
QXJyYXlWOEludGVybmFsCiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEZsb2F0NjRBcnJh
eSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEZsb2F0NjRBcnJheSog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhD
aGVjayhpc29sYXRlKTsKQEAgLTE0NywxMiArMTQ3LDI1IEBAIGJvb2wgVjhGbG9hdDY0QXJyYXk6
Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIH0KIAogCi12ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IFY4RmxvYXQ2NEFycmF5Ojp3cmFwU2xvdyhQYXNzUmVmUHRyPEZsb2F0
NjRBcnJheT4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhGbG9hdDY0QXJy
YXk6OndyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8QXJyYXlCdWZmZXJWaWV3Kj4oaW1wbC5nZXQoKSkpID09IHN0YXRp
Y19jYXN0PHZvaWQqPihpbXBsLmdldCgpKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gMDsKLSAgICB3
cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywg
aW1wbC5nZXQoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OworICAg
IGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0
aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8g
Rm9yIHBlcmZvcm1hbmNlLCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50
bHkgcnVubmluZyBjb250ZXh0CisgICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb250
ZXh0IHRoYXQgd2UgYXJlIGFib3V0IHRvIGVudGVyLgorICAgICAgICBjb250ZXh0ID0gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkp
OworICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKKyAgICAgICAgY29udGV4dC0+
RW50ZXIoKTsKKyAgICB9CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0
ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIGlmICghY29udGV4dC5Jc0VtcHR5
KCkpCisgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVy
LklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZv
ckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmgKaW5kZXgg
M2Y2NjA5NTU4OTkyMWE2ODQxN2VlOWVkZDY4MDQwOGRkMDA1YjFkNi4uYzBmZTk3MjA4NWViODFm
ZTMzMjMyZDgyOTJhMmNlOTllYjQ3MWI0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmgKQEAgLTQyLDE3ICs0
MiwxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxG
bG9hdDY0QXJyYXkqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdy
YXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcChGbG9hdDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
cmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSog
PSAwKTsKKyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChGbG9h
dDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIHZvaWQg
ZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01E
YXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwogICAgIHN0YXRp
YyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogICAgIHN0YXRpYyBj
b25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5Piwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5Piwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IFY4RmxvYXQ2NEFycmF5Ojp3cmFwKEZsb2F0NjRBcnJheSogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhGbG9hdDY0QXJyYXk6OndyYXAoRmxv
YXQ2NEFycmF5KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IGdldERPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCkBAIC02MCw4ICs2MCw4IEBAIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhGbG9hdDY0QXJyYXk6OndyYXAoRmxvYXQ2NEFycmF5KiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpDCiAgICAgcmV0dXJuIFY4RmxvYXQ2NEFycmF5Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChGbG9h
dDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKLWlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBGbG9hdDY0QXJyYXkgPiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChGbG9hdDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CitpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgRmxvYXQ2NEFycmF5ID4gaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4gdG9W
OChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCBiMzBmMWQ4MGI2N2YzMTJmMzEwOThlNTc1YzlhNDlh
MzJkNjFlYTFkLi5iOTk2YzgxNTViZWY4ZmJmOTY0ZDJhMzA3MDE0NmFiYmIyMzJlYTYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMTc2LDMxICsxNzYsMjQgQEAgYm9v
bCBWOFRlc3RBY3RpdmVET01PYmplY3Q6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSkKIH0KIAogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFjdGl2ZURPTU9i
amVjdDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0QWN0aXZlRE9NT2JqZWN0PiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RBY3RpdmVET01PYmplY3Q6OndyYXBTbG93
KFBhc3NSZWZQdHI8VGVzdEFjdGl2ZURPTU9iamVjdD4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKLSAgICBGcmFtZSogZnJhbWUgPSAwOwotICAgIGlm
IChpbXBsLT5mcmFtZSgpKSB7Ci0gICAgICAgIGZyYW1lID0gaW1wbC0+ZnJhbWUoKTsKLSAgICAg
ICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5pbml0aWFsaXplSWZOZWVkZWQoKTsK
LSAgICB9CiAKLSAgICAvLyBFbnRlciB0aGUgbm9kZSdzIGNvbnRleHQgYW5kIGNyZWF0ZSB0aGUg
d3JhcHBlciBpbiB0aGF0IGNvbnRleHQuCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29u
dGV4dDsKLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
dW5kZXJseWluZ0hhbmRsZSA9IGZyYW1lLT5zY3JpcHQoKS0+dW5zYWZlSGFuZGxlVG9DdXJyZW50
V29ybGRDb250ZXh0KCk7Ci0gICAgICAgIGlmICh2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpICE9
IHVuZGVybHlpbmdIYW5kbGUpIHsKLSAgICAgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2Ug
ZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAot
ICAgICAgICAgICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhlIGNvbnRleHQgdGhhdCB3ZSBhcmUg
YWJvdXQgdG8gZW50ZXIuCi0gICAgICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250
ZXh0Pjo6TmV3KHVuZGVybHlpbmdIYW5kbGUpOwotICAgICAgICAgICAgaWYgKCFjb250ZXh0Lklz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5FbnRlcigpOwotICAgICAgICB9Cisg
ICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+Q3Jl
YXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgeworICAgICAgICAv
LyBGb3IgcGVyZm9ybWFuY2UsIHdlIGVudGVyIHRoZSBjb250ZXh0IG9ubHkgaWYgdGhlIGN1cnJl
bnRseSBydW5uaW5nIGNvbnRleHQKKyAgICAgICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhlIGNv
bnRleHQgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gZW50ZXIuCisgICAgICAgIGNvbnRleHQgPSB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQo
KSk7CisgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOworICAgICAgICBjb250ZXh0
LT5FbnRlcigpOwogICAgIH0KLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0
ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7Ci0gICAgLy8gRXhpdCB0aGUgbm9k
ZSdzIGNvbnRleHQgaWYgaXQgd2FzIGVudGVyZWQuCisKKyAgICB3cmFwcGVyID0gVjhET01XcmFw
cGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwogICAgIGlmICgh
Y29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChV
TkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3Rp
dmVET01PYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RBY3RpdmVET01PYmplY3QuaAppbmRleCAxYTYzMDM5MTFkMTUyMzQ4MTI5ZTcxZWM4M2Qy
NDgwNmVjODU2MTgzLi4yNTgwM2E0NTE5MjYxOWJmYzg0NzRjNTViMjVhNWExYWFlZDY2Mjk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
QWN0aXZlRE9NT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3RBY3RpdmVET01PYmpl
Y3QqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmpl
Y3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcChUZXN0QWN0aXZlRE9NT2JqZWN0Kiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3Jl
YXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0g
MCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEFj
dGl2ZURPTU9iamVjdCosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMg
dm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRET01XcmFwcGVy
KERPTURhdGFTdG9yZSosIHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAg
c3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwpAQCAtNDksMTAgKzQ5LDEwIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBuYW1lZFNlY3VyaXR5Q2hlY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGhvc3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGtleSwgdjg6OkFjY2Vzc1R5cGUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IGRhdGEpOwogICAgIHN0YXRpYyBib29sIGluZGV4ZWRTZWN1cml0eUNoZWNr
KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob3N0LCB1aW50MzJfdCBpbmRleCwgdjg6OkFjY2Vzc1R5
cGUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGRhdGEpOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PYmpl
Y3Q+LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
Kik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0
cjxUZXN0QWN0aXZlRE9NT2JqZWN0Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVz
dEFjdGl2ZURPTU9iamVjdDo6d3JhcChUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQor
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RBY3RpdmVET01PYmplY3Q6OndyYXAoVGVzdEFj
dGl2ZURPTU9iamVjdCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAg
ICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQpAQCAtNjAsMTMgKzYwLDEzIEBAIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwKFRlc3RBY3RpdmVET01PYmpl
Y3QqIGltcGwsIHY4CiAgICAgcmV0dXJuIFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6d3JhcFNsb3co
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAotaW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwsIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4
OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUgPSAwKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVj
ayhpc29sYXRlKTsKICAgICByZXR1cm4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwKGltcGws
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdEFjdGl2ZURPTU9iamVjdCA+IGltcGwsIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0QWN0aXZlRE9NT2JqZWN0ID4gaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCks
IHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4gdG9WOChpbXBsLmdldCgp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAKaW5kZXgg
MGQyMDYxN2I0ZmQ0ZDA3YTc1Mzc4M2FlNTYxYTEzOTdkMDE1YTBjMS4uZWQyZGU2ZWU2YmI1YzZh
YjQ4NjU2NjZmZWY0ZmZlMmI1NTliZWQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCkBAIC04Niw3
ICs4Niw3IEBAIGJvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKENs
YXNzMSogY2xhc3MxUGFyYW0pCiAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250
ZXh0KTsKIAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzczFQYXJhbUhhbmRsZSA9IHRv
VjgoY2xhc3MxUGFyYW0sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCkpOworICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjbGFzczFQYXJhbUhhbmRsZSA9IHRvVjgoY2xhc3MxUGFyYW0pOwogICAg
IGlmIChjbGFzczFQYXJhbUhhbmRsZS5Jc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKCFpc1Njcmlw
dENvbnRyb2xsZXJUZXJtaW5hdGluZygpKQogICAgICAgICAgICAgQ1JBU0goKTsKQEAgLTExNCw3
ICsxMTQsNyBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczJQYXJhbShD
bGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmCiAKICAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgc2NvcGUodjhDb250ZXh0KTsKIAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzczJQ
YXJhbUhhbmRsZSA9IHRvVjgoY2xhc3MyUGFyYW0sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCkp
OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzczJQYXJhbUhhbmRsZSA9IHRvVjgoY2xh
c3MyUGFyYW0pOwogICAgIGlmIChjbGFzczJQYXJhbUhhbmRsZS5Jc0VtcHR5KCkpIHsKICAgICAg
ICAgaWYgKCFpc1NjcmlwdENvbnRyb2xsZXJUZXJtaW5hdGluZygpKQogICAgICAgICAgICAgQ1JB
U0goKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dp
dGhTdHJpbmdMaXN0KFJlZlB0cjxET01TdHJpbmdMaXN0PiBsaXN0UGFyYW0pCiAKICAgICB2ODo6
Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKIAotICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBsaXN0UGFyYW1IYW5kbGUgPSB0b1Y4KGxpc3RQYXJhbSwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxpc3RQYXJhbUhhbmRsZSA9IHRv
VjgobGlzdFBhcmFtKTsKICAgICBpZiAobGlzdFBhcmFtSGFuZGxlLklzRW1wdHkoKSkgewogICAg
ICAgICBpZiAoIWlzU2NyaXB0Q29udHJvbGxlclRlcm1pbmF0aW5nKCkpCiAgICAgICAgICAgICBD
UkFTSCgpOwpAQCAtMjA3LDEzICsyMDcsMTMgQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tSZXF1aXJlc1RoaXNUb1Bhc3MoQ2xhc3M4KiBjbGFzczhQYXJhbSwgVGhpc0NsYXNzKgogCiAg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY2xhc3M4UGFyYW1IYW5kbGUgPSB0b1Y4KGNsYXNzOFBhcmFtLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PigpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3M4UGFy
YW1IYW5kbGUgPSB0b1Y4KGNsYXNzOFBhcmFtKTsKICAgICBpZiAoY2xhc3M4UGFyYW1IYW5kbGUu
SXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVybWluYXRpbmco
KSkKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdGhpc0NsYXNzUGFyYW1IYW5kbGUgPSB0b1Y4KHRoaXND
bGFzc1BhcmFtLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdGhpc0NsYXNzUGFyYW1IYW5kbGUgPSB0b1Y4KHRoaXNDbGFzc1BhcmFtKTsKICAg
ICBpZiAodGhpc0NsYXNzUGFyYW1IYW5kbGUuSXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICghaXNT
Y3JpcHRDb250cm9sbGVyVGVybWluYXRpbmcoKSkKICAgICAgICAgICAgIENSQVNIKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCAwMTM3NmU2ZmMzMGE4ODliYjA4
YjYzNjVmYTI3ZGJiNTQzNDVlNTExLi43YzMyYmU2ZTAxZWRlMGQwMjAwYjZlYWFjMGQ5OGQ5MzY3
ZDkyNTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTExMCwx
MSArMTEwLDI0IEBAIGJvb2wgVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6Okhhc0luc3RhbmNlKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIH0KIAogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RDdXN0b21O
YW1lZEdldHRlcj4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVy
PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotICAg
IEZyYW1lKiBmcmFtZSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlh
dGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dDsKKyAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkg
JiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0
Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNv
bnRleHQgb25seSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAgICAvLyBp
cyBkaWZmZXJlbnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4K
KyAgICAgICAgY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVhdGlvbkNv
bnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1w
dHkoKSk7CisgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CisgICAgfQorCisgICAgd3JhcHBlciA9
IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisK
KyAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisK
ICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhE
T01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oCmluZGV4IDdjYTU2OWU5N2ZlY2I3
NjE3Y2M0NjMwMzkxMjYzNzlhZjI2NTBkYzMuLjQ3Mzg1OGYyZWZmYzEwYTg3ZWE3MDJjMzUzNzRl
ODA5MWVlZDE5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oCkBAIC00MSwx
NyArNDEsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFs
RmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiwgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXAoVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJ
c29sYXRlKiA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBz
dGF0aWMgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOwogICAgIHN0YXRpYyBj
b25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVyPiwgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVk
R2V0dGVyPiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29s
YXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEN1c3RvbU5hbWVkR2V0
dGVyOjp3cmFwKFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8
djg6Ok9iamVjdD4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXAoVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGdldERPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpCkBAIC01OSwxMyArNTksMTMgQEAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6d3JhcChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIq
IGltcGwKICAgICByZXR1cm4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KGltcGws
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSA9IDApCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNr
KGlzb2xhdGUpOwogICAgIHJldHVybiBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6d3JhcChpbXBs
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RDdXN0b21OYW1lZEdldHRlciA+IGltcGwsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgPiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4KGltcGwu
Z2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAKaW5kZXggZjUzOTExNTBkMmZhMWMyNGMxMTZlZTU4ZTU3MWI2NGJkMjgw
ZWM5My4uYjNhMzUzNGYyNGFiNzZmNTFkYmViNWU0NTdlNDZmYzUxNTI5NDJmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMTQ3LDExICsxNDcsMjQgQEAgYm9vbCBW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUpCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVj
dG9yOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9yPiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwU2xv
dyhQYXNzUmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9yPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotICAgIEZyYW1lKiBmcmFtZSA9IDA7Ci0gICAg
d3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8s
IGltcGwuZ2V0KCkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKKyAg
ICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVh
dGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CisgICAgICAgIC8v
IEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0aGUgY3VycmVu
dGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29u
dGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4KKyAgICAgICAgY29udGV4dCA9IHY4OjpM
b2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgp
KTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CisgICAgICAgIGNvbnRleHQt
PkVudGVyKCk7CisgICAgfQorCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlh
dGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICBpZiAoIWNvbnRleHQuSXNFbXB0
eSgpKQorICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3JhcHBl
ci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJG
b3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuaAppbmRleCA3YzUzZjg4ZmI5YzVlNjE2ZGEzZjMxMDE1MTM0MGYyNjJjZDI0MzZh
Li42OTI2Y2ViZDRiZDk5M2M2NzJiN2JkNTYxYWNhYjQ1ZTEzOWRhZWMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudENvbnN0cnVjdG9yLmgKQEAgLTQyLDE3ICs0MiwxNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0RXZlbnRDb25zdHJ1Y3Rvcio+KG9i
amVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4
KSk7CiAgICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
KFRlc3RFdmVudENvbnN0cnVjdG9yKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25D
b250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7Cisg
ICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV2ZW50Q29u
c3RydWN0b3IqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIHZvaWQg
ZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01E
YXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwogICAgIHN0YXRp
YyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogICAgIHN0YXRpYyBj
b25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+LCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXZlbnRDb25zdHJ1
Y3Rvcj4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0
ZSopOwogfTsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVjdG9y
Ojp3cmFwKFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwKFRlc3RFdmVudENvbnN0cnVjdG9y
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9
IGdldERPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlmICghd3JhcHBl
ci5Jc0VtcHR5KCkpCkBAIC02MCwxMyArNjAsMTMgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwKFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsLAog
ICAgIHJldHVybiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoVGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBp
c29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0RXZlbnRD
b25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQg
PSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsK
ICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7
CiAgICAgcmV0dXJuIFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OndyYXAoaW1wbCwgY3JlYXRpb25D
b250ZXh0LCBpc29sYXRlKTsKIH0KLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQ
YXNzUmVmUHRyPCBUZXN0RXZlbnRDb25zdHJ1Y3RvciA+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQ
YXNzUmVmUHRyPCBUZXN0RXZlbnRDb25zdHJ1Y3RvciA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDFl
MGMyYjA2MjAzMjI1NjFmYjcyNmMyZmIwODkzMDM5ZDFkNDlkMjYuLmI3ODM2OWU5NTVmNGVkNzZm
M2RiODhlOTI5NmUwN2YzYTdlMjRiNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAt
NTUsNyArNTUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGl0ZW1DYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwog
ICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQotICAgIHJldHVybiB0b1Y4KGltcC0+aXRlbShpbmRl
eCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gdG9WOChpbXAtPml0ZW0oaW5kZXgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xh
dGUoKSk7CiAgICAgfQogICAgIGZhaWw6CiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywg
YXJncy5HZXRJc29sYXRlKCkpOwpAQCAtMTcxLDExICsxNzEsMjQgQEAgYm9vbCBWOFRlc3RFdmVu
dFRhcmdldDo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogfQogCiAK
LXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0RXZlbnRUYXJnZXQ6OndyYXBTbG93KFBhc3NS
ZWZQdHI8VGVzdEV2ZW50VGFyZ2V0PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RFdmVudFRhcmdldDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+
IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAg
RnJhbWUqIGZyYW1lID0gMDsKLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0
ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjb250ZXh0OworICAgIGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAm
JiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRD
dXJyZW50KCkpIHsKKyAgICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlLCB3ZSBlbnRlciB0aGUgY29u
dGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0CisgICAgICAgIC8vIGlz
IGRpZmZlcmVudCBmcm9tIHRoZSBjb250ZXh0IHRoYXQgd2UgYXJlIGFib3V0IHRvIGVudGVyLgor
ICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNyZWF0aW9uQ29u
dGV4dC0+Q3JlYXRpb25Db250ZXh0KCkpOworICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0
eSgpKTsKKyAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKKyAgICB9CisKKyAgICB3cmFwcGVyID0g
VjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwor
ICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwog
ICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFw
cGVyOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERP
TVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RFdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmgKaW5kZXggNjI2YjAxYmNmNGFjZTJiMDM4NmFiOWY2NTJm
MmYzODg2ZTFjOTVlZS4uNjE4MmIyNzU4ZWQwZDg0NzI3OTEwMTkxMWZmN2VlZDIwYjQ0YTkzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEV2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGVzdEV2ZW50VGFyZ2V0Kj4ob2JqZWN0
LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsK
ICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVz
dEV2ZW50VGFyZ2V0Kiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0g
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CisgICAgaW5saW5l
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV2ZW50VGFyZ2V0Kiwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+KCksIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZv
aWQqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9p
ZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJ
bmZvIGluZm87CkBAIC01MCwxMCArNTAsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBp
bnQgZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXggPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVs
ZENvdW50ICsgMDsKICAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4
RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOwogcHJpdmF0ZToKLSAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RFdmVudFRh
cmdldD4sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVm
UHRyPFRlc3RFdmVudFRhcmdldD4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSopOwogfTsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RF
dmVudFRhcmdldDo6d3JhcChUZXN0RXZlbnRUYXJnZXQqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50VGFyZ2V0Ojp3cmFwKFRlc3RFdmVudFRhcmdldCogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRE
T01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQpAQCAtNjEsMTMgKzYxLDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0
RXZlbnRUYXJnZXQ6OndyYXAoVGVzdEV2ZW50VGFyZ2V0KiBpbXBsLCB2ODo6SGFuZGxlCiAgICAg
cmV0dXJuIFY4VGVzdEV2ZW50VGFyZ2V0Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEV2
ZW50VGFyZ2V0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQg
PSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEV2ZW50VGFyZ2V0KiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIGlmICghaW1wbCkKICAg
ICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKICAgICByZXR1cm4gVjhUZXN0
RXZlbnRUYXJnZXQ6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KLWlu
bGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0RXZlbnRUYXJn
ZXQgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdEV2ZW50VGFyZ2V0ID4g
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4g
dG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhj
ZXB0aW9uLmNwcAppbmRleCBkYzEzYTMwZjViNjU4NDUzMmQyNjkzMTRjYjYzZGZkZGMyZGU0M2Jh
Li5kODAxOTlkOWYxMTljODlkNzAwM2Y5NmEyNzQ0MTdiY2I3M2JmN2RjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhj
ZXB0aW9uLmNwcApAQCAtMTAxLDExICsxMDEsMjQgQEAgYm9vbCBWOFRlc3RFeGNlcHRpb246Okhh
c0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIH0KIAogCi12ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4VGVzdEV4Y2VwdGlvbjo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXhj
ZXB0aW9uPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFeGNlcHRp
b246OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV4Y2VwdGlvbj4gaW1wbCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKLSAgICBGcmFtZSogZnJhbWUgPSAwOwot
ICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoZnJhbWUsICZp
bmZvLCBpbXBsLmdldCgpKTsKKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7
CisgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+
Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgeworICAgICAg
ICAvLyBGb3IgcGVyZm9ybWFuY2UsIHdlIGVudGVyIHRoZSBjb250ZXh0IG9ubHkgaWYgdGhlIGN1
cnJlbnRseSBydW5uaW5nIGNvbnRleHQKKyAgICAgICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhl
IGNvbnRleHQgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gZW50ZXIuCisgICAgICAgIGNvbnRleHQgPSB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRl
eHQoKSk7CisgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOworICAgICAgICBjb250
ZXh0LT5FbnRlcigpOworICAgIH0KKworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3Rh
bnRpYXRlVjhPYmplY3QoJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgaWYgKCFjb250ZXh0Lklz
RW1wdHkoKSkKKyAgICAgICAgY29udGV4dC0+RXhpdCgpOworCiAgICAgaWYgKFVOTElLRUxZKHdy
YXBwZXIuSXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yRE9NT2JqZWN0KGltcGwsIHdyYXBwZXIsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5o
CmluZGV4IDY1ZTZkMDFhMTllOGMzNDVjYjJkZTE5ZjY1ZDEyOWVmZTE1NzA5YzQuLjZmMjAxMGRh
Y2U0ZTc4NTdiNmZlMWEyYzkzZjFhYjIyN2ZjYzFlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmgKQEAg
LTQxLDE2ICs0MSwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUZXN0RXhjZXB0aW9uKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmll
bGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV4Y2VwdGlvbiosIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4
OjpJc29sYXRlKiA9IDApOworICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwKFRlc3RFeGNlcHRpb24qLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAg
c3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9N
V3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4p
OwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0aWMgY29uc3QgaW50
IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQg
KyAwOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xv
dyhQYXNzUmVmUHRyPFRlc3RFeGNlcHRpb24+LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXhjZXB0aW9uPiwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4VGVzdEV4Y2VwdGlvbjo6d3JhcChUZXN0RXhjZXB0aW9uKiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFeGNlcHRpb246OndyYXAoVGVzdEV4
Y2VwdGlvbiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBnZXRET01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAo
IXdyYXBwZXIuSXNFbXB0eSgpKQpAQCAtNTgsMTMgKzU4LDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhUZXN0RXhjZXB0aW9uOjp3cmFwKFRlc3RFeGNlcHRpb24qIGltcGwsIHY4OjpIYW5k
bGU8djg6CiAgICAgcmV0dXJuIFY4VGVzdEV4Y2VwdGlvbjo6d3JhcFNsb3coaW1wbCwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFRlc3RFeGNlcHRpb24qIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRl
ID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0RXhjZXB0aW9uKiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIGlmICghaW1w
bCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKICAgICByZXR1cm4g
VjhUZXN0RXhjZXB0aW9uOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdEV4Y2Vw
dGlvbiA+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0RXhjZXB0aW9uID4g
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4g
dG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50
ZXJmYWNlLmNwcAppbmRleCAyMTA4YmQ4MWZhOGRiYWE4NGU3MjBhZjMzNWQ5NTU4YTk4ZDNhMDky
Li5jNTM1MDc2NzE1NTQ1ODA0MmYyMjhiMmRkMWFiYWM1NTlmYTNjMTliIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50
ZXJmYWNlLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gc3VwcGxlbWVudGFsTm9kZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdEludGVyZmFjZS5zdXBwbGVtZW50YWxOb2RlLl9nZXQi
KTsKICAgICBUZXN0SW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RJbnRlcmZhY2U6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbE5vZGUoaW1wKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRl
KCkpOworICAgIHJldHVybiB0b1Y4KFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUo
aW1wKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCkBAIC0xNjgsNyArMTY4
LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxNZXRob2QyQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXIKICAgICBSZWZQdHI8VGVzdE9iaj4gcmVzdWx0
ID0gVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMihzY3JpcHRDb250ZXh0LCBp
bXAsIHN0ckFyZywgb2JqQXJnLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAg
Z290byBmYWlsOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1
bHQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgfQog
ICAgIGZhaWw6CiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRl
KCkpOwpAQCAtMzQ0LDExICszNDQsMjQgQEAgQWN0aXZlRE9NT2JqZWN0KiBWOFRlc3RJbnRlcmZh
Y2U6OnRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWMKICAgICBy
ZXR1cm4gdG9OYXRpdmUob2JqZWN0KTsKIH0gICAgICAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RJbnRlcmZhY2U6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEludGVyZmFjZT4gaW1w
bCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJmYWNlOjp3cmFwU2xv
dyhQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAgRnJhbWUqIGZyYW1lID0gMDsKLSAgICB3cmFwcGVy
ID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5n
ZXQoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OworICAgIGlmICgh
Y3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29u
dGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8gRm9yIHBl
cmZvcm1hbmNlLCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVu
bmluZyBjb250ZXh0CisgICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjb250ZXh0IHRo
YXQgd2UgYXJlIGFib3V0IHRvIGVudGVyLgorICAgICAgICBjb250ZXh0ID0gdjg6OkxvY2FsPHY4
OjpDb250ZXh0Pjo6TmV3KGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkpOworICAg
ICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKKyAgICAgICAgY29udGV4dC0+RW50ZXIo
KTsKKyAgICB9CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2Jq
ZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCisg
ICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1w
dHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckFjdGl2
ZURPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuaAppbmRl
eCAxNDc2ZjhlNWQwNzhlMjU1OTg5MDNmYzdmNzQ2ZDE5YzVlMjNhYTI3Li5hNzIxMTgyMjM5MGYw
OGI1MzAzNzliOGZmMTEwNGEyMTY4YWY5MDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5oCkBAIC00Myw3
ICs0Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFRlc3RJbnRlcmZhY2UqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCh2OERP
TVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcChUZXN0SW50ZXJmYWNlKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xh
dGUqID0gMCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAo
VGVzdEludGVyZmFjZSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMg
dm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRET01XcmFwcGVy
KERPTURhdGFTdG9yZSosIHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAg
c3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwpAQCAtNTIsMTAgKzUyLDEwIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5hbWVkUHJvcGVydHlTZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+LCB2ODo6TG9jYWw8djg6OlZhbHVlPiwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYpOwogICAgIHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEludGVyZmFj
ZT4sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRy
PFRlc3RJbnRlcmZhY2U+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqKTsKIH07CiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJm
YWNlOjp3cmFwKFRlc3RJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IFY4VGVzdEludGVyZmFjZTo6d3JhcChUZXN0SW50ZXJmYWNlKiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAg
ICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldEFjdGl2ZURPTU9iamVj
dE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkp
CkBAIC02MywxMyArNjMsMTMgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RJbnRlcmZh
Y2U6OndyYXAoVGVzdEludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODoKICAgICByZXR1cm4g
VjhUZXN0SW50ZXJmYWNlOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEludGVyZmFjZSog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogICAgIHJldHVybiBWOFRlc3RJbnRlcmZhY2U6Ondy
YXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KLWlubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0SW50ZXJmYWNlID4gaW1wbCwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RJbnRlcmZhY2UgPiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggY2EzM2ZlNWVkNjgxNzc4NWJmMzJhMzJkZjQyZDhlMTAw
M2NiZTRhZS4uMjRjNGRmNjk4NThhNjA2NmZjZjQ1NTNlYTI2MjgwODg1NzIxZDJkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMTEwLDExICsx
MTAsMjQgQEAgYm9vbCBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyOwotICAgIEZyYW1lKiBmcmFtZSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4
RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkp
OworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKKyAgICBpZiAoIWNyZWF0
aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQo
KSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZvciBwZXJmb3Jt
YW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcg
Y29udGV4dAorICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdl
IGFyZSBhYm91dCB0byBlbnRlci4KKyAgICAgICAgY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKTsKKyAgICAgICAg
QVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CisgICAgICAgIGNvbnRleHQtPkVudGVyKCk7Cisg
ICAgfQorCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgm
aW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAg
ICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkp
KQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qo
aW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuaAppbmRleCBhN2I4ODFjOGUwYTJjMTkxMmYzZDU4MmRkZGQ2MGIwM2FlNjc4OGZj
Li5hZGYzNDVlZDg1NDMwMGMyZjhhY2EzZDk3ZjdjMjk4OWZmNTgzMDg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKQEAgLTQxLDE2ICs0MSwxNiBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcio+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9N
V3JhcHBlck9iamVjdEluZGV4KSk7CiAgICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgdjg6Oklzb2xhdGUqID0gMCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXAoVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklz
b2xhdGUqID0gMCk7CiAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0
YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4pOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAg
ICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAwOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Piwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSop
OworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIH07CiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcjo6d3JhcChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmpl
Y3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgp
KQpAQCAtNTgsMTMgKzU4LDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lcjo6d3JhcChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0CiAgICAgcmV0dXJu
IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUg
PSAwKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhp
c29sYXRlKTsKICAgICByZXR1cm4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcChp
bXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQotaW5saW5lIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyID4gaW1w
bCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
ID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1
cm4gdG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IDAyMmE3Zjg4ZDg0ZGZiOGI3YzJjMTJk
N2YyYjBhYjFiODNkOWFmNjAuLjZlMjYyZDQzYzRmNThjZjQzMzE1MmZkM2IzMDQxNjFkNDk2MDNl
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTYxLDcgKzYxLDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODoKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1l
bnQgaXMgYWRkZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3RoZXJ3aXNlLCB0aGUgVGVzdE5hbWVk
Q29uc3RydWN0b3IgaW5zdGFuY2UKICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5v
ZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5LgotICAg
IHRvVjgoZG9jdW1lbnQsIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdl
dElzb2xhdGUoKSk7CisgICAgdG9WOChkb2N1bWVudCwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJ
c29sYXRlKCkpOwogCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4g
dGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CkBAIC0xNTQs
MTEgKzE1NCwyNCBAQCBBY3RpdmVET01PYmplY3QqIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OnRv
QWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdAogICAgIHJldHVybiB0b05hdGl2
ZShvYmplY3QpOwogfSAgICAgIAogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5hbWVk
Q29uc3RydWN0b3I6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IGlt
cGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6
OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+IGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsK
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAgRnJhbWUqIGZyYW1lID0g
MDsKLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1l
LCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0OworICAgIGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRl
eHQtPkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsKKyAg
ICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlLCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRo
ZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0CisgICAgICAgIC8vIGlzIGRpZmZlcmVudCBmcm9t
IHRoZSBjb250ZXh0IHRoYXQgd2UgYXJlIGFib3V0IHRvIGVudGVyLgorICAgICAgICBjb250ZXh0
ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25D
b250ZXh0KCkpOworICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKKyAgICAgICAg
Y29udGV4dC0+RW50ZXIoKTsKKyAgICB9CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpp
bnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIGlmICghY29udGV4
dC5Jc0VtcHR5KCkpCisgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VM
WSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpT
V3JhcHBlckZvckFjdGl2ZURPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1l
ZENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCmluZGV4IDIxMTc2MzU5ZGUyZmFlNGU4MWRmYmQzNzIw
YjViYzEzMGI5MzA1ZGIuLmUxNmUyMTEwNDMwMzFmNmJhYWEwMjYxY2I3NTBlZWYwYTdjYjcxMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROYW1lZENvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuaApAQCAtNDcsMTcgKzQ3LDE3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3ROYW1lZENv
bnN0cnVjdG9yKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFw
cGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXAoVGVzdE5hbWVkQ29uc3RydWN0b3IqLCB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNv
bGF0ZSogPSAwKTsKKyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cChUZXN0TmFtZWRDb25zdHJ1Y3RvciosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25D
b250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRE
T01XcmFwcGVyKERPTURhdGFTdG9yZSosIHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
Pik7CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwogICAgIHN0YXRpYyBBY3RpdmVE
T01PYmplY3QqIHRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwogICAg
IHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlcklu
dGVybmFsRmllbGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0b3I+LCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcj4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2
ODo6SXNvbGF0ZSopOwogfTsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENv
bnN0cnVjdG9yOjp3cmFwKFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp3cmFwKFRlc3ROYW1lZENv
bnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IGdldEFjdGl2ZURPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAg
ICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCkBAIC02NSwxMyArNjUsMTMgQEAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp3cmFwKFRlc3ROYW1lZENvbnN0
cnVjdG9yKiBpbXBsLAogICAgIHJldHVybiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp3cmFwU2xv
dyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoVGVzdE5hbWVkQ29uc3RydWN0b3IqIGltcGwsIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCks
IHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBp
c29sYXRlID0gMCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRo
Q2hlY2soaXNvbGF0ZSk7CiAgICAgcmV0dXJuIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OndyYXAo
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KLWlubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0TmFtZWRDb25zdHJ1Y3RvciA+IGltcGwsIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0TmFtZWRDb25zdHJ1Y3RvciA+IGltcGwsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgcmV0dXJuIHRvVjgoaW1w
bC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcAppbmRleCA0
NTgzNDI4NjA1NTQ5ZjE5ZDg2NDEzYjFmNGQ0NWEyYWQzY2RjNTZiLi41NjU1YThjMDFhNzUzNGEx
ZmYzMGFjZmU2ZTBmZjk5YjE5NmFmZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCkBAIC0xMDksMjggKzEwOSwy
NSBAQCBib29sIFY4VGVzdE5vZGU6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
YWx1ZSkKIH0KIAogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5vZGU6OndyYXBTbG93
KFBhc3NSZWZQdHI8VGVzdE5vZGU+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IFY4VGVzdE5vZGU6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5vZGU+IGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsK
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHZvaWQqPihzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbC5nZXQoKSkpID09IHN0YXRpY19jYXN0
PHZvaWQqPihpbXBsLmdldCgpKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbC0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKIAotICAgIC8vIEVudGVyIHRoZSBub2RlJ3MgY29udGV4dCBhbmQgY3JlYXRl
IHRoZSB3cmFwcGVyIGluIHRoYXQgY29udGV4dC4KICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0OwotICAgIGlmIChmcmFtZSkgewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiB1bmRlcmx5aW5nSGFuZGxlID0gZnJhbWUtPnNjcmlwdCgpLT51bnNhZmVIYW5kbGVUb0N1
cnJlbnRXb3JsZENvbnRleHQoKTsKLSAgICAgICAgaWYgKHY4OjpDb250ZXh0OjpHZXRDdXJyZW50
KCkgIT0gdW5kZXJseWluZ0hhbmRsZSkgewotICAgICAgICAgICAgLy8gRm9yIHBlcmZvcm1hbmNl
LCB3ZSBlbnRlciB0aGUgY29udGV4dCBvbmx5IGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250
ZXh0Ci0gICAgICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdl
IGFyZSBhYm91dCB0byBlbnRlci4KLSAgICAgICAgICAgIGNvbnRleHQgPSB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcodW5kZXJseWluZ0hhbmRsZSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnRl
eHQuSXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPkVudGVyKCk7Ci0gICAgICAg
IH0KKyAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0
LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CisgICAg
ICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25seSBpZiB0aGUg
Y3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0
aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4KKyAgICAgICAgY29udGV4dCA9
IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29u
dGV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CisgICAgICAgIGNv
bnRleHQtPkVudGVyKCk7CiAgICAgfQotICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3Rh
bnRpYXRlVjhPYmplY3QoZnJhbWUsICZpbmZvLCBpbXBsLmdldCgpKTsKLSAgICAvLyBFeGl0IHRo
ZSBub2RlJ3MgY29udGV4dCBpZiBpdCB3YXMgZW50ZXJlZC4KKworICAgIHdyYXBwZXIgPSBWOERP
TVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoJmluZm8sIGltcGwuZ2V0KCkpOworCiAgICAg
aWYgKCFjb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgY29udGV4dC0+RXhpdCgpOworCiAgICAg
aWYgKFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IFY4RE9NV3Jh
cHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RO
b2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9k
ZS5oCmluZGV4IDVkNGI5YzUzZjJiNTRiZWI2NmM3Zjg5NmJlMDE4NzcwNjEzZmU0ZWUuLjQyYTVj
NTRlODUxYTUyZDExNTdiNDU2Y2NiZGNkMWQ4Y2U3ODZlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuaApAQCAtNDEsMTcg
KzQxLDE3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFRlc3ROb2RlKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFw
cGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXAoVGVzdE5vZGUqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlv
bkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsK
KyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0Tm9kZSos
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMgdm9pZCBkZXJlZk9iamVj
dCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSos
IHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAgc3RhdGljIFdyYXBwZXJU
eXBlSW5mbyBpbmZvOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0
b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CiAgICAgc3RhdGljIGNvbnN0IGludCBp
bnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsg
MDsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3co
UGFzc1JlZlB0cjxUZXN0Tm9kZT4sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3ROb2RlPiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IFY4VGVzdE5vZGU6OndyYXAoVGVzdE5vZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IFY4VGVzdE5vZGU6OndyYXAoVGVzdE5vZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpnZXRDYWNoZWRX
cmFwcGVyKGltcGwpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQpAQCAtNTksMTMg
KzU5LDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0Tm9kZTo6d3JhcChUZXN0Tm9k
ZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4KICAgICByZXR1cm4gVjhUZXN0Tm9kZTo6
d3JhcFNsb3coaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAotaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3ROb2RlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
VGVzdE5vZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAg
ICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwog
ICAgIHJldHVybiBWOFRlc3ROb2RlOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiB9Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVz
dE5vZGUgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxp
bmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE5vZGUgPiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4
KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4
IDE4ZGIyNzJmMWI0NzlkZjRiZjhjNjhkZTg1YTc4ZDZjNTNhNzhkMzguLjQ2YjQxNWQyODFhNTc4
ZDBmMGJhNjgyOTU1NWFjODZhNWU1YTQ0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0xMDIsNyArMTAyLDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seVRlc3RPYmpBdHRyQXR0ckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBSZWZQdHI8VGVzdE9iaj4gcmVzdWx0ID0g
aW1wLT5yZWFkT25seVRlc3RPYmpBdHRyKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdy
YXBwZXIgPSByZXN1bHQuZ2V0KCkgPyBnZXRET01PYmplY3RNYXAoaW5mby5HZXRJc29sYXRlKCkp
LmdldChyZXN1bHQuZ2V0KCkpIDogdjhVbmRlZmluZWQoKTsKICAgICBpZiAod3JhcHBlci5Jc0Vt
cHR5KCkpIHsKLSAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkhvbGRl
cigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICB3cmFw
cGVyID0gdG9WOChyZXN1bHQuZ2V0KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIFY4RE9NV3Jh
cHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2UoaW5mby5Ib2xkZXIoKSwgInJlYWRPbmx5VGVz
dE9iakF0dHIiLCB3cmFwcGVyKTsKICAgICB9CkBAIC0yMjksNyArMjI5LDcgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0ZXN0T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGMKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnRlc3RPYmpBdHRy
Ll9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcC0+dGVzdE9iakF0dHIoKSwgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+
dGVzdE9iakF0dHIoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBz
dGF0aWMgdm9pZCB0ZXN0T2JqQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpAQCAtMjQ1LDcgKzI0NSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gWE1M
T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5YTUxPYmpBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4
KGltcC0+eG1sT2JqQXR0cigpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT54bWxPYmpBdHRyKCksIGluZm8uSG9sZGVy
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgWE1MT2JqQXR0ckF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNDIxLDcgKzQyMSw3IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdHlwZWRBcnJheUF0dHJBdHRyR2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai50eXBl
ZEFycmF5QXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPnR5cGVkQXJyYXlBdHRyKCks
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1
cm4gdG9WOChpbXAtPnR5cGVkQXJyYXlBdHRyKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgdHlwZWRBcnJheUF0dHJBdHRyU2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTU0OCw3ICs1NDgsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0ckdl
dHRlcih2ODo6TAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBn
ZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAg
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENvbnRleHQpLCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShzY3JpcHRDb250ZXh0KSwgaW5mby5I
b2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQpAQCAtNTc2LDcgKzU3Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0ckdldHRlcih2ODo6TG9jYWw8CiAgICAg
ICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRl
LmV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjgodi5yZWxl
YXNlKCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAg
ICByZXR1cm4gdG9WOCh2LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTYwNyw3ICs2MDcsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzQXR0ckdldHRlcgogICAgIFJlZlB0cjxUZXN0T2JqPiB2ID0gaW1wLT53aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhzY3JpcHRDb250ZXh0LCBlYyk7
CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihl
YywgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRv
Vjgodi5yZWxlYXNlKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTYzNSw3ICs2MzUsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGVBdAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRD
b250ZXh0KQogICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChp
bXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3Rh
dGUsIHNjcmlwdENvbnRleHQpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKHN0YXRlLCBzY3JpcHRDb250ZXh0KSwgaW5mby5Ib2xk
ZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0clNldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlUmEKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRl
KCkpOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4g
dG9WOCh2LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29s
YXRlKCkpOworICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZv
LkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKQEAgLTcwNCw3ICs3MDQsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQogICAgICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKHN0YXRlLCBzY3JpcHRD
b250ZXh0KSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOwor
ICAgIHJldHVybiB0b1Y4KGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoc3RhdGUsIHNjcmlwdENvbnRleHQpLCBpbmZvLkhvbGRl
cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlQXR0clNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC03MzEsNyArNzMxLDcgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmli
dXRlQXR0ckdldHRlcigKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrRm9ySW5zcGVjdG9yKCkpOwogICAgIGlmICghY2FsbFN0YWNrKQog
ICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPndpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoY2FsbFN0YWNrKSwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGlt
cC0+d2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShjYWxsU3RhY2spLCBp
bmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKQEAgLTgyNSw3ICs4MjUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGNhY2hlZEF0dHJpYnV0ZTFBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYQogICAgIFJlZlB0cjxhbnk+IHJlc3VsdCA9IGltcC0+Y2FjaGVkQXR0cmlidXRlMSgpOwog
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gcmVzdWx0LmdldCgpID8gZ2V0RE9N
T2JqZWN0TWFwKGluZm8uR2V0SXNvbGF0ZSgpKS5nZXQocmVzdWx0LmdldCgpKSA6IHY4VW5kZWZp
bmVkKCk7CiAgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7Ci0gICAgICAgIHdyYXBwZXIgPSB0
b1Y4KHJlc3VsdC5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8u
R2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZv
LkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCiAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNl
KGluZm8uSG9sZGVyKCksICJjYWNoZWRBdHRyaWJ1dGUxIiwgd3JhcHBlcik7CiAgICAgfQpAQCAt
ODM5LDcgKzgzOSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2FjaGVkQXR0cmli
dXRlMkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiAgICAgUmVmUHRyPGFueT4g
cmVzdWx0ID0gaW1wLT5jYWNoZWRBdHRyaWJ1dGUyKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdyYXBwZXIgPSByZXN1bHQuZ2V0KCkgPyBnZXRET01PYmplY3RNYXAoaW5mby5HZXRJc29s
YXRlKCkpLmdldChyZXN1bHQuZ2V0KCkpIDogdjhVbmRlZmluZWQoKTsKICAgICBpZiAod3JhcHBl
ci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZv
LkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAg
ICB3cmFwcGVyID0gdG9WOChyZXN1bHQuZ2V0KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIFY4
RE9NV3JhcHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2UoaW5mby5Ib2xkZXIoKSwgImNhY2hl
ZEF0dHJpYnV0ZTIiLCB3cmFwcGVyKTsKICAgICB9CkBAIC05NDksMTQgKzk0OSwxNCBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnRlbnREb2N1bWVudEF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbQogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvTm9kZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+Y29udGVudERvY3Vt
ZW50KCkpKQogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpOdWxsKGlu
Zm8uR2V0SXNvbGF0ZSgpKSk7CiAKLSAgICByZXR1cm4gdG9WOChpbXAtPmNvbnRlbnREb2N1bWVu
dCgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAg
cmV0dXJuIHRvVjgoaW1wLT5jb250ZW50RG9jdW1lbnQoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5H
ZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG11dGFibGVQ
b2ludEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tdXRhYmxlUG9p
bnQuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoU1ZHU3RhdGljUHJvcGVydHlU
ZWFyT2ZmPFRlc3RPYmosIEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLCBpbXAtPm11dGFibGVQb2lu
dCgpLCAmVGVzdE9iajo6dXBkYXRlTXV0YWJsZVBvaW50KSksIGluZm8uSG9sZGVyKCktPkNyZWF0
aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoV1RGOjpn
ZXRQdHIoU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmPFRlc3RPYmosIEZsb2F0UG9pbnQ+OjpjcmVh
dGUoaW1wLCBpbXAtPm11dGFibGVQb2ludCgpLCAmVGVzdE9iajo6dXBkYXRlTXV0YWJsZVBvaW50
KSksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQg
bXV0YWJsZVBvaW50QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC05
NzIsNyArOTcyLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbW11dGFibGVQb2lu
dEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLmltbXV0YWJsZVBvaW50Ll9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KFdURjo6
Z2V0UHRyKFNWR1Byb3BlcnR5VGVhck9mZjxGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcC0+aW1tdXRh
YmxlUG9pbnQoKSkpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJ
c29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKFNWR1Byb3BlcnR5VGVhck9m
ZjxGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcC0+aW1tdXRhYmxlUG9pbnQoKSkpLCBpbmZvLkhvbGRl
cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGltbXV0YWJsZVBvaW50
QXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0xMTExLDcgKzExMTEs
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iak1ldGhvZENhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vYmpN
ZXRob2QiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcC0+b2JqTWV0aG9kKCksIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChpbXAtPm9i
ak1ldGhvZCgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqTWV0aG9kV2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTEyMyw3ICsxMTIzLDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBvYmpNZXRob2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MKICAgICBFWENFUFRJT05fQkxPQ0sobG9uZyBsb25nLCBBcmcsIHRvSW50NjQoTUFZ
QkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwogICAg
IFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8Piwgc3Ry
QXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQp
KTsKICAgICBFWENFUFRJT05fQkxPQ0soVGVzdE9iaiosIG9iakFyZywgVjhUZXN0T2JqOjpIYXNJ
bnN0YW5jZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0SXNVbmRlZmlu
ZWQpKSA/IFY4VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAw
KTsKLSAgICByZXR1cm4gdG9WOChpbXAtPm9iak1ldGhvZFdpdGhBcmdzKEFyZywgc3RyQXJnLCBv
YmpBcmcpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHRvVjgoaW1wLT5vYmpNZXRob2RXaXRoQXJncyhBcmcsIHN0ckFyZywgb2JqQXJn
KSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCkBAIC0xMTYwLDcgKzExNjAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjayhjb25z
dCB2OAogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPm1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBvYmpBcmcsIGVjKTsKICAgICBpZiAoVU5MSUtFTFko
ZWMpKQogICAgICAgICBnb3RvIGZhaWw7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2Uo
KSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJl
dHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKICAgICB9CiAgICAgZmFpbDoKICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBh
cmdzLkdldElzb2xhdGUoKSk7CkBAIC0xMjY3LDcgKzEyNjcsNyBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZU9iakNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZwogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPndpdGhTY3JpcHRTdGF0
ZU9iaigmc3RhdGUpOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAg
ICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pigp
LCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwg
YXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTMwMCw3ICsxMzAwLDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2
ODo6QXJndW0KICAgICAgICAgZ290byBmYWlsOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVz
dWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0K
ICAgICBmYWlsOgogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKQEAgLTEzNDYsNyArMTM0Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvCiAgICAg
ICAgIGdvdG8gZmFpbDsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0g
ICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCks
IGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICB9CiAgICAgZmFpbDoKICAg
ICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7CkBAIC0xMzYz
LDcgKzEzNjMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQwogICAgIFJlZlB0cjxUZXN0T2Jq
PiByZXN1bHQgPSBpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzKCZzdGF0ZSwgc2NyaXB0Q29udGV4dCk7CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSwgYXJn
cy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9W
OChyZXN1bHQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9
CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xODMzLDcgKzE4
MzMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldFNWR0RvY3VtZW50Q2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBSZWZQdHI8U1ZHRG9jdW1lbnQ+IHJl
c3VsdCA9IGltcC0+Z2V0U1ZHRG9jdW1lbnQoZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykpCiAg
ICAgICAgIGdvdG8gZmFpbDsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRv
VjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwog
ICAgIH0KICAgICBmYWlsOgogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKQEAgLTE4ODcsMTQgKzE4ODcsMTQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBtdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGEKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm11dGFibGVQb2ludEZ1bmN0aW9uIik7
CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
LSAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cihTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2lu
dD46OmNyZWF0ZShpbXAtPm11dGFibGVQb2ludEZ1bmN0aW9uKCkpKSwgYXJncy5Ib2xkZXIoKS0+
Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChX
VEY6OmdldFB0cihTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXAtPm11
dGFibGVQb2ludEZ1bmN0aW9uKCkpKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkp
OwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGltbXV0YWJsZVBvaW50RnVuY3Rp
b25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouaW1tdXRhYmxlUG9pbnRGdW5jdGlvbiIpOwogICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoV1RG
OjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLT5pbW11
dGFibGVQb2ludEZ1bmN0aW9uKCkpKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCks
IGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cihTVkdQcm9w
ZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXAtPmltbXV0YWJsZVBvaW50RnVuY3Rp
b24oKSkpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3JhbmdlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKQEAgLTE5MTksNyArMTkxOSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
c3RyaWN0RnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIFJl
ZlB0cjxib29sPiByZXN1bHQgPSBpbXAtPnN0cmljdEZ1bmN0aW9uKHN0ciwgYSwgYiwgZWMpOwog
ICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAgICAgIGdvdG8gZmFpbDsKLSAgICByZXR1cm4gdG9W
OChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIo
KSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0KICAgICBmYWlsOgogICAgIHJldHVybiBzZXRE
T01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTIzMjEsMTEgKzIzMjEsMjQg
QEAgdm9pZCBWOFRlc3RPYmo6Omluc3RhbGxQZXJDb250ZXh0UHJvcGVydGllcyh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGluc3RhbmNlLCBUZXMKICAgICB9CiB9CiAKLXY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhUZXN0T2JqOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RPYmo+IGltcGwsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUp
Cit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE9iajo6d3JhcFNsb3coUGFzc1JlZlB0cjxU
ZXN0T2JqPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
OwotICAgIEZyYW1lKiBmcmFtZSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5z
dGFudGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKKyAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0Vt
cHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4
dDo6R2V0Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIg
dGhlIGNvbnRleHQgb25seSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAg
ICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBl
bnRlci4KKyAgICAgICAgY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVh
dGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0
LklzRW1wdHkoKSk7CisgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CisgICAgfQorCisgICAgd3Jh
cHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQo
KSk7CisKKyAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0LT5FeGl0
KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1
cm4gd3JhcHBlcjsKICAgICBpbnN0YWxsUGVyQ29udGV4dFByb3BlcnRpZXMod3JhcHBlciwgaW1w
bC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmgKaW5kZXggNjZkMDRhMjc5NzZlZWY5ZTQ1ZTczNDE5MzMyMDg3NzE4MDNi
NDlmMS4uNGQ0MDcyMDI0MzFlMmMyNjg0OTMyYjdiNzBiMTI0OTQ1MDYzZjA1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaApA
QCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUZXN0T2JqKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhE
T01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE9iaiosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9
IDApOworICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RP
YmoqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIHZvaWQgZGVyZWZP
YmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3Rv
cmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwogICAgIHN0YXRpYyBXcmFw
cGVyVHlwZUluZm8gaW5mbzsKQEAgLTU0LDEwICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxG
aWVsZENvdW50ICsgMDsKICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4dFByb3BlcnRp
ZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgVGVzdE9iaiopOwogcHJpdmF0ZToKLSAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RPYmo+LCB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Cisg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0
T2JqPiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
Kik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE9iajo6d3JhcChUZXN0T2Jq
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29s
YXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RPYmo6OndyYXAoVGVz
dE9iaiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBnZXRET01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAoIXdy
YXBwZXIuSXNFbXB0eSgpKQpAQCAtNjUsMTMgKzY1LDEzIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gVjhUZXN0T2JqOjp3cmFwKFRlc3RPYmoqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNyCiAgICAgcmV0dXJuIFY4VGVzdE9iajo6d3JhcFNsb3coaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKIH0KIAotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RP
YmoqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0T2JqKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4
TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKICAgICByZXR1cm4gVjhUZXN0T2JqOjp3cmFwKGltcGws
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE9iaiA+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29s
YXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNz
UmVmUHRyPCBUZXN0T2JqID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0g
MCkKIHsKICAgICByZXR1cm4gdG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcAppbmRleCBmZGM3MzQ0MDJhMGM2NDBhNjE1NjE2Y2U5MTJlNTAxODdhZWU4
MzNmLi5iYTRjNDBkNTY0YWY3ZjQ2ZDBhZDIwZjE1MzFiZWVkMmYyOGUzYWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApA
QCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9ydHNBdHRy
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2CiAgICAgTWVzc2FnZVBv
cnRBcnJheSBwb3J0c0NvcHkoKnBvcnRzKTsKICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBwb3J0
QXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhwb3J0c0NvcHkuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBvcnRzQ29weS5zaXplKCk7ICsraSkKLSAgICAgICAgcG9ydEFycmF5LT5T
ZXQodjhJbnRlZ2VyKGksIGluZm8uR2V0SXNvbGF0ZSgpKSwgdG9WOChwb3J0c0NvcHlbaV0uZ2V0
KCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSkp
OworICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkp
LCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpKTsKICAgICByZXR1cm4gcG9ydEFycmF5OwogfQogCkBAIC0yOTMsMTEgKzI5MywyNCBAQCBi
b29sIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6SGFzSW5zdGFuY2Uodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbAogfQogCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6d3JhcFNs
b3coUGFzc1JlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotICAgIEZyYW1lKiBm
cmFtZSA9IDA7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVj
dChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY29udGV4dDsKKyAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRp
b25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgp
KSB7CisgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSwgd2UgZW50ZXIgdGhlIGNvbnRleHQgb25s
eSBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgY29udGV4dAorICAgICAgICAvLyBpcyBkaWZmZXJl
bnQgZnJvbSB0aGUgY29udGV4dCB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlci4KKyAgICAgICAg
Y29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjcmVhdGlvbkNvbnRleHQtPkNy
ZWF0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7Cisg
ICAgICAgIGNvbnRleHQtPkVudGVyKCk7CisgICAgfQorCisgICAgd3JhcHBlciA9IFY4RE9NV3Jh
cHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICBpZiAo
IWNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAo
VU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVy
OjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKaW5k
ZXggMmI4OWUxMDU0OTYwY2YxYTRmNmYxMDllNjQyYjI1MmY3ODQ1ODRhNi4uYjhjM2NkYjE5YTI0
ODg5OGMzY2NhOTFmNWMwOGQxNWUyZDhiMjQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApAQCAtNDMsMTcgKzQzLDE3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxG
aWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3RhdGlj
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CisgICAgaW5saW5lIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURh
dGFTdG9yZSosIHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAgc3RhdGlj
IFdyYXBwZXJUeXBlSW5mbyBpbmZvOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CiAgICAgc3RhdGljIGNv
bnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVs
ZENvdW50ICsgMDsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwor
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwogfTsKIAotdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OndyYXAoVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwKFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKGlzb2xhdGUpLmdldChp
bXBsKTsKICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKQEAgLTYxLDEzICs2MSwxMyBA
QCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6d3JhcChUZXN0U2VyaWFsaXplZAogICAgIHJldHVybiBWOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSA9IDApCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29s
YXRlID0gMCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hl
Y2soaXNvbGF0ZSk7CiAgICAgcmV0dXJuIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6d3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQotaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNv
bnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9
IDApCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRpb25D
b250ZXh0LCBpc29sYXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVRy
YW5zYWN0aW9uLmNwcAppbmRleCA0NDM3OGNmZWRlMDU0YmUwMzUwZGY1NjQ0MDg5NDU4MWI4NDQ1
MDIxLi4yMjVlNWFiYjZmMTc4OGUzYmFlMzZmZWM2ZTExNjZiMTNjYTc3ZTM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01UcmFuc2FjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwCkBAIC0xNDIsNyArMTQy
LDcgQEAgdm9pZCBET01UcmFuc2FjdGlvbjo6Y2FsbEZ1bmN0aW9uKGNvbnN0IGNoYXIqIHByb3Bl
cnR5TmFtZSkKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZWNlaXZlciA9IHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QodG9WOChtX3VuZG9NYW5hZ2VyLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pigp
KSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZWNlaXZlciA9IHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QodG9WOChtX3VuZG9NYW5hZ2VyKSk7CiAgICAgaWYgKHJlY2VpdmVyLklz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwYXJh
bWV0ZXJzWzBdID0geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
SURCQ3VzdG9tQmluZGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQ3Vz
dG9tQmluZGluZ3MuY3BwCmluZGV4IGRlNDBmMThhNGY5MGJhNDM2MzM3ODMxOTQ1MDZkZmExMTIx
OWY5NDcuLjk2OGNjMGM2NGYzNDM1MmU2MTcyYTI3M2FlYjU0Y2ZiNmIzOWM3MGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkN1c3RvbUJpbmRpbmdzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJDdXN0b21CaW5kaW5ncy5jcHAKQEAgLTUw
LDcgKzUwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SURCQ3Vyc29yV2l0aFZhbHVlOjp2
YWx1ZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3QKICAgICB9CiAKICAgICBSZWZQdHI8
SURCQW55PiByZXN1bHQgPSBpbXAtPnZhbHVlKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250
ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3Jh
cHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUo
KSk7CiAgICAgaW5mby5Ib2xkZXIoKS0+U2V0SGlkZGVuVmFsdWUocHJvcGVydHlOYW1lLCB3cmFw
cGVyKTsKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDNiYTIwZGI2YTQ2YmFk
MjFkZGM5MWRlZTIwNjI2YmFkZmU3YzU0MjEuLjQzY2VmZjRlYjY1ZmIwNDI2M2Y2NjdlNjBkYWVm
OWViZTc2MmZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNjM4LDExICs2MzgsMTEgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQoIXRyeUNhdGNoLkhhc0NhdWdodCgpKTsKICAgICAgICAgaWYgKG1lc3NhZ2VQ
b3J0cykgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZXNzYWdlUG9ydHMt
PnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgIG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMu
c2V0KFY4TWVzc2FnZVBvcnQ6OndyYXAobWVzc2FnZVBvcnRzLT5hdChpKS5nZXQoKSwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4oKSwgbV93cml0ZXIuZ2V0SXNvbGF0ZSgpKSwgaSk7CisgICAgICAg
ICAgICAgICAgbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cy5zZXQoVjhNZXNzYWdlUG9ydDo6d3Jh
cChtZXNzYWdlUG9ydHMtPmF0KGkpLmdldCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1f
d3JpdGVyLmdldElzb2xhdGUoKSksIGkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChhcnJheUJ1
ZmZlcnMpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlCdWZmZXJz
LT5zaXplKCk7IGkrKykgIHsKLSAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHY4QXJyYXlCdWZmZXIgPSBWOEFycmF5QnVmZmVyOjp3cmFwKGFycmF5QnVmZmVycy0+YXQoaSku
Z2V0KCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1fd3JpdGVyLmdldElzb2xhdGUoKSk7
CisgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB2OEFycmF5QnVmZmVyID0g
VjhBcnJheUJ1ZmZlcjo6d3JhcChhcnJheUJ1ZmZlcnMtPmF0KGkpLmdldCgpLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIG1fd3JpdGVyLmdldElzb2xhdGUoKSk7CiAgICAgICAgICAgICAgICAg
Ly8gQ29hbGVzY2UgbXVsdGlwbGUgb2NjdXJlbmNlcyBvZiB0aGUgc2FtZSBidWZmZXIgdG8gdGhl
IGZpcnN0IGluZGV4LgogICAgICAgICAgICAgICAgIGlmICghbV90cmFuc2ZlcnJlZEFycmF5QnVm
ZmVycy5jb250YWlucyh2OEFycmF5QnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgbV90cmFu
c2ZlcnJlZEFycmF5QnVmZmVycy5zZXQodjhBcnJheUJ1ZmZlciwgaSk7CkBAIC0xMDU3LDcgKzEw
NTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICghYXJy
YXlCdWZmZXJWaWV3LT5idWZmZXIoKSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcihE
YXRhQ2xvbmVFcnJvciwgbmV4dCk7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bmRl
cmx5aW5nQnVmZmVyID0gdG9WOChhcnJheUJ1ZmZlclZpZXctPmJ1ZmZlcigpLCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PigpLCBtX3dyaXRlci5nZXRJc29sYXRlKCkpOworICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdW5kZXJseWluZ0J1ZmZlciA9IHRvVjgoYXJyYXlCdWZmZXJWaWV3LT5i
dWZmZXIoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBtX3dyaXRlci5nZXRJc29sYXRlKCkp
OwogICAgICAgICBpZiAodW5kZXJseWluZ0J1ZmZlci5Jc0VtcHR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gaGFuZGxlRXJyb3IoRGF0YUNsb25lRXJyb3IsIG5leHQpOwogICAgICAgICBTdGF0ZUJh
c2UqIHN0YXRlT3V0ID0gZG9TZXJpYWxpemUodW5kZXJseWluZ0J1ZmZlciwgMCk7CkBAIC0xNjM0
LDcgKzE2MzQsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQocGl4ZWxBcnJheS0+bGVuZ3Ro
KCkgPj0gcGl4ZWxEYXRhTGVuZ3RoKTsKICAgICAgICAgbWVtY3B5KHBpeGVsQXJyYXktPmRhdGEo
KSwgbV9idWZmZXIgKyBtX3Bvc2l0aW9uLCBwaXhlbERhdGFMZW5ndGgpOwogICAgICAgICBtX3Bv
c2l0aW9uICs9IHBpeGVsRGF0YUxlbmd0aDsKLSAgICAgICAgKnZhbHVlID0gdG9WOChpbWFnZURh
dGEucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOworICAg
ICAgICAqdmFsdWUgPSB0b1Y4KGltYWdlRGF0YS5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0x
NjU2LDcgKzE2NTYsNyBAQCBwcml2YXRlOgogICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFy
cmF5QnVmZmVyID0gZG9SZWFkQXJyYXlCdWZmZXIoKTsKICAgICAgICAgaWYgKCFhcnJheUJ1ZmZl
cikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgKnZhbHVlID0gdG9WOChhcnJh
eUJ1ZmZlci5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNvbGF0ZSk7
CisgICAgICAgICp2YWx1ZSA9IHRvVjgoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMTY4Miw1OCArMTY4Miw1OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBzd2l0Y2ggKHN1YlRhZykgewogICAgICAgICBjYXNlIEJ5dGVBcnJheVRh
ZzoKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoSW50OEFycmF5OjpjcmVhdGUoYXJyYXlCdWZm
ZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSwgbV9pc29sYXRlKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoSW50OEFycmF5
OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBtX2lzb2xhdGUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgVW5zaWduZWRCeXRlQXJyYXlUYWc6Ci0gICAgICAgICAgICAqdmFsdWUg
PSB0b1Y4KFVpbnQ4QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxlYXNlKCksIGJ5dGVPZmZz
ZXQsIGJ5dGVMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCAgbV9pc29sYXRlKTsK
KyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoVWludDhBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVy
LnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCksIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKSwgIG1faXNvbGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnNp
Z25lZEJ5dGVDbGFtcGVkQXJyYXlUYWc6Ci0gICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KFVpbnQ4
Q2xhbXBlZEFycmF5OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBi
eXRlTGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgbV9pc29sYXRlKTsKKyAgICAg
ICAgICAgICp2YWx1ZSA9IHRvVjgoVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZl
ci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTaG9y
dEFycmF5VGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBzaG9ydExlbmd0aCA9IGJ5dGVMZW5n
dGggLyBzaXplb2YoaW50MTZfdCk7CiAgICAgICAgICAgICBpZiAoc2hvcnRMZW5ndGggKiBzaXpl
b2YoaW50MTZfdCkgIT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KEludDE2QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZl
ci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIHNob3J0TGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSwgbV9pc29sYXRlKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoSW50MTZBcnJh
eTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgc2hvcnRMZW5ndGgp
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIFVuc2lnbmVkU2hvcnRBcnJheVRhZzogewogICAg
ICAgICAgICAgdWludDMyX3Qgc2hvcnRMZW5ndGggPSBieXRlTGVuZ3RoIC8gc2l6ZW9mKHVpbnQx
Nl90KTsKICAgICAgICAgICAgIGlmIChzaG9ydExlbmd0aCAqIHNpemVvZih1aW50MTZfdCkgIT0g
Ynl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAq
dmFsdWUgPSB0b1Y4KFVpbnQxNkFycmF5OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBi
eXRlT2Zmc2V0LCBzaG9ydExlbmd0aCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNv
bGF0ZSk7CisgICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KFVpbnQxNkFycmF5OjpjcmVhdGUoYXJy
YXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBzaG9ydExlbmd0aCksIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgSW50QXJyYXlUYWc6IHsKICAgICAgICAgICAgIHVpbnQzMl90IGludExl
bmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2YoaW50MzJfdCk7CiAgICAgICAgICAgICBpZiAoaW50
TGVuZ3RoICogc2l6ZW9mKGludDMyX3QpICE9IGJ5dGVMZW5ndGgpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgKnZhbHVlID0gdG9WOChJbnQzMkFycmF5OjpjcmVh
dGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBpbnRMZW5ndGgpLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOworICAgICAgICAgICAgKnZhbHVlID0gdG9W
OChJbnQzMkFycmF5OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBp
bnRMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFVuc2lnbmVkSW50QXJyYXlUYWc6
IHsKICAgICAgICAgICAgIHVpbnQzMl90IGludExlbmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2Yo
dWludDMyX3QpOwogICAgICAgICAgICAgaWYgKGludExlbmd0aCAqIHNpemVvZih1aW50MzJfdCkg
IT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAqdmFsdWUgPSB0b1Y4KFVpbnQzMkFycmF5OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgp
LCBieXRlT2Zmc2V0LCBpbnRMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lz
b2xhdGUpOworICAgICAgICAgICAgKnZhbHVlID0gdG9WOChVaW50MzJBcnJheTo6Y3JlYXRlKGFy
cmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgaW50TGVuZ3RoKSwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PigpLCBtX2lzb2xhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGbG9hdEFycmF5VGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBmbG9h
dExlbmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2YoZmxvYXQpOwogICAgICAgICAgICAgaWYgKGZs
b2F0TGVuZ3RoICogc2l6ZW9mKGZsb2F0KSAhPSBieXRlTGVuZ3RoKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoRmxvYXQzMkFycmF5Ojpj
cmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBmbG9hdExlbmd0aCksIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNvbGF0ZSk7CisgICAgICAgICAgICAqdmFsdWUg
PSB0b1Y4KEZsb2F0MzJBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9m
ZnNldCwgZmxvYXRMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIERvdWJsZUFycmF5
VGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBmbG9hdExlbmd0aCA9IGJ5dGVMZW5ndGggLyBz
aXplb2YoZG91YmxlKTsKICAgICAgICAgICAgIGlmIChmbG9hdExlbmd0aCAqIHNpemVvZihkb3Vi
bGUpICE9IGJ5dGVMZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgKnZhbHVlID0gdG9WOChGbG9hdDY0QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxl
YXNlKCksIGJ5dGVPZmZzZXQsIGZsb2F0TGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgbV9pc29sYXRlKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoRmxvYXQ2NEFycmF5Ojpj
cmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBmbG9hdExlbmd0aCksIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRGF0YVZpZXdUYWc6Ci0gICAgICAgICAgICAqdmFsdWUg
PSB0b1Y4KERhdGFWaWV3OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgbV9pc29sYXRlKTsKKyAg
ICAgICAgICAgICp2YWx1ZSA9IHRvVjgoRGF0YVZpZXc6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxl
YXNlKCksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCks
IG1faXNvbGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NjgsNyArMTc2OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmICghZG9SZWFkVWludDY0KCZzaXplKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgUGFzc1JlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKEtVUkwoUGFyc2Vk
VVJMU3RyaW5nLCB1cmwpLCB0eXBlLCBzaXplKTsKLSAgICAgICAgKnZhbHVlID0gdG9WOChibG9i
LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOworICAgICAgICAqdmFsdWUg
PSB0b1Y4KGJsb2IsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNzg1LDcgKzE3ODUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAoIXJlYWRXZWJDb3JlU3RyaW5nKCZ1cmwpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZnMgPSBET01GaWxlU3lzdGVt
OjpjcmVhdGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBuYW1lLCBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpGaWxlU3lzdGVtVHlwZT4odHlwZSksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwp
LCBBc3luY0ZpbGVTeXN0ZW06OmNyZWF0ZSgpKTsKLSAgICAgICAgKnZhbHVlID0gdG9WOChmcy5y
ZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNvbGF0ZSk7CisgICAgICAg
ICp2YWx1ZSA9IHRvVjgoZnMucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1f
aXNvbGF0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgpAQCAtMTgwMiw3
ICsxODAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdHlw
ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFBhc3NSZWZQdHI8RmlsZT4g
ZmlsZSA9IEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdHlw
ZSk7Ci0gICAgICAgICp2YWx1ZSA9IHRvVjgoZmlsZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgbV9pc29sYXRlKTsKKyAgICAgICAgKnZhbHVlID0gdG9WOChmaWxlLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCksIG1faXNvbGF0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtMTgyNCw3ICsxODI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJM
KFBhcnNlZFVSTFN0cmluZywgdXJsU3RyaW5nKSwgdHlwZSkpOwogICAgICAgICB9Ci0gICAgICAg
ICp2YWx1ZSA9IHRvVjgoZmlsZUxpc3QsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNv
bGF0ZSk7CisgICAgICAgICp2YWx1ZSA9IHRvVjgoZmlsZUxpc3QsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0y
MDIyLDcgKzIwMjIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmIChpbmRleCA+PSBtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLT5zaXplKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICpvYmplY3QgPSBWOE1lc3NhZ2VQb3J0Ojp3
cmFwKG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMtPmF0KGluZGV4KS5nZXQoKSwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4oKSwgbV9yZWFkZXIuZ2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgKm9iamVj
dCA9IFY4TWVzc2FnZVBvcnQ6OndyYXAobV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cy0+YXQoaW5k
ZXgpLmdldCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIG1fcmVhZGVyLmdldElzb2xhdGUo
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjAzNCw3ICsyMDM0LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHJlc3VsdCA9IG1fYXJyYXlCdWZmZXJzLmF0KGluZGV4KTsKICAgICAgICAgaWYg
KHJlc3VsdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFY4QXJyYXlCdWZmZXI6
OndyYXAoQXJyYXlCdWZmZXI6OmNyZWF0ZShtX2FycmF5QnVmZmVyQ29udGVudHMtPmF0KGluZGV4
KSkuZ2V0KCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1fcmVhZGVyLmdldElzb2xhdGUo
KSk7CisgICAgICAgICAgICByZXN1bHQgPSBWOEFycmF5QnVmZmVyOjp3cmFwKEFycmF5QnVmZmVy
OjpjcmVhdGUobV9hcnJheUJ1ZmZlckNvbnRlbnRzLT5hdChpbmRleCkpLmdldCgpLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCksIG1fcmVhZGVyLmdldElzb2xhdGUoKSk7CiAgICAgICAgICAgICBt
X2FycmF5QnVmZmVyc1tpbmRleF0gPSByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgKm9iamVj
dCA9IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXggMzhk
NWNhYjEwN2E3ODFkNjg1ZDJjOTFkOGUzM2Q5MDkzNjhlNGRjMS4uZjYxY2ZiZTRjOGZkNzY2ZmFk
NzhiODhkMGQ0OTIwMmY3NmU5NDNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhCaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0
IFY4VmFsdWVUcmFpdHMgewogICAgICAgICBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBhcnJheVY4VmFsdWUoY29uc3QgVCYgdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cih2YWx1ZSksIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIGlzb2xhdGUpOworICAgICAgICAgICAgcmV0dXJuIHRv
VjgoV1RGOjpnZXRQdHIodmFsdWUpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGlzb2xhdGUp
OwogICAgICAgICB9CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxl
Y3Rpb24uaAppbmRleCA3ZTQzZDlhZTNiYWRhM2M4ZTMxNzJkMDJiYzE5M2JmNThlZDZjMGI5Li5m
YzgwYTVhN2UxNGE1ZjJiN2Q0MWE3MGNkNzZkYmE2ZWExMWVhMDg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBuYW1lZCB1c2lu
ZyB0byogc2luY2UgdGhleSByZXR1cm4gdGhlIGl0ZW0gKGdldCogaXMgdXNlZCBmb3IgbWV0aG9k
IHRoYXQgdGFrZSBhIHJlZiBwYXJhbSkuCiAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI0NjY0LgogCi10ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGdldFY4T2JqZWN0KFQqIGltcGxlbWVudGF0aW9uLCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordGVt
cGxhdGU8Y2xhc3MgVD4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRWOE9iamVjdChU
KiBpbXBsZW1lbnRhdGlvbiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghaW1wbGVtZW50YXRpb24pCiAgICAg
ICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwpAQCAtNTMsMTMgKzUzLDEzIEBAIHRlbXBsYXRlPGNs
YXNzIENvbGxlY3Rpb24+IHN0YXRpYyBDb2xsZWN0aW9uKiB0b05hdGl2ZUNvbGxlY3Rpb24odjg6
OkxvY2FsPHY4OjpPCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29sbGVjdGlvbio+KG9i
amVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4
KSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Z2V0VjhPYmplY3QoUGFzc1JlZlB0cjxUPiBpbXBsZW1lbnRhdGlvbiwgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3RlbXBsYXRl
PGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0VjhPYmplY3QoUGFzc1Jl
ZlB0cjxUPiBpbXBsZW1lbnRhdGlvbiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHJldHVybiBnZXRWOE9iamVjdChp
bXBsZW1lbnRhdGlvbi5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogLy8g
UmV0dXJucyBuYW1lZCBwcm9wZXJ0eSBvZiBhIGNvbGxlY3Rpb24uCi10ZW1wbGF0ZTxjbGFzcyBD
b2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBn
ZXROYW1lZFByb3BlcnR5T2ZDb2xsZWN0aW9uKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordGVtcGxhdGU8Y2xhc3MgQ29sbGVj
dGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TmFt
ZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIC8vIEZJWE1FOiBhc3NlcnQgb2Jq
ZWN0IGlzIGEgY29sbGVjdGlvbiB0eXBlCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVE
T01XcmFwcGVyKG9iamVjdCkpOwpAQCAtNzcsMTEgKzc3LDExIEBAIHRlbXBsYXRlPGNsYXNzIENv
bGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bGxlY3RpCiAgICAgaWYgKGluZm8uSG9sZGVyKCktPkhhc1JlYWxOYW1lZENhbGxiYWNrUHJvcGVy
dHkobmFtZSkpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIGdl
dE5hbWVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVjdGlvbiwgSXRlbVR5cGU+KG5hbWUsIGlu
Zm8uSG9sZGVyKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIGdldE5hbWVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVj
dGlvbiwgSXRlbVR5cGU+KG5hbWUsIGluZm8uSG9sZGVyKCksIGluZm8uSG9sZGVyKCksIGluZm8u
R2V0SXNvbGF0ZSgpKTsKIH0KIAogLy8gUmV0dXJucyB0aGUgcHJvcGVydHkgYXQgdGhlIGluZGV4
IG9mIGEgY29sbGVjdGlvbi4KLXRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1U
eXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEluZGV4ZWRQcm9wZXJ0eU9mQ29s
bGVjdGlvbih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKK3RlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGdldEluZGV4ZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbih1aW50MzJf
dCBpbmRleCwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIC8vIEZJ
WE1FOiBBc3NlcnQgdGhhdCBvYmplY3QgbXVzdCBiZSBhIGNvbGxlY3Rpb24gdHlwZS4KICAgICBB
U1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CkBAIC05Myw3ICs5
Myw3IEBAIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEluZGV4CiAvLyBBIHRlbXBsYXRlIG9mIGluZGV4IGlu
dGVyY2VwdG9yIG9mIGNvbGxlY3Rpb25zLgogdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xh
c3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlvbkluZGV4
ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKLSAgICByZXR1cm4gZ2V0SW5kZXhlZFByb3BlcnR5T2ZDb2xsZWN0aW9uPENvbGxl
Y3Rpb24sIEl0ZW1UeXBlPihpbmRleCwgaW5mby5Ib2xkZXIoKSwgaW5mby5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gZ2V0SW5kZXhl
ZFByb3BlcnR5T2ZDb2xsZWN0aW9uPENvbGxlY3Rpb24sIEl0ZW1UeXBlPihpbmRleCwgaW5mby5I
b2xkZXIoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiAvLyBHZXQg
YW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgaW5kZXhlZCBwcm9wZXJ0aWVzIG9mIEhU
TUxTZWxlY3RFbGVtZW50IGFuZCBIVE1MRm9ybUVsZW1lbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCmluZGV4IDExZTQyYzU0ZGMyZjlmMmU1
YWQwYjc1MjQ4NTg5YzIyYjlhMGUwYWIuLmM5Yjk3MzY0NDUzOWU1ZjAzZDI1Y2NlY2QyYzFmMGFm
OTRmNzIwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2lu
ZG93U2hlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93
U2hlbGwuY3BwCkBAIC0xOTMsNiArMTkzLDggQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppc0Nv
bnRleHRJbml0aWFsaXplZCgpCiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRl
eHQoKQogeworICAgIG1fcGVyQ29udGV4dERhdGEuY2xlYXIoKTsKKwogICAgIGlmICghbV9jb250
ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPndp
bGxSZWxlYXNlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0KCksIDApOwogICAgICAgICBtX2Nv
bnRleHQuY2xlYXIoKTsKQEAgLTIwMyw4ICsyMDUsNiBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6
OmRpc3Bvc2VDb250ZXh0KCkKICAgICAgICAgYm9vbCBpc01haW5GcmFtZSA9IG1fZnJhbWUtPnBh
Z2UoKSAmJiAobV9mcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKTsgCiAgICAg
ICAgIFY4R0NGb3JDb250ZXh0RGlzcG9zZTo6aW5zdGFuY2UoKS5ub3RpZnlDb250ZXh0RGlzcG9z
ZWQoaXNNYWluRnJhbWUpOwogICAgIH0KLQotICAgIG1fcGVyQ29udGV4dERhdGEuY2xlYXIoKTsK
IH0KIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95R2xvYmFsKCkKQEAgLTQ4OCw3ICs0
ODgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gcHJvcGVydHksIGNvbnN0IHY4OjpBYwogICAgIEF0b21pY1N0cmluZyBuYW1lID0g
dG9XZWJDb3JlQXRvbWljU3RyaW5nKHByb3BlcnR5KTsKICAgICBIVE1MRG9jdW1lbnQqIGh0bWxE
b2N1bWVudCA9IFY4SFRNTERvY3VtZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBB
U1NFUlQoaHRtbERvY3VtZW50KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0g
VjhIVE1MRG9jdW1lbnQ6OmdldE5hbWVkUHJvcGVydHkoaHRtbERvY3VtZW50LCBuYW1lLCBpbmZv
LkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBWOEhUTUxEb2N1bWVudDo6Z2V0TmFtZWRQcm9w
ZXJ0eShodG1sRG9jdW1lbnQsIG5hbWUsIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKICAgICBpZiAoIXJlc3VsdC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHByb3RvdHlwZSA9IGluZm8uSG9sZGVyKCktPkdldFBy
b3RvdHlwZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAK
aW5kZXggOTZlMGE1NjMxYzE3NWU3ZDU0NTI0NDg3YzU2YWUyOTE2NWY2MDAwZS4uYzk0YzU3OWFl
ZTExN2JkZjNjZTBhNWUyYjQ4YThjMTkzYWYzMTFiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0xNTcsNDggKzE1NywyMCBAQCBQYXNzUmVmUHRy
PE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+CiAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OmNyZWF0ZShWOE5vZGVGaWx0ZXJD
b25kaXRpb246OmNyZWF0ZShmaWx0ZXIpKTsKIH0KIAotdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4
RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChGcmFtZSogZnJhbWUsIFdyYXBwZXJUeXBl
SW5mbyogdHlwZSwgdm9pZCogaW1wbCkKK3Y4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBw
ZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoV3JhcHBlclR5cGVJbmZvKiB0eXBlLCB2b2lkKiBpbXBs
KQogewotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRl
eHQgPSAwOwotI2VuZGlmCi0gICAgaWYgKCFmcmFtZSkgewotICAgICAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKTsKLSAgICAgICAg
aWYgKCFjb250ZXh0LklzRW1wdHkoKSkgewotICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBnbG9iYWxQcm90b3R5cGUgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRl
eHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXNXcmFwcGVy
T2ZUeXBlKGdsb2JhbFByb3RvdHlwZSwgJlY4RE9NV2luZG93OjppbmZvKSkgewotICAgICAgICAg
ICAgICAgIEZyYW1lKiBnbG9iYWxGcmFtZSA9IFY4RE9NV2luZG93Ojp0b05hdGl2ZShnbG9iYWxQ
cm90b3R5cGUpLT5mcmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChnbG9iYWxGcmFtZSAmJiBn
bG9iYWxGcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRl
U2NyaXB0KSkKLSAgICAgICAgICAgICAgICAgICAgZnJhbWUgPSBnbG9iYWxGcmFtZTsKLSAgICAg
ICAgICAgIH0KLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzV3Jh
cHBlck9mVHlwZShnbG9iYWxQcm90b3R5cGUsICZWOFdvcmtlckNvbnRleHQ6OmluZm8pKQotICAg
ICAgICAgICAgICAgIHdvcmtlckNvbnRleHQgPSBWOFdvcmtlckNvbnRleHQ6OnRvTmF0aXZlKGxv
b2t1cERPTVdyYXBwZXIoVjhXb3JrZXJDb250ZXh0OjpHZXRUZW1wbGF0ZSgpLCBjb250ZXh0LT5H
bG9iYWwoKSkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9CisgICAgVjhQZXJDb250ZXh0RGF0
YSogcGVyQ29udGV4dERhdGEgPSBWOFBlckNvbnRleHREYXRhOjpjdXJyZW50KCk7CiAKLSAgICBW
OFBlckNvbnRleHREYXRhKiBjb250ZXh0RGF0YSA9IDA7Ci0gICAgaWYgKGZyYW1lKQotICAgICAg
ICBjb250ZXh0RGF0YSA9IHBlckNvbnRleHREYXRhRm9yQ3VycmVudFdvcmxkKGZyYW1lKTsKLSNp
ZiBFTkFCTEUoV09SS0VSUykKLSAgICBlbHNlIGlmICh3b3JrZXJDb250ZXh0KQotICAgICAgICBj
b250ZXh0RGF0YSA9IHBlckNvbnRleHREYXRhKHdvcmtlckNvbnRleHQpOwotI2VuZGlmCisgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbmNlID0gcGVyQ29udGV4dERhdGEgPyBwZXJDb250
ZXh0RGF0YS0+Y3JlYXRlV3JhcHBlckZyb21DYWNoZSh0eXBlKSA6IFY4T2JqZWN0Q29uc3RydWN0
b3I6Om5ld0luc3RhbmNlKHR5cGUtPmdldFRlbXBsYXRlKCktPkdldEZ1bmN0aW9uKCkpOworCisg
ICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxlZCBhbGxvY2F0aW9u
cy4KKyAgICBpZiAoaW5zdGFuY2UuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gaW5zdGFuY2U7
CisKKyAgICBzZXRET01XcmFwcGVyKGluc3RhbmNlLCB0eXBlLCBpbXBsKTsKKyAgICBpZiAodHlw
ZSA9PSAmVjhIVE1MRG9jdW1lbnQ6OmluZm8pCisgICAgICAgIGluc3RhbmNlID0gVjhIVE1MRG9j
dW1lbnQ6OndyYXBJblNoYWRvd09iamVjdChpbnN0YW5jZSwgc3RhdGljX2Nhc3Q8Tm9kZSo+KGlt
cGwpKTsKIAotICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZTsKLSAgICBpZiAoY29u
dGV4dERhdGEpCi0gICAgICAgIGluc3RhbmNlID0gY29udGV4dERhdGEtPmNyZWF0ZVdyYXBwZXJG
cm9tQ2FjaGUodHlwZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rp
b24+IGZ1bmN0aW9uID0gdHlwZS0+Z2V0VGVtcGxhdGUoKS0+R2V0RnVuY3Rpb24oKTsKLSAgICAg
ICAgaW5zdGFuY2UgPSBWOE9iamVjdENvbnN0cnVjdG9yOjpuZXdJbnN0YW5jZShmdW5jdGlvbik7
Ci0gICAgfQotICAgIGlmICghaW5zdGFuY2UuSXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEF2b2lk
IHNldHRpbmcgdGhlIERPTSB3cmFwcGVyIGZvciBmYWlsZWQgYWxsb2NhdGlvbnMuCi0gICAgICAg
IHNldERPTVdyYXBwZXIoaW5zdGFuY2UsIHR5cGUsIGltcGwpOwotICAgICAgICBpZiAodHlwZSA9
PSAmVjhIVE1MRG9jdW1lbnQ6OmluZm8pCi0gICAgICAgICAgICBpbnN0YW5jZSA9IFY4SFRNTERv
Y3VtZW50Ojp3cmFwSW5TaGFkb3dPYmplY3QoaW5zdGFuY2UsIHN0YXRpY19jYXN0PE5vZGUqPihp
bXBsKSk7Ci0gICAgfQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIApAQCAtMjQ5LDcgKzIyMSw3
IEBAIGJvb2wgVjhET01XcmFwcGVyOjppc1dyYXBwZXJPZlR5cGUodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlLCBXcmFwcGVyVHlwZUluZm8qCiAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PGludGVyZmFjZU5hbWUqPih0YXJnZXQpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
CiAvLyBBIEpTIG9iamVjdCBvZiB0eXBlIEV2ZW50VGFyZ2V0IGlzIGxpbWl0ZWQgdG8gYSBzbWFs
bCBudW1iZXIgb2YgcG9zc2libGUgY2xhc3Nlcy4KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERP
TVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqIHRhcmdl
dCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVu
dFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqIHRhcmdldCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICgh
dGFyZ2V0KQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAppbmRleCAzYmI1MWUzNWE1ZjkzODlk
MzQ3ZWFjMzAwN2I1NTc5MDdmMGZlM2FlLi5hNjA5ZTMyNzk5NTgzYjk4YTU1M2M1MGYyYzgxMDRh
MjU2NzI1YjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApA
QCAtODEsMTIgKzgxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMg
V3JhcHBlclR5cGVJbmZvKiBkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsK
IAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdl
dFRvVjhPYmplY3QoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gZXZlbnRUYXJnZXQsIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KFBhc3NSZWZQdHI8RXZlbnRU
YXJnZXQ+IGV2ZW50VGFyZ2V0LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVj
dChldmVudFRhcmdldC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFy
Z2V0VG9WOE9iamVjdChFdmVudFRhcmdldCosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0
aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDAp
OworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdl
dFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAK
ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5l
cih2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBpc0F0dHJpYnV0ZSwgTGlzdGVuZXJM
b29rdXBUeXBlIGxvb2t1cCk7CiAKQEAgLTExOSw3ICsxMTksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldE5hbWVkSGlkZGVuUmVmZXJlbmNlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gcGFyZW50LCBjb25zdCBjaGFyKiBuYW1lLCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY2hpbGQpOwogICAgICAgICBzdGF0aWMgdm9pZCBzZXROYW1lZEhpZGRlbldpbmRvd1Jl
ZmVyZW5jZShGcmFtZSosIGNvbnN0IGNoYXIqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCi0g
ICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFudGlhdGVWOE9iamVjdChG
cmFtZSosIFdyYXBwZXJUeXBlSW5mbyosIHZvaWQqKTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0KFdyYXBwZXJUeXBlSW5mbyosIHZvaWQq
KTsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnZXRDYWNoZWRXcmFw
cGVyKE5vZGUqIG5vZGUpCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhQZXJDb250ZXh0RGF0YS5jcHAKaW5kZXggZTU3MDI5YmZkNzI0Yjg5NjU1NjY1ZWQxYjY1
ZGUyMTQ1NDY4MjAxNC4uYmQ4OGFmZjA5YjE5ODJiMGEwN2MzZWZjODk0OTVlOTE5NzIwYzNhMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5jcHAK
QEAgLTMxLDEyICszMSwyNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4UGVy
Q29udGV4dERhdGEuaCIKIAorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiVjhP
YmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQgcGVyQ29udGV4dERhdGFJbmRleCA9
IFY4RE9NV2luZG93OjpwZXJDb250ZXh0RGF0YUluZGV4OworQ09NUElMRV9BU1NFUlQoVjhET01X
aW5kb3c6OnBlckNvbnRleHREYXRhSW5kZXggPT0gVjhXb3JrZXJDb250ZXh0OjpwZXJDb250ZXh0
RGF0YUluZGV4LCBET01XaW5kb3dBbmRXb3JrZXJDb250ZXh0TXVzdEhhdmVUaGVTYW1lUGVyQ29u
dGV4dERhdGFJbmRleCk7CisKK1Y4UGVyQ29udGV4dERhdGEqIFY4UGVyQ29udGV4dERhdGE6OmN1
cnJlbnQoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxWOFBlckNvbnRleHREYXRhKj4odjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpLT5HbG9i
YWwoKS0+R2V0UHJvdG90eXBlKCkpLT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQocGVyQ29u
dGV4dERhdGFJbmRleCkpOworfQorCiB2b2lkIFY4UGVyQ29udGV4dERhdGE6OmRpc3Bvc2UoKQog
eworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KG1fY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKS0+U2V0UG9p
bnRlckluSW50ZXJuYWxGaWVsZChwZXJDb250ZXh0RGF0YUluZGV4LCAwKTsKKwogICAgIHsKICAg
ICAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBpdCA9IG1fd3JhcHBlckJvaWxl
cnBsYXRlcy5iZWdpbigpOwogICAgICAgICBmb3IgKDsgaXQgIT0gbV93cmFwcGVyQm9pbGVycGxh
dGVzLmVuZCgpOyArK2l0KSB7CkBAIC03Myw2ICs4Niw4IEBAIHZvaWQgVjhQZXJDb250ZXh0RGF0
YTo6ZGlzcG9zZSgpCiAKIGJvb2wgVjhQZXJDb250ZXh0RGF0YTo6aW5pdCgpCiB7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChtX2NvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5
cGUoKSktPlNldFBvaW50ZXJJbkludGVybmFsRmllbGQocGVyQ29udGV4dERhdGFJbmRleCwgdGhp
cyk7CisKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHByb3RvdHlwZVN0cmluZyA9IHY4OjpT
dHJpbmc6Ok5ld1N5bWJvbCgicHJvdG90eXBlIik7CiAgICAgaWYgKHByb3RvdHlwZVN0cmluZy5J
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuaAppbmRleCAyMGU5MTBjMTY5ZWRiZDE0NWU3MTUyMTRm
MzA2ZGM4NjU3Yjg0OTUzLi45ZjY1MWU2ODVlNWI2YWJjM2IwMmQwZmYzMWI5NWVlZWRkMGNmYzRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5oCkBA
IC01Myw2ICs1Myw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaW5pdCgpOwogCisgICAgc3RhdGlj
IFY4UGVyQ29udGV4dERhdGEqIGN1cnJlbnQoKTsKKwogICAgIC8vIFRvIGNyZWF0ZSBKUyBXcmFw
cGVyIG9iamVjdHMsIHdlIGNyZWF0ZSBhIGNhY2hlIG9mIGEgJ2JvaWxlciBwbGF0ZScKICAgICAv
LyBvYmplY3QsIGFuZCB0aGVuIHNpbXBseSBDbG9uZSB0aGF0IG9iamVjdCBlYWNoIHRpbWUgd2Ug
bmVlZCBhIG5ldyBvbmUuCiAgICAgLy8gVGhpcyBpcyBmYXN0ZXIgdGhhbiBnb2luZyB0aHJvdWdo
IHRoZSBmdWxsIG9iamVjdCBjcmVhdGlvbiBwcm9jZXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhUaHJvd0V4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFRocm93RXhjZXB0aW9uLmNwcAppbmRleCBhZTMyNTFjMTBmYTI3YWFkZjE0
ZDI2NzY5NDg1N2NlMTYyMmVmZjc3Li5mMGFkYzAxMmY2NGVjMzc2NDY5ZWRlMzRhZWQ5ZmY4OTli
YmIxZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFRocm93RXhj
ZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFRocm93RXhjZXB0
aW9uLmNwcApAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMgdm9pZCBkb21FeGNlcHRpb25TdGFja1Nl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYQogCiAjZGVm
aW5lIFRSWV9UT19DUkVBVEVfRVhDRVBUSU9OKGludGVyZmFjZU5hbWUpIFwKICAgICBjYXNlIGlu
dGVyZmFjZU5hbWUjI1R5cGU6IFwKLSAgICAgICAgZXhjZXB0aW9uID0gdG9WOChpbnRlcmZhY2VO
YW1lOjpjcmVhdGUoZGVzY3JpcHRpb24pLCB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpLCBpc29s
YXRlKTsgXAorICAgICAgICBleGNlcHRpb24gPSB0b1Y4KGludGVyZmFjZU5hbWU6OmNyZWF0ZShk
ZXNjcmlwdGlvbiksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgaXNvbGF0ZSk7IFwKICAgICAg
ICAgYnJlYWs7CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRocm93RXhjZXB0aW9uOjpzZXRE
T01FeGNlcHRpb24oaW50IGVjLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKaW5kZXggYTkwODQ3
NTA0YWY5NmQ5MTQ5NzI4ZTM5ZWU0ZGFiOTE3ZThhYTgwNC4uZWEyYTNhMWRhY2U2OWVlNzZkNzU1
ZWZlMWNhOGFjMmFjOTQ2ZWQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChCbG9iKiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQmxvYiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlm
ICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKQEAgLTcx
LDcgKzcxLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4QmxvYjo6Y29uc3RydWN0b3JDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogCiAgICAgaWYgKCFhcmdzLkxlbmd0aCgp
KSB7CiAgICAgICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKCk7Ci0gICAgICAg
IHJldHVybiB0b1Y4KGJsb2IuZ2V0KCksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgp
LCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGJsb2IuZ2V0KCksIGFy
Z3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICB9CiAKICAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiBmaXJzdEFyZyA9IGFyZ3NbMF07CkBAIC0xMzgsNyArMTM4LDcgQEAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4QmxvYjo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQogICAgIH0KIAogICAgIFJlZlB0cjxCbG9iPiBibG9iID0gYmxvYkJ1aWxk
ZXItPmdldEJsb2IodHlwZSwgQmxvYkNvbnN0cnVjdGVkQnlDb25zdHJ1Y3Rvcik7Ci0gICAgcmV0
dXJuIHRvVjgoYmxvYi5nZXQoKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChibG9iLmdldCgpLCBhcmdzLkhvbGRl
cigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1J1bGVDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3Rv
bS5jcHAKaW5kZXggOWZhZDJkNTRlYzcxNzM1NzBiN2QwZGY5YjhlNmFjNGZjYzFiNWU3ZS4uOGIx
MGFkNWNiMDY4NzE0NTUyZTg4M2U3MjI4YTgxZTUzZjhiNzM4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHAKQEAgLTQz
LDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChDU1NSdWxlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
Q1NTUnVsZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4
TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcAppbmRleCA1MjMwYmYzMmRjN2I0M2I0
YTYxYjQ1NDg4ZDc4MzE1YzJhNjE3Nzg2Li4yNjJkOGUxZWIzZTk4NDczYzQyODgxNDZiZDE2MWVh
MjI5NjYzNTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDU1NWYWx1ZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q1NTVmFsdWVDdXN0b20uY3BwCkBAIC00Niw3ICs0Niw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQ1NTVmFsdWUqIGltcGwsIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChDU1NWYWx1ZSogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewog
ICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCmluZGV4IDNiOGU0OWQ5
OTVkM2ZiYjc5YjZmYWUxMWM3Y2VhNjQxMzBlOGU2M2EuLjQ2ZDMzMjQ4M2NjMGJjMDVkYjIzODc0
Mzg4OTU2N2YyYTRhZmYwMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcApAQCAtNDgsNyArNDgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOE9iamVjdChDYW52YXNTdHlsZSogc3R5bGUsIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhPYmplY3QoQ2FudmFzU3R5bGUq
IHN0eWxlLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKQogICAgICAg
ICByZXR1cm4gdG9WOChzdHlsZS0+Y2FudmFzR3JhZGllbnQoKSwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+
IHRvQ2FudmFzU3R5bGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VTdHlsZUFjY2Vzc29y
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQogewogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogaW1wbCA9IFY4Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4g
dG9WOE9iamVjdChpbXBsLT5zdHJva2VTdHlsZSgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGltcGwt
PnN0cm9rZVN0eWxlKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAog
dm9pZCBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlU3R5bGVBY2Nlc3NvclNldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgVjhD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlQWNjZXNzb3JTZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmZpbGxTdHlsZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogaW1wbCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOE9iamVjdChpbXBsLT5maWxsU3R5bGUoKSwg
aW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAg
ICByZXR1cm4gdG9WOE9iamVjdChpbXBsLT5maWxsU3R5bGUoKSwgaW5mby5Ib2xkZXIoKSwgaW5m
by5HZXRJc29sYXRlKCkpOwogfQogCiB2b2lkIFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpm
aWxsU3R5bGVBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20u
Y3BwCmluZGV4IDZkYjMzYzVlNDM2ZWZjOTQwZTc3MWQ0MmU1NGRiZWJmOGMyNmFhNmMuLmQyOWMx
YWUwOWZiMzc2ZGJjYzA2ZGRlOTg2M2YyZWU1YmE5ODlkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCkBAIC05Miw3
ICs5Miw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENvbnNvbGU6Om1lbW9yeUFjY2Vzc29y
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
Q29uc29sZS5tZW1vcnlBY2Nlc3NvckdldHRlciIpOwogICAgIENvbnNvbGUqIGltcCA9IFY4Q29u
c29sZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5tZW1v
cnkoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKKyAgICByZXR1cm4gdG9WOChpbXAtPm1lbW9yeSgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCmlu
ZGV4IDliNmFjYzQ4MDFhMjkxODZjNWI2MWE5Y2Q3OGVhNjIzZmEwYzE1N2IuLmU1N2M2ZDFiNDNk
NmUxMTgwYzFmOGExN2VjNTE4Njg2NTgxZTgxODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcApAQCAtNDY1LDcg
KzQ2NSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6b3BlbkNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgaWYgKCFvcGVuZWRXaW5kb3cpCiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4gdG9WOChvcGVuZWRXaW5k
b3cucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJ
c29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KG9wZW5lZFdpbmRvdy5yZWxlYXNlKCksIGFyZ3Mu
SG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4RE9NV2luZG93OjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC00ODIsNyArNDgyLDcgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4RE9NV2luZG93OjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5k
ZXgsIGNvbnN0IHYKIAogICAgIEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCktPnNjb3BlZENo
aWxkKGluZGV4KTsKICAgICBpZiAoY2hpbGQpCi0gICAgICAgIHJldHVybiB0b1Y4KGNoaWxkLT5k
b2N1bWVudCgpLT5kb21XaW5kb3coKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCks
IGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoY2hpbGQtPmRvY3VtZW50
KCktPmRvbVdpbmRvdygpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAKICAg
ICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KQEAgLTUwNCw3ICs1MDQsNyBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbQogICAgIEF0b21pY1N0cmluZyBwcm9wTmFtZSA9IHRvV2ViQ29yZUF0b21p
Y1N0cmluZyhuYW1lKTsKICAgICBGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLT5zY29wZWRD
aGlsZChwcm9wTmFtZSk7CiAgICAgaWYgKGNoaWxkKQotICAgICAgICByZXR1cm4gdG9WOChjaGls
ZC0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4
dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGNoaWxkLT5kb2N1
bWVudCgpLT5kb21XaW5kb3coKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwog
CiAgICAgLy8gU2VhcmNoIElETCBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgcHJvdG90eXBlCiAg
ICAgaWYgKCFpbmZvLkhvbGRlcigpLT5HZXRSZWFsTmFtZWRQcm9wZXJ0eShuYW1lKS5Jc0VtcHR5
KCkpCkBAIC01MTgsOCArNTE4LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93
OjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW0KICAgICAgICAg
ICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gaXRlbXMgPSBkb2MtPndpbmRvd05hbWVkSXRlbXMo
cHJvcE5hbWUpOwogICAgICAgICAgICAgaWYgKCFpdGVtcy0+aXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGl0ZW1zLT5oYXNFeGFjdGx5T25lSXRlbSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdG9WOChpdGVtcy0+aXRlbSgwKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25D
b250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9W
OChpdGVtcy5yZWxlYXNlKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZv
LkdldElzb2xhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KGl0ZW1zLT5p
dGVtKDApLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRvVjgoaXRlbXMucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01OTksNyArNTk5
LDcgQEAgYm9vbCBWOERPTVdpbmRvdzo6aW5kZXhlZFNlY3VyaXR5Q2hlY2sodjg6OkxvY2FsPHY4
OjpPYmplY3Q+IGhvc3QsIHVpbnQzMl90IGluZGUKICAgICByZXR1cm4gQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoQmluZGluZ1N0YXRlOjppbnN0YW5jZSgpLCB0YXJn
ZXQsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcik7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KERPTVdpbmRvdyogd2luZG93LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoRE9NV2luZG93KiB3aW5kb3csIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAvLyBOb3RpY2UgdGhhdCB3ZSBleHBs
aWNpdGx5IGlnbm9yZSBjcmVhdGlvbkNvbnRleHQgYmVjYXVzZSB0aGUgRE9NV2luZG93IGlzIGl0
cyBvd24gY3JlYXRpb25Db250ZXh0LgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhEYXRhVmlld0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhEYXRhVmlld0N1c3RvbS5jcHAKaW5kZXggZWRkNmRmNmYyOTc1MDI2
MDU0MzFiOTE1YzU5N2Y5MjIyNWI4MWE5MS4uNmRlOWNlOGUyZGMzNWM1MTY5YTNkZWNiOGZjZWMx
Njg0NzI3OTU3OSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RGF0YVZpZXdDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERhdGFWaWV3Q3VzdG9tLmNwcApAQCAtNTYsNyArNTYsNyBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhEYXRhVmlldzo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQogICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5V2l0aEFycmF5QnVmZmVy
QXJndW1lbnQ8RGF0YVZpZXcsIGNoYXI+KGFyZ3MsICZpbmZvLCB2ODo6a0V4dGVybmFsQnl0ZUFy
cmF5LCBmYWxzZSk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KERhdGFWaWV3KiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRGF0YVZpZXcqIGltcGwsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNv
bGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhE
b2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhE
b2N1bWVudEN1c3RvbS5jcHAKaW5kZXggMTNkYmU0OTM4NGNlNzljM2NkZTEzZTk1YTNlN2U0NWFj
MzJmMWU4NS4uNTkxMTQ0ZjhiNjU2ODhkNjM2ODM1YzUxYzJmNDQ5NDhlYTI0YWVmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3Vz
dG9tLmNwcApAQCAtOTIsNyArOTIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEb2N1bWVu
dDo6ZXZhbHVhdGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIGlmIChl
YykKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkp
OwogCi0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1
bHQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOERvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0Q2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEwOCwxNiArMTA4LDE2IEBAIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOERvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0Q2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiAgICAgaWYgKHJlc3VsdC0+aXMyZCgpKQotICAgICAgICByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihyZXN1bHQpLCBhcmdzLkhv
bGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihyZXN1bHQp
LCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAjaWYgRU5BQkxFKFdFQkdMKQog
ICAgIGVsc2UgaWYgKHJlc3VsdC0+aXMzZCgpKQotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihyZXN1bHQpLCBhcmdzLkhvbGRlcigpLT5DcmVh
dGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgICAgICByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihyZXN1bHQpLCBhcmdzLkhvbGRlcigp
LCBhcmdzLkdldElzb2xhdGUoKSk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLXY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KERvY3VtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGZvcmNlTmV3
T2JqZWN0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRG9jdW1lbnQqIGltcGwsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwg
Ym9vbCBmb3JjZU5ld09iamVjdCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2
OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CkBAIC0xNDcsNyArMTQ3LDcgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4RG9jdW1lbnQ6OmNyZWF0ZVRvdWNoTGlzdENhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGEKICAgICAgICAgdG91Y2hMaXN0LT5hcHBlbmQodG91Y2gpOwogICAgIH0KIAot
ICAgIHJldHVybiB0b1Y4KHRvdWNoTGlzdC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCktPkNyZWF0
aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgodG91Y2hM
aXN0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERv
Y3VtZW50TG9jYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5jcHAKaW5kZXggMTA4YzE5MWM3MzEyODY1MWMx
ZjgwZWEzODQ4ZmNmZTZmM2VmYzkwZC4uODNiY2ViNzNkYzg5YzIzNjc0ZWI2NzYwNWVmMzFmNzU4
ZDI4NmMyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RG9jdW1lbnQ6OmxvY2F0aW9uQWNjZXNzb3JHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG4KICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKGluZm8uR2V0
SXNvbGF0ZSgpKTsKIAogICAgIERPTVdpbmRvdyogd2luZG93ID0gZG9jdW1lbnQtPmRvbVdpbmRv
dygpOwotICAgIHJldHVybiB0b1Y4KHdpbmRvdy0+bG9jYXRpb24oKSwgaW5mby5Ib2xkZXIoKS0+
Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOCh3
aW5kb3ctPmxvY2F0aW9uKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0K
IAogdm9pZCBWOERvY3VtZW50Ojpsb2NhdGlvbkFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEVudHJ5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEVudHJ5Q3VzdG9tLmNwcAppbmRleCBjNGEzODlhOGY3NDg5ZTc4ODhmYmM2NDBjMTdmNGU1
MjFjMGIxMTY3Li5iMzVlMTMzMmE0ZmI1ZmNjZjUzODBhZGRkY2UzNTVhOTgwZmE1ZjJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeUN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RW50cnlDdXN0b20u
Y3BwCkBAIC00Myw3ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoRW50cnkqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChFbnRyeSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0
dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVudHJ5U3luY0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeVN5bmNDdXN0b20uY3BwCmluZGV4IGE4OTZlOGQz
ZWU2NmZjMzAwZGMyZjJjYTM5ODQyMWMzZDZmNjFmMTUuLjU0NWRkMWZjODU5N2IwYTk4NTg4YjYx
MTVlMzg0NTU5NDI3ZTQ4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEVudHJ5U3luY0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RW50cnlTeW5jQ3VzdG9tLmNwcApAQCAtNDMsNyArNDMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEVudHJ5U3lu
YyogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEVudHJ5U3luYyogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVj
ayhpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEV2ZW50Q3VzdG9tLmNwcAppbmRleCBlZjU1ZTFiYTZiOGIzMDA3ZDljN2Q2Y2UzNDczOGM4NjQx
NWFmNTU1Li43NWU2YmJjYmViMThjNDJkN2EyMmIxZDY2ZDQ3Y2NkNzhiZjg1NTI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3Bw
CkBAIC01Myw3ICs1Myw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEV2ZW50OjpkYXRhVHJh
bnNmZXJBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBFdmVudCogZXZl
bnQgPSBWOEV2ZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKIAogICAgIGlmIChldmVudC0+
aXNEcmFnRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8TW91c2VFdmVu
dCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgp
LCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PE1v
dXNlRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQpAQCAtNjMsNyArNjMs
NyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhFdmVudDo6Y2xpcGJvYXJkRGF0YUFjY2Vzc29y
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPgogICAgIEV2ZW50KiBldmVudCA9IFY4RXZlbnQ6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogCiAgICAgaWYgKGV2ZW50LT5pc0NsaXBib2FyZEV2
ZW50KCkpCi0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENsaXBib2FyZEV2ZW50Kj4o
ZXZlbnQpLT5jbGlwYm9hcmQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q2xpcGJv
YXJkRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQpAQCAtNzIsNyArNzIs
NyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhFdmVudDo6Y2xpcGJvYXJkRGF0YUFjY2Vzc29y
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPgogICAgIGlmIChldmVudE5hbWVzKCkuaW50ZXJm
YWNlRm9yIyNpbnRlcmZhY2VOYW1lID09IGRlc2lyZWRJbnRlcmZhY2UpIFwKICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8aW50ZXJmYWNlTmFtZSo+KGV2ZW50KSwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRXZlbnQqIGV2ZW50
LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlICpp
c29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRXZlbnQqIGV2ZW50LCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUgKmlzb2xhdGUpCiB7
CiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVS
ZWFkZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Rmls
ZVJlYWRlckN1c3RvbS5jcHAKaW5kZXggMjNiZGNmYjgyOGZhM2Q5NWE4NDRkMzMyODk4MjVjNTMx
NjQyMTQ3Zi4uYjQ5YTE1M2U3ZTFjNTNkYWYxOGQyNjQwOWIzNGQ2NTM5MGJiN2Q5YSAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRl
ckN1c3RvbS5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Rmls
ZVJlYWRlcjo6cmVzdWx0QWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG4KICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CiAgICAgRmls
ZVJlYWRlciogaW1wID0gVjhGaWxlUmVhZGVyOjp0b05hdGl2ZShob2xkZXIpOwogICAgIGlmIChp
bXAtPnJlYWRUeXBlKCkgPT0gRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQXJyYXlCdWZmZXIpCi0g
ICAgICAgIHJldHVybiB0b1Y4KGltcC0+YXJyYXlCdWZmZXJSZXN1bHQoKSwgaW5mby5Ib2xkZXIo
KS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0dXJu
IHRvVjgoaW1wLT5hcnJheUJ1ZmZlclJlc3VsdCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CiAgICAgcmV0dXJuIHY4U3RyaW5nT3JOdWxsKGltcC0+c3RyaW5nUmVzdWx0KCks
IGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCmlu
ZGV4IDYzMTU1MzM4MmNjOGRlMWMzNjQzZDRjMzE0ODRhZjU2YzgwODg1ZjEuLjYyNzA1OGMxODgz
ZTYwZGJiZjM5YTM3ZGZiZDM1ZDgyMjk5NWNlMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1c3Rv
bS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5hbWVkSXRlbXMoSFRNTEFsbENvbGxlY3Rpb24qIGNv
bGxlY3Rpb24sIEF0b21pY1N0cmluZyBuYW1lLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBnZXROYW1lZEl0ZW1zKEhUTUxBbGxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBBdG9t
aWNTdHJpbmcgbmFtZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBuYW1lZEl0
ZW1zOwogICAgIGNvbGxlY3Rpb24tPm5hbWVkSXRlbXMobmFtZSwgbmFtZWRJdGVtcyk7CkBAIC01
NCw3ICs1NCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TmFtZWRJdGVtcyhI
VE1MQWxsQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgQXRvbWljCiAgICAgcmV0dXJuIHRvVjgoVjhO
YW1lZE5vZGVzQ29sbGVjdGlvbjo6Y3JlYXRlKG5hbWVkSXRlbXMpLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEl0ZW0oSFRN
TEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd1bWVu
dCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0SXRlbShIVE1MQWxsQ29s
bGVjdGlvbiogY29sbGVjdGlvbiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3VtZW50LCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUp
CiB7CiAgICAgdjg6OkxvY2FsPHY4OjpVaW50MzI+IGluZGV4ID0gYXJndW1lbnQtPlRvQXJyYXlJ
bmRleCgpOwogICAgIGlmIChpbmRleC5Jc0VtcHR5KCkpIHsKQEAgLTgwLDIxICs4MCwyMSBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRQcm9wZXJ0eUdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cgogICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIAog
ICAgIEhUTUxBbGxDb2xsZWN0aW9uKiBpbXAgPSBWOEhUTUxBbGxDb2xsZWN0aW9uOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhpbXAsIHRvV2ViQ29y
ZUF0b21pY1N0cmluZyhuYW1lKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhpbXAsIHRvV2ViQ29y
ZUF0b21pY1N0cmluZyhuYW1lKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwog
fQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQWxsQ29sbGVjdGlvbjo6aXRlbUNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRN
TEFsbENvbGxlY3Rpb24uaXRlbSgpIik7CiAgICAgSFRNTEFsbENvbGxlY3Rpb24qIGltcCA9IFY4
SFRNTEFsbENvbGxlY3Rpb246OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiBn
ZXRJdGVtKGltcCwgYXJnc1swXSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gZ2V0SXRlbShpbXAsIGFyZ3NbMF0sIGFyZ3Mu
SG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4SFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEFsbENvbGxlY3Rpb24ubmFtZWRJ
dGVtKCkiKTsKICAgICBIVE1MQWxsQ29sbGVjdGlvbiogaW1wID0gVjhIVE1MQWxsQ29sbGVjdGlv
bjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJl
c3VsdCA9IGdldE5hbWVkSXRlbXMoaW1wLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIGFyZ3Mu
SG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGdldE5hbWVkSXRlbXMoaW1wLCB0b1dlYkNvcmVT
dHJpbmcoYXJnc1swXSksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAg
IGlmIChyZXN1bHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpA
QCAtMTExLDcgKzExMSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxBbGxDb2xsZWN0
aW9uOjpjYWxsQXNGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1CiAgICAgSFRNTEFsbENv
bGxlY3Rpb24qIGltcCA9IFY4SFRNTEFsbENvbGxlY3Rpb246OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwogCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGdldEl0
ZW0oaW1wLCBhcmdzWzBdLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5H
ZXRJc29sYXRlKCkpOworICAgICAgICByZXR1cm4gZ2V0SXRlbShpbXAsIGFyZ3NbMF0sIGFyZ3Mu
SG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIC8vIElmIHRoZXJlIGlzIGEgc2Vj
b25kIGFyZ3VtZW50IGl0IGlzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3ZSB3YW50LgogICAgIFN0
cmluZyBuYW1lID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwpAQCAtMTIwLDcgKzEyMCw3IEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxBbGxDb2xsZWN0aW9uOjpjYWxsQXNGdW5jdGlv
bkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CiAKICAgICBpZiAoTm9kZSogbm9kZSA9IGltcC0+bmFtZWRJdGVtV2l0aEluZGV4KG5hbWUsIGlu
ZGV4LT5VaW50MzJWYWx1ZSgpKSkKLSAgICAgICAgcmV0dXJuIHRvVjgobm9kZSwgYXJncy5Ib2xk
ZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0
dXJuIHRvVjgobm9kZSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogCiAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcApp
bmRleCA3Mzc5MDVlNGNlMGM4NjU3NWNkMWU4MDlkOWY5NGQzNjBiZDE2MmQ4Li5hYjZjNzVhYjk1
YjVjNDYxY2UyNDc0NDAwZjE2MWM1NzM2MGM4OTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0
b20uY3BwCkBAIC04Nyw3ICs4Nyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50CiAgICAgICAg
IHJldHVybiB2ODo6TnVsbChhcmdzLkdldElzb2xhdGUoKSk7CiAKICAgICBpZiAocmVzdWx0LT5p
czJkKCkpCi0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCo+KHJlc3VsdCksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdz
LkdldElzb2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCo+KHJlc3VsdCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgZWxzZSBpZiAocmVzdWx0LT5pczNkKCkpIHsK
ICAgICAgICAgLy8gM0QgY2FudmFzIGNvbnRleHRzIGNhbiBob2xkIG9uIHRvIGxvdHMgb2YgR1BV
IHJlc291cmNlcywgYW5kIHdlIHdhbnQgdG8gdGFrZSBhbgpAQCAtOTYsNyArOTYsNyBAQCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dENhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudAogICAgICAgICBWOFBlcklzb2xhdGVEYXRhKiBwZXJJc29sYXRl
RGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoYXJncy5HZXRJc29sYXRlKCkpOwogICAg
ICAgICBwZXJJc29sYXRlRGF0YS0+c2V0U2hvdWxkQ29sbGVjdEdhcmJhZ2VTb29uKCk7CiAKLSAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4UmVzdWx0ID0gdG9WOChzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihyZXN1bHQpLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdjhSZXN1bHQgPSB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KHJl
c3VsdCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgaWYgKElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkpIHsKICAgICAgICAgICAgIFNj
cmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KHY4OjpDb250
ZXh0OjpHZXRDdXJyZW50KCkpOwogICAgICAgICAgICAgU2NyaXB0T2JqZWN0IGdsQ29udGV4dChz
Y3JpcHRTdGF0ZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2OFJlc3VsdCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rp
b25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENv
bGxlY3Rpb25DdXN0b20uY3BwCmluZGV4IGNjYmY2MzhiMGM1NjliZTI2Zjc4MmQxOGVjYzljMzZm
NDViNDAxZTcuLmRiZmYyOTI0NjE5M2RjNTI0ZWIyNjkzYTkwNzQ4MmRhNjE4NmY3MDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9u
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
Q29sbGVjdGlvbkN1c3RvbS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5hbWVkSXRlbXMoSFRNTENv
bGxlY3Rpb24qIGNvbGxlY3Rpb24sIEF0b21pY1N0cmluZyBuYW1lLCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROYW1lZEl0ZW1zKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0
aW9uLCBBdG9taWNTdHJpbmcgbmFtZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiBuYW1lZEl0ZW1zOwogICAgIGNvbGxlY3Rpb24tPm5hbWVkSXRlbXMobmFtZSwgbmFtZWRJdGVt
cyk7CkBAIC02OSwxNCArNjksMTQgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENvbGxl
Y3Rpb246Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmcKICAgICAgICAg
cmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAKICAgICBIVE1MQ29sbGVjdGlvbiogaW1wID0gVjhIVE1M
Q29sbGVjdGlvbjo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIGdldE5hbWVk
SXRlbXMoaW1wLCB0b1dlYkNvcmVBdG9taWNTdHJpbmcobmFtZSksIGluZm8uSG9sZGVyKCktPkNy
ZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIGdldE5hbWVk
SXRlbXMoaW1wLCB0b1dlYkNvcmVBdG9taWNTdHJpbmcobmFtZSksIGluZm8uSG9sZGVyKCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENvbGxl
Y3Rpb246Om5hbWVkSXRlbUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uSFRNTENvbGxlY3Rpb24ubmFtZWRJdGVtKCkiKTsKICAgICBIVE1M
Q29sbGVjdGlvbiogaW1wID0gVjhIVE1MQ29sbGVjdGlvbjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGdldE5hbWVkSXRlbXMoaW1w
LCB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4
dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3Vs
dCA9IGdldE5hbWVkSXRlbXMoaW1wLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIGFyZ3MuSG9s
ZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIGlmIChyZXN1bHQuSXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtODQsNyArODQsNyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KEhUTUxDb2xsZWN0aW9uKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoSFRNTENvbGxlY3Rpb24qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoaW1wbC0+
dHlwZSgpID09IERvY0FsbCkKICAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8SFRNTEFs
bENvbGxlY3Rpb24qPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRD
dXN0b20uY3BwCmluZGV4IDNiMjQ3MGUwMjNkZjdmMGVhMDk3Y2UwMWRlYmYwNWE3YWZkM2UxYmMu
LmNhMzk3NTQ3ZGIwNDEzMjJhYmY1ZmUxZjdhNzNkZTAyN2VkMTg5YzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3Vz
dG9tLmNwcApAQCAtODAsNyArODAsNyBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gVjhIVE1MRG9j
dW1lbnQ6OndyYXBJblNoYWRvd09iamVjdCh2ODo6TG9jYWw8djg6Ok9iamVjdD4gdwogICAgIHJl
dHVybiBzaGFkb3c7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxEb2N1bWVudDo6
Z2V0TmFtZWRQcm9wZXJ0eShIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBrZXksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRG9jdW1lbnQ6
OmdldE5hbWVkUHJvcGVydHkoSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyYga2V5LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFodG1sRG9jdW1lbnQtPmhhc05hbWVkSXRl
bShrZXkuaW1wbCgpKSAmJiAhaHRtbERvY3VtZW50LT5oYXNFeHRyYU5hbWVkSXRlbShrZXkuaW1w
bCgpKSkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CkBAIC0xNzEsNyArMTcxLDcgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTERvY3VtZW50OjphbGxBY2Nlc3NvckdldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmEKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQu
YWxsLl9nZXQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9s
ZGVyKCk7CiAgICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOEhUTUxEb2N1bWVudDo6
dG9OYXRpdmUoaG9sZGVyKTsKLSAgICByZXR1cm4gdG9WOChodG1sRG9jdW1lbnQtPmFsbCgpLCBp
bmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAg
IHJldHVybiB0b1Y4KGh0bWxEb2N1bWVudC0+YWxsKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0
SXNvbGF0ZSgpKTsKIH0KIAogdm9pZCBWOEhUTUxEb2N1bWVudDo6YWxsQWNjZXNzb3JTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgVjhI
VE1MRG9jdW1lbnQ6OmFsbEFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCB2ODo6TG9jYWw8djg6CiAgICAgaW5mby5UaGlzKCktPkZvcmNlU2V0KG5hbWUsIHZhbHVlKTsK
IH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTERvY3VtZW50KiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
LCBib29sIGZvcmNlTmV3T2JqZWN0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTERv
Y3VtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYmplY3QpCiB7CiAgICAgaWYgKCFpbXBs
KQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20u
Y3BwCmluZGV4IDlmZTQ4NGU2N2NiMWQxNjY2OWVkZWUxMzYxY2Q4MmRmNGEzZjVkNDAuLjI1MWY3
NjIyYzhjYmQ2ODk5MGY4OWQyZmM2OTIwYWFlMDEwZGFjNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3RvbS5jcHAK
QEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChIVE1MRWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBmb3JjZU5ld09iamVj
dCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxFbGVtZW50KiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJv
b2wgZm9yY2VOZXdPYmplY3QpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhO
dWxsV2l0aENoZWNrKGlzb2xhdGUpOwpAQCAtNTEsNyArNTEsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChIVE1MRWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3Jl
YXRpb25Dbwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEVsZW1lbnQ6Oml0ZW1WYWx1ZUFj
Y2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQogewogICAgIEhUTUxFbGVtZW50KiBpbXBsID0gVjhIVE1MRWxlbWVudDo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC0+aXRlbVZhbHVl
KCkuZ2V0KCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xh
dGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wbC0+aXRlbVZhbHVlKCkuZ2V0KCksIGluZm8uSG9s
ZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdm9pZCBWOEhUTUxFbGVtZW50OjppdGVt
VmFsdWVBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZvcm1F
bGVtZW50Q3VzdG9tLmNwcAppbmRleCA3OTJiM2QwYTExNmExMmQwYTljMjM5YzgxMTU2ZWRjMzU5
MmQ4ODYyLi5hYzliOWFmZTI4ZDBhMGZmZDFlODIwY2RkODk1ZmI0ZTczNjFmNjI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxG
b3JtRWxlbWVudEN1c3RvbS5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4SFRNTEZvcm1FbGVtZW50OjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5k
ZXgsIGMKICAgICBSZWZQdHI8Tm9kZT4gZm9ybUVsZW1lbnQgPSBmb3JtLT5lbGVtZW50cygpLT5p
dGVtKGluZGV4KTsKICAgICBpZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1cm4gdjhVbmRl
ZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChmb3JtRWxlbWVudC5yZWxlYXNlKCksIGluZm8uSG9s
ZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJu
IHRvVjgoZm9ybUVsZW1lbnQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xh
dGUoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxGb3JtRWxlbWVudDo6bmFt
ZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKQEAgLTc0LDkgKzc0LDkgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4SFRNTEZvcm1FbGVtZW50OjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW4KICAgICBBU1NFUlQoIWVsZW1lbnRzLmlzRW1wdHkoKSk7CiAKICAgICBpZiAoZWxlbWVudHMu
c2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiB0b1Y4KGVsZW1lbnRzLmF0KDApLnJlbGVhc2Uo
KSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsK
KyAgICAgICAgcmV0dXJuIHRvVjgoZWxlbWVudHMuYXQoMCkucmVsZWFzZSgpLCBpbmZvLkhvbGRl
cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAKLSAgICByZXR1cm4gdG9WOChWOE5hbWVkTm9kZXND
b2xsZWN0aW9uOjpjcmVhdGUoZWxlbWVudHMpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRl
eHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KFY4TmFtZWROb2Rlc0Nv
bGxlY3Rpb246OmNyZWF0ZShlbGVtZW50cyksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0
ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50
Q3VzdG9tLmNwcAppbmRleCAwMGNkYzNkMWNiYWZhNmI0MmEyYzhlMjM0OWM2NTE0M2YwYjViYWI2
Li5mOGJmMzU1OGYzMzE5MTdiMmU1MmVjM2VjYmY3OWQ3NzY3YzMzN2EzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJh
bWVTZXRFbGVtZW50Q3VzdG9tLmNwcApAQCAtNTgsNyArNTgsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIVE1MRnJhbWVTZXRFbGVtZW50OjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2Nh
bDx2ODo6UwogICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICBpZiAoIWRvY3VtZW50
LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9W
OChkb2N1bWVudC0+ZG9tV2luZG93KCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgp
LCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoZG9jdW1lbnQtPmRvbVdpbmRv
dygpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDFh
OTY3ODJhODYxNDNkMDZhYTkzMmNjMjdkZTVhNzdmNjE0ZjBhOGEuLjllOGRmZTgzMDM5NzMzYTc5
YTgzOWQzZWU5YjA4ZWQyY2UxMzkzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVj
dG9yLmNwcApAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4
SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZwogICAgIC8v
IEZJWE1FOiBUaGUgY29ycmVjdCB3YXkgdG8gZG8gdGhpcyB3b3VsZCBiZSB0byBtYWtlIEhUTUxJ
bWFnZUVsZW1lbnQgZGVyaXZlIGZyb20KICAgICAvLyBBY3RpdmVET01PYmplY3QgYW5kIHVzZSBp
dHMgaW50ZXJmYWNlIHRvIGtlZXAgaXRzIHdyYXBwZXIgYWxpdmUuIFRoZW4gd2Ugd291bGQKICAg
ICAvLyByZW1vdmUgdGhpcyBjb2RlIGFuZCB0aGUgc3BlY2lhbCBjYXNlIGluIGlzT2JzZXJ2YWJs
ZVRocm91Z2hET00uCi0gICAgdG9WOChkb2N1bWVudCwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25D
b250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICB0b1Y4KGRvY3VtZW50LCBhcmdzLkhv
bGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhl
aWdodDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxMaW5rRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwCmluZGV4IDIwOGY1ZTQ2N2I0ODYyYmUzMmQz
ODcyNzNjZmI3NjQ4NmI2YjY2NWYuLjY5OWY4NzUyYzcyYjQ0ODE3ZmU4NzcyOTE5NDkzYWQ3NmQw
NjJhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxMaW5rRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTExpbmtFbGVtZW50Q3VzdG9tLmNwcApAQCAtNDEsNyArNDEsNyBAQCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MTGlua0VsZW1lbnQ6OnNpemVzQWNjZXNzb3JHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbgogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxMaW5rRWxlbWVu
dC5zaXplcy5fZ2V0Iik7CiAgICAgSFRNTExpbmtFbGVtZW50KiBpbXAgPSBWOEhUTUxMaW5rRWxl
bWVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5zaXpl
cygpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkp
OworICAgIHJldHVybiB0b1Y4KGltcC0+c2l6ZXMoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJ
c29sYXRlKCkpOwogfQogCiB2b2lkIFY4SFRNTExpbmtFbGVtZW50OjpzaXplc0FjY2Vzc29yU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rp
b25DdXN0b20uY3BwCmluZGV4IDFlNjlhNGJhN2MzNGYwNmY3N2FmMTE1Y2FiMWY5ZTU1NGI4ZTg2
YWMuLjQzN2Q3ZDQ4NjMwYjQ0MmY0NTVhOTc0NmJlNWY1NThlMWMyMzgxYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlv
bkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhlZFByb3BlcnR5R2V0
dGVyKHVpbnQzMl90IGluCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVm
aW5lZCgpOwogCi0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIo
KS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9W
OChyZXN1bHQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9
CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhl
ZFByb3BlcnR5U2V0dGVyKHVpbnQzMl90IGluZGV4LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPdXRwdXRFbGVtZW50Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPdXRwdXRFbGVtZW50Q3VzdG9t
LmNwcAppbmRleCA2OTRiZjA0YThiZjI4Y2M0ZGZkYzczMzYxNTEwMGEyNDBmY2E4YTY4Li5iYTUx
YTFkMTcyMWMzNGNmYjU0ODhiZmU1OGIyMjU5OTYwNjI4ZjEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3V0cHV0RWxlbWVudEN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE91dHB1dEVsZW1l
bnRDdXN0b20uY3BwCkBAIC00MSw3ICs0MSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhU
TUxPdXRwdXRFbGVtZW50OjpodG1sRm9yQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTE91dHB1dEVsZW1lbnQuaHRtbEZvci5fZ2V0Iik7CiAg
ICAgSFRNTE91dHB1dEVsZW1lbnQqIGltcCA9IFY4SFRNTE91dHB1dEVsZW1lbnQ6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcC0+aHRtbEZvcigpLCBpbmZvLkhv
bGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVy
biB0b1Y4KGltcC0+aHRtbEZvcigpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7
CiB9CiAKIHZvaWQgVjhIVE1MT3V0cHV0RWxlbWVudDo6aHRtbEZvckFjY2Vzc29yU2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcApp
bmRleCBmMjdhYWZiMWE0NjgxYjZhMjVkMDBjYTJmODUwMDFjY2I4OTc4MmJlLi45MTljOTEzNTA2
MDUwODg2YjMxYWNkMTkxNDdiMDZkMGI5YjI0NGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0
b20uY3BwCkBAIC01Miw3ICs1Miw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxTZWxl
Y3RFbGVtZW50OjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsCiAgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIHRv
VjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBpbmZv
LkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOEhUTUxTZWxlY3RFbGVtZW50OjppbmRleGVkUHJvcGVydHlTZXR0ZXIodWludDMyX3QgaW5k
ZXgsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURC
QW55Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQkFu
eUN1c3RvbS5jcHAKaW5kZXggMTE2NTAxYjM4NTNkZGM2OGQ3MjMwNmUxMThhODZkMWZhNGUyNTY1
ZC4uZTYyNTdlZWMzN2Y2YTExMmMwNjUzODRhMjAxZDlmYWE3ZTgzNjdiMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJBbnlDdXN0b20uY3BwCkBA
IC00NSw3ICs0NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoSURCQW55KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoSURCQW55KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SURCS2V5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOElEQktleUN1c3RvbS5jcHAKaW5kZXggYzBiOTc5YmFjYmIxZGU4NzE1
M2YyNjRhMDMwYjI4NGRjZjcwZjYyMi4uMjM0MDAzMTQ3MGZlNDU4YWU2MmU3YTkwM2YxMTU3Y2Fl
YmY5ZjI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SURCS2V5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhJREJLZXlDdXN0b20uY3BwCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSURCS2V5KiBrZXksIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChJREJLZXkqIGtleSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICgha2V5
KQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW1hZ2VEYXRhQ3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEltYWdlRGF0YUN1c3RvbS5jcHAK
aW5kZXggMWI5NDY5YzgzYWIxZGM2NDU0NWFiMTQzYmRjMjE0MDMxYTRmYjdjNi4uODkwZTQxMjZh
YjE5ZjE4NjNlNGEwOGE2ZTA1ZTllYzEzNTM4NzhlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW1hZ2VEYXRhQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbWFnZURhdGFDdXN0b20uY3BwCkBAIC0zNSw3
ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoSW1hZ2VEYXRhKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
SW1hZ2VEYXRhKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCmluZGV4IDUzMmUwM2FlZmFmMTY5
ZjUyMzkxNWIwOGE2MTljMTk2MjNlNzZjNmUuLjQ1ZmRjZTc5YjI0Y2RjMGVmN2MyNmRiODI5YTZh
NjBhMDVmYTY4NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOExvY2F0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAKQEAgLTI3MCw3ICsyNzAsNyBAQCBib29sIFY4TG9j
YXRpb246Om5hbWVkU2VjdXJpdHlDaGVjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gaG9zdCwgdjg6
OkxvY2FsPHY4OjpWYQogICAgIHJldHVybiBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9GcmFtZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+ZnJhbWUoKSwgRG9Ob3RS
ZXBvcnRTZWN1cml0eUVycm9yKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTG9j
YXRpb24qIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChMb2NhdGlvbiog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhD
aGVjayhpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAKaW5kZXggODBm
NTNmNWFlOWUxMDAzY2EyYTE5ZjY4MzVjNmMyZmMwYjEyYzI5OS4uNzhjZjRmMzE5ZjZmNjhhMmJk
MjM0YWE3ZmFjNmE2YWY1YjA0YTk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5j
cHAKQEAgLTY5LDggKzY5LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TWVzc2FnZUNoYW5u
ZWw6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYKICAgICAvLyBDcmVh
dGUgcmVmZXJlbmNlcyBmcm9tIHRoZSBNZXNzYWdlQ2hhbm5lbCB3cmFwcGVyIHRvIHRoZSB0d28K
ICAgICAvLyBNZXNzYWdlUG9ydCB3cmFwcGVycyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgTWVzc2Fn
ZVBvcnQgd3JhcHBlcnMKICAgICAvLyBzdGF5IGFsaXZlIGFzIGxvbmcgYXMgdGhlIE1lc3NhZ2VD
aGFubmVsIHdyYXBwZXIgaXMgYXJvdW5kLgotICAgIFY4RE9NV3JhcHBlcjo6c2V0TmFtZWRIaWRk
ZW5SZWZlcmVuY2UobWVzc2FnZUNoYW5uZWwsICJwb3J0MSIsIHRvVjgob2JqLT5wb3J0MSgpLCBh
cmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpKTsKLSAg
ICBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNlKG1lc3NhZ2VDaGFubmVsLCAi
cG9ydDIiLCB0b1Y4KG9iai0+cG9ydDIoKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0
KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXROYW1lZEhpZGRl
blJlZmVyZW5jZShtZXNzYWdlQ2hhbm5lbCwgInBvcnQxIiwgdG9WOChvYmotPnBvcnQxKCksIGFy
Z3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRO
YW1lZEhpZGRlblJlZmVyZW5jZShtZXNzYWdlQ2hhbm5lbCwgInBvcnQyIiwgdG9WOChvYmotPnBv
cnQyKCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSk7CiAKICAgICAvLyBTZXR1
cCB0aGUgc3RhbmRhcmQgd3JhcHBlciBvYmplY3QgaW50ZXJuYWwgZmllbGRzLgogICAgIFY4RE9N
V3JhcHBlcjo6c2V0RE9NV3JhcHBlcihtZXNzYWdlQ2hhbm5lbCwgJmluZm8sIG9iai5nZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdl
RXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAppbmRleCAzMTFjNjFlMWQ4ZjZiMWQ2ZjQ1ZTgwZmNlNWEzMmJk
YWJkMWM1YjNmLi42ZTViYzU2N2MyZmI3ODY4ZDdhYTY4YjVlZmIyZDBiZGU0MmQ3ZWJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3Nh
Z2VFdmVudEN1c3RvbS5jcHAKQEAgLTcyLDExICs3MiwxMSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhNZXNzYWdlRXZlbnQ6OmRhdGFBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbgogICAgIH0KIAogICAgIGNhc2UgTWVzc2FnZUV2ZW50OjpEYXRhVHlwZUJsb2I6Ci0gICAg
ICAgIHJlc3VsdCA9IHRvVjgoZXZlbnQtPmRhdGFBc0Jsb2IoKSwgaW5mby5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgcmVzdWx0ID0gdG9W
OChldmVudC0+ZGF0YUFzQmxvYigpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNZXNzYWdlRXZlbnQ6OkRhdGFUeXBlQXJyYXlC
dWZmZXI6Ci0gICAgICAgIHJlc3VsdCA9IHRvVjgoZXZlbnQtPmRhdGFBc0FycmF5QnVmZmVyKCks
IGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7Cisg
ICAgICAgIHJlc3VsdCA9IHRvVjgoZXZlbnQtPmRhdGFBc0FycmF5QnVmZmVyKCksIGluZm8uSG9s
ZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0x
MDAsNyArMTAwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TWVzc2FnZUV2ZW50Ojpwb3J0
c0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPgogCiAgICAgdjg6OkxvY2FsPHY4
OjpBcnJheT4gcG9ydEFycmF5ID0gdjg6OkFycmF5OjpOZXcocG9ydHNDb3B5LnNpemUoKSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3J0c0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHBvcnRBcnJheS0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHRvVjgocG9y
dHNDb3B5W2ldLmdldCgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5H
ZXRJc29sYXRlKCkpKTsKKyAgICAgICAgcG9ydEFycmF5LT5TZXQodjhJbnRlZ2VyKGksIGluZm8u
R2V0SXNvbGF0ZSgpKSwgdG9WOChwb3J0c0NvcHlbaV0uZ2V0KCksIGluZm8uSG9sZGVyKCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKSk7CiAKICAgICByZXR1cm4gcG9ydEFycmF5OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWljcm9EYXRhSXRlbVZhbHVl
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1pY3JvRGF0
YUl0ZW1WYWx1ZUN1c3RvbS5jcHAKaW5kZXggYzkzZmNlOTU5Zjc1ODY2ZDM5MjFiYjg1YTgzYTYy
NDhkNTA2ODdiNS4uNmMyODQ0NzQ4NTc3Y2I1MzJkNTBhZGIzZDEzMzQ0MDAzYWM4YTFjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWljcm9EYXRhSXRl
bVZhbHVlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhNaWNyb0RhdGFJdGVtVmFsdWVDdXN0b20uY3BwCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTWljcm9EYXRhSXRl
bVZhbHVlKiBpdGVtVmFsdWUsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4
dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChNaWNy
b0RhdGFJdGVtVmFsdWUqIGl0ZW1WYWx1ZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghaXRlbVZhbHVlKQog
ICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCmluZGV4IGE1NjMx
MTk0ZWVmNmM5YmY4ZGRkNzZmMWNiYjc1NjhlZDlkOTI2YTAuLmE1YjlmMjRiYjg5OTY3YjM5NmI0
YWM1NmJlM2MyNjZmN2YzZGFmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcApAQCAtNTAsNyArNTAs
NyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOYW1lZE5vZGVNYXA6OmluZGV4ZWRQcm9wZXJ0
eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29ucwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCks
IGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJ
c29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOYW1lZE5vZGVNYXA6Om5h
bWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCkBAIC02Nyw3ICs2Nyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOE5hbWVkTm9kZU1hcDo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4KICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAKLSAg
ICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxl
YXNlKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhOb2RlQ3VzdG9tLmNwcAppbmRleCAyNGIwMTIwN2EyODZjY2MzYmFlOWJhYTEwYzlhNGVjMjIw
YjgxOTQxLi42ZWY0NmRhZjc4NjczYzdkYjgxNDNmNGQwNzI3Nzc3ZjRhOTg1M2UwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcApA
QCAtMTI1LDcgKzEyNSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vZGU6OmFwcGVuZENo
aWxkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1cm4gdjg6Ok51
bGwoYXJncy5HZXRJc29sYXRlKCkpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOFNs
b3coTm9kZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4U2xvdyhOb2RlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYmplY3QpCiB7
CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxp
c3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxp
c3RDdXN0b20uY3BwCmluZGV4IDA1MmE0OWRlOWVjYWUyOTFjMWI4NTY5ZTU5YTkxNjljMTJlNWU5
MjUuLjRlOGNiNTU3OTQ1ODM2MmE5N2Q5MzU1MDQwNzE3ZDA2OWFlMDI5NzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5j
cHAKQEAgLTU2LDcgKzU2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Tm9kZUxpc3Q6Om5h
bWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUKICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4gdG9WOChy
ZXN1bHQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5H
ZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGluZm8uSG9s
ZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdm9pZCBWOE5vZGVMaXN0Ojp2aXNpdERP
TVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAKaW5k
ZXggZWZhNTU2NzdiMmFlMmZmYWZkMTg2NWI2ZTViYTJjMjQ5MjRhZDBkMS4uMDk5MWZiMTg4YmM0
NjkwYTY5NDI5NThhMTJiOTVmOTg2ZmQ4MTFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0
b20uY3BwCkBAIC01OSw3ICs1OSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vdGlmaWNh
dGlvbkNlbnRlcjo6Y3JlYXRlSFRNTE5vdGlmaWNhdGlvbkNhbGxiYWNrKGNvbnN0CiAgICAgICAg
IHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIG5v
dGlmaWNhdGlvbi0+cmVmKCk7Ci0gICAgcmV0dXJuIHRvVjgobm90aWZpY2F0aW9uLmdldCgpLCBh
cmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAg
IHJldHVybiB0b1Y4KG5vdGlmaWNhdGlvbi5nZXQoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJ
c29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb3RpZmljYXRpb25DZW50
ZXI6OmNyZWF0ZU5vdGlmaWNhdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CkBAIC03NCw3ICs3NCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vdGlmaWNhdGlvbkNl
bnRlcjo6Y3JlYXRlTm90aWZpY2F0aW9uQ2FsbGJhY2soY29uc3Qgdjg6CiAgICAgICAgIHJldHVy
biBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIG5vdGlmaWNh
dGlvbi0+cmVmKCk7Ci0gICAgcmV0dXJuIHRvVjgobm90aWZpY2F0aW9uLmdldCgpLCBhcmdzLkhv
bGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVy
biB0b1Y4KG5vdGlmaWNhdGlvbi5nZXQoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRl
KCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb3RpZmljYXRpb25DZW50ZXI6OnJl
cXVlc3RQZXJtaXNzaW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBlcmZvcm1hbmNlQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBlcmZvcm1hbmNl
Q3VzdG9tLmNwcAppbmRleCBhY2EwODExNTIyZWRkZTlhYzc1N2JiZGNlMGJiNTE2NmU4NjlmNTc2
Li43Y2ZlM2QzNWZmNmI0ZGUxOGM0ZTMyN2Y4NzAzNzI3Yzk2MTFmN2UxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhQZXJmb3JtYW5jZUN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VDdXN0
b20uY3BwCkBAIC00NSw3ICs0NSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFBlcmZvcm1h
bmNlOjptZW1vcnlBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5QZXJmb3JtYW5jZS5tZW1vcnlBY2Nlc3NvckdldHRlciIpOwogICAgIFBl
cmZvcm1hbmNlKiBpbXAgPSBWOFBlcmZvcm1hbmNlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
LSAgICByZXR1cm4gdG9WOChpbXAtPm1lbW9yeSgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+bWVtb3J5
KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4UGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhQZXJmb3JtYW5jZUVudHJ5Q3VzdG9tLmNwcAppbmRleCA5ZDY3MDI5YmYzNzUy
MmJmNDU0MmMzNTRkMTFmYzY4NGUwN2RiMDk5Li4zOTdlM2Y5YWU1YzA0M2M2MGUyZjBiNzI4Yjdj
MTFmMDk1MmJkMjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhQZXJmb3JtYW5jZUVudHJ5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhQZXJmb3JtYW5jZUVudHJ5Q3VzdG9tLmNwcApAQCAtNDMsNyArNDMs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KFBlcmZvcm1hbmNlRW50cnkqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChQZXJmb3JtYW5jZUVudHJ5KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAg
ICByZXR1cm4gdjg6Ok51bGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKaW5kZXggM2FhY2Q0YTlh
ODFkMjAyODFjMzJjNDkzNzYzODUyYThkYTA3NmM5Yy4uMzcwOWEwY2U5MTQ4OTc4NTNiYjZhZWIz
ODJjMWE3NWQ5ZThlYjc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UG9wU3RhdGVFdmVudDo6c3RhdGVBY2Nlc3Nvckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBib29sIGlzU2FtZVN0YXRlID0gaGlzdG9y
eS0+aXNTYW1lQXNDdXJyZW50U3RhdGUoZXZlbnQtPnNlcmlhbGl6ZWRTdGF0ZSgpKTsKIAogICAg
IGlmIChpc1NhbWVTdGF0ZSkgewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHY4SGlz
dG9yeSA9IHRvVjgoaGlzdG9yeSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKS5Bczx2ODo6T2JqZWN0PigpOworICAgICAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHY4SGlzdG9yeSA9IHRvVjgoaGlzdG9yeSwgaW5mby5Ib2xkZXIoKSwgaW5mby5H
ZXRJc29sYXRlKCkpLkFzPHY4OjpPYmplY3Q+KCk7CiAgICAgICAgIGlmICghaGlzdG9yeS0+c3Rh
dGVDaGFuZ2VkKCkpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IHY4SGlzdG9yeS0+R2V0SGlkZGVu
VmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OnN0YXRlKCkpOwogICAgICAgICAgICAgaWYgKCFy
ZXN1bHQuSXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAKaW5kZXggMWFl
YzUyMzczZjg1MTc5NjBmNGY0MzdjNDNmNjc2ODI3ZjNjNzczNC4uMWFiNjYyNjc4ZmVjYjQ1ZDNi
OWI2MTIxNGQ1ODRhOWIwNzRjYWYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3Bw
CkBAIC04OSw3ICs4OSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFNRTFRyYW5zYWN0aW9u
U3luYzo6ZXhlY3V0ZVNxbENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVuCiAgICAgU1FMVHJhbnNh
Y3Rpb25TeW5jKiB0cmFuc2FjdGlvbiA9IFY4U1FMVHJhbnNhY3Rpb25TeW5jOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiByZXN1bHQgPSB0b1Y4KHRyYW5zYWN0aW9uLT5leGVjdXRlU1FMKHN0YXRl
bWVudCwgc3FsVmFsdWVzLCBlYyksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBh
cmdzLkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IHRv
VjgodHJhbnNhY3Rpb24tPmV4ZWN1dGVTUUwoc3RhdGVtZW50LCBzcWxWYWx1ZXMsIGVjKSwgYXJn
cy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIHNldERPTUV4Y2VwdGlvbihlYywg
YXJncy5HZXRJc29sYXRlKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNw
cAppbmRleCBmZmZlYzRiZDk1ZDIzODI4M2E1NGQ4MmM0ZmE5NGNjZWRiYWJlZDlkLi5hNmY0MWI2
ZGI1MjY1YWEwZDZiYWEyZmZjOGM2ODcyYzQ0OTNhY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCkBA
IC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoU1ZHRG9jdW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYmplY3Qp
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTVkdEb2N1bWVudCogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29s
IGZvcmNlTmV3T2JqZWN0KQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVs
bFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggNTJmNDg1MWU4ZTE4OWUz
OGYzZGM1YWMyODNkNzFiODNmNzJmZmY1ZS4uODg2MjExODgwYTQxZWYwMjZjMTFlMjQ3OTU5OTcz
ZDViNTZkYzU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTVkdFbGVtZW50KiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlLCBib29sIGZvcmNlTmV3T2JqZWN0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoU1ZHRWxlbWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGZvcmNlTmV3T2JqZWN0KQogewogICAgIGlm
ICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNlZ0N1
c3RvbS5jcHAKaW5kZXggYzAxYjIwMzEwNTU3MmNjNTg1MWFiMzI0NWYxNzQxZDQwNThkZGE4Ny4u
ZDQ1Y2JlMjRiZjczNWIyNGI3MTgxNTI1OWI4OGZjN2NlMzQxZWUyYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNlZ0N1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNlZ0N1c3RvbS5j
cHAKQEAgLTU3LDcgKzU3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChTVkdQYXRoU2VnKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoU1ZHUGF0aFNlZyogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghaW1wbCkKICAg
ICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFByb2ZpbGVDdXN0b20uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyaXB0UHJvZmlsZUN1c3RvbS5j
cHAKaW5kZXggNjYwYmRjMTU0YzZkNmI5Y2JkMDc0NTQ0Y2E3NDQ2ODZiN2ViY2E3MS4uZjJmYTcy
N2NmOGM4M2JjN2Y2MDA1NTA3NzY2NzMzODE4M2QxNDA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyaXB0UHJvZmlsZUN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyaXB0UHJvZmlsZUN1c3RvbS5j
cHAKQEAgLTM5LDcgKzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChTY3JpcHRQcm9maWxlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjgoU2NyaXB0UHJvZmlsZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghaW1w
bCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFByb2ZpbGVOb2RlQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFByb2Zp
bGVOb2RlQ3VzdG9tLmNwcAppbmRleCBkMTBmMzEyMGY5MGJjNjY4ZjhmMzVmNWFmMTU2MzBmYzMy
MjIyM2I0Li5jYjAzMzJjOGRjYWQ3MTQ5MGExYTRjYzYzYzIyNzE5OGQyZGEzMjc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTY3JpcHRQcm9maWxlTm9k
ZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2Ny
aXB0UHJvZmlsZU5vZGVDdXN0b20uY3BwCkBAIC00Niw3ICs0Niw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFNjcmlwdFByb2ZpbGVOb2RlOjpjYWxsVUlEQWNjZXNzb3JHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTCiAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAtPmNhbGxVSUQoKSk7CiB9
CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFNjcmlwdFByb2ZpbGVOb2RlKiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU2NyaXB0UHJvZmlsZU5vZGUqIGltcGws
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2so
aXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTdHlsZVNoZWV0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwCmluZGV4IGRjYmUxNjEzNjE5NmEzY2FkMGNkNTU2NDE5
ZGUzNmI2ODU0NzlmN2UuLmVkMDVmYTJiZDAzYTlmZmNkZTg4MTczMjcyOWZlNTM4ZDI0NDRmMWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hl
ZXRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0
eWxlU2hlZXRDdXN0b20uY3BwCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU3R5bGVTaGVldCogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFN0eWxlU2hlZXQqIGltcGwsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAg
ICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0
TGlzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHls
ZVNoZWV0TGlzdEN1c3RvbS5jcHAKaW5kZXggYWFjNjIwMTRhMGRjMmE2Y2E3ZTc4ZDBmMDAwOTA2
MjQxZDY2OWMxZC4uMWRkMjMwNzQ3NjQ3ODRjNjFiMTgxYjI2YjJjNzg1OWJiZjVkYjQ4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExp
c3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0
eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcApAQCAtNTEsNyArNTEsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhTdHlsZVNoZWV0TGlzdDo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZwogICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAK
LSAgICByZXR1cm4gdG9WOChpdGVtLT5zaGVldCgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGl0ZW0tPnNoZWV0
KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4VHJhY2tFdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhUcmFja0V2ZW50Q3VzdG9tLmNwcAppbmRleCBhOTYyYTgwZDJhN2RkOWJlYmJmOWE5NGE0
ZjlmOGM1ZDQzMTRhNWM3Li44ZDE5ZWViNGJiMWRlYWMwZjY1NTExMGU1YTQ0MDM3NGJmOTEwYmRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhUcmFja0V2
ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhU
cmFja0V2ZW50Q3VzdG9tLmNwcApAQCAtNTYsNyArNTYsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhUcmFja0V2ZW50Ojp0cmFja0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBUcmFja0Jhc2U6OlRleHRU
cmFjazoKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8VGV4dFRyYWNrKj4odHJhY2sp
LCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOwor
ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxUZXh0VHJhY2sqPih0cmFjayksIGluZm8u
SG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IFRyYWNrQmFzZTo6QXVkaW9UcmFjazoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwCmluZGV4IDgyYzM2YTJkZWY3NGNhOGM1MWI0ODlmMDEzNWNjYjRlY2IxOGVmNjcuLjA2MzU0
OTY5ZDQ0ZDNjNDZhNTkzZGRhNTU0YTM1ZDJmMTA4Njk2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIHN0YXRpYyBpbnQqIGpzQXJy
YXlUb0ludEFycmF5KHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgdWludDMyX3QgbGVuKQog
ICAgIHJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhP
YmplY3QoY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4T2JqZWN0KGNvbnN0IFdlYkdMR2V0SW5mbyYgaW5mbywgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewog
ICAgIHN3aXRjaCAoaW5mby5nZXRUeXBlKCkpIHsKICAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5
cGVCb29sOgpAQCAtMTcyLDM5ICsxNzIsMzkgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4T2JqZWN0KFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24sIHY4OjpIYW5kbGU8djgKICAg
ICBjb25zdCBjaGFyKiByZWZlcmVuY2VOYW1lID0gMDsKICAgICBzd2l0Y2ggKGV4dGVuc2lvbi0+
Z2V0TmFtZSgpKSB7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViS2l0V2ViR0xMb3NlQ29u
dGV4dE5hbWU6Ci0gICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2Vi
R0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbiksIGNvbnRleHRPYmplY3QtPkNyZWF0aW9uQ29udGV4
dCgpLCBpc29sYXRlKTsKKyAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2Fz
dDxXZWJHTExvc2VDb250ZXh0Kj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdCwgaXNvbGF0ZSk7
CiAgICAgICAgIHJlZmVyZW5jZU5hbWUgPSAid2ViS2l0V2ViR0xMb3NlQ29udGV4dE5hbWUiOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWNOYW1lOgotICAgICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19j
YXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVuc2lvbiksIGNvbnRleHRPYmpl
Y3QtPkNyZWF0aW9uQ29udGV4dCgpLCBpc29sYXRlKTsKKyAgICAgICAgZXh0ZW5zaW9uT2JqZWN0
ID0gdG9WOChzdGF0aWNfY2FzdDxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMqPihleHRlbnNp
b24pLCBjb250ZXh0T2JqZWN0LCBpc29sYXRlKTsKICAgICAgICAgcmVmZXJlbmNlTmFtZSA9ICJl
eHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNOYW1lIjsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJpdmF0aXZlc05hbWU6Ci0gICAgICAgIGV4
dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJpdmF0aXZlcyo+
KGV4dGVuc2lvbiksIGNvbnRleHRPYmplY3QtPkNyZWF0aW9uQ29udGV4dCgpLCBpc29sYXRlKTsK
KyAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2FzdDxPRVNTdGFuZGFyZERl
cml2YXRpdmVzKj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdCwgaXNvbGF0ZSk7CiAgICAgICAg
IHJlZmVyZW5jZU5hbWUgPSAib2VzU3RhbmRhcmREZXJpdmF0aXZlc05hbWUiOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgotICAg
ICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCo+
KGV4dGVuc2lvbiksIGNvbnRleHRPYmplY3QtPkNyZWF0aW9uQ29udGV4dCgpLCBpc29sYXRlKTsK
KyAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxv
YXQqPihleHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LCBpc29sYXRlKTsKICAgICAgICAgcmVmZXJl
bmNlTmFtZSA9ICJvZXNUZXh0dXJlRmxvYXROYW1lIjsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6T0VTVmVydGV4QXJyYXlPYmplY3ROYW1lOgotICAgICAgICBleHRl
bnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PE9FU1ZlcnRleEFycmF5T2JqZWN0Kj4oZXh0
ZW5zaW9uKSwgY29udGV4dE9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCksIGlzb2xhdGUpOworICAg
ICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PE9FU1ZlcnRleEFycmF5T2Jq
ZWN0Kj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdCwgaXNvbGF0ZSk7CiAgICAgICAgIHJlZmVy
ZW5jZU5hbWUgPSAib2VzVmVydGV4QXJyYXlPYmplY3ROYW1lIjsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6Ci0gICAg
ICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mbyo+KGV4dGVuc2lvbiksIGNvbnRleHRPYmplY3QtPkNyZWF0aW9uQ29udGV4dCgpLCBpc29s
YXRlKTsKKyAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2FzdDxXZWJHTERl
YnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdCwgaXNvbGF0ZSk7CiAg
ICAgICAgIHJlZmVyZW5jZU5hbWUgPSAid2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWUiOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnU2hhZGVyc05h
bWU6Ci0gICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1
Z1NoYWRlcnMqPihleHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LT5DcmVhdGlvbkNvbnRleHQoKSwg
aXNvbGF0ZSk7CisgICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2Vi
R0xEZWJ1Z1NoYWRlcnMqPihleHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LCBpc29sYXRlKTsKICAg
ICAgICAgcmVmZXJlbmNlTmFtZSA9ICJ3ZWJHTERlYnVnU2hhZGVyc05hbWUiOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJLaXRXZWJHTENvbXByZXNzZWRUZXh0
dXJlUzNUQ05hbWU6Ci0gICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMqPihleHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LT5D
cmVhdGlvbkNvbnRleHQoKSwgaXNvbGF0ZSk7CisgICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRv
Vjgoc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMqPihleHRlbnNpb24pLCBj
b250ZXh0T2JqZWN0LCBpc29sYXRlKTsKICAgICAgICAgcmVmZXJlbmNlTmFtZSA9ICJ3ZWJLaXRX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ05hbWUiOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpXZWJLaXRXZWJHTERlcHRoVGV4dHVyZU5hbWU6Ci0gICAgICAgIGV4
dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xEZXB0aFRleHR1cmUqPihleHRl
bnNpb24pLCBjb250ZXh0T2JqZWN0LT5DcmVhdGlvbkNvbnRleHQoKSwgaXNvbGF0ZSk7CisgICAg
ICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xEZXB0aFRleHR1cmUq
PihleHRlbnNpb24pLCBjb250ZXh0T2JqZWN0LCBpc29sYXRlKTsKICAgICAgICAgcmVmZXJlbmNl
TmFtZSA9ICJ3ZWJLaXRXZWJHTERlcHRoVGV4dHVyZU5hbWUiOwogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC0yNDcsNyArMjQ3LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRP
YmplY3RQYXJhbWV0ZXIoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywgT2JqZWMKICAgICB9CiAg
ICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElz
b2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbywgYXJncy5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOE9iamVj
dChpbmZvLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogdG9XZWJHTFVuaWZvcm1Mb2NhdGlvbih2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIG9rKQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzQ2Fs
bGJhY2soY29uc3QKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
ICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJheSA9IHY4OjpBcnJheTo6TmV3KHNoYWRlcnMu
c2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXplKCk7ICsr
aWkpCi0gICAgICAgIGFycmF5LT5TZXQodjhJbnRlZ2VyKGlpLCBhcmdzLkdldElzb2xhdGUoKSks
IHRvVjgoc2hhZGVyc1tpaV0uZ2V0KCksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgp
LCBhcmdzLkdldElzb2xhdGUoKSkpOworICAgICAgICBhcnJheS0+U2V0KHY4SW50ZWdlcihpaSwg
YXJncy5HZXRJc29sYXRlKCkpLCB0b1Y4KHNoYWRlcnNbaWldLmdldCgpLCBhcmdzLkhvbGRlcigp
LCBhcmdzLkdldElzb2xhdGUoKSkpOwogICAgIHJldHVybiBhcnJheTsKIH0KIApAQCAtMzIzLDcg
KzMyMyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyCiAgICAgV2ViR0xHZXRJbmZvIGluZm8g
PSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0LCBhdHRh
Y2htZW50LCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIHNldERPTUV4
Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4T2JqZWN0KGlu
Zm8sIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7
CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbywgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29s
YXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFBhcmFtZXRlckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0z
MzksNyArMzM5LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRQYXJhbWV0ZXJDYWxsYmFjayhjb25zdCB2ODo6QXIKICAgICBXZWJHTEdldEluZm8g
aW5mbyA9IGNvbnRleHQtPmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOwogICAgIGlmIChlYykKICAg
ICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOwotICAg
IHJldHVybiB0b1Y4T2JqZWN0KGluZm8sIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgp
LCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbywgYXJncy5I
b2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXJDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMzU4LDcgKzM1OCw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlckNhbGxi
YWNrKGNvbnN0CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LT5nZXRQcm9ncmFtUGFy
YW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4g
c2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjhP
YmplY3QoaW5mbywgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOE9iamVjdChpbmZvLCBhcmdzLkhvbGRlcigpLCBhcmdz
LkdldElzb2xhdGUoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKQEAgLTM4Myw3ICszODMsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlckNhbGxiYWNrKGNvbnN0
CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LT5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hh
ZGVyLCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2Vw
dGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8s
IGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbywgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRl
KCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFN1cHBvcnRlZEV4dGVuc2lvbnNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQpAQCAtNDI3LDcgKzQyNyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VW5pZm9ybUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1CiAgICAgV2ViR0xH
ZXRJbmZvIGluZm8gPSBjb250ZXh0LT5nZXRVbmlmb3JtKHByb2dyYW0sIGxvY2F0aW9uLCBlYyk7
CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdl
dElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbywgYXJncy5Ib2xkZXIoKS0+
Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOE9i
amVjdChpbmZvLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmli
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAK
aW5kZXggOThiMDFkZjhhNzJiNmZmODFkZDcyYTNmODhlN2YzOTdiYTQxMjY0OC4uODllY2RjOTg2
NzllODM1YjZjMmZmNzZjNWM1MzBlMDYyYWU2M2I5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAK
QEAgLTEzMCw3ICsxMzAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0
OjpzZXRJbnRlcnZhbENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmCiAgICAgcmV0dXJuIFNl
dFRpbWVvdXRPckludGVydmFsKGFyZ3MsIGZhbHNlKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoV29ya2VyQ29udGV4dCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3Jl
YXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KFdvcmtlckNvbnRleHQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAvLyBOb3RpY2UgdGhhdCB3
ZSBleHBsaWNpdGx5IGlnbm9yZSBjcmVhdGlvbkNvbnRleHQgYmVjYXVzZSB0aGUgV29ya2VyQ29u
dGV4dCBpcyBpdHMgb3duIGNyZWF0aW9uQ29udGV4dC4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
CmluZGV4IDgwOTk5NjM3MzZiZmU4NDUxZDE3N2QxOTE2NjQ0NDcxM2UwYWZiOGUuLjE1NGQ2NzA1
NDJiYjYxNjg3OTYyN2QwYjU5YjlkZTBiNDczMDJlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5j
cHAKQEAgLTc2LDcgKzc2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4WE1MSHR0cFJlcXVl
c3Q6OnJlc3BvbnNlQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHIKICAgICAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHhtbEh0dHBSZXF1ZXN0LT5yZXNwb25zZVhNTChlYyk7CiAg
ICAgICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlv
bihlYywgaW5mby5HZXRJc29sYXRlKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRvVjgoZG9jdW1l
bnQsIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gdG9WOChkb2N1bWVudCwgaW5mby5Ib2xkZXIoKSwgaW5mby5H
ZXRJc29sYXRlKCkpOwogICAgICAgICB9CiAKICAgICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpSZXNw
b25zZVR5cGVCbG9iOgpAQCAtODUsNyArODUsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhY
TUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cgog
ICAgICAgICAgICAgQmxvYiogYmxvYiA9IHhtbEh0dHBSZXF1ZXN0LT5yZXNwb25zZUJsb2IoZWMp
OwogICAgICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgICAgIHJldHVybiBzZXRET01FeGNl
cHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiB0b1Y4KGJs
b2IsIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7
CisgICAgICAgICAgICByZXR1cm4gdG9WOChibG9iLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CiAgICAgICAgIH0KIAogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNl
VHlwZUFycmF5QnVmZmVyOgpAQCAtOTQsNyArOTQsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0
cgogICAgICAgICAgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0geG1sSHR0cFJlcXVlc3Qt
PnJlc3BvbnNlQXJyYXlCdWZmZXIoZWMpOwogICAgICAgICAgICAgaWYgKGVjKQogICAgICAgICAg
ICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0b1Y4KGFycmF5QnVmZmVyLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlv
bkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgo
YXJyYXlCdWZmZXIsIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAg
fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAppbmRleCBjODUzMTY0ZTZiY2IxMDU2
MzQ0MzljODQ2OGQ5YzAwNGM4ZmI2NTM2Li44ODdjMWE5ZGJmZjBhYmNmYzExNDViODE3YmZmMTdh
YWVmNTUyMGYwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbApAQCAtMTA0MSw3ICsxMDQxLDcg
QEAgRU5ECiAgICAgICAgIH0gZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEgIlY4Iikgewog
ICAgICAgICAgICAgaWYgKCRlbmFibGVkVGFnc3skdGFnTmFtZX17d3JhcHBlck9ubHlJZk1lZGlh
SXNBdmFpbGFibGV9KSB7CiAgICAgICAgICAgICAgICAgcHJpbnQgRiA8PEVORAotc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVyKCRwYXJh
bWV0ZXJze25hbWVzcGFjZX1FbGVtZW50KiBlbGVtZW50LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVyKCRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50KiBlbGVtZW50LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIU1lZGlhUGxh
eWVyOjppc0F2YWlsYWJsZSgpIHx8IChzZXR0aW5ncyAmJiAhc2V0dGluZ3MtPmlzTWVkaWFFbmFi
bGVkKCkpKQpAQCAtMTA1NCw3ICsxMDU0LDcgQEAgRU5ECiAgICAgICAgICAgICB9IGVsc2lmICgk
ZW5hYmxlZFRhZ3N7JHRhZ05hbWV9e2NvbnRleHRDb25kaXRpb25hbH0pIHsKICAgICAgICAgICAg
ICAgICBteSAkY29udGV4dENvbmRpdGlvbmFsID0gJGVuYWJsZWRUYWdzeyR0YWdOYW1lfXtjb250
ZXh0Q29uZGl0aW9uYWx9OwogICAgICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKLXN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcigkcGFy
YW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcigkcGFyYW1ldGVy
c3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghQ29udGV4dEZl
YXR1cmVzOjoke2NvbnRleHRDb25kaXRpb25hbH1FbmFibGVkKGVsZW1lbnQtPmRvY3VtZW50KCkp
KQogICAgICAgICByZXR1cm4gVjgkcGFyYW1ldGVyc3tmYWxsYmFja0ludGVyZmFjZU5hbWV9Ojp3
cmFwKHRvJHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRlcmZhY2VOYW1lfShlbGVtZW50KSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKQEAgLTEwNjQsNyArMTA2NCw3IEBAIEVORAogOwogICAgICAg
ICAgICAgfSBlbHNpZiAoJHtKU0ludGVyZmFjZU5hbWV9IGVxICJIVE1MRWxlbWVudCIpIHsKICAg
ICAgICAgICAgICAgICBwcmludCBGIDw8RU5ECi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNyZWF0ZSR7SlNJbnRlcmZhY2VOYW1lfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVs
ZW1lbnQqIGVsZW1lbnQsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0
ZSR7SlNJbnRlcmZhY2VOYW1lfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQq
IGVsZW1lbnQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKIHsKICAgICByZXR1cm4gVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxl
bWVudDo6d3JhcChlbGVtZW50LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpAQCAtMTA3
Myw3ICsxMDczLDcgQEAgRU5ECiA7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IHByaW50IEYgPDxFTkQKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlJHtKU0lu
dGVyZmFjZU5hbWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVu
dCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlJHtKU0ludGVyZmFj
ZU5hbWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PCR7SlNJbnRlcmZhY2VOYW1lfSo+KGVs
ZW1lbnQpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQpAQCAtMTE1Nyw3ICsxMTU3LDcg
QEAgRU5ECiA7CiAgICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgiKSB7CiAg
ICAgICAgIHByaW50IEYgPDxFTkQKLXR5cGVkZWYgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICgqQ3Jl
YXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24pKCRwYXJhbWV0
ZXJze25hbWVzcGFjZX1FbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25D
b250ZXh0LCB2ODo6SXNvbGF0ZSopOwordHlwZWRlZiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gKCpD
cmVhdGUkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbikoJHBhcmFt
ZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIAogRU5ECiA7CkBAIC0xMTc2LDcgKzExNzYsNyBAQCBF
TkQKIDsKICAgICB9IGVsc2lmICgkd3JhcHBlckZhY3RvcnlUeXBlIGVxICJWOCIpIHsKICAgICAg
ICAgcHJpbnQgRiA8PEVORAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZVY4JHBhcmFtZXRl
cnN7bmFtZXNwYWNlfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQqIGVsZW1l
bnQsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYmplY3QpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3Jl
YXRlVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
RWxlbWVudCogZWxlbWVudCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGZvcmNlTmV3T2JqZWN0KQogewogICAgIHR5cGVk
ZWYgSGFzaE1hcDxXVEY6OkF0b21pY1N0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3tuYW1l
c3BhY2V9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gRnVuY3Rpb25NYXA7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChGdW5jdGlvbk1hcCwgbWFwLCAoKSk7CkBAIC0xMjc4LDcgKzEyNzgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyAkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxl
bWVudDsKIAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGVWOCRwYXJhbWV0ZXJze25h
bWVzcGFjZX1XcmFwcGVyKCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50Kiwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSosIGJvb2wpOworICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGVWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1XcmFw
cGVyKCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiwgYm9vbCk7CiB9CiBFTkQKIDsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVj
dGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FkOWJhYjAxMGQ3Njk1ODlj
ZDdkZDljYmZlYWU3NmY3Nzc1YTFhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L3dvcmtlcnMv
c3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApA
QCAtMSw3MSArMCwwIEBACi1UZXN0IHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLgotQmVnaW5uaW5n
IHdyaXRlIHRyYW5zYWN0aW9uOgotU1FMSVRFX0NSRUFURV9UQUJMRSBhbGxvd2VkLgotU1FMSVRF
X0NSRUFURV9JTkRFWCBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIGFsbG93ZWQu
Ci1TUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9URU1Q
X1ZJRVcgYWxsb3dlZC4KLVNRTElURV9DUkVBVEVfVFJJR0dFUiBhbGxvd2VkLgotU1FMSVRFX0NS
RUFURV9WSUVXIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1ZUQUJMRSBub3QgYWxsb3dlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX1JFQUQgYWxsb3dlZC4KLVNRTElURV9TRUxF
Q1QgYWxsb3dlZC4KLVNRTElURV9ERUxFVEUgYWxsb3dlZC4KLVNRTElURV9JTlNFUlQgYWxsb3dl
ZC4KLVNRTElURV9VUERBVEUgYWxsb3dlZC4KLVNRTElURV9QUkFHTUEgbm90IGFsbG93ZWQ6IFtv
YmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9BTFRFUl9UQUJMRSBhbGxvd2VkLgotU1FM
SVRFX0FMVEVSX1RBQkxFIGFsbG93ZWQuCi1TUUxJVEVfVFJBTlNBQ1RJT04gbm90IGFsbG93ZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9BVFRBQ0ggbm90IGFsbG93ZWQ6IFtv
YmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9ERVRBQ0ggbm90IGFsbG93ZWQ6IFtvYmpl
Y3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9SRUlOREVYIGFsbG93ZWQuCi1TUUxJVEVfQU5B
TFlaRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0RST1Bf
SU5ERVggYWxsb3dlZC4KLVNRTElURV9EUk9QX1RFTVBfVEFCTEUgYWxsb3dlZC4KLVNRTElURV9E
Uk9QX1RFTVBfVFJJR0dFUiBhbGxvd2VkLgotU1FMSVRFX0RST1BfVEVNUF9WSUVXIGFsbG93ZWQu
Ci1TUUxJVEVfRFJPUF9UUklHR0VSIGFsbG93ZWQuCi1TUUxJVEVfRFJPUF9WSUVXIGFsbG93ZWQu
Ci1TUUxJVEVfRFJPUF9UQUJMRSBhbGxvd2VkLgotV3JpdGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVk
LgotCi1CZWdpbm5pbmcgcmVhZCB0cmFuc2FjdGlvbnM6Ci1TUUxJVEVfQ1JFQVRFX1RBQkxFIG5v
dCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQ1JFQVRFX1RBQkxF
IGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX0lOREVYIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgbm90IGFsbG93ZWQ6IFtvYmpl
Y3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIG5vdCBhbGxv
d2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBu
b3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0NSRUFURV9UUklH
R0VSIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQ1JFQVRF
X1ZJRVcgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9DUkVB
VEVfVlRBQkxFIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVf
Q1JFQVRFX0lOREVYIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgYWxsb3dlZC4K
LVNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1RFTVBf
VklFVyBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9UUklHR0VSIGFsbG93ZWQuCi1TUUxJVEVfQ1JF
QVRFX1ZJRVcgYWxsb3dlZC4KLVNRTElURV9DUkVBVEVfVlRBQkxFIG5vdCBhbGxvd2VkOiBbb2Jq
ZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfUkVBRCBhbGxvd2VkLgotU1FMSVRFX1NFTEVD
VCBhbGxvd2VkLgotU1FMSVRFX0RFTEVURSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRp
b25dICg1KQotU1FMSVRFX0lOU0VSVCBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25d
ICg1KQotU1FMSVRFX1VQREFURSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQotU1FMSVRFX1BSQUdNQSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQot
U1FMSVRFX0FMVEVSX1RBQkxFIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUp
Ci1TUUxJVEVfQUxURVJfVEFCTEUgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKLVNRTElURV9UUkFOU0FDVElPTiBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25d
ICg1KQotU1FMSVRFX0FUVEFDSCBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQotU1FMSVRFX0RFVEFDSCBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQot
U1FMSVRFX1JFSU5ERVggbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNR
TElURV9BTkFMWVpFIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJ
VEVfRFJPUF9JTkRFWCBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FM
SVRFX0RST1BfVEVNUF9UQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQotU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2Vw
dGlvbl0gKDUpCi1TUUxJVEVfRFJPUF9URU1QX1ZJRVcgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FM
RXhjZXB0aW9uXSAoNSkKLVNRTElURV9EUk9QX1RSSUdHRVIgbm90IGFsbG93ZWQ6IFtvYmplY3Qg
U1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9EUk9QX1ZJRVcgbm90IGFsbG93ZWQ6IFtvYmplY3Qg
U1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9EUk9QX1RBQkxFIG5vdCBhbGxvd2VkOiBbb2JqZWN0
IFNRTEV4Y2VwdGlvbl0gKDUpCi1SZWFkIHRyYW5zYWN0aW9ucyBzdWNjZWVkZWQuCi0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162904</attachid>
            <date>2012-09-07 16:45:49 -0700</date>
            <delta_ts>2012-09-08 10:25:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96147-20120907164528.patch</filename>
            <type>text/plain</type>
            <size>53875</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3OTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk5YzZhMjAwNGY1ZWEz
ODVkOGExMWIxODkyNzcwZjMzOWI1YTNmZS4uYzQxMmNlNzNlOTRkOWMwZmU4NTMwY2UzMzljYWE4
ZGVmYzdlMGI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDkzIEBACiAyMDEyLTA5LTA3ICBBZGFt
IEJhcnRoICA8YWJhcnRoQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbVjhdIERPTSB3cmFwcGVy
IGNyZWF0aW9uIGludm9sdmVzIGEgYnVuY2ggb2Ygc2tldGNoeSBjb2RlIHJlbGF0ZWQgdG8gZmlu
ZGluZyB0aGUgRnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk2MTQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJldmlvdXNseSwgd2UgdXNlZCB0aGUgRnJhbWUgd2hlbiBpbnN0YW50aWF0aW5nIERP
TSB3cmFwcGVycy4gVGhhdCdzCisgICAgICAgIHNrZXRjaHkgYmVjYXVzZSBub3QgYWxsIERPTSB3
cmFwcGVycyBrbm93IGhvdyB0byBmaW5kIHRoZWlyIEZyYW1lLCBhbmQKKyAgICAgICAgdGhlIEZy
YW1lIG1pZ2h0IGJlIGRpc3BsYXlpbmcgYSBkaWZmZXJlbnQgZG9jdW1lbnQgbm93IGFueXdheS4g
VGhpcworICAgICAgICBwYXRjaCBub3cgZ2V0cyBhbGwgdGhlIGluZm9ybWF0aW9uIGRpcmVjdGx5
IGZyb20gdGhlIGNyZWF0aW9uIGNvbnRleHQuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHRoaXMg
cGF0Y2ggZ2V0cyB0aGUgcHJvcGVyIGNyZWF0aW9uIGNvbnRleHQgaW4gYSBmZXcgbW9yZQorICAg
ICAgICBjYXNlcywgaW5jbHVkaW5nIExvY2F0aW9uLgorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZXRJbnRlcm5hbEZpZWxkcyk6Cisg
ICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVUb1Y4
Q29udmVydGVycyk6CisgICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZyk6CisgICAg
ICAgIChOYXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOEZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdDY0QXJyYXlWOElu
dGVybmFsOjpmb29DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEZsb2F0NjRBcnJheTo6
d3JhcFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3Rp
dmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0QWN0aXZlRE9NT2JqZWN0
Ojp3cmFwU2xvdyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENh
bGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dp
dGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrV2l0aFN0cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJhY2s6
OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwU2xvdyk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWw6Oml0ZW1DYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpWOFRlc3RFdmVudFRhcmdldDo6d3JhcFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhUZXN0RXhjZXB0aW9uOjp3cmFwU2xvdyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW50ZXJm
YWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsTm9kZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE1ldGhvZDJDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRlcmZhY2U6OndyYXBTbG93KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp3
cmFwU2xvdyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6d3JhcFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE5vZGU6OndyYXBTbG93KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp0ZXN0T2JqQXR0ckF0dHJHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OlhNTE9iakF0dHJBdHRyR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp0eXBlZEFycmF5QXR0ckF0dHJHZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0ckdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
QXR0cmlidXRlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5h
bDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNl
c0F0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmNvbnRlbnREb2N1bWVudEF0dHJHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om9iak1ldGhvZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpvYmpNZXRob2RXaXRoQXJnc0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
alY4SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZU9iakNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RP
YmpWOEludGVybmFsOjpnZXRTVkdEb2N1bWVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjpzdHJpY3RGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4VGVzdE9iajo6d3JhcFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwU2xv
dyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3Jh
cHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmg6CisgICAgICAgIChWOERPTVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4UGVyQ29udGV4dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFBlckNvbnRleHREYXRhOjpjdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UGVy
Q29udGV4dERhdGE6OmRpc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhQZXJDb250ZXh0RGF0
YTo6aW5pdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5oOgorICAg
ICAgICAoVjhQZXJDb250ZXh0RGF0YSk6CisKKzIwMTItMDktMDcgIEFkYW0gQmFydGggIDxhYmFy
dGhAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtWOF0gVXNlIGEgdjg6Ok9iamVjdCByYXRoZXIg
dGhhbiBhIHY4OjpDb250ZXh0IHRvIHJlcHJlc2VudCB0aGUgY3JlYXRpb25Db250ZXh0CiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjE1NAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmlu
ZGV4IGQ1YzM0MzdhYWU2M2JlM2RlZmExY2VmYjk4NzQ3NzFhOGMwNzVkOWYuLjg4YTkyZDM0OTg4
MDVlNjBiMjliMDc2NWUwNjU5YjgwMGU4ZTg2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC01NjAsNiArNTYwLDExIEBA
IHN1YiBHZXRJbnRlcm5hbEZpZWxkcwogICAgIG15ICRuYW1lID0gJGRhdGFOb2RlLT5uYW1lOwog
CiAgICAgbXkgQGN1c3RvbUludGVybmFsRmllbGRzID0gKCk7CisKKyAgICBpZiAoJG5hbWUgZXEg
IkRPTVdpbmRvdyIgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJD
b250ZXh0In0pIHsKKyAgICAgICAgcHVzaChAY3VzdG9tSW50ZXJuYWxGaWVsZHMsICJwZXJDb250
ZXh0RGF0YUluZGV4Iik7CisgICAgfQorCiAgICAgIyBXZSBjYW4ndCBhc2sgd2hldGhlciBhIHBh
cmVudCB0eXBlIGhhcyBhIGdpdmVuIGV4dGVuZGVkQXR0cmlidXRlLAogICAgICMgc28gc3BlY2lh
bC1jYXNlIEFic3RyYWN0V29ya2VyIGFuZCBXb3JrZXJDb250ZXh0IHRvIGluY2x1ZGUgYWxsIHN1
Yi10eXBlcy4KICAgICAjIEV2ZW50IGxpc3RlbmVycyBvbiBET00gbm9kZXMgYXJlIGV4cGxpY2l0
bHkgc3VwcG9ydGVkIGluIHRoZSBHQyBjb250cm9sbGVyLgpAQCAtMTA4Nyw3ICsxMDkyLDcgQEAg
RU5ECiAgICAgcmV0dXJuIHZhbHVlOwogRU5ECiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIgLiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5HZXRJc29sYXRlKCkiKS4iO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIgLiBSZXR1cm5O
YXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5Ib2xk
ZXIoKSIsICJpbmZvLkdldElzb2xhdGUoKSIpLiI7XG4iKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMzM1OSwzNyArMzM2NCwxNCBAQCBFTkQKICAgICB9CiAKICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiRnJhbWUuaCIpOwotICAgIG15ICRmcmFtZSA9ICIwIjsKLSAgICBpZiAoSXNOb2RlU3ViVHlw
ZSgkZGF0YU5vZGUpKSB7Ci0gICAgICAgICMgRG9jdW1lbnRUeXBlIG5vZGVzIGFyZSB0aGUgb25s
eSBub2RlcyB0aGF0IG1heSBoYXZlIGEgTlVMTCBkb2N1bWVudC4KLSAgICAgICAgaWYgKCRpbnRl
cmZhY2VOYW1lIGVxICJEb2N1bWVudFR5cGUiKSB7Ci0gICAgICAgICAgICAkZnJhbWUgPSAiaW1w
bC0+ZG9jdW1lbnQoKSA/IGltcGwtPmRvY3VtZW50KCktPmZyYW1lKCkgOiAwIjsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICRmcmFtZSA9ICJpbXBsLT5kb2N1bWVudCgpLT5mcmFtZSgp
IjsKLSAgICAgICAgfQotICAgIH0KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAg
IEZyYW1lKiBmcmFtZSA9ICRmcmFtZTsKLUVORAogCiAgICAgaWYgKElzU3ViVHlwZSgkZGF0YU5v
ZGUsICJEb2N1bWVudCIpKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci0g
ICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+Y29udGV4dCgp
LklzRW1wdHkoKSAmJiBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJ
Zk5lZWRlZCgpKSB7Ci0gICAgICAgIC8vIGluaXRpYWxpemVJZk5lZWRlZCBtYXkgaGF2ZSBjcmVh
dGVkIGEgd3JhcHBlciBmb3IgdGhlIG9iamVjdCwgcmV0cnkgZnJvbSB0aGUgc3RhcnQuCi0gICAg
ICAgIHJldHVybiAke2NsYXNzTmFtZX06OndyYXAoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKLSAgICB9Ci1FTkQKLSAgICB9Ci0KLSAgICAjIEZJWE1FOiBXZSBuZWVkIGEg
YmV0dGVyIHdheSBvZiByZWNvdmVyaW5nIHRoZSBjb3JyZWN0IHByb3RvdHlwZSBjaGFpbgotICAg
ICMgZm9yIGV2ZXJ5IHNvcnQgb2Ygb2JqZWN0LiBGb3Igbm93LCB3ZSBzcGVjaWFsLWNhc2UgY3Jv
c3Mtb3JpZ2luIHZpc2libGUKLSAgICAjIG9iamVjdHMgKGkuZS4sIHRob3NlIHdpdGggQ2hlY2tT
ZWN1cml0eSkuCi0gICAgaWYgKElzVmlzaWJsZUFjcm9zc09yaWdpbnMoJGRhdGFOb2RlKSkgewot
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRnJhbWUuaCIpOwotICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgPDxFTkQpOwotICAgIGlmIChpbXBsLT5mcmFtZSgpKSB7Ci0gICAgICAgIGZyYW1l
ID0gaW1wbC0+ZnJhbWUoKTsKLSAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgp
LT5pbml0aWFsaXplSWZOZWVkZWQoKTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJh
bWUoKSkgeworICAgICAgICBpZiAoZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250
ZXh0KCkuSXNFbXB0eSgpICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdGlh
bGl6ZUlmTmVlZGVkKCkpIHsKKyAgICAgICAgICAgIC8vIGluaXRpYWxpemVJZk5lZWRlZCBtYXkg
aGF2ZSBjcmVhdGVkIGEgd3JhcHBlciBmb3IgdGhlIG9iamVjdCwgcmV0cnkgZnJvbSB0aGUgc3Rh
cnQuCisgICAgICAgICAgICByZXR1cm4gJHtjbGFzc05hbWV9Ojp3cmFwKGltcGwuZ2V0KCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIH0KICAgICB9CiBFTkQKICAgICB9CkBA
IC0zNDA0LDE4ICszMzg2LDEyIEBAIEVORAogICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0
eSgpKTsKICAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKICAgICB9Ci1FTkQKIAotICAgIHB1c2go
QGltcGxDb250ZW50LCA8PEVORCk7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFu
dGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOwotRU5ECisgICAgd3JhcHBl
ciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7
CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogICAgIGlmICghY29udGV4dC5Jc0Vt
cHR5KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKLUVORAogCi0gICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAg
ICAgICByZXR1cm4gd3JhcHBlcjsKIEVORApAQCAtMzU5MSw3ICszNTY3LDcgQEAgc3ViIEdlbmVy
YXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICB9CiAKICAgICAkcmV0dXJuIC49ICIucmVsZWFz
ZSgpIiBpZiAoJHJldHVybklzUmVmKTsKLSAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5O
YXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkdldElz
b2xhdGUoKSIpIC4gIjtcbiI7CisgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gUmV0dXJuTmF0aXZl
VG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAiYXJncy5Ib2xkZXIoKSIs
ICJhcmdzLkdldElzb2xhdGUoKSIpIC4gIjtcbiI7CiAKICAgICByZXR1cm4gJHJlc3VsdDsKIH0K
QEAgLTQwMjIsNiArMzk5OCw4IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKIHsKICAgICBteSAkc2ln
bmF0dXJlID0gc2hpZnQ7CiAgICAgbXkgJHZhbHVlID0gc2hpZnQ7CisgICAgbXkgJGdldENyZWF0
aW9uQ29udGV4dCA9IHNoaWZ0OworICAgIG15ICRnZXRDcmVhdGlvbkNvbnRleHRBcmcgPSAkZ2V0
Q3JlYXRpb25Db250ZXh0ID8gIiwgJGdldENyZWF0aW9uQ29udGV4dCIgOiAiIjsKICAgICBteSAk
Z2V0SXNvbGF0ZSA9IHNoaWZ0OwogICAgIG15ICRnZXRJc29sYXRlQXJnID0gJGdldElzb2xhdGUg
PyAiLCAkZ2V0SXNvbGF0ZSIgOiAiIjsKICAgICBteSAkdHlwZSA9IEdldFR5cGVGcm9tU2lnbmF0
dXJlKCRzaWduYXR1cmUpOwpAQCAtNDA3OCwxOCArNDA1NiwxOCBAQCBzdWIgTmF0aXZlVG9KU1Zh
bHVlCiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkc2VxdWVuY2VUeXBlLmgiKTsK
ICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkc2VxdWVuY2VUeXBlLmgiKTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gInY4QXJyYXkoJHZhbHVlLCAkZ2V0SXNvbGF0ZSkiOworICAg
ICAgICByZXR1cm4gInY4QXJyYXkoJHZhbHVlJGdldElzb2xhdGVBcmcpIjsKICAgICB9CiAKICAg
ICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOwogCiAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIG5v
bi1ET00gbm9kZSBpbnRlcmZhY2VzCiAgICAgaWYgKElzRE9NTm9kZVR5cGUoJHR5cGUpKSB7Ci0g
ICAgICAgIHJldHVybiAidG9WOCgke3ZhbHVlfSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpIiAu
ICgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmV0dXJuTmV3T2JqZWN0In0gPyAi
JGdldElzb2xhdGVBcmcsIHRydWUpIiA6ICIkZ2V0SXNvbGF0ZUFyZykiKTsKKyAgICAgICAgcmV0
dXJuICJ0b1Y4KCR7dmFsdWV9JGdldENyZWF0aW9uQ29udGV4dEFyZyRnZXRJc29sYXRlQXJnIiAu
ICgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmV0dXJuTmV3T2JqZWN0In0gPyAi
LCB0cnVlKSIgOiAiKSIpOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRUYXJnZXQi
KSB7Ci0gICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4
T2JqZWN0KCR2YWx1ZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpJGdldElzb2xhdGVBcmcpIjsK
KyAgICAgICAgcmV0dXJuICJWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmpl
Y3QoJHZhbHVlJGdldENyZWF0aW9uQ29udGV4dEFyZyRnZXRJc29sYXRlQXJnKSI7CiAgICAgfQog
CiAgICAgaWYgKCR0eXBlIGVxICJFdmVudExpc3RlbmVyIikgewpAQCAtNDEwNiw3ICs0MDg0LDcg
QEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJ3dGYvUmVmUHRy
LmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygid3RmL0dldFB0ci5oIik7CiAKLSAgICByZXR1
cm4gInRvVjgoJHZhbHVlLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCkkZ2V0SXNvbGF0ZUFyZyki
OworICAgIHJldHVybiAidG9WOCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElzb2xh
dGVBcmcpIjsKIH0KIAogc3ViIFJldHVybk5hdGl2ZVRvSlNWYWx1ZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5j
cHAKaW5kZXggNTc5ODkxYTEwMzYyNDNjNjJjM2ZlYzU4NjkwMDIwNmQ2ZDgzNDk0Mi4uZTQ3MDNi
YzkxZGNjMTllOGI0Y2UzM2MzNDc5OTBlZjA2YjBiOTkyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3Bw
CkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZm9vQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICAgICAgcmV0dXJuIHRocm93Tm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIEZsb2F0NjRBcnJheSog
aW1wID0gVjhGbG9hdDY0QXJyYXk6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEVYQ0VQ
VElPTl9CTE9DSyhGbG9hdDMyQXJyYXkqLCBhcnJheSwgVjhGbG9hdDMyQXJyYXk6Okhhc0luc3Rh
bmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkp
ID8gVjhGbG9hdDMyQXJyYXk6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDog
MCk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5mb28oYXJyYXkpLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChpbXAtPmZvbyhhcnJh
eSksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBzZXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpA
QCAtMTUxLDcgKzE1MSw2IEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhGbG9hdDY0QXJyYXk6
OndyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBpbXBsLCB2CiB7CiAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8QXJyYXlCdWZmZXJWaWV3Kj4oaW1wbC5nZXQoKSkpID09IHN0YXRpY19jYXN0
PHZvaWQqPihpbXBsLmdldCgpKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gMDsKIAogICAgIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7CiAgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNF
bXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRl
eHQ6OkdldEN1cnJlbnQoKSkgewpAQCAtMTYxLDkgKzE2MCwxMiBAQCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IFY4RmxvYXQ2NEFycmF5Ojp3cmFwU2xvdyhQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4g
aW1wbCwgdgogICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKICAgICAgICAgY29u
dGV4dC0+RW50ZXIoKTsKICAgICB9Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFu
dGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgd3JhcHBlciA9
IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisK
ICAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisK
ICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhE
T01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IGMyNzExMjBlOTA4ZmY3
ODZhNzYwMTBmNTUwMzFiZGFkZjc0Njk5ZDMuLmI5OTZjODE1NWJlZjhmYmY5NjRkMmEzMDcwMTQ2
YWJiYjIzMmVhNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xNzks
MTEgKzE3OSw2IEBAIGJvb2wgVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpIYXNJbnN0YW5jZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFj
dGl2ZURPTU9iamVjdDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0QWN0aXZlRE9NT2JqZWN0PiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotICAgIEZy
YW1lKiBmcmFtZSA9IDA7Ci0gICAgaWYgKGltcGwtPmZyYW1lKCkpIHsKLSAgICAgICAgZnJhbWUg
PSBpbXBsLT5mcmFtZSgpOwotICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCkt
PmluaXRpYWxpemVJZk5lZWRlZCgpOwotICAgIH0KIAogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNvbnRleHQ7CiAgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0
aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQo
KSkgewpAQCAtMTkzLDkgKzE4OCwxMiBAQCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFj
dGl2ZURPTU9iamVjdDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0QWN0aXZlRE9NTwogICAgICAg
ICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKICAgICAgICAgY29udGV4dC0+RW50ZXIoKTsK
ICAgICB9Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChm
cmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6
aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKICAgICBpZiAoIWNvbnRl
eHQuSXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtF
TFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpzZXRK
U1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2su
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxi
YWNrLmNwcAppbmRleCBiOGI1MTA3MTYwNTY3Mjg3OTQ4NWQ4NzdhOGRlNmM5YjAxMjY4ZDljLi5l
ZDJkZTZlZTZiYjVjNmFiNDg2NTY2NmZlZjRmZmUyYjU1OWJlZDg3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFj
ay5jcHAKQEAgLTg2LDcgKzg2LDcgQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRo
Q2xhc3MxUGFyYW0oQ2xhc3MxKiBjbGFzczFQYXJhbSkKIAogICAgIHY4OjpDb250ZXh0OjpTY29w
ZSBzY29wZSh2OENvbnRleHQpOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNzMVBh
cmFtSGFuZGxlID0gdG9WOChjbGFzczFQYXJhbSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3MxUGFyYW1IYW5kbGUgPSB0b1Y4KGNsYXNz
MVBhcmFtKTsKICAgICBpZiAoY2xhc3MxUGFyYW1IYW5kbGUuSXNFbXB0eSgpKSB7CiAgICAgICAg
IGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVybWluYXRpbmcoKSkKICAgICAgICAgICAgIENSQVNI
KCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRo
Q2xhc3MyUGFyYW0oQ2xhc3MyKiBjbGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJgogCiAgICAgdjg6
OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY2xhc3MyUGFyYW1IYW5kbGUgPSB0b1Y4KGNsYXNzMlBhcmFtLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzczJQYXJhbUhhbmRs
ZSA9IHRvVjgoY2xhc3MyUGFyYW0pOwogICAgIGlmIChjbGFzczJQYXJhbUhhbmRsZS5Jc0VtcHR5
KCkpIHsKICAgICAgICAgaWYgKCFpc1NjcmlwdENvbnRyb2xsZXJUZXJtaW5hdGluZygpKQogICAg
ICAgICAgICAgQ1JBU0goKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBib29sIFY4VGVzdENhbGxiYWNr
OjpjYWxsYmFja1dpdGhTdHJpbmdMaXN0KFJlZlB0cjxET01TdHJpbmdMaXN0PiBsaXN0UGFyYW0p
CiAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKIAotICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBsaXN0UGFyYW1IYW5kbGUgPSB0b1Y4KGxpc3RQYXJhbSwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PigpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbGlzdFBhcmFt
SGFuZGxlID0gdG9WOChsaXN0UGFyYW0pOwogICAgIGlmIChsaXN0UGFyYW1IYW5kbGUuSXNFbXB0
eSgpKSB7CiAgICAgICAgIGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVybWluYXRpbmcoKSkKICAg
ICAgICAgICAgIENSQVNIKCk7CkBAIC0yMDcsMTMgKzIwNywxMyBAQCBib29sIFY4VGVzdENhbGxi
YWNrOjpjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhDbGFzczgqIGNsYXNzOFBhcmFtLCBUaGlz
Q2xhc3MqCiAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKIAotICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzczhQYXJhbUhhbmRsZSA9IHRvVjgoY2xhc3M4UGFy
YW0sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNsYXNzOFBhcmFtSGFuZGxlID0gdG9WOChjbGFzczhQYXJhbSk7CiAgICAgaWYgKGNsYXNzOFBh
cmFtSGFuZGxlLklzRW1wdHkoKSkgewogICAgICAgICBpZiAoIWlzU2NyaXB0Q29udHJvbGxlclRl
cm1pbmF0aW5nKCkpCiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRoaXNDbGFzc1BhcmFtSGFuZGxlID0g
dG9WOCh0aGlzQ2xhc3NQYXJhbSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpKTsKKyAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdGhpc0NsYXNzUGFyYW1IYW5kbGUgPSB0b1Y4KHRoaXNDbGFzc1Bh
cmFtKTsKICAgICBpZiAodGhpc0NsYXNzUGFyYW1IYW5kbGUuSXNFbXB0eSgpKSB7CiAgICAgICAg
IGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVybWluYXRpbmcoKSkKICAgICAgICAgICAgIENSQVNI
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAppbmRleCAxZmQ2ZTI3ZTE0
MmQ1Mzc3NzgxOTEyMjZkYmRkOThmZGUzZDQ1NDZiLi43YzMyYmU2ZTAxZWRlMGQwMjAwYjZlYWFj
MGQ5OGQ5MzY3ZDkyNTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAK
QEAgLTExMyw3ICsxMTMsNiBAQCBib29sIFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpIYXNJbnN0
YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RDdXN0b21O
YW1lZEdldHRlcj4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlcjsKLSAgICBGcmFtZSogZnJhbWUgPSAwOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY29udGV4dDsKICAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRp
b25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgp
KSB7CkBAIC0xMjMsOSArMTIyLDEyIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hCiAgICAgICAg
IEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOwogICAgICAgICBjb250ZXh0LT5FbnRlcigpOwog
ICAgIH0KLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZy
YW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpp
bnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwogICAgIGlmICghY29udGV4
dC5Jc0VtcHR5KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VM
WSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpT
V3JhcHBlckZvckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBiMjBmMTVhZDc0ZWUzZTM2Mzg0ZWQyNzU3YjQ2
ZGU4ODI1MjA3YzllLi5iM2EzNTM0ZjI0YWI3NmY1MWRiZWI1ZTQ1N2U0NmZjNTE1Mjk0MmZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0xNTAsNyArMTUwLDYgQEAg
Ym9vbCBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdmFsdWUpCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50Q29uc3RydWN0
b3I6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+IGltcGwsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
IHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAgRnJhbWUqIGZyYW1l
ID0gMDsKIAogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7CiAgICAgaWYgKCFj
cmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250
ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgewpAQCAtMTYwLDkgKzE1OSwxMiBA
QCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OndyYXBTbG93
KFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29ucwogICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0
eSgpKTsKICAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKICAgICB9Ci0gICAgd3JhcHBlciA9IFY4
RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkp
OworCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5m
bywgaW1wbC5nZXQoKSk7CisKICAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICBj
b250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQog
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3
cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1w
bCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCA4ZGUw
OGJhODdiZDhmNzM1YzVlNDcwY2UwYTE0N2RmYjU3Yjk0MGI0Li5iNzgzNjllOTU1ZjRlZDc2ZjNk
Yjg4ZTkyOTZlMDdmM2E3ZTI0YjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKQEAgLTU1
LDcgKzU1LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpdGVtQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAg
ICAgICAgZ290byBmYWlsOwogICAgIH0KLSAgICByZXR1cm4gdG9WOChpbXAtPml0ZW0oaW5kZXgp
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1
cm4gdG9WOChpbXAtPml0ZW0oaW5kZXgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUo
KSk7CiAgICAgfQogICAgIGZhaWw6CiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJn
cy5HZXRJc29sYXRlKCkpOwpAQCAtMTc0LDcgKzE3NCw2IEBAIGJvb2wgVjhUZXN0RXZlbnRUYXJn
ZXQ6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gVjhUZXN0RXZlbnRUYXJnZXQ6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2
ZW50VGFyZ2V0PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVyOwotICAgIEZyYW1lKiBmcmFtZSA9IDA7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0OwogICAgIGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlv
bkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkp
IHsKQEAgLTE4NCw5ICsxODMsMTIgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVu
dFRhcmdldDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+IGkKICAgICAgICAg
QVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CiAgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CiAg
ICAgfQotICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoZnJh
bWUsICZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omlu
c3RhbnRpYXRlVjhPYmplY3QoJmluZm8sIGltcGwuZ2V0KCkpOworCiAgICAgaWYgKCFjb250ZXh0
LklzRW1wdHkoKSkKICAgICAgICAgY29udGV4dC0+RXhpdCgpOworCiAgICAgaWYgKFVOTElLRUxZ
KHdyYXBwZXIuSXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IFY4RE9NV3JhcHBlcjo6c2V0SlNX
cmFwcGVyRm9yRE9NT2JqZWN0KGltcGwsIHdyYXBwZXIsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0
aW9uLmNwcAppbmRleCAzNTRiY2VhOGE2ZDhmNDQ0N2UyZjEyYWVjZTg3ZTliMjFkNGFlMGUxLi5k
ODAxOTlkOWYxMTljODlkNzAwM2Y5NmEyNzQ0MTdiY2I3M2JmN2RjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0
aW9uLmNwcApAQCAtMTA0LDcgKzEwNCw2IEBAIGJvb2wgVjhUZXN0RXhjZXB0aW9uOjpIYXNJbnN0
YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IFY4VGVzdEV4Y2VwdGlvbjo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXhjZXB0aW9uPiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotICAgIEZyYW1l
KiBmcmFtZSA9IDA7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OwogICAg
IGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0
aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsKQEAgLTExNCw5ICsx
MTMsMTIgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFeGNlcHRpb246OndyYXBTbG93
KFBhc3NSZWZQdHI8VGVzdEV4Y2VwdGlvbj4gaW1wbCwKICAgICAgICAgQVNTRVJUKCFjb250ZXh0
LklzRW1wdHkoKSk7CiAgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CiAgICAgfQotICAgIHdyYXBw
ZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoZnJhbWUsICZpbmZvLCBpbXBs
LmdldCgpKTsKKworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmpl
Y3QoJmluZm8sIGltcGwuZ2V0KCkpOworCiAgICAgaWYgKCFjb250ZXh0LklzRW1wdHkoKSkKICAg
ICAgICAgY29udGV4dC0+RXhpdCgpOworCiAgICAgaWYgKFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0
eSgpKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlckhhbmRsZSA9IFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2Jq
ZWN0KGltcGwsIHdyYXBwZXIsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAppbmRleCAw
NTA2YjkzMzFlMjhiNDY5MTNmZTk4MzZiYjk1YWE0MDk1OGVhZjJkLi5jNTM1MDc2NzE1NTQ1ODA0
MmYyMjhiMmRkMWFiYWM1NTlmYTNjMTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcApAQCAtMTIw
LDcgKzEyMCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsTm9k
ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uVGVzdEludGVyZmFjZS5zdXBwbGVtZW50YWxOb2RlLl9nZXQiKTsKICAgICBUZXN0SW50ZXJm
YWNlKiBpbXAgPSBWOFRlc3RJbnRlcmZhY2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IHJldHVybiB0b1Y4KFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wKSwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRv
VjgoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXApLCBpbmZvLkhvbGRlcigp
LCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikKQEAgLTE2OCw3ICsxNjgsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbE1ldGhvZDJDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcgogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxNZXRob2QyKHNjcmlwdENvbnRleHQsIGltcCwgc3RyQXJnLCBvYmpBcmcs
IGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7Ci0gICAgcmV0
dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBhcmdz
LkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5I
b2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0KICAgICBmYWlsOgogICAgIHJldHVy
biBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTM0Nyw3ICszNDcs
NiBAQCBBY3RpdmVET01PYmplY3QqIFY4VGVzdEludGVyZmFjZTo6dG9BY3RpdmVET01PYmplY3Qo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplYwogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRl
c3RJbnRlcmZhY2U6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEludGVyZmFjZT4gaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKLSAgICBGcmFtZSogZnJh
bWUgPSAwOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKICAgICBpZiAo
IWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNv
bnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CkBAIC0zNTcsOSArMzU2LDEy
IEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJmYWNlOjp3cmFwU2xvdyhQYXNz
UmVmUHRyPFRlc3RJbnRlcmZhY2U+IGltcGwsCiAgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0Vt
cHR5KCkpOwogICAgICAgICBjb250ZXh0LT5FbnRlcigpOwogICAgIH0KLSAgICB3cmFwcGVyID0g
VjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQo
KSk7CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZp
bmZvLCBpbXBsLmdldCgpKTsKKwogICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAg
IGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkp
CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckFjdGl2ZURPTU9i
amVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCA2MGI5Njg0YjhiMTA2MDg0MWQ5ZTViN2JlMjdkNDEx
ZmE3MmNjMTAyLi4yNGM0ZGY2OTg1OGE2MDY2ZmNmNDU1M2VhMjYyODA4ODU3MjFkMmQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0xMTMsNyAr
MTEzLDYgQEAgYm9vbCBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpIYXNJbnN0YW5jZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXI7Ci0gICAgRnJhbWUqIGZyYW1lID0gMDsKIAogICAgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQ7CiAgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNy
ZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJl
bnQoKSkgewpAQCAtMTIzLDkgKzEyMiwxMiBAQCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE1lZAogICAg
ICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKICAgICAgICAgY29udGV4dC0+RW50ZXIo
KTsKICAgICB9Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVj
dChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBl
cjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKICAgICBpZiAoIWNv
bnRleHQuSXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5M
SUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpz
ZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNmU0NGQ4OTJmOTA2MWE5MTIxZDU0MmEw
ZjA1ZTczZWEwYmFiNGFjZC4uNmUyNjJkNDNjNGY1OGNmNDMzMTUyZmQzYjMwNDE2MWQ0OTYwM2Vh
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApAQCAtMTU3LDcgKzE1Nyw2
IEBAIEFjdGl2ZURPTU9iamVjdCogVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6dG9BY3RpdmVET01P
YmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0CiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVz
dE5hbWVkQ29uc3RydWN0b3I6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0
b3I+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gMDsKIAogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQ7CiAgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4
dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgewpAQCAt
MTY3LDkgKzE2NiwxMiBAQCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5hbWVkQ29uc3Ry
dWN0b3I6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29ucwogICAgICAgICBBU1NFUlQo
IWNvbnRleHQuSXNFbXB0eSgpKTsKICAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKICAgICB9Ci0g
ICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChmcmFtZSwgJmlu
Zm8sIGltcGwuZ2V0KCkpOworCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlh
dGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKICAgICBpZiAoIWNvbnRleHQuSXNFbXB0
eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3JhcHBl
ci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJG
b3JBY3RpdmVET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKaW5k
ZXggMGJmZTEzMzdlZjBlN2E4OGNiNDMyNTYxMzMwZDUzZDliNTNiZmQzYi4uNTY1NWE4YzAxYTc1
MzRhMWZmMzBhY2ZlNmUwZmY5OWIxOTZhZmRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcApAQCAtMTEzLDcgKzEx
Myw2IEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0Tm9kZTo6d3JhcFNsb3coUGFzc1Jl
ZlB0cjxUZXN0Tm9kZT4gaW1wbCwgdjg6OkhhbmRsCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
Tm9kZSo+KGltcGwuZ2V0KCkpKSA9PSBzdGF0aWNfY2FzdDx2b2lkKj4oaW1wbC5nZXQoKSkpOwot
ICAgIEZyYW1lKiBmcmFtZSA9IGltcGwtPmRvY3VtZW50KCktPmZyYW1lKCk7CiAKICAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OwogICAgIGlmICghY3JlYXRpb25Db250ZXh0Lklz
RW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250
ZXh0OjpHZXRDdXJyZW50KCkpIHsKQEAgLTEyMyw5ICsxMjIsMTIgQEAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBWOFRlc3ROb2RlOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3ROb2RlPiBpbXBsLCB2
ODo6SGFuZGwKICAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CiAgICAgICAgIGNv
bnRleHQtPkVudGVyKCk7CiAgICAgfQotICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3Rh
bnRpYXRlVjhPYmplY3QoZnJhbWUsICZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIHdyYXBwZXIg
PSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoJmluZm8sIGltcGwuZ2V0KCkpOwor
CiAgICAgaWYgKCFjb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgY29udGV4dC0+RXhpdCgpOwor
CiAgICAgaWYgKFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IFY4
RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShpbXBsLCB3cmFwcGVyLCBpc29sYXRl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE9iai5jcHAKaW5kZXggN2VmZWQ1YzU1YTUzM2FjYTQzNWNmODRjNGRmNDZkNjJiZTg1MDgz
Ni4uNDZiNDE1ZDI4MWE1NzhkMGYwYmE2ODI5NTU1YWM4NmE1ZTVhNDRhYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAK
QEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRlc3RPYmpB
dHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgYwogewogICAgIElOQ19T
VEFUUygiRE9NLlRlc3RPYmoudGVzdE9iakF0dHIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1w
LT50ZXN0T2JqQXR0cigpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGluZm8uR2V0SXNvbGF0
ZSgpKTsKKyAgICByZXR1cm4gdG9WOChpbXAtPnRlc3RPYmpBdHRyKCksIGluZm8uSG9sZGVyKCks
IGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdE9iakF0dHJBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTI0NSw3ICsyNDUsNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFhNTE9iakF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjbwogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouWE1MT2Jq
QXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPnhtbE9iakF0dHIoKSwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1w
LT54bWxPYmpBdHRyKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgWE1MT2JqQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpAQCAtNDIxLDcgKzQyMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdHlw
ZWRBcnJheUF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai50eXBlZEFycmF5QXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4g
dG9WOChpbXAtPnR5cGVkQXJyYXlBdHRyKCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgaW5m
by5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+dHlwZWRBcnJheUF0dHIoKSwg
aW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB0eXBl
ZEFycmF5QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNTQ4
LDcgKzU0OCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4OjpMCiAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwotICAg
IHJldHVybiB0b1Y4KGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoc2Ny
aXB0Q29udGV4dCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgaW5mby5HZXRJc29sYXRlKCkp
OworICAgIHJldHVybiB0b1Y4KGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGUoc2NyaXB0Q29udGV4dCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0K
IAogc3RhdGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTU3Niw3ICs1NzYsNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0
dHJHZXR0ZXIodjg6OkxvY2FsPAogICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBp
bmZvLkdldElzb2xhdGUoKSk7CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSwgaW5mby5HZXRJc29sYXRlKCkp
OwotICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCks
IGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOCh2LnJlbGVhc2UoKSwgaW5mby5I
b2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKQEAgLTYwNyw3ICs2MDcsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzQXR0ckdldHRlcgogICAgIFJlZlB0
cjxUZXN0T2JqPiB2ID0gaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJh
aXNlcyhzY3JpcHRDb250ZXh0LCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAg
cmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIHJldHVy
biB0b1Y4KHYucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOCh2LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKSwgaW5m
by5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQpAQCAtNjM1LDcgKzYzNSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0CiAgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5l
ZCgpOwotICAgIHJldHVybiB0b1Y4KGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZShzdGF0ZSwgc2NyaXB0Q29udGV4dCksIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+d2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShzdGF0ZSwgc2Ny
aXB0Q29udGV4dCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3Rh
dGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNjcxLDcgKzY3MSw3
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhCiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRp
b24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBpbmZvLkdldElz
b2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjgodi5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgp
LCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTcwNCw3ICs3MDQsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzQQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRD
b250ZXh0KQogICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdG9WOChp
bXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlKHN0YXRlLCBzY3JpcHRDb250ZXh0KSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBp
bmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT53aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShzdGF0ZSwgc2NyaXB0
Q29udGV4dCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGlj
IHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNB
dHRyaWJ1dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTczMSw3
ICs3MzEsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRBcmd1bWVu
dHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVBdHRyR2V0dGVyKAogICAgIFJlZlB0cjxTY3JpcHRDYWxs
U3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tGb3JJbnNwZWN0b3IoKSk7CiAg
ICAgaWYgKCFjYWxsU3RhY2spCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwotICAgIHJl
dHVybiB0b1Y4KGltcC0+d2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShj
YWxsU3RhY2spLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsK
KyAgICByZXR1cm4gdG9WOChpbXAtPndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRy
aWJ1dGUoY2FsbFN0YWNrKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQog
CiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlQXR0
clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC05NDksNyArOTQ5LDcgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb250ZW50RG9jdW1lbnRBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW0KICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb05vZGUoQmluZGluZ1N0YXRlOjppbnN0YW5jZSgpLCBpbXAtPmNvbnRlbnRE
b2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVs
bChpbmZvLkdldElzb2xhdGUoKSkpOwogCi0gICAgcmV0dXJuIHRvVjgoaW1wLT5jb250ZW50RG9j
dW1lbnQoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHRvVjgoaW1wLT5jb250ZW50RG9jdW1lbnQoKSwgaW5mby5Ib2xkZXIoKSwgaW5m
by5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG11dGFi
bGVQb2ludEF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCkBAIC0xMTExLDcgKzExMTEsNyBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG9iak1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vYmpNZXRob2QiKTsKICAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiB0
b1Y4KGltcC0+b2JqTWV0aG9kKCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgYXJncy5HZXRJ
c29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+b2JqTWV0aG9kKCksIGFyZ3MuSG9sZGVy
KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvYmpNZXRob2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBA
IC0xMTIzLDcgKzExMjMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iak1ldGhv
ZFdpdGhBcmdzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAgIEVYQ0VQVElP
Tl9CTE9DSyhsb25nIGxvbmcsIEFyZywgdG9JbnQ2NChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihh
cmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CiAgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVS
X0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBzdHJBcmcsIE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwogICAgIEVYQ0VQVElPTl9CTE9D
SyhUZXN0T2JqKiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGFyZ3MsIDIsIERlZmF1bHRJc1VuZGVmaW5lZCkpID8gVjhUZXN0T2JqOjp0b05h
dGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGFyZ3MsIDIsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOwotICAgIHJldHVybiB0b1Y4KGlt
cC0+b2JqTWV0aG9kV2l0aEFyZ3MoQXJnLCBzdHJBcmcsIG9iakFyZyksIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+b2Jq
TWV0aG9kV2l0aEFyZ3MoQXJnLCBzdHJBcmcsIG9iakFyZyksIGFyZ3MuSG9sZGVyKCksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RX
aXRoU2VxdWVuY2VBcmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTE2
MCw3ICsxMTYwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzQ2FsbGJhY2soY29uc3QgdjgKICAgICBSZWZQdHI8VGVzdE9i
aj4gcmVzdWx0ID0gaW1wLT5tZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKHN0ckFy
Zywgb2JqQXJnLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgZ290byBmYWls
OwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNl
KCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICB9CiAgICAgZmFpbDoK
ICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7CkBAIC0x
MjY3LDcgKzEyNjcsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRT
dGF0ZU9iakNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZwogICAgIFJlZlB0cjxUZXN0
T2JqPiByZXN1bHQgPSBpbXAtPndpdGhTY3JpcHRTdGF0ZU9iaigmc3RhdGUpOwogICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhj
ZXB0aW9uKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVs
ZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAg
ICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElz
b2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0
YXRlVm9pZEV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0x
MzAwLDcgKzEzMDAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRT
dGF0ZU9iakV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bQogICAgICAgICBnb3RvIGZh
aWw7CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihzdGF0ZS5leGNlcHRpb24oKSwgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0
b1Y4KHJlc3VsdC5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgYXJncy5HZXRJ
c29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVy
KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICB9CiAgICAgZmFpbDoKICAgICByZXR1cm4gc2V0
RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7CkBAIC0xMzQ2LDcgKzEzNDYsNyBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpbwogICAgICAgICBnb3RvIGZhaWw7CiAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNl
cHRpb24oKSwgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxl
YXNlKCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAg
IHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKICAgICB9CiAgICAgZmFpbDoKICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVj
LCBhcmdzLkdldElzb2xhdGUoKSk7CkBAIC0xMzYzLDcgKzEzNjMsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzQwogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKCZzdGF0ZSwgc2NyaXB0Q29u
dGV4dCk7CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSwgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVy
biB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgYXJncy5H
ZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuSG9s
ZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKQEAgLTE4MzMsNyArMTgzMyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gZ2V0U1ZHRG9jdW1lbnRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogICAgIFJlZlB0cjxTVkdEb2N1bWVudD4gcmVzdWx0ID0gaW1wLT5nZXRTVkdEb2N1bWVudChl
Yyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgZ290byBmYWlsOwotICAgIHJldHVy
biB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgYXJncy5H
ZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuSG9s
ZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICB9CiAgICAgZmFpbDoKICAgICByZXR1cm4g
c2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7CkBAIC0xOTE5LDcgKzE5MTks
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN0cmljdEZ1bmN0aW9uQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBSZWZQdHI8Ym9vbD4gcmVzdWx0ID0gaW1w
LT5zdHJpY3RGdW5jdGlvbihzdHIsIGEsIGIsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQog
ICAgICAgICBnb3RvIGZhaWw7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRv
VjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwog
ICAgIH0KICAgICBmYWlsOgogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKQEAgLTIzMjQsNyArMjMyNCw2IEBAIHZvaWQgVjhUZXN0T2JqOjppbnN0YWxs
UGVyQ29udGV4dFByb3BlcnRpZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBpbnN0YW5jZSwgVGVz
CiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE9iajo6d3JhcFNsb3coUGFzc1JlZlB0cjxU
ZXN0T2JqPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
OwotICAgIEZyYW1lKiBmcmFtZSA9IDA7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
b250ZXh0OwogICAgIGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNv
bnRleHQtPkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsK
QEAgLTIzMzQsOSArMjMzMywxMiBAQCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE9iajo6
d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0T2JqPiBpbXBsLCB2ODo6SGFuZGxlPAogICAgICAgICBB
U1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKICAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKICAg
ICB9Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChmcmFt
ZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5z
dGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKICAgICBpZiAoIWNvbnRleHQu
SXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtFTFko
d3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICBpbnN0YWxs
UGVyQ29udGV4dFByb3BlcnRpZXMod3JhcHBlciwgaW1wbC5nZXQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IGU0
MjRmNjUxMWEwYThiNjAyZTRiMjVmOWRmY2EzZWViZjFiNDhkN2MuLmJhNGM0MGQ1NjRhZjdmNDZk
MGFkMjBmMTUzMWJlZWQyZjI4ZTNhZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0yOTYsNyArMjk2LDYgQEAgYm9v
bCBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Okhhc0luc3RhbmNlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWwKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3Jl
YXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAgRnJhbWUqIGZyYW1lID0gMDsKIAogICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7CiAgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0
eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6
OkdldEN1cnJlbnQoKSkgewpAQCAtMzA2LDkgKzMwNSwxMiBAQCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6d3JhcFNsb3coUGFzc1Jl
ZlB0cgogICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKICAgICAgICAgY29udGV4
dC0+RW50ZXIoKTsKICAgICB9Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlh
dGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgd3JhcHBlciA9IFY4
RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKICAg
ICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAg
ICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBl
cjsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01X
cmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCmlu
ZGV4IDdlNmU0Y2EwODdlYTlkNTE1ZjY1OTI0NjJjNTIzNDRiZDk0YzQzMTQuLmM5Yjk3MzY0NDUz
OWU1ZjAzZDI1Y2NlY2QyYzFmMGFmOTRmNzIwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCkBAIC0xOTMsNiArMTkzLDggQEAgYm9vbCBW
OERPTVdpbmRvd1NoZWxsOjppc0NvbnRleHRJbml0aWFsaXplZCgpCiAKIHZvaWQgVjhET01XaW5k
b3dTaGVsbDo6ZGlzcG9zZUNvbnRleHQoKQogeworICAgIG1fcGVyQ29udGV4dERhdGEuY2xlYXIo
KTsKKwogICAgIGlmICghbV9jb250ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICBtX2ZyYW1lLT5s
b2FkZXIoKS0+Y2xpZW50KCktPndpbGxSZWxlYXNlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0
KCksIDApOwogICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKQEAgLTIwMyw4ICsyMDUsNiBAQCB2
b2lkIFY4RE9NV2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0KCkKICAgICAgICAgYm9vbCBpc01h
aW5GcmFtZSA9IG1fZnJhbWUtPnBhZ2UoKSAmJiAobV9mcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUo
KSA9PSBtX2ZyYW1lKTsgCiAgICAgICAgIFY4R0NGb3JDb250ZXh0RGlzcG9zZTo6aW5zdGFuY2Uo
KS5ub3RpZnlDb250ZXh0RGlzcG9zZWQoaXNNYWluRnJhbWUpOwogICAgIH0KLQotICAgIG1fcGVy
Q29udGV4dERhdGEuY2xlYXIoKTsKIH0KIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95
R2xvYmFsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCmlu
ZGV4IGViMjVjNWIzYzQ2NDA4Mjg4YjAwMjhiNmZlODkwYjExZThmZTQwNzYuLmM5NGM1NzlhZWUx
MTdiZGYzY2UwYTVlMmI0OGE4YzE5M2FmMzExYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcApAQCAtMTU3LDQ4ICsxNTcsMjAgQEAgUGFzc1JlZlB0cjxO
b2RlRmlsdGVyPiBWOERPTVdyYXBwZXI6OndyYXBOYXRpdmVOb2RlRmlsdGVyKHY4OjpIYW5kbGU8
djg6OlZhbHVlPgogICAgIHJldHVybiBOb2RlRmlsdGVyOjpjcmVhdGUoVjhOb2RlRmlsdGVyQ29u
ZGl0aW9uOjpjcmVhdGUoZmlsdGVyKSk7CiB9CiAKLXY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERP
TVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoRnJhbWUqIGZyYW1lLCBXcmFwcGVyVHlwZUlu
Zm8qIHR5cGUsIHZvaWQqIGltcGwpCit2ODo6TG9jYWw8djg6Ok9iamVjdD4gVjhET01XcmFwcGVy
OjppbnN0YW50aWF0ZVY4T2JqZWN0KFdyYXBwZXJUeXBlSW5mbyogdHlwZSwgdm9pZCogaW1wbCkK
IHsKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0
ID0gMDsKLSNlbmRpZgotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCk7Ci0gICAgICAgIGlm
ICghY29udGV4dC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gZ2xvYmFsUHJvdG90eXBlID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjb250ZXh0
LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpOwotICAgICAgICAgICAgaWYgKGlzV3JhcHBlck9m
VHlwZShnbG9iYWxQcm90b3R5cGUsICZWOERPTVdpbmRvdzo6aW5mbykpIHsKLSAgICAgICAgICAg
ICAgICBGcmFtZSogZ2xvYmFsRnJhbWUgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoZ2xvYmFsUHJv
dG90eXBlKS0+ZnJhbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsRnJhbWUgJiYgZ2xv
YmFsRnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNj
cmlwdCkpCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lID0gZ2xvYmFsRnJhbWU7Ci0gICAgICAg
ICAgICB9Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgICAgICAgICBlbHNlIGlmIChpc1dyYXBw
ZXJPZlR5cGUoZ2xvYmFsUHJvdG90eXBlLCAmVjhXb3JrZXJDb250ZXh0OjppbmZvKSkKLSAgICAg
ICAgICAgICAgICB3b3JrZXJDb250ZXh0ID0gVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZShsb29r
dXBET01XcmFwcGVyKFY4V29ya2VyQ29udGV4dDo6R2V0VGVtcGxhdGUoKSwgY29udGV4dC0+R2xv
YmFsKCkpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQorICAgIFY4UGVyQ29udGV4dERhdGEq
IHBlckNvbnRleHREYXRhID0gVjhQZXJDb250ZXh0RGF0YTo6Y3VycmVudCgpOwogCi0gICAgVjhQ
ZXJDb250ZXh0RGF0YSogY29udGV4dERhdGEgPSAwOwotICAgIGlmIChmcmFtZSkKLSAgICAgICAg
Y29udGV4dERhdGEgPSBwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZChmcmFtZSk7Ci0jaWYg
RU5BQkxFKFdPUktFUlMpCi0gICAgZWxzZSBpZiAod29ya2VyQ29udGV4dCkKLSAgICAgICAgY29u
dGV4dERhdGEgPSBwZXJDb250ZXh0RGF0YSh3b3JrZXJDb250ZXh0KTsKLSNlbmRpZgorICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZSA9IHBlckNvbnRleHREYXRhID8gcGVyQ29udGV4
dERhdGEtPmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGUodHlwZSkgOiBWOE9iamVjdENvbnN0cnVjdG9y
OjpuZXdJbnN0YW5jZSh0eXBlLT5nZXRUZW1wbGF0ZSgpLT5HZXRGdW5jdGlvbigpKTsKKworICAg
IC8vIEF2b2lkIHNldHRpbmcgdGhlIERPTSB3cmFwcGVyIGZvciBmYWlsZWQgYWxsb2NhdGlvbnMu
CisgICAgaWYgKGluc3RhbmNlLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOwor
CisgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5jZSwgdHlwZSwgaW1wbCk7CisgICAgaWYgKHR5cGUg
PT0gJlY4SFRNTERvY3VtZW50OjppbmZvKQorICAgICAgICBpbnN0YW5jZSA9IFY4SFRNTERvY3Vt
ZW50Ojp3cmFwSW5TaGFkb3dPYmplY3QoaW5zdGFuY2UsIHN0YXRpY19jYXN0PE5vZGUqPihpbXBs
KSk7CiAKLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFuY2U7Ci0gICAgaWYgKGNvbnRl
eHREYXRhKQotICAgICAgICBpbnN0YW5jZSA9IGNvbnRleHREYXRhLT5jcmVhdGVXcmFwcGVyRnJv
bUNhY2hlKHR5cGUpOwotICAgIGVsc2UgewotICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
PiBmdW5jdGlvbiA9IHR5cGUtPmdldFRlbXBsYXRlKCktPkdldEZ1bmN0aW9uKCk7Ci0gICAgICAg
IGluc3RhbmNlID0gVjhPYmplY3RDb25zdHJ1Y3Rvcjo6bmV3SW5zdGFuY2UoZnVuY3Rpb24pOwot
ICAgIH0KLSAgICBpZiAoIWluc3RhbmNlLklzRW1wdHkoKSkgewotICAgICAgICAvLyBBdm9pZCBz
ZXR0aW5nIHRoZSBET00gd3JhcHBlciBmb3IgZmFpbGVkIGFsbG9jYXRpb25zLgotICAgICAgICBz
ZXRET01XcmFwcGVyKGluc3RhbmNlLCB0eXBlLCBpbXBsKTsKLSAgICAgICAgaWYgKHR5cGUgPT0g
JlY4SFRNTERvY3VtZW50OjppbmZvKQotICAgICAgICAgICAgaW5zdGFuY2UgPSBWOEhUTUxEb2N1
bWVudDo6d3JhcEluU2hhZG93T2JqZWN0KGluc3RhbmNlLCBzdGF0aWNfY2FzdDxOb2RlKj4oaW1w
bCkpOwotICAgIH0KICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKaW5kZXggMzYyYTM0MTc1ZWUxNTU1NDY3YzdiMTJkNzU0
M2NiNDFhMWQwMjgyZS4uYTYwOWUzMjc5OTU4M2I5OGE1NTNjNTBmMmM4MTA0YTI1NjcyNWI2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTExOSw3ICsx
MTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldE5hbWVk
SGlkZGVuUmVmZXJlbmNlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcGFyZW50LCBjb25zdCBjaGFy
KiBuYW1lLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2hpbGQpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBzZXROYW1lZEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIGNvbnN0IGNoYXIqLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4pOwogCi0gICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gaW5zdGFudGlhdGVWOE9iamVjdChGcmFtZSosIFdyYXBwZXJUeXBlSW5mbyosIHZvaWQqKTsK
KyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0
KFdyYXBwZXJUeXBlSW5mbyosIHZvaWQqKTsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBnZXRDYWNoZWRXcmFwcGVyKE5vZGUqIG5vZGUpCiAgICAgICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5jcHAKaW5kZXggZTU3
MDI5YmZkNzI0Yjg5NjU1NjY1ZWQxYjY1ZGUyMTQ1NDY4MjAxNC4uYmQ4OGFmZjA5YjE5ODJiMGEw
N2MzZWZjODk0OTVlOTE5NzIwYzNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQZXJDb250ZXh0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhQZXJDb250ZXh0RGF0YS5jcHAKQEAgLTMxLDEyICszMSwyNSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlY4UGVyQ29udGV4dERhdGEuaCIKIAorI2luY2x1ZGUgIlY4RE9N
V2luZG93LmgiCiAjaW5jbHVkZSAiVjhPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlY4
V29ya2VyQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBp
bnQgcGVyQ29udGV4dERhdGFJbmRleCA9IFY4RE9NV2luZG93OjpwZXJDb250ZXh0RGF0YUluZGV4
OworQ09NUElMRV9BU1NFUlQoVjhET01XaW5kb3c6OnBlckNvbnRleHREYXRhSW5kZXggPT0gVjhX
b3JrZXJDb250ZXh0OjpwZXJDb250ZXh0RGF0YUluZGV4LCBET01XaW5kb3dBbmRXb3JrZXJDb250
ZXh0TXVzdEhhdmVUaGVTYW1lUGVyQ29udGV4dERhdGFJbmRleCk7CisKK1Y4UGVyQ29udGV4dERh
dGEqIFY4UGVyQ29udGV4dERhdGE6OmN1cnJlbnQoKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxWOFBlckNvbnRleHREYXRhKj4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2ODo6Q29u
dGV4dDo6R2V0Q3VycmVudCgpLT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpLT5HZXRQb2ludGVy
RnJvbUludGVybmFsRmllbGQocGVyQ29udGV4dERhdGFJbmRleCkpOworfQorCiB2b2lkIFY4UGVy
Q29udGV4dERhdGE6OmRpc3Bvc2UoKQogeworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG1fY29udGV4dC0+R2xvYmFsKCkt
PkdldFByb3RvdHlwZSgpKS0+U2V0UG9pbnRlckluSW50ZXJuYWxGaWVsZChwZXJDb250ZXh0RGF0
YUluZGV4LCAwKTsKKwogICAgIHsKICAgICAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVy
YXRvciBpdCA9IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5iZWdpbigpOwogICAgICAgICBmb3IgKDsg
aXQgIT0gbV93cmFwcGVyQm9pbGVycGxhdGVzLmVuZCgpOyArK2l0KSB7CkBAIC03Myw2ICs4Niw4
IEBAIHZvaWQgVjhQZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSgpCiAKIGJvb2wgVjhQZXJDb250ZXh0
RGF0YTo6aW5pdCgpCiB7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChtX2NvbnRl
eHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSktPlNldFBvaW50ZXJJbkludGVybmFsRmllbGQo
cGVyQ29udGV4dERhdGFJbmRleCwgdGhpcyk7CisKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IHByb3RvdHlwZVN0cmluZyA9IHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCgicHJvdG90eXBlIik7CiAg
ICAgaWYgKHByb3RvdHlwZVN0cmluZy5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuaAppbmRleCAy
MGU5MTBjMTY5ZWRiZDE0NWU3MTUyMTRmMzA2ZGM4NjU3Yjg0OTUzLi45ZjY1MWU2ODVlNWI2YWJj
M2IwMmQwZmYzMWI5NWVlZWRkMGNmYzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFBlckNvbnRleHREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhQZXJDb250ZXh0RGF0YS5oCkBAIC01Myw2ICs1Myw4IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaW5pdCgpOwogCisgICAgc3RhdGljIFY4UGVyQ29udGV4dERhdGEqIGN1cnJlbnQoKTsKKwog
ICAgIC8vIFRvIGNyZWF0ZSBKUyBXcmFwcGVyIG9iamVjdHMsIHdlIGNyZWF0ZSBhIGNhY2hlIG9m
IGEgJ2JvaWxlciBwbGF0ZScKICAgICAvLyBvYmplY3QsIGFuZCB0aGVuIHNpbXBseSBDbG9uZSB0
aGF0IG9iamVjdCBlYWNoIHRpbWUgd2UgbmVlZCBhIG5ldyBvbmUuCiAgICAgLy8gVGhpcyBpcyBm
YXN0ZXIgdGhhbiBnb2luZyB0aHJvdWdoIHRoZSBmdWxsIG9iamVjdCBjcmVhdGlvbiBwcm9jZXNz
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IGFjNzJjMDY3NDk2OTFiZWI3MjRlNjI2YzY1OTQ0NzY3MmQ3ZjU4ZjIuLjFjNDA1
Njc3YTJlOGJhZWRhNzM4Nzc1ZjE5NTYwOWVjMmFiNGE1NDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAxMi0wOS0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW1Y4XSBET00gd3JhcHBlciBjcmVhdGlvbiBpbnZvbHZlcyBhIGJ1bmNoIG9mIHNrZXRjaHkg
Y29kZSByZWxhdGVkIHRvIGZpbmRpbmcgdGhlIEZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjE0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBWOCByZXN1bHRzIGZvciB0aGlzIHRlc3Qgbm93
IG1hdGNoIHRoZSBKU0MgcmVzdWx0cy4gV2UgY2FuIHJlbW92ZQorICAgICAgICB0aGUgY2hyb21p
dW0tc3BlY2lmaWMgYmFzZWxpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0
L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3RlZC50eHQ6IFJlbW92
ZWQuCisKIDIwMTItMDktMDcgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBGaXggdGhlIHJlbWFpbmluZyBsaW50ZXIgZXJyb3JzLiBUaGVzZSBhcmUgYWxsIGNhc2Vz
IG9mIHBhdGhzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0
L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhv
cml6ZXItc3luYy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdh
ZDliYWIwMTBkNzY5NTg5Y2Q3ZGQ5Y2JmZWFlNzZmNzc3NWExYTEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMtZXhwZWN0ZWQudHh0
CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotVGVzdCB0aGUgZGF0YWJhc2UgYXV0aG9y
aXplci4KLUJlZ2lubmluZyB3cml0ZSB0cmFuc2FjdGlvbjoKLVNRTElURV9DUkVBVEVfVEFCTEUg
YWxsb3dlZC4KLVNRTElURV9DUkVBVEVfSU5ERVggYWxsb3dlZC4KLVNRTElURV9DUkVBVEVfVEVN
UF9UQUJMRSBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgYWxsb3dlZC4KLVNR
TElURV9DUkVBVEVfVEVNUF9WSUVXIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1RSSUdHRVIgYWxs
b3dlZC4KLVNRTElURV9DUkVBVEVfVklFVyBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9WVEFCTEUg
bm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9SRUFEIGFsbG93
ZWQuCi1TUUxJVEVfU0VMRUNUIGFsbG93ZWQuCi1TUUxJVEVfREVMRVRFIGFsbG93ZWQuCi1TUUxJ
VEVfSU5TRVJUIGFsbG93ZWQuCi1TUUxJVEVfVVBEQVRFIGFsbG93ZWQuCi1TUUxJVEVfUFJBR01B
IG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQUxURVJfVEFC
TEUgYWxsb3dlZC4KLVNRTElURV9BTFRFUl9UQUJMRSBhbGxvd2VkLgotU1FMSVRFX1RSQU5TQUNU
SU9OIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQVRUQUNI
IG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfREVUQUNIIG5v
dCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfUkVJTkRFWCBhbGxv
d2VkLgotU1FMSVRFX0FOQUxZWkUgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKLVNRTElURV9EUk9QX0lOREVYIGFsbG93ZWQuCi1TUUxJVEVfRFJPUF9URU1QX1RBQkxFIGFs
bG93ZWQuCi1TUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgYWxsb3dlZC4KLVNRTElURV9EUk9QX1RF
TVBfVklFVyBhbGxvd2VkLgotU1FMSVRFX0RST1BfVFJJR0dFUiBhbGxvd2VkLgotU1FMSVRFX0RS
T1BfVklFVyBhbGxvd2VkLgotU1FMSVRFX0RST1BfVEFCTEUgYWxsb3dlZC4KLVdyaXRlIHRyYW5z
YWN0aW9uIHN1Y2NlZWRlZC4KLQotQmVnaW5uaW5nIHJlYWQgdHJhbnNhY3Rpb25zOgotU1FMSVRF
X0NSRUFURV9UQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FM
SVRFX0NSRUFURV9UQUJMRSBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9JTkRFWCBub3QgYWxsb3dl
ZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIG5v
dCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQ1JFQVRFX1RFTVBf
VFJJR0dFUiBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0NS
RUFURV9URU1QX1ZJRVcgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNR
TElURV9DUkVBVEVfVFJJR0dFUiBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQotU1FMSVRFX0NSRUFURV9WSUVXIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0g
KDUpCi1TUUxJVEVfQ1JFQVRFX1ZUQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRp
b25dICg1KQotU1FMSVRFX0NSRUFURV9JTkRFWCBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9URU1Q
X1RBQkxFIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBhbGxvd2VkLgotU1FM
SVRFX0NSRUFURV9URU1QX1ZJRVcgYWxsb3dlZC4KLVNRTElURV9DUkVBVEVfVFJJR0dFUiBhbGxv
d2VkLgotU1FMSVRFX0NSRUFURV9WSUVXIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1ZUQUJMRSBu
b3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX1JFQUQgYWxsb3dl
ZC4KLVNRTElURV9TRUxFQ1QgYWxsb3dlZC4KLVNRTElURV9ERUxFVEUgbm90IGFsbG93ZWQ6IFtv
YmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9JTlNFUlQgbm90IGFsbG93ZWQ6IFtvYmpl
Y3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9VUERBVEUgbm90IGFsbG93ZWQ6IFtvYmplY3Qg
U1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9QUkFHTUEgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FM
RXhjZXB0aW9uXSAoNSkKLVNRTElURV9BTFRFUl9UQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBT
UUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0FMVEVSX1RBQkxFIG5vdCBhbGxvd2VkOiBbb2JqZWN0
IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfVFJBTlNBQ1RJT04gbm90IGFsbG93ZWQ6IFtvYmpl
Y3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9BVFRBQ0ggbm90IGFsbG93ZWQ6IFtvYmplY3Qg
U1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9ERVRBQ0ggbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FM
RXhjZXB0aW9uXSAoNSkKLVNRTElURV9SRUlOREVYIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQU5BTFlaRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNl
cHRpb25dICg1KQotU1FMSVRFX0RST1BfSU5ERVggbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhj
ZXB0aW9uXSAoNSkKLVNRTElURV9EUk9QX1RFTVBfVEFCTEUgbm90IGFsbG93ZWQ6IFtvYmplY3Qg
U1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBub3QgYWxsb3dlZDog
W29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0RST1BfVEVNUF9WSUVXIG5vdCBhbGxv
d2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfRFJPUF9UUklHR0VSIG5vdCBh
bGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfRFJPUF9WSUVXIG5vdCBh
bGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfRFJPUF9UQUJMRSBub3Qg
YWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotUmVhZCB0cmFuc2FjdGlvbnMgc3Vj
Y2VlZGVkLgotCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162959</attachid>
            <date>2012-09-08 10:26:00 -0700</date>
            <delta_ts>2012-09-08 11:17:17 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-96147-20120908102538.patch</filename>
            <type>text/plain</type>
            <size>55579</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3OTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjk1NzcwZjRiMzdlY2Rl
MDQwYzQzZWI0ZjQ4YmRhZDFlMTNkODBjMS4uYjBlYzU4MmU3Y2FlOTc5OGNmMjJkOWYyNGZjYzIz
N2NlN2U4ZjY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEyLTA5LTA4ICBBZGFt
IEJhcnRoICA8YWJhcnRoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIERPTSB3cmFwcGVy
IGNyZWF0aW9uIGludm9sdmVzIGEgYnVuY2ggb2Ygc2tldGNoeSBjb2RlIHJlbGF0ZWQgdG8gZmlu
ZGluZyB0aGUgRnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk2MTQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAg
ICAgUHJldmlvdXNseSwgd2UgdXNlZCB0aGUgRnJhbWUgd2hlbiBpbnN0YW50aWF0aW5nIERPTSB3
cmFwcGVycy4gVGhhdCdzCisgICAgICAgIHNrZXRjaHkgYmVjYXVzZSBub3QgYWxsIERPTSB3cmFw
cGVycyBrbm93IGhvdyB0byBmaW5kIHRoZWlyIEZyYW1lLCBhbmQKKyAgICAgICAgdGhlIEZyYW1l
IG1pZ2h0IGJlIGRpc3BsYXlpbmcgYSBkaWZmZXJlbnQgZG9jdW1lbnQgbm93IGFueXdheS4gVGhp
cworICAgICAgICBwYXRjaCBub3cgZ2V0cyBhbGwgdGhlIGluZm9ybWF0aW9uIGRpcmVjdGx5IGZy
b20gdGhlIGNyZWF0aW9uIGNvbnRleHQuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHRoaXMgcGF0
Y2ggZ2V0cyB0aGUgcHJvcGVyIGNyZWF0aW9uIGNvbnRleHQgaW4gYSBmZXcgbW9yZQorICAgICAg
ICBjYXNlcywgaW5jbHVkaW5nIExvY2F0aW9uLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZXRJbnRlcm5hbEZpZWxkcyk6CisgICAg
ICAgIChHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVUb1Y4Q29u
dmVydGVycyk6CisgICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZyk6CisgICAgICAg
IChOYXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OEZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdDY0QXJyYXlWOEludGVy
bmFsOjpmb29DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEZsb2F0NjRBcnJheTo6d3Jh
cFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVE
T01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3
cmFwU2xvdyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxi
YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhD
bGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tX
aXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJhY2s6OmNhbGxi
YWNrV2l0aFN0cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwU2xvdyk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWw6Oml0ZW1DYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RFdmVudFRhcmdldDo6d3JhcFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0RXhjZXB0aW9uOjp3cmFwU2xvdyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW50ZXJmYWNl
VjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsTm9kZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE1ldGhvZDJDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RJbnRlcmZhY2U6OndyYXBTbG93KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp3cmFw
U2xvdyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
d3JhcFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdE5vZGU6OndyYXBTbG93KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpWOEludGVybmFsOjp0ZXN0T2JqQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OlhNTE9iakF0dHJBdHRyR2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp0eXBlZEFycmF5QXR0ckF0dHJHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
VjhJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RP
YmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0
dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlQXR0ckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6OmNvbnRlbnREb2N1bWVudEF0dHJHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om9iak1ldGhvZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpvYmpNZXRob2RXaXRoQXJnc0NhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzQW5kVGhyb3dzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4
SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZU9iakNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlV2l0aFNwYWNlc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpW
OEludGVybmFsOjpnZXRTVkdEb2N1bWVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjpzdHJpY3RGdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4VGVzdE9iajo6d3JhcFNsb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwU2xvdyk6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6aW5zdGFudGlhdGVWOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmg6CisgICAgICAgIChWOERPTVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
UGVyQ29udGV4dERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFBlckNvbnRleHREYXRhOjpjdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UGVyQ29u
dGV4dERhdGE6OmRpc3Bvc2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhQZXJDb250ZXh0RGF0YTo6
aW5pdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5oOgorICAgICAg
ICAoVjhQZXJDb250ZXh0RGF0YSk6CisKIDIwMTItMDktMDggIEFydmlkIE5pbHNzb24gIDxhbmls
c3NvbkByaW0uY29tPgogCiAgICAgICAgIFtDU1MgU2hhZGVyc10gW0JsYWNrQmVycnldIFJlZmFj
dG9yIEN1c3RvbUZpbHRlck1lc2ggYW5kIEN1c3RvbUZpbHRlcipQcm9ncmFtCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGQ1
YzM0MzdhYWU2M2JlM2RlZmExY2VmYjk4NzQ3NzFhOGMwNzVkOWYuLjk0ZjFhMWJjZWMzMzYyYWZm
NjA4ZWJhNzc2NTJjN2Y4OTJiNjg0MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xMDg3LDcgKzEwODcsNyBAQCBFTkQK
ICAgICByZXR1cm4gdmFsdWU7CiBFTkQKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIFJldHVybk5hdGl2ZVRvSlNWYWx1ZSgkYXR0
cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQsICJpbmZvLkdldElzb2xhdGUoKSIpLiI7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIFJldHVybk5hdGl2
ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQsICJpbmZvLkhvbGRlcigp
IiwgImluZm8uR2V0SXNvbGF0ZSgpIikuIjtcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0z
MzU5LDM3ICszMzU5LDE0IEBAIEVORAogICAgIH0KIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJG
cmFtZS5oIik7Ci0gICAgbXkgJGZyYW1lID0gIjAiOwotICAgIGlmIChJc05vZGVTdWJUeXBlKCRk
YXRhTm9kZSkpIHsKLSAgICAgICAgIyBEb2N1bWVudFR5cGUgbm9kZXMgYXJlIHRoZSBvbmx5IG5v
ZGVzIHRoYXQgbWF5IGhhdmUgYSBOVUxMIGRvY3VtZW50LgotICAgICAgICBpZiAoJGludGVyZmFj
ZU5hbWUgZXEgIkRvY3VtZW50VHlwZSIpIHsKLSAgICAgICAgICAgICRmcmFtZSA9ICJpbXBsLT5k
b2N1bWVudCgpID8gaW1wbC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA6IDAiOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgJGZyYW1lID0gImltcGwtPmRvY3VtZW50KCktPmZyYW1lKCkiOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci0gICAgRnJh
bWUqIGZyYW1lID0gJGZyYW1lOwotRU5ECiAKICAgICBpZiAoSXNTdWJUeXBlKCRkYXRhTm9kZSwg
IkRvY3VtZW50IikpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLSAgICBp
ZiAoZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250ZXh0KCkuSXNF
bXB0eSgpICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVl
ZGVkKCkpIHsKLSAgICAgICAgLy8gaW5pdGlhbGl6ZUlmTmVlZGVkIG1heSBoYXZlIGNyZWF0ZWQg
YSB3cmFwcGVyIGZvciB0aGUgb2JqZWN0LCByZXRyeSBmcm9tIHRoZSBzdGFydC4KLSAgICAgICAg
cmV0dXJuICR7Y2xhc3NOYW1lfTo6d3JhcChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOwotICAgIH0KLUVORAotICAgIH0KLQotICAgICMgRklYTUU6IFdlIG5lZWQgYSBiZXR0
ZXIgd2F5IG9mIHJlY292ZXJpbmcgdGhlIGNvcnJlY3QgcHJvdG90eXBlIGNoYWluCi0gICAgIyBm
b3IgZXZlcnkgc29ydCBvZiBvYmplY3QuIEZvciBub3csIHdlIHNwZWNpYWwtY2FzZSBjcm9zcy1v
cmlnaW4gdmlzaWJsZQotICAgICMgb2JqZWN0cyAoaS5lLiwgdGhvc2Ugd2l0aCBDaGVja1NlY3Vy
aXR5KS4KLSAgICBpZiAoSXNWaXNpYmxlQWNyb3NzT3JpZ2lucygkZGF0YU5vZGUpKSB7Ci0gICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJGcmFtZS5oIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCA8PEVORCk7Ci0gICAgaWYgKGltcGwtPmZyYW1lKCkpIHsKLSAgICAgICAgZnJhbWUgPSBp
bXBsLT5mcmFtZSgpOwotICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmlu
aXRpYWxpemVJZk5lZWRlZCgpOworICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgp
KSB7CisgICAgICAgIGlmIChmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmNvbnRleHQo
KS5Jc0VtcHR5KCkgJiYgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5pbml0aWFsaXpl
SWZOZWVkZWQoKSkgeworICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZUlmTmVlZGVkIG1heSBoYXZl
IGNyZWF0ZWQgYSB3cmFwcGVyIGZvciB0aGUgb2JqZWN0LCByZXRyeSBmcm9tIHRoZSBzdGFydC4K
KyAgICAgICAgICAgIHJldHVybiAke2NsYXNzTmFtZX06OndyYXAoaW1wbC5nZXQoKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgfQogICAgIH0KIEVORAogICAgIH0KQEAgLTM0
MDQsMTggKzMzODEsMTIgQEAgRU5ECiAgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkp
OwogICAgICAgICBjb250ZXh0LT5FbnRlcigpOwogICAgIH0KLUVORAogCi0gICAgcHVzaChAaW1w
bENvbnRlbnQsIDw8RU5EKTsKLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0
ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7Ci1FTkQKKyAgICB3cmFwcGVyID0g
VjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKIAot
ICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiAgICAgaWYgKCFjb250ZXh0LklzRW1wdHko
KSkKICAgICAgICAgY29udGV4dC0+RXhpdCgpOwotRU5ECiAKLSAgICBwdXNoKEBpbXBsQ29udGVu
dCwgPDxFTkQpOwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAg
IHJldHVybiB3cmFwcGVyOwogRU5ECkBAIC0zNTkxLDcgKzM1NjIsNyBAQCBzdWIgR2VuZXJhdGVG
dW5jdGlvbkNhbGxTdHJpbmcoKQogICAgIH0KIAogICAgICRyZXR1cm4gLj0gIi5yZWxlYXNlKCki
IGlmICgkcmV0dXJuSXNSZWYpOwotICAgICRyZXN1bHQgLj0gJGluZGVudCAuIFJldHVybk5hdGl2
ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgJHJldHVybiwgImFyZ3MuR2V0SXNvbGF0
ZSgpIikgLiAiO1xuIjsKKyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiBSZXR1cm5OYXRpdmVUb0pT
VmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkhvbGRlcigpIiwgImFy
Z3MuR2V0SXNvbGF0ZSgpIikgLiAiO1xuIjsKIAogICAgIHJldHVybiAkcmVzdWx0OwogfQpAQCAt
NDAyMiw2ICszOTkzLDggQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogewogICAgIG15ICRzaWduYXR1
cmUgPSBzaGlmdDsKICAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteSAkZ2V0Q3JlYXRpb25D
b250ZXh0ID0gc2hpZnQ7CisgICAgbXkgJGdldENyZWF0aW9uQ29udGV4dEFyZyA9ICRnZXRDcmVh
dGlvbkNvbnRleHQgPyAiLCAkZ2V0Q3JlYXRpb25Db250ZXh0IiA6ICIiOwogICAgIG15ICRnZXRJ
c29sYXRlID0gc2hpZnQ7CiAgICAgbXkgJGdldElzb2xhdGVBcmcgPSAkZ2V0SXNvbGF0ZSA/ICIs
ICRnZXRJc29sYXRlIiA6ICIiOwogICAgIG15ICR0eXBlID0gR2V0VHlwZUZyb21TaWduYXR1cmUo
JHNpZ25hdHVyZSk7CkBAIC00MDc4LDE4ICs0MDUxLDE4IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUK
ICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRzZXF1ZW5jZVR5cGUuaCIpOwogICAg
ICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRzZXF1ZW5jZVR5cGUuaCIpOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAidjhBcnJheSgkdmFsdWUsICRnZXRJc29sYXRlKSI7CisgICAgICAg
IHJldHVybiAidjhBcnJheSgkdmFsdWUkZ2V0SXNvbGF0ZUFyZykiOwogICAgIH0KIAogICAgIEFk
ZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAKICAgICAjIHNwZWNpYWwgY2FzZSBmb3Igbm9uLURP
TSBub2RlIGludGVyZmFjZXMKICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKLSAgICAg
ICAgcmV0dXJuICJ0b1Y4KCR7dmFsdWV9LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCkiIC4gKCRz
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1cm5OZXdPYmplY3QifSA/ICIkZ2V0
SXNvbGF0ZUFyZywgdHJ1ZSkiIDogIiRnZXRJc29sYXRlQXJnKSIpOworICAgICAgICByZXR1cm4g
InRvVjgoJHt2YWx1ZX0kZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElzb2xhdGVBcmciIC4gKCRz
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1cm5OZXdPYmplY3QifSA/ICIsIHRy
dWUpIiA6ICIpIik7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJFdmVudFRhcmdldCIpIHsK
LSAgICAgICAgcmV0dXJuICJWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmpl
Y3QoJHZhbHVlLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCkkZ2V0SXNvbGF0ZUFyZykiOworICAg
ICAgICByZXR1cm4gIlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdCgk
dmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElzb2xhdGVBcmcpIjsKICAgICB9CiAKICAg
ICBpZiAoJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiKSB7CkBAIC00MTA2LDcgKzQwNzksNyBAQCBz
dWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoInd0Zi9SZWZQdHIuaCIp
OwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJ3dGYvR2V0UHRyLmgiKTsKIAotICAgIHJldHVybiAi
dG9WOCgkdmFsdWUsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSRnZXRJc29sYXRlQXJnKSI7Cisg
ICAgcmV0dXJuICJ0b1Y4KCR2YWx1ZSRnZXRDcmVhdGlvbkNvbnRleHRBcmckZ2V0SXNvbGF0ZUFy
ZykiOwogfQogCiBzdWIgUmV0dXJuTmF0aXZlVG9KU1ZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApp
bmRleCA1Nzk4OTFhMTAzNjI0M2M2MmMzZmVjNTg2OTAwMjA2ZDZkODM0OTQyLi5lNDcwM2JjOTFk
Y2MxOWU4YjRjZTMzYzM0Nzk5MGVmMDZiMGI5OTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKQEAg
LTU2LDcgKzU2LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmb29DYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgRmxvYXQ2NEFycmF5KiBpbXAg
PSBWOEZsb2F0NjRBcnJheTo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRVhDRVBUSU9O
X0JMT0NLKEZsb2F0MzJBcnJheSosIGFycmF5LCBWOEZsb2F0MzJBcnJheTo6SGFzSW5zdGFuY2Uo
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkgPyBW
OEZsb2F0MzJBcnJheTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsK
LSAgICByZXR1cm4gdG9WOChpbXAtPmZvbyhhcnJheSksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4o
KSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+Zm9vKGFycmF5KSwg
YXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHNldENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0x
NTEsNyArMTUxLDYgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEZsb2F0NjRBcnJheTo6d3Jh
cFNsb3coUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGltcGwsIHYKIHsKICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBwZXI7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxBcnJheUJ1ZmZlclZpZXcqPihpbXBsLmdldCgpKSkgPT0gc3RhdGljX2Nhc3Q8dm9p
ZCo+KGltcGwuZ2V0KCkpKTsKLSAgICBGcmFtZSogZnJhbWUgPSAwOwogCiAgICAgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY29udGV4dDsKICAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5
KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6
R2V0Q3VycmVudCgpKSB7CkBAIC0xNjEsOSArMTYwLDEyIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gVjhGbG9hdDY0QXJyYXk6OndyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBpbXBs
LCB2CiAgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOwogICAgICAgICBjb250ZXh0
LT5FbnRlcigpOwogICAgIH0KLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0
ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB3cmFwcGVyID0gVjhE
T01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwogICAg
IGlmICghY29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAg
IGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVy
OwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdy
YXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggYzI3MTEyMGU5MDhmZjc4NmE3
NjAxMGY1NTAzMWJkYWRmNzQ2OTlkMy4uYjk5NmM4MTU1YmVmOGZiZjk2NGQyYTMwNzAxNDZhYmJi
MjMyZWE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTE3OSwxMSAr
MTc5LDYgQEAgYm9vbCBWOFRlc3RBY3RpdmVET01PYmplY3Q6Okhhc0luc3RhbmNlKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSkKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0QWN0aXZl
RE9NT2JqZWN0Ojp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PYmplY3Q+IGltcGws
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAgRnJhbWUq
IGZyYW1lID0gMDsKLSAgICBpZiAoaW1wbC0+ZnJhbWUoKSkgewotICAgICAgICBmcmFtZSA9IGlt
cGwtPmZyYW1lKCk7Ci0gICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5p
dGlhbGl6ZUlmTmVlZGVkKCk7Ci0gICAgfQogCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y29udGV4dDsKICAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25D
b250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7
CkBAIC0xOTMsOSArMTg4LDEyIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0QWN0aXZl
RE9NT2JqZWN0Ojp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PCiAgICAgICAgIEFT
U0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOwogICAgICAgICBjb250ZXh0LT5FbnRlcigpOwogICAg
IH0KLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1l
LCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0
YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwogICAgIGlmICghY29udGV4dC5J
c0VtcHR5KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VMWSh3
cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpTV3Jh
cHBlckZvckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2su
Y3BwCmluZGV4IGI4YjUxMDcxNjA1NjcyODc5NDg1ZDg3N2E4ZGU2YzliMDEyNjhkOWMuLmVkMmRl
NmVlNmJiNWM2YWI0ODY1NjY2ZmVmNGZmZTJiNTU5YmVkODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNw
cApAQCAtODYsNyArODYsNyBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFz
czFQYXJhbShDbGFzczEqIGNsYXNzMVBhcmFtKQogCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNj
b3BlKHY4Q29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3MxUGFyYW1I
YW5kbGUgPSB0b1Y4KGNsYXNzMVBhcmFtLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCkpOworICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzczFQYXJhbUhhbmRsZSA9IHRvVjgoY2xhc3MxUGFy
YW0pOwogICAgIGlmIChjbGFzczFQYXJhbUhhbmRsZS5Jc0VtcHR5KCkpIHsKICAgICAgICAgaWYg
KCFpc1NjcmlwdENvbnRyb2xsZXJUZXJtaW5hdGluZygpKQogICAgICAgICAgICAgQ1JBU0goKTsK
QEAgLTExNCw3ICsxMTQsNyBAQCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFz
czJQYXJhbShDbGFzczIqIGNsYXNzMlBhcmFtLCBjb25zdCBTdHJpbmcmCiAKICAgICB2ODo6Q29u
dGV4dDo6U2NvcGUgc2NvcGUodjhDb250ZXh0KTsKIAotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjbGFzczJQYXJhbUhhbmRsZSA9IHRvVjgoY2xhc3MyUGFyYW0sIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNzMlBhcmFtSGFuZGxlID0g
dG9WOChjbGFzczJQYXJhbSk7CiAgICAgaWYgKGNsYXNzMlBhcmFtSGFuZGxlLklzRW1wdHkoKSkg
ewogICAgICAgICBpZiAoIWlzU2NyaXB0Q29udHJvbGxlclRlcm1pbmF0aW5nKCkpCiAgICAgICAg
ICAgICBDUkFTSCgpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIGJvb2wgVjhUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrV2l0aFN0cmluZ0xpc3QoUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGxpc3RQYXJhbSkKIAog
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogCi0gICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGxpc3RQYXJhbUhhbmRsZSA9IHRvVjgobGlzdFBhcmFtLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBsaXN0UGFyYW1IYW5k
bGUgPSB0b1Y4KGxpc3RQYXJhbSk7CiAgICAgaWYgKGxpc3RQYXJhbUhhbmRsZS5Jc0VtcHR5KCkp
IHsKICAgICAgICAgaWYgKCFpc1NjcmlwdENvbnRyb2xsZXJUZXJtaW5hdGluZygpKQogICAgICAg
ICAgICAgQ1JBU0goKTsKQEAgLTIwNywxMyArMjA3LDEzIEBAIGJvb2wgVjhUZXN0Q2FsbGJhY2s6
OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKENsYXNzOCogY2xhc3M4UGFyYW0sIFRoaXNDbGFz
cyoKIAogICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogCi0gICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNzOFBhcmFtSGFuZGxlID0gdG9WOChjbGFzczhQYXJhbSwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PigpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xh
c3M4UGFyYW1IYW5kbGUgPSB0b1Y4KGNsYXNzOFBhcmFtKTsKICAgICBpZiAoY2xhc3M4UGFyYW1I
YW5kbGUuSXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVybWlu
YXRpbmcoKSkKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdGhpc0NsYXNzUGFyYW1IYW5kbGUgPSB0b1Y4
KHRoaXNDbGFzc1BhcmFtLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCkpOworICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0aGlzQ2xhc3NQYXJhbUhhbmRsZSA9IHRvVjgodGhpc0NsYXNzUGFyYW0p
OwogICAgIGlmICh0aGlzQ2xhc3NQYXJhbUhhbmRsZS5Jc0VtcHR5KCkpIHsKICAgICAgICAgaWYg
KCFpc1NjcmlwdENvbnRyb2xsZXJUZXJtaW5hdGluZygpKQogICAgICAgICAgICAgQ1JBU0goKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmluZGV4IDFmZDZlMjdlMTQyZDUz
Nzc3ODE5MTIyNmRiZGQ5OGZkZTNkNDU0NmIuLjdjMzJiZTZlMDFlZGUwZDAyMDBiNmVhYWMwZDk4
ZDkzNjdkOTI1NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAt
MTEzLDcgKzExMyw2IEBAIGJvb2wgVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6Okhhc0luc3RhbmNl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVk
R2V0dGVyPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
OwotICAgIEZyYW1lKiBmcmFtZSA9IDA7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
b250ZXh0OwogICAgIGlmICghY3JlYXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNv
bnRleHQtPkNyZWF0aW9uQ29udGV4dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsK
QEAgLTEyMyw5ICsxMjIsMTIgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RDdXN0b21O
YW1lZEdldHRlcjo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0Q3VzdG9tTmEKICAgICAgICAgQVNT
RVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CiAgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CiAgICAg
fQotICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoZnJhbWUs
ICZpbmZvLCBpbXBsLmdldCgpKTsKKworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3Rh
bnRpYXRlVjhPYmplY3QoJmluZm8sIGltcGwuZ2V0KCkpOworCiAgICAgaWYgKCFjb250ZXh0Lklz
RW1wdHkoKSkKICAgICAgICAgY29udGV4dC0+RXhpdCgpOworCiAgICAgaWYgKFVOTElLRUxZKHdy
YXBwZXIuSXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhhbmRsZSA9IFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yRE9NT2JqZWN0KGltcGwsIHdyYXBwZXIsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IGIyMGYxNWFkNzRlZTNlMzYzODRlZDI3NTdiNDZkZTg4
MjUyMDdjOWUuLmIzYTM1MzRmMjRhYjc2ZjUxZGJlYjVlNDU3ZTQ2ZmM1MTUyOTQyZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE1MCw3ICsxNTAsNiBAQCBib29s
IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSkKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXZlbnRDb25zdHJ1Y3Rvcj4gaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewog
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKLSAgICBGcmFtZSogZnJhbWUgPSAw
OwogCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsKICAgICBpZiAoIWNyZWF0
aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQo
KSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CkBAIC0xNjAsOSArMTU5LDEyIEBAIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6d3JhcFNsb3coUGFz
c1JlZlB0cjxUZXN0RXZlbnRDb25zCiAgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkp
OwogICAgICAgICBjb250ZXh0LT5FbnRlcigpOwogICAgIH0KLSAgICB3cmFwcGVyID0gVjhET01X
cmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7CisK
KyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBp
bXBsLmdldCgpKTsKKwogICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIGNvbnRl
eHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAg
ICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBw
ZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLCB3
cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDhkZTA4YmE4
N2JkOGY3MzVjNWU0NzBjZTBhMTQ3ZGZiNTdiOTQwYjQuLmI3ODM2OWU5NTVmNGVkNzZmM2RiODhl
OTI5NmUwN2YzYTdlMjRiNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtNTUsNyAr
NTUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGl0ZW1DYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAg
ICBnb3RvIGZhaWw7CiAgICAgfQotICAgIHJldHVybiB0b1Y4KGltcC0+aXRlbShpbmRleCksIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0
b1Y4KGltcC0+aXRlbShpbmRleCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
ICAgICB9CiAgICAgZmFpbDoKICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdl
dElzb2xhdGUoKSk7CkBAIC0xNzQsNyArMTc0LDYgQEAgYm9vbCBWOFRlc3RFdmVudFRhcmdldDo6
SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBWOFRlc3RFdmVudFRhcmdldDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXZlbnRU
YXJnZXQ+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7
Ci0gICAgRnJhbWUqIGZyYW1lID0gMDsKIAogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNv
bnRleHQ7CiAgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29u
dGV4dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgewpA
QCAtMTg0LDkgKzE4MywxMiBAQCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50VGFy
Z2V0Ojp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RFdmVudFRhcmdldD4gaQogICAgICAgICBBU1NF
UlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKICAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKICAgICB9
Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChmcmFtZSwg
JmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFu
dGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKICAgICBpZiAoIWNvbnRleHQuSXNF
bXB0eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3Jh
cHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpzZXRKU1dyYXBw
ZXJGb3JET01PYmplY3QoaW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24u
Y3BwCmluZGV4IDM1NGJjZWE4YTZkOGY0NDQ3ZTJmMTJhZWNlODdlOWIyMWQ0YWUwZTEuLmQ4MDE5
OWQ5ZjExOWM4OWQ3MDAzZjk2YTI3NDQxN2JjYjczYmY3ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24u
Y3BwCkBAIC0xMDQsNyArMTA0LDYgQEAgYm9vbCBWOFRlc3RFeGNlcHRpb246Okhhc0luc3RhbmNl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhU
ZXN0RXhjZXB0aW9uOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RFeGNlcHRpb24+IGltcGwsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0gICAgRnJhbWUqIGZy
YW1lID0gMDsKIAogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7CiAgICAgaWYg
KCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25D
b250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgewpAQCAtMTE0LDkgKzExMywx
MiBAQCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV4Y2VwdGlvbjo6d3JhcFNsb3coUGFz
c1JlZlB0cjxUZXN0RXhjZXB0aW9uPiBpbXBsLAogICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNF
bXB0eSgpKTsKICAgICAgICAgY29udGV4dC0+RW50ZXIoKTsKICAgICB9Ci0gICAgd3JhcHBlciA9
IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0
KCkpOworCisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgm
aW5mbywgaW1wbC5nZXQoKSk7CisKICAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQogICAgICAg
ICBjb250ZXh0LT5FeGl0KCk7CisKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkp
KQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVySGFuZGxlID0gVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qo
aW1wbCwgd3JhcHBlciwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCmluZGV4IDA1MDZi
OTMzMWUyOGI0NjkxM2ZlOTgzNmJiOTVhYTQwOTU4ZWFmMmQuLmM1MzUwNzY3MTU1NDU4MDQyZjIy
OGIyZGQxYWJhYzU1OWZhM2MxOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwCkBAIC0xMjAsNyAr
MTIwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxOb2RlQXR0
ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmEKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5U
ZXN0SW50ZXJmYWNlLnN1cHBsZW1lbnRhbE5vZGUuX2dldCIpOwogICAgIFRlc3RJbnRlcmZhY2Uq
IGltcCA9IFY4VGVzdEludGVyZmFjZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0
dXJuIHRvVjgoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXApLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxOb2RlKGltcCksIGluZm8uSG9sZGVyKCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQpAQCAtMTY4LDcgKzE2OCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsTWV0aG9kMkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyCiAgICAgUmVmUHRyPFRlc3RPYmo+IHJlc3VsdCA9IFRlc3RTdXBwbGVtZW50YWw6OnN1
cHBsZW1lbnRhbE1ldGhvZDIoc2NyaXB0Q29udGV4dCwgaW1wLCBzdHJBcmcsIG9iakFyZywgZWMp
OwogICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAgICAgIGdvdG8gZmFpbDsKLSAgICByZXR1cm4g
dG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBhcmdzLkhvbGRl
cigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgfQogICAgIGZhaWw6CiAgICAgcmV0dXJuIHNl
dERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOwpAQCAtMzQ3LDcgKzM0Nyw2IEBA
IEFjdGl2ZURPTU9iamVjdCogVjhUZXN0SW50ZXJmYWNlOjp0b0FjdGl2ZURPTU9iamVjdCh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdElu
dGVyZmFjZTo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0SW50ZXJmYWNlPiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7
CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwotICAgIEZyYW1lKiBmcmFtZSA9
IDA7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0OwogICAgIGlmICghY3Jl
YXRpb25Db250ZXh0LklzRW1wdHkoKSAmJiBjcmVhdGlvbkNvbnRleHQtPkNyZWF0aW9uQ29udGV4
dCgpICE9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCkpIHsKQEAgLTM1Nyw5ICszNTYsMTIgQEAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RJbnRlcmZhY2U6OndyYXBTbG93KFBhc3NSZWZQ
dHI8VGVzdEludGVyZmFjZT4gaW1wbCwKICAgICAgICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHko
KSk7CiAgICAgICAgIGNvbnRleHQtPkVudGVyKCk7CiAgICAgfQotICAgIHdyYXBwZXIgPSBWOERP
TVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoZnJhbWUsICZpbmZvLCBpbXBsLmdldCgpKTsK
KworICAgIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoJmluZm8s
IGltcGwuZ2V0KCkpOworCiAgICAgaWYgKCFjb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgY29u
dGV4dC0+RXhpdCgpOworCiAgICAgaWYgKFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0eSgpKSkKICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3Jh
cHBlckhhbmRsZSA9IFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0
KGltcGwsIHdyYXBwZXIsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIuY3BwCmluZGV4IDYwYjk2ODRiOGIxMDYwODQxZDllNWI3YmUyN2Q0MTFmYTcy
Y2MxMDIuLjI0YzRkZjY5ODU4YTYwNjZmY2Y0NTUzZWEyNjI4MDg4NTcyMWQyZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTExMyw3ICsxMTMs
NiBAQCBib29sIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6Okhhc0luc3RhbmNlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlcjsKLSAgICBGcmFtZSogZnJhbWUgPSAwOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY29udGV4dDsKICAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRp
b25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgp
KSB7CkBAIC0xMjMsOSArMTIyLDEyIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TWVkCiAgICAgICAg
IEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOwogICAgICAgICBjb250ZXh0LT5FbnRlcigpOwog
ICAgIH0KLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZy
YW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpp
bnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwogICAgIGlmICghY29udGV4
dC5Jc0VtcHR5KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VM
WSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpT
V3JhcHBlckZvckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROYW1lZENvbnN0cnVjdG9yLmNwcAppbmRleCA2ZTQ0ZDg5MmY5MDYxYTkxMjFkNTQyYTBmMDVl
NzNlYTBiYWI0YWNkLi42ZTI2MmQ0M2M0ZjU4Y2Y0MzMxNTJmZDNiMzA0MTYxZDQ5NjAzZWE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
TmFtZWRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0xNTcsNyArMTU3LDYgQEAg
QWN0aXZlRE9NT2JqZWN0KiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp0b0FjdGl2ZURPTU9iamVj
dCh2ODo6SGFuZGxlPHY4OjpPYmplY3QKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4g
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKLSAgICBG
cmFtZSogZnJhbWUgPSAwOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dDsK
ICAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkgJiYgY3JlYXRpb25Db250ZXh0LT5D
cmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKSB7CkBAIC0xNjcs
OSArMTY2LDEyIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rv
cjo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TmFtZWRDb25zCiAgICAgICAgIEFTU0VSVCghY29u
dGV4dC5Jc0VtcHR5KCkpOwogICAgICAgICBjb250ZXh0LT5FbnRlcigpOwogICAgIH0KLSAgICB3
cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1lLCAmaW5mbywg
aW1wbC5nZXQoKSk7CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4
T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwogICAgIGlmICghY29udGV4dC5Jc0VtcHR5KCkp
CiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklz
RW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckFj
dGl2ZURPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcAppbmRleCAw
YmZlMTMzN2VmMGU3YTg4Y2I0MzI1NjEzMzBkNTNkOWI1M2JmZDNiLi41NjU1YThjMDFhNzUzNGEx
ZmYzMGFjZmU2ZTBmZjk5YjE5NmFmZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCkBAIC0xMTMsNyArMTEzLDYg
QEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROb2RlOjp3cmFwU2xvdyhQYXNzUmVmUHRy
PFRlc3ROb2RlPiBpbXBsLCB2ODo6SGFuZGwKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXI7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxOb2Rl
Kj4oaW1wbC5nZXQoKSkpID09IHN0YXRpY19jYXN0PHZvaWQqPihpbXBsLmdldCgpKSk7Ci0gICAg
RnJhbWUqIGZyYW1lID0gaW1wbC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKIAogICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQ7CiAgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0
eSgpICYmIGNyZWF0aW9uQ29udGV4dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6
OkdldEN1cnJlbnQoKSkgewpAQCAtMTIzLDkgKzEyMiwxMiBAQCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IFY4VGVzdE5vZGU6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE5vZGU+IGltcGwsIHY4OjpI
YW5kbAogICAgICAgICBBU1NFUlQoIWNvbnRleHQuSXNFbXB0eSgpKTsKICAgICAgICAgY29udGV4
dC0+RW50ZXIoKTsKICAgICB9Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlh
dGVWOE9iamVjdChmcmFtZSwgJmluZm8sIGltcGwuZ2V0KCkpOworCisgICAgd3JhcHBlciA9IFY4
RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdCgmaW5mbywgaW1wbC5nZXQoKSk7CisKICAg
ICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICBjb250ZXh0LT5FeGl0KCk7CisKICAg
ICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gd3JhcHBl
cjsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gVjhET01X
cmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKGltcGwsIHdyYXBwZXIsIGlzb2xhdGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
T2JqLmNwcAppbmRleCA3ZWZlZDVjNTVhNTMzYWNhNDM1Y2Y4NGM0ZGY0NmQ2MmJlODUwODM2Li40
NmI0MTVkMjgxYTU3OGQwZjBiYTY4Mjk1NTVhYzg2YTVlNWE0NGFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApAQCAt
MjI5LDcgKzIyOSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdGVzdE9iakF0dHJB
dHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uVGVzdE9iai50ZXN0T2JqQXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPnRl
c3RPYmpBdHRyKCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgaW5mby5HZXRJc29sYXRlKCkp
OworICAgIHJldHVybiB0b1Y4KGltcC0+dGVzdE9iakF0dHIoKSwgaW5mby5Ib2xkZXIoKSwgaW5m
by5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0T2JqQXR0ckF0dHJTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtMjQ1LDcgKzI0NSw3IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gWE1MT2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5YTUxPYmpBdHRy
Ll9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcC0+eG1sT2JqQXR0cigpLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChpbXAtPnht
bE9iakF0dHIoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0
aWMgdm9pZCBYTUxPYmpBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CkBAIC00MjEsNyArNDIxLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0eXBlZEFy
cmF5QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLnR5cGVkQXJyYXlBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4
KGltcC0+dHlwZWRBcnJheUF0dHIoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT50eXBlZEFycmF5QXR0cigpLCBpbmZv
LkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHR5cGVkQXJy
YXlBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC01NDgsNyAr
NTQ4LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZUF0dHJHZXR0ZXIodjg6OkwKICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlm
ICghc2NyaXB0Q29udGV4dCkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7Ci0gICAgcmV0
dXJuIHRvVjgoaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShzY3JpcHRD
b250ZXh0KSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHRvVjgoaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShz
Y3JpcHRDb250ZXh0KSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBz
dGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUF0dHJTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNTc2LDcgKzU3Niw3IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0ckdl
dHRlcih2ODo6TG9jYWw8CiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGluZm8u
R2V0SXNvbGF0ZSgpKTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0g
ICAgcmV0dXJuIHRvVjgodi5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgaW5m
by5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCBpbmZvLkhvbGRl
cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpA
QCAtNjA3LDcgKzYwNyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyCiAgICAgUmVmUHRyPFRl
c3RPYmo+IHYgPSBpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2Vz
KHNjcmlwdENvbnRleHQsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICByZXR1
cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRv
Vjgodi5yZWxlYXNlKCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgaW5mby5HZXRJc29sYXRl
KCkpOworICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlUmFpc2VzQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBA
IC02MzUsNyArNjM1LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlQXQKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7
Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlQXR0cmlidXRlKHN0YXRlLCBzY3JpcHRDb250ZXh0KSwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKHN0YXRlLCBzY3JpcHRD
b250ZXh0KSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMg
dm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlQXR0
clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC02NzEsNyArNjcxLDcgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlQXR0cmlidXRlUmEKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihl
YywgaW5mby5HZXRJc29sYXRlKCkpOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGluZm8uR2V0SXNvbGF0
ZSgpKTsKLSAgICByZXR1cm4gdG9WOCh2LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgodi5yZWxlYXNlKCksIGlu
Zm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgd2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNzA0LDcgKzcwNCw3IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZVdpdGhTcGFjZXNBCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29u
dGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRl
eHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwotICAgIHJldHVybiB0b1Y4KGltcC0+
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1
dGUoc3RhdGUsIHNjcmlwdENvbnRleHQpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGluZm8u
R2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKHN0YXRlLCBzY3JpcHRDb250
ZXh0KSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9p
ZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNzMxLDcgKzcz
MSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEFyZ3VtZW50c0Fu
ZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJHZXR0ZXIoCiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zvckluc3BlY3RvcigpKTsKICAgICBp
ZiAoIWNhbGxTdGFjaykKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IHRvVjgoaW1wLT53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKGNhbGxT
dGFjayksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAg
IHJldHVybiB0b1Y4KGltcC0+d2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0
ZShjYWxsU3RhY2spLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTk0OSw3ICs5NDksNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnRlbnREb2N1bWVudEF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbQogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvTm9kZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+Y29udGVudERvY3Vt
ZW50KCkpKQogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpOdWxsKGlu
Zm8uR2V0SXNvbGF0ZSgpKSk7CiAKLSAgICByZXR1cm4gdG9WOChpbXAtPmNvbnRlbnREb2N1bWVu
dCgpLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gdG9WOChpbXAtPmNvbnRlbnREb2N1bWVudCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbXV0YWJsZVBv
aW50QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKQEAgLTExMTEsNyArMTExMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gb2JqTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm9iak1ldGhvZCIpOwogICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgo
aW1wLT5vYmpNZXRob2QoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBhcmdzLkdldElzb2xh
dGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT5vYmpNZXRob2QoKSwgYXJncy5Ib2xkZXIoKSwg
YXJncy5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9i
ak1ldGhvZFdpdGhBcmdzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEx
MjMsNyArMTEyMyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqTWV0aG9kV2l0
aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgRVhDRVBUSU9OX0JM
T0NLKGxvbmcgbG9uZywgQXJnLCB0b0ludDY0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3Ms
IDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhD
RVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0ckFyZywgTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CiAgICAgRVhDRVBUSU9OX0JMT0NLKFRl
c3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZl
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJn
cywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5v
YmpNZXRob2RXaXRoQXJncyhBcmcsIHN0ckFyZywgb2JqQXJnKSwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT5vYmpNZXRo
b2RXaXRoQXJncyhBcmcsIHN0ckFyZywgb2JqQXJnKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJ
c29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhT
ZXF1ZW5jZUFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMTYwLDcg
KzExNjAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjayhjb25zdCB2OAogICAgIFJlZlB0cjxUZXN0T2JqPiBy
ZXN1bHQgPSBpbXAtPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Moc3RyQXJnLCBv
YmpBcmcsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7Ci0g
ICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pigp
LCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwg
YXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0KICAgICBmYWlsOgogICAg
IHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTEyNjcs
NyArMTI2Nyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRl
T2JqQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJnCiAgICAgUmVmUHRyPFRlc3RPYmo+
IHJlc3VsdCA9IGltcC0+d2l0aFNjcmlwdFN0YXRlT2JqKCZzdGF0ZSk7CiAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRp
b24oKSwgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNl
KCksIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJl
dHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVW
b2lkRXhjZXB0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEzMDAs
NyArMTMwMCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRl
T2JqRXhjZXB0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtCiAgICAgICAgIGdvdG8gZmFpbDsK
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KHN0YXRlLmV4Y2VwdGlvbigpLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjgo
cmVzdWx0LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBhcmdzLkdldElzb2xh
dGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSwg
YXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0KICAgICBmYWlsOgogICAgIHJldHVybiBzZXRET01F
eGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTEzNDYsNyArMTM0Niw3IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZU9iakV4Y2VwdGlvCiAgICAgICAgIGdvdG8gZmFpbDsKICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlv
bigpLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2Uo
KSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0
dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRl
KCkpOwogICAgIH0KICAgICBmYWlsOgogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTEzNjMsNyArMTM2Myw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNDCiAgICAgUmVmUHRyPFRlc3RPYmo+IHJlc3VsdCA9IGltcC0+d2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoJnN0YXRlLCBzY3JpcHRDb250ZXh0
KTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRv
VjgocmVzdWx0LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBhcmdzLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIo
KSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQpAQCAtMTgzMyw3ICsxODMzLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBnZXRTVkdEb2N1bWVudENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAg
ICAgUmVmUHRyPFNWR0RvY3VtZW50PiByZXN1bHQgPSBpbXAtPmdldFNWR0RvY3VtZW50KGVjKTsK
ICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7Ci0gICAgcmV0dXJuIHRv
VjgocmVzdWx0LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBhcmdzLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIo
KSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0KICAgICBmYWlsOgogICAgIHJldHVybiBzZXRE
T01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTE5MTksNyArMTkxOSw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaWN0RnVuY3Rpb25DYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIFJlZlB0cjxib29sPiByZXN1bHQgPSBpbXAtPnN0
cmljdEZ1bmN0aW9uKHN0ciwgYSwgYiwgZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAg
ICAgIGdvdG8gZmFpbDsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChy
ZXN1bHQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAgICAg
fQogICAgIGZhaWw6CiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29s
YXRlKCkpOwpAQCAtMjMyNCw3ICsyMzI0LDYgQEAgdm9pZCBWOFRlc3RPYmo6Omluc3RhbGxQZXJD
b250ZXh0UHJvcGVydGllcyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGluc3RhbmNlLCBUZXMKIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0T2JqOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RP
Ymo+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gMDsKIAogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQ7CiAgICAgaWYgKCFjcmVhdGlvbkNvbnRleHQuSXNFbXB0eSgpICYmIGNyZWF0aW9uQ29udGV4
dC0+Q3JlYXRpb25Db250ZXh0KCkgIT0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkgewpAQCAt
MjMzNCw5ICsyMzMzLDEyIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0T2JqOjp3cmFw
U2xvdyhQYXNzUmVmUHRyPFRlc3RPYmo+IGltcGwsIHY4OjpIYW5kbGU8CiAgICAgICAgIEFTU0VS
VCghY29udGV4dC5Jc0VtcHR5KCkpOwogICAgICAgICBjb250ZXh0LT5FbnRlcigpOwogICAgIH0K
LSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KGZyYW1lLCAm
aW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50
aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwogICAgIGlmICghY29udGV4dC5Jc0Vt
cHR5KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlmIChVTkxJS0VMWSh3cmFw
cGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIGluc3RhbGxQZXJD
b250ZXh0UHJvcGVydGllcyh3cmFwcGVyLCBpbXBsLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggZTQyNGY2
NTExYTBhOGI2MDJlNGIyNWY5ZGZjYTNlZWJmMWI0OGQ3Yy4uYmE0YzQwZDU2NGFmN2Y0NmQwYWQy
MGYxNTMxYmVlZDJmMjhlM2FmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTI5Niw3ICsyOTYsNiBAQCBib29sIFY4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6SGFzSW5zdGFuY2Uodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbAogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZT4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcHBlcjsKLSAgICBGcmFtZSogZnJhbWUgPSAwOwogCiAgICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dDsKICAgICBpZiAoIWNyZWF0aW9uQ29udGV4dC5Jc0VtcHR5KCkg
JiYgY3JlYXRpb25Db250ZXh0LT5DcmVhdGlvbkNvbnRleHQoKSAhPSB2ODo6Q29udGV4dDo6R2V0
Q3VycmVudCgpKSB7CkBAIC0zMDYsOSArMzA1LDEyIEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwU2xvdyhQYXNzUmVmUHRy
CiAgICAgICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOwogICAgICAgICBjb250ZXh0LT5F
bnRlcigpOwogICAgIH0KLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4
T2JqZWN0KGZyYW1lLCAmaW5mbywgaW1wbC5nZXQoKSk7CisKKyAgICB3cmFwcGVyID0gVjhET01X
cmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KCZpbmZvLCBpbXBsLmdldCgpKTsKKwogICAgIGlm
ICghY29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIGNvbnRleHQtPkV4aXQoKTsKKwogICAgIGlm
IChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwog
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSBWOERPTVdyYXBw
ZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLCB3cmFwcGVyLCBpc29sYXRlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCmluZGV4IGMxM2U0OWZiMmU2YWIz
MzYxNzBkZWNmYWU3Yjc3NzhiOWFmN2VlNGUuLmY5MjE0ODY1NjFkODA5M2VhODdmZWU5ZmU0NDQ4
NGZiMDg4OTFjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcApA
QCAtMjU0LDYgKzI1NCwxMSBAQCBQYXNzUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gdG9YUGF0aE5T
UmVzb2x2ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogICAgIHJldHVybiByZXNvbHZl
cjsKIH0KIAordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0b0lubmVyR2xvYmFsT2JqZWN0KHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCit7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoY29udGV4dC0+R2xvYmFsKCktPkdldFByb3RvdHlwZSgpKTsKK30KKwog
RE9NV2luZG93KiB0b0RPTVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQog
ewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFsKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCmluZGV4IGY2MWNmYmU0YzhmZDc2
NmZhZDc4Yjg4ZDBkNDkyMDJmNzZlOTQzYWMuLjBjOWVlNGY0Y2ExOGEwYzgwYzZlMmIzNWEyNzY3
MTg0NDcwZjJlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCkBAIC0z
NTMsNiArMzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFBhc3NSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gdG9ET01TdHJpbmdMaXN0KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAgICAgUGFz
c1JlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IHRvWFBhdGhOU1Jlc29sdmVyKHY4OjpIYW5kbGU8djg6
OlZhbHVlPik7CiAKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvSW5uZXJHbG9iYWxPYmpl
Y3Qodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogICAgIERPTVdpbmRvdyogdG9ET01XaW5kb3co
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHRv
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKaW5kZXggN2U2
ZTRjYTA4N2VhOWQ1MTVmNjU5MjQ2MmM1MjM0NGJkOTRjNDMxNC4uNDRkNzMwMWE2ODhmNzliYTQ4
OGViYjE4NmJlOWUwODA3NDFjY2I0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XaW5kb3dTaGVsbC5jcHAKQEAgLTE3MCwxMSArMTcwLDYgQEAgc3RhdGljIHZvaWQg
Y2hlY2tEb2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyLCBEb2N1
bWVudCogZG9jdW0KICAgICBBU1NFUlQoIWRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpIHx8IChW
OERvY3VtZW50Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHdyYXBwZXIt
PkdldFByb3RvdHlwZSgpKSkgPT0gZG9jdW1lbnQpKTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gdG9Jbm5lckdsb2JhbE9iamVjdCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
b250ZXh0KQotewotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGNvbnRl
eHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7Ci19Ci0KIFBhc3NSZWZQdHI8VjhET01XaW5k
b3dTaGVsbD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFY4RE9NV2luZG93U2hlbGwoZnJhbWUpKTsKQEAgLTE5Myw2ICsx
ODgsOCBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmlzQ29udGV4dEluaXRpYWxpemVkKCkKIAog
dm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dCgpCiB7CisgICAgbV9wZXJDb250
ZXh0RGF0YS5jbGVhcigpOworCiAgICAgaWYgKCFtX2NvbnRleHQuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+d2lsbFJlbGVhc2VTY3JpcHRDb250ZXh0
KG1fY29udGV4dC5nZXQoKSwgMCk7CiAgICAgICAgIG1fY29udGV4dC5jbGVhcigpOwpAQCAtMjAz
LDggKzIwMCw2IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHQoKQogICAg
ICAgICBib29sIGlzTWFpbkZyYW1lID0gbV9mcmFtZS0+cGFnZSgpICYmIChtX2ZyYW1lLT5wYWdl
KCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpOyAKICAgICAgICAgVjhHQ0ZvckNvbnRleHREaXNw
b3NlOjppbnN0YW5jZSgpLm5vdGlmeUNvbnRleHREaXNwb3NlZChpc01haW5GcmFtZSk7CiAgICAg
fQotCi0gICAgbV9wZXJDb250ZXh0RGF0YS5jbGVhcigpOwogfQogCiB2b2lkIFY4RE9NV2luZG93
U2hlbGw6OmRlc3Ryb3lHbG9iYWwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V3JhcHBlci5jcHAKaW5kZXggZWIyNWM1YjNjNDY0MDgyODhiMDAyOGI2ZmU4OTBiMTFlOGZlNDA3
Ni4uYzk0YzU3OWFlZTExN2JkZjNjZTBhNWUyYjQ4YThjMTkzYWYzMTFiZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0xNTcsNDggKzE1NywyMCBA
QCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVGaWx0
ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+CiAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OmNyZWF0ZShW
OE5vZGVGaWx0ZXJDb25kaXRpb246OmNyZWF0ZShmaWx0ZXIpKTsKIH0KIAotdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChGcmFtZSogZnJhbWUs
IFdyYXBwZXJUeXBlSW5mbyogdHlwZSwgdm9pZCogaW1wbCkKK3Y4OjpMb2NhbDx2ODo6T2JqZWN0
PiBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoV3JhcHBlclR5cGVJbmZvKiB0eXBl
LCB2b2lkKiBpbXBsKQogewotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIFdvcmtlckNvbnRleHQq
IHdvcmtlckNvbnRleHQgPSAwOwotI2VuZGlmCi0gICAgaWYgKCFmcmFtZSkgewotICAgICAgICB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQo
KTsKLSAgICAgICAgaWYgKCFjb250ZXh0LklzRW1wdHkoKSkgewotICAgICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBnbG9iYWxQcm90b3R5cGUgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KGNvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7Ci0gICAgICAgICAgICBp
ZiAoaXNXcmFwcGVyT2ZUeXBlKGdsb2JhbFByb3RvdHlwZSwgJlY4RE9NV2luZG93OjppbmZvKSkg
ewotICAgICAgICAgICAgICAgIEZyYW1lKiBnbG9iYWxGcmFtZSA9IFY4RE9NV2luZG93Ojp0b05h
dGl2ZShnbG9iYWxQcm90b3R5cGUpLT5mcmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChnbG9i
YWxGcmFtZSAmJiBnbG9iYWxGcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFi
b3V0VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgICAgICAgICAgICAgZnJhbWUgPSBnbG9iYWxG
cmFtZTsKLSAgICAgICAgICAgIH0KLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICAgICAgICAgIGVs
c2UgaWYgKGlzV3JhcHBlck9mVHlwZShnbG9iYWxQcm90b3R5cGUsICZWOFdvcmtlckNvbnRleHQ6
OmluZm8pKQotICAgICAgICAgICAgICAgIHdvcmtlckNvbnRleHQgPSBWOFdvcmtlckNvbnRleHQ6
OnRvTmF0aXZlKGxvb2t1cERPTVdyYXBwZXIoVjhXb3JrZXJDb250ZXh0OjpHZXRUZW1wbGF0ZSgp
LCBjb250ZXh0LT5HbG9iYWwoKSkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9CisgICAgVjhQ
ZXJDb250ZXh0RGF0YSogcGVyQ29udGV4dERhdGEgPSBWOFBlckNvbnRleHREYXRhOjpjdXJyZW50
KCk7CiAKLSAgICBWOFBlckNvbnRleHREYXRhKiBjb250ZXh0RGF0YSA9IDA7Ci0gICAgaWYgKGZy
YW1lKQotICAgICAgICBjb250ZXh0RGF0YSA9IHBlckNvbnRleHREYXRhRm9yQ3VycmVudFdvcmxk
KGZyYW1lKTsKLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBlbHNlIGlmICh3b3JrZXJDb250ZXh0
KQotICAgICAgICBjb250ZXh0RGF0YSA9IHBlckNvbnRleHREYXRhKHdvcmtlckNvbnRleHQpOwot
I2VuZGlmCisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbmNlID0gcGVyQ29udGV4dERh
dGEgPyBwZXJDb250ZXh0RGF0YS0+Y3JlYXRlV3JhcHBlckZyb21DYWNoZSh0eXBlKSA6IFY4T2Jq
ZWN0Q29uc3RydWN0b3I6Om5ld0luc3RhbmNlKHR5cGUtPmdldFRlbXBsYXRlKCktPkdldEZ1bmN0
aW9uKCkpOworCisgICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxl
ZCBhbGxvY2F0aW9ucy4KKyAgICBpZiAoaW5zdGFuY2UuSXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gaW5zdGFuY2U7CisKKyAgICBzZXRET01XcmFwcGVyKGluc3RhbmNlLCB0eXBlLCBpbXBsKTsK
KyAgICBpZiAodHlwZSA9PSAmVjhIVE1MRG9jdW1lbnQ6OmluZm8pCisgICAgICAgIGluc3RhbmNl
ID0gVjhIVE1MRG9jdW1lbnQ6OndyYXBJblNoYWRvd09iamVjdChpbnN0YW5jZSwgc3RhdGljX2Nh
c3Q8Tm9kZSo+KGltcGwpKTsKIAotICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZTsK
LSAgICBpZiAoY29udGV4dERhdGEpCi0gICAgICAgIGluc3RhbmNlID0gY29udGV4dERhdGEtPmNy
ZWF0ZVdyYXBwZXJGcm9tQ2FjaGUodHlwZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHY4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gdHlwZS0+Z2V0VGVtcGxhdGUoKS0+R2V0RnVuY3Rp
b24oKTsKLSAgICAgICAgaW5zdGFuY2UgPSBWOE9iamVjdENvbnN0cnVjdG9yOjpuZXdJbnN0YW5j
ZShmdW5jdGlvbik7Ci0gICAgfQotICAgIGlmICghaW5zdGFuY2UuSXNFbXB0eSgpKSB7Ci0gICAg
ICAgIC8vIEF2b2lkIHNldHRpbmcgdGhlIERPTSB3cmFwcGVyIGZvciBmYWlsZWQgYWxsb2NhdGlv
bnMuCi0gICAgICAgIHNldERPTVdyYXBwZXIoaW5zdGFuY2UsIHR5cGUsIGltcGwpOwotICAgICAg
ICBpZiAodHlwZSA9PSAmVjhIVE1MRG9jdW1lbnQ6OmluZm8pCi0gICAgICAgICAgICBpbnN0YW5j
ZSA9IFY4SFRNTERvY3VtZW50Ojp3cmFwSW5TaGFkb3dPYmplY3QoaW5zdGFuY2UsIHN0YXRpY19j
YXN0PE5vZGUqPihpbXBsKSk7Ci0gICAgfQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAppbmRleCAzNjJhMzQxNzVlZTE1
NTU0NjdjN2IxMmQ3NTQzY2I0MWExZDAyODJlLi5hNjA5ZTMyNzk5NTgzYjk4YTU1M2M1MGYyYzgx
MDRhMjU2NzI1YjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
aApAQCAtMTE5LDcgKzExOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGlj
IHZvaWQgc2V0TmFtZWRIaWRkZW5SZWZlcmVuY2Uodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBwYXJl
bnQsIGNvbnN0IGNoYXIqIG5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjaGlsZCk7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHNldE5hbWVkSGlkZGVuV2luZG93UmVmZXJlbmNlKEZyYW1lKiwgY29u
c3QgY2hhciosIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0KEZyYW1lKiwgV3JhcHBlclR5cGVJ
bmZvKiwgdm9pZCopOworICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3Rh
bnRpYXRlVjhPYmplY3QoV3JhcHBlclR5cGVJbmZvKiwgdm9pZCopOwogCiAgICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdldENhY2hlZFdyYXBwZXIoTm9kZSogbm9kZSkKICAg
ICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Q
cm9wZXJ0eU5hbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVy
dHlOYW1lLmgKaW5kZXggNDBjNzAwZjZiMzhhY2ZkNjc2NGI1N2Q3NTdjMjA5YTc5MjdkZDkxYy4u
Zjg1OTE5NWQxNzY1ZDhmMDNkMzU1MTg4MTU3YzA1ODlkMGEyZmIzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFtZS5oCkBAIC00NCw2ICs0
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBWKGV2ZW50KSBcCiAgICAgVihsaXN0ZW5l
cikgXAogICAgIFYob3duZXJOb2RlKSBcCisgICAgVihwZXJDb250ZXh0RGF0YSkgXAogICAgIFYo
c2NyaXB0U3RhdGUpIFwKICAgICBWKHNsZWVwRnVuY3Rpb24pIFwKICAgICBWKHN0YXRlKSBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRleHREYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCmluZGV4
IGU1NzAyOWJmZDcyNGI4OTY1NTY2NWVkMWI2NWRlMjE0NTQ2ODIwMTQuLjk0NWI3YmZjOGNlYzQ0
OTBmZjI0ODg3ZWI3NjIwZmVmY2NlNjljYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwCkBAIC0zMSwxMiArMzEsMjUgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJWOFBlckNvbnRleHREYXRhLmgiCiAKKyNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhpZGRlblByb3BlcnR5TmFtZS5oIgogI2luY2x1ZGUg
IlY4T2JqZWN0Q29uc3RydWN0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitWOFBlckNv
bnRleHREYXRhKiBWOFBlckNvbnRleHREYXRhOjpjdXJyZW50KCkKK3sKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gd3JhcHBlZFBlckNvbnRleHREYXRhID0gdG9Jbm5lckdsb2JhbE9iamVjdCh2
ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKS0+R2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0
eU5hbWU6OnBlckNvbnRleHREYXRhKCkpOworICAgIGlmICh3cmFwcGVkUGVyQ29udGV4dERhdGEu
SXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VjhQ
ZXJDb250ZXh0RGF0YSo+KHY4OjpFeHRlcm5hbDo6VW53cmFwKHdyYXBwZWRQZXJDb250ZXh0RGF0
YSkpOworfQorCiB2b2lkIFY4UGVyQ29udGV4dERhdGE6OmRpc3Bvc2UoKQogeworICAgIHY4OjpI
YW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB0b0lubmVyR2xvYmFsT2JqZWN0KG1fY29udGV4
dCktPkRlbGV0ZUhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpwZXJDb250ZXh0RGF0
YSgpKTsKKwogICAgIHsKICAgICAgICAgV3JhcHBlckJvaWxlcnBsYXRlTWFwOjppdGVyYXRvciBp
dCA9IG1fd3JhcHBlckJvaWxlcnBsYXRlcy5iZWdpbigpOwogICAgICAgICBmb3IgKDsgaXQgIT0g
bV93cmFwcGVyQm9pbGVycGxhdGVzLmVuZCgpOyArK2l0KSB7CkBAIC03Myw2ICs4Niw4IEBAIHZv
aWQgVjhQZXJDb250ZXh0RGF0YTo6ZGlzcG9zZSgpCiAKIGJvb2wgVjhQZXJDb250ZXh0RGF0YTo6
aW5pdCgpCiB7CisgICAgdG9Jbm5lckdsb2JhbE9iamVjdChtX2NvbnRleHQpLT5TZXRIaWRkZW5W
YWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6cGVyQ29udGV4dERhdGEoKSwgdjg6OkV4dGVybmFs
OjpXcmFwKHRoaXMpKTsKKwogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gcHJvdG90eXBlU3Ry
aW5nID0gdjg6OlN0cmluZzo6TmV3U3ltYm9sKCJwcm90b3R5cGUiKTsKICAgICBpZiAocHJvdG90
eXBlU3RyaW5nLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5oCmluZGV4IDIwZTkxMGMxNjllZGJk
MTQ1ZTcxNTIxNGYzMDZkYzg2NTdiODQ5NTMuLjlmNjUxZTY4NWU1YjZhYmMzYjAyZDBmZjMxYjk1
ZWVlZGQwY2ZjNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVy
Q29udGV4dERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBlckNvbnRl
eHREYXRhLmgKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpbml0KCk7CiAK
KyAgICBzdGF0aWMgVjhQZXJDb250ZXh0RGF0YSogY3VycmVudCgpOworCiAgICAgLy8gVG8gY3Jl
YXRlIEpTIFdyYXBwZXIgb2JqZWN0cywgd2UgY3JlYXRlIGEgY2FjaGUgb2YgYSAnYm9pbGVyIHBs
YXRlJwogICAgIC8vIG9iamVjdCwgYW5kIHRoZW4gc2ltcGx5IENsb25lIHRoYXQgb2JqZWN0IGVh
Y2ggdGltZSB3ZSBuZWVkIGEgbmV3IG9uZS4KICAgICAvLyBUaGlzIGlzIGZhc3RlciB0aGFuIGdv
aW5nIHRocm91Z2ggdGhlIGZ1bGwgb2JqZWN0IGNyZWF0aW9uIHByb2Nlc3MuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjAx
NWRkMTIzMDRhYzNiZTIxNGEwNjFlOTBjYWI5YzFiNDdlZmNjMi4uYmRmYmNmMmE0MjYxMmE2ZDVi
OWFiM2ExYmFhZjRhMzNhOThlZWEwOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA5LTA4
ICBBZGFtIEJhcnRoICA8YWJhcnRoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIERPTSB3
cmFwcGVyIGNyZWF0aW9uIGludm9sdmVzIGEgYnVuY2ggb2Ygc2tldGNoeSBjb2RlIHJlbGF0ZWQg
dG8gZmluZGluZyB0aGUgRnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk2MTQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisK
KyAgICAgICAgVGhlIFY4IHJlc3VsdHMgZm9yIHRoaXMgdGVzdCBub3cgbWF0Y2ggdGhlIEpTQyBy
ZXN1bHRzLiBXZSBjYW4gcmVtb3ZlCisgICAgICAgIHRoZSBjaHJvbWl1bS1zcGVjaWZpYyBiYXNl
bGluZS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKwogMjAxMi0wOS0w
OCAgU3VkYXJzYW5hIE5hZ2luZW5pICA8c3VkYXJzYW5hLm5hZ2luZW5pQGxpbnV4LmludGVsLmNv
bT4KIAogICAgICAgICBbRUZMXSBHYXJkZW5pbmcgb2YgZmFpbGluZyB0ZXN0cyBhZnRlciByMTI3
OTM5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L3dvcmtl
cnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIt
c3luYy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZDliYWIw
MTBkNzY5NTg5Y2Q3ZGQ5Y2JmZWFlNzZmNzc3NWExYTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFz
dC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMtZXhwZWN0ZWQudHh0CisrKyAv
ZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotVGVzdCB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4K
LUJlZ2lubmluZyB3cml0ZSB0cmFuc2FjdGlvbjoKLVNRTElURV9DUkVBVEVfVEFCTEUgYWxsb3dl
ZC4KLVNRTElURV9DUkVBVEVfSU5ERVggYWxsb3dlZC4KLVNRTElURV9DUkVBVEVfVEVNUF9UQUJM
RSBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgYWxsb3dlZC4KLVNRTElURV9D
UkVBVEVfVEVNUF9WSUVXIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1RSSUdHRVIgYWxsb3dlZC4K
LVNRTElURV9DUkVBVEVfVklFVyBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9WVEFCTEUgbm90IGFs
bG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9SRUFEIGFsbG93ZWQuCi1T
UUxJVEVfU0VMRUNUIGFsbG93ZWQuCi1TUUxJVEVfREVMRVRFIGFsbG93ZWQuCi1TUUxJVEVfSU5T
RVJUIGFsbG93ZWQuCi1TUUxJVEVfVVBEQVRFIGFsbG93ZWQuCi1TUUxJVEVfUFJBR01BIG5vdCBh
bGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQUxURVJfVEFCTEUgYWxs
b3dlZC4KLVNRTElURV9BTFRFUl9UQUJMRSBhbGxvd2VkLgotU1FMSVRFX1RSQU5TQUNUSU9OIG5v
dCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQVRUQUNIIG5vdCBh
bGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfREVUQUNIIG5vdCBhbGxv
d2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfUkVJTkRFWCBhbGxvd2VkLgot
U1FMSVRFX0FOQUxZWkUgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNR
TElURV9EUk9QX0lOREVYIGFsbG93ZWQuCi1TUUxJVEVfRFJPUF9URU1QX1RBQkxFIGFsbG93ZWQu
Ci1TUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgYWxsb3dlZC4KLVNRTElURV9EUk9QX1RFTVBfVklF
VyBhbGxvd2VkLgotU1FMSVRFX0RST1BfVFJJR0dFUiBhbGxvd2VkLgotU1FMSVRFX0RST1BfVklF
VyBhbGxvd2VkLgotU1FMSVRFX0RST1BfVEFCTEUgYWxsb3dlZC4KLVdyaXRlIHRyYW5zYWN0aW9u
IHN1Y2NlZWRlZC4KLQotQmVnaW5uaW5nIHJlYWQgdHJhbnNhY3Rpb25zOgotU1FMSVRFX0NSRUFU
RV9UQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0NS
RUFURV9UQUJMRSBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9JTkRFWCBub3QgYWxsb3dlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIG5vdCBhbGxv
d2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dF
UiBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0NSRUFURV9U
RU1QX1ZJRVcgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9D
UkVBVEVfVFJJR0dFUiBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FM
SVRFX0NSRUFURV9WSUVXIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1T
UUxJVEVfQ1JFQVRFX1ZUQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQotU1FMSVRFX0NSRUFURV9JTkRFWCBhbGxvd2VkLgotU1FMSVRFX0NSRUFURV9URU1QX1RBQkxF
IGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBhbGxvd2VkLgotU1FMSVRFX0NS
RUFURV9URU1QX1ZJRVcgYWxsb3dlZC4KLVNRTElURV9DUkVBVEVfVFJJR0dFUiBhbGxvd2VkLgot
U1FMSVRFX0NSRUFURV9WSUVXIGFsbG93ZWQuCi1TUUxJVEVfQ1JFQVRFX1ZUQUJMRSBub3QgYWxs
b3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX1JFQUQgYWxsb3dlZC4KLVNR
TElURV9TRUxFQ1QgYWxsb3dlZC4KLVNRTElURV9ERUxFVEUgbm90IGFsbG93ZWQ6IFtvYmplY3Qg
U1FMRXhjZXB0aW9uXSAoNSkKLVNRTElURV9JTlNFUlQgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FM
RXhjZXB0aW9uXSAoNSkKLVNRTElURV9VUERBVEUgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhj
ZXB0aW9uXSAoNSkKLVNRTElURV9QUkFHTUEgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0
aW9uXSAoNSkKLVNRTElURV9BTFRFUl9UQUJMRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNl
cHRpb25dICg1KQotU1FMSVRFX0FMVEVSX1RBQkxFIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCi1TUUxJVEVfVFJBTlNBQ1RJT04gbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FM
RXhjZXB0aW9uXSAoNSkKLVNRTElURV9BVFRBQ0ggbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhj
ZXB0aW9uXSAoNSkKLVNRTElURV9ERVRBQ0ggbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0
aW9uXSAoNSkKLVNRTElURV9SRUlOREVYIG5vdCBhbGxvd2VkOiBbb2JqZWN0IFNRTEV4Y2VwdGlv
bl0gKDUpCi1TUUxJVEVfQU5BTFlaRSBub3QgYWxsb3dlZDogW29iamVjdCBTUUxFeGNlcHRpb25d
ICg1KQotU1FMSVRFX0RST1BfSU5ERVggbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9u
XSAoNSkKLVNRTElURV9EUk9QX1RFTVBfVEFCTEUgbm90IGFsbG93ZWQ6IFtvYmplY3QgU1FMRXhj
ZXB0aW9uXSAoNSkKLVNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBub3QgYWxsb3dlZDogW29iamVj
dCBTUUxFeGNlcHRpb25dICg1KQotU1FMSVRFX0RST1BfVEVNUF9WSUVXIG5vdCBhbGxvd2VkOiBb
b2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfRFJPUF9UUklHR0VSIG5vdCBhbGxvd2Vk
OiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfRFJPUF9WSUVXIG5vdCBhbGxvd2Vk
OiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCi1TUUxJVEVfRFJPUF9UQUJMRSBub3QgYWxsb3dl
ZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQotUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVk
LgotCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>