<?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>134156</bug_id>
          
          <creation_ts>2014-06-21 09:05:42 -0700</creation_ts>
          <short_desc>Transition layer offsets from LayoutPoint to LayoutSize.</short_desc>
          <delta_ts>2014-06-22 17:35:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          <blocked>134168</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1017290</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-06-21 09:05:42 -0700</bug_when>
    <thetext>Few RenderLayer functions use LayoutPoint to represent offset values. Use LayoutSize instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017291</commentid>
    <comment_count>1</comment_count>
      <attachid>233535</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-06-21 09:16:02 -0700</bug_when>
    <thetext>Created attachment 233535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017414</commentid>
    <comment_count>2</comment_count>
      <attachid>233535</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-06-22 11:14:18 -0700</bug_when>
    <thetext>Comment on attachment 233535
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=233535&amp;action=review

&gt; Source/WebCore/platform/graphics/LayoutSize.h:195
&gt; +inline FloatSize roundedForPainting(const LayoutSize&amp; size, float pixelSnappingFactor)

but...but...how can you snap a size without knowing the location?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017439</commentid>
    <comment_count>3</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-06-22 15:35:52 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 233535 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=233535&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/LayoutSize.h:195
&gt; &gt; +inline FloatSize roundedForPainting(const LayoutSize&amp; size, float pixelSnappingFactor)
&gt; 
&gt; but...but...how can you snap a size without knowing the location?
It&apos;s magic! but yea, I should undo this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017446</commentid>
    <comment_count>4</comment_count>
      <attachid>233579</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-06-22 16:38:49 -0700</bug_when>
    <thetext>Created attachment 233579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017454</commentid>
    <comment_count>5</comment_count>
      <attachid>233579</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-22 17:34:56 -0700</bug_when>
    <thetext>Comment on attachment 233579
Patch

Clearing flags on attachment: 233579

Committed r170273: &lt;http://trac.webkit.org/changeset/170273&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017455</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-22 17:35:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233535</attachid>
            <date>2014-06-21 09:16:02 -0700</date>
            <delta_ts>2014-06-22 16:38:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134156-20140621091540.patch</filename>
            <type>text/plain</type>
            <size>41005</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMjI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2JiNjBiOWM3MDJkMWZm
NzU3MDQ2OGI1MzNiNGFkYjIxNTAxZGMzZC4uY2QyZmY2YTA5ZTAyNTcxYzQ3ZTJlMWE5ZmViZTlk
YzdjZTM2ZDM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE0LTA2LTIxICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgVHJhbnNpdGlvbiBsYXllciBv
ZmZzZXRzIGZyb20gTGF5b3V0UG9pbnQgdG8gTGF5b3V0U2l6ZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDE1NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBiZXR0ZXIgcmVwcmVzZW50YXRpb24g
Zm9yIG9mZnNldCB2YWx1ZXMuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmg6CisgICAgICAgIChX
ZWJDb3JlOjpyb3VuZGVkRm9yUGFpbnRpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmZyYWdt
ZW50c0JvdW5kaW5nQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50c0FuZFJlZmxlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZWZlcmVuY2VCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWlu
dExheWVyQnlBcHBseWluZ1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6Y29sbGVjdEZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBk
YXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpwYWludFRyYW5zZm9ybWVkTGF5ZXJJbnRvRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXJCeUFwcGx5aW5nVHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVj
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
dWx0aUNvbHVtblNldDo6Y29sbGVjdExheWVyRnJhZ21lbnRzKToKKwogMjAxNC0wNi0yMCAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDExNwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTGF5b3V0U2l6ZS5oCmluZGV4IDA3MzNmYTJjZGRjOTZkYWZjNTAzNmM4ZTYwNDUz
OGI1NWFjOTYyZmMuLjFiYmE5M2ZjNzAyYTY3NTY5ZDNkN2NmZDJkMzcwYzhiNjY2ZmJiNjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFNpemUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRTaXplLmgKQEAgLTE5
Miw2ICsxOTIsMTYgQEAgaW5saW5lIExheW91dFNpemUgcm91bmRlZExheW91dFNpemUoY29uc3Qg
RmxvYXRTaXplJiBzKQogI2VuZGlmCiB9CiAKK2lubGluZSBGbG9hdFNpemUgcm91bmRlZEZvclBh
aW50aW5nKGNvbnN0IExheW91dFNpemUmIHNpemUsIGZsb2F0IHBpeGVsU25hcHBpbmdGYWN0b3Ip
Cit7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gRmxvYXRTaXplKHJv
dW5kVG9EZXZpY2VQaXhlbChzaXplLndpZHRoKCksIHBpeGVsU25hcHBpbmdGYWN0b3IpLCByb3Vu
ZFRvRGV2aWNlUGl4ZWwoc2l6ZS5oZWlnaHQoKSwgcGl4ZWxTbmFwcGluZ0ZhY3RvcikpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ocGl4ZWxTbmFwcGluZ0ZhY3Rvcik7CisgICAgcmV0dXJuIEZs
b2F0U2l6ZShzaXplKTsKKyNlbmRpZgorfQorCiBpbmxpbmUgRmxvYXRTaXplIGZsb29yZWRGb3JQ
YWludGluZyhjb25zdCBMYXlvdXRTaXplJiBzaXplLCBmbG9hdCBwaXhlbFNuYXBwaW5nRmFjdG9y
KQogewogI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggNGRiYmRjNWE3MzMwNWVmYzZmYjc3ZjEx
NDY2ZjA2Y2I0NTFiYzk0NS4uMGY0NWEyYmQ4OTBhNzE5YzFmNWVjOGQ5MWQ5YjE0OTZjYTVhNWNh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApA
QCAtMTE1OSw3ICsxMTU5LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJGbG93VGhyZWFkOjpmcmFnbWVu
dHNCb3VuZGluZ0JveChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kaW4KICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGZyYWdtZW50cykgewogICAgICAgICAgICAgTGF5b3V0
UmVjdCBmcmFnbWVudFJlY3QobGF5ZXJCb3VuZGluZ0JveCk7CiAgICAgICAgICAgICBmcmFnbWVu
dFJlY3QuaW50ZXJzZWN0KGZyYWdtZW50LnBhZ2luYXRpb25DbGlwKTsKLSAgICAgICAgICAgIGZy
YWdtZW50UmVjdC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCk7CisgICAgICAgICAg
ICBmcmFnbWVudFJlY3QubW92ZShmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0KTsKICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZShmcmFnbWVudFJlY3QpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMjMyNGEwMDI1NDFlM2Q0ODY5
NTM5OWVmNTJmNmJkNmEzNmM3MzdmNC4uYTFjZGYxNTg1MjZjOTUwNjgzNmQ4YjA3NDc5YTZmMjEw
OTliN2ZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0x
NTkwLDcgKzE1OTAsNyBAQCBzdGF0aWMgdm9pZCBleHBhbmRDbGlwUmVjdEZvckRlc2NlbmRhbnRz
QW5kUmVmbGVjdGlvbihMYXlvdXRSZWN0JiBjbGlwUmVjdCwgY29ucwogICAgIC8vIHNpemUgaW50
byB0aGUgcGFyZW50IGxheWVyLgogICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5oYXNSZWZsZWN0
aW9uKCkpIHsKICAgICAgICAgTGF5b3V0U2l6ZSBkZWx0YSA9IGxheWVyLT5vZmZzZXRGcm9tQW5j
ZXN0b3Iocm9vdExheWVyKTsKLSAgICAgICAgY2xpcFJlY3QubW92ZSgtZGVsdGEud2lkdGgoKSwg
LWRlbHRhLmhlaWdodCgpKTsKKyAgICAgICAgY2xpcFJlY3QubW92ZSgtZGVsdGEpOwogICAgICAg
ICBjbGlwUmVjdC51bml0ZShsYXllci0+cmVuZGVyQm94KCktPnJlZmxlY3RlZFJlY3QoY2xpcFJl
Y3QpKTsKICAgICAgICAgY2xpcFJlY3QubW92ZShkZWx0YSk7CiAgICAgfQpAQCAtMjAwMCw3ICsy
MDAwLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMoY29u
c3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGMKIHsKICAgICBMYXlvdXRQb2ludCBkZWx0
YSA9IGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIExheW91dFBvaW50KCksIGFk
anVzdEZvckNvbHVtbnMpOwogICAgIExheW91dFJlY3QgcmVjdEluTGF5ZXJDb29yZHMgPSByZWN0
OwotICAgIHJlY3RJbkxheWVyQ29vcmRzLm1vdmUoLWRlbHRhLngoKSwgLWRlbHRhLnkoKSk7Cisg
ICAgcmVjdEluTGF5ZXJDb29yZHMubW92ZUJ5KC1kZWx0YSk7CiAgICAgcmV0dXJuIHJlY3RJbkxh
eWVyQ29vcmRzOwogfQogCkBAIC0zNzU0LDcgKzM3NTQsNyBAQCBib29sIFJlbmRlckxheWVyOjpz
ZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGJv
b2wmCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBSZWZlcmVuY2VCb3hDbGlwUGF0aE9wZXJhdGlvbj4K
LXN0YXRpYyBpbmxpbmUgTGF5b3V0UmVjdCBjb21wdXRlUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlZmVyZW5jZUJveENsaXBQYXRoT3BlcmF0aW9uJiBj
bGlwcGluZ1BhdGgsIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgTGF5
b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzKQorc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGNv
bXB1dGVSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVm
ZXJlbmNlQm94Q2xpcFBhdGhPcGVyYXRpb24mIGNsaXBwaW5nUGF0aCwgY29uc3QgTGF5b3V0U2l6
ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykK
IHsKICAgICAvLyBGSVhNRTogU3VwcG9ydCBkaWZmZXJlbnQgcmVmZXJlbmNlIGJveGVzIGZvciBp
bmxpbmUgY29udGVudC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI5MDQ3CkBAIC0zNzY2LDExICszNzY2LDExIEBAIHN0YXRpYyBpbmxpbmUgTGF5b3V0
UmVjdCBjb21wdXRlUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNv
bnN0CiAgICAgc3dpdGNoIChjbGlwcGluZ1BhdGgucmVmZXJlbmNlQm94KCkpIHsKICAgICBjYXNl
IENvbnRlbnRCb3g6CiAgICAgICAgIHJlZmVyZW5jZUJveCA9IGJveC5jb250ZW50Qm94UmVjdCgp
OwotICAgICAgICByZWZlcmVuY2VCb3gubW92ZUJ5KG9mZnNldEZyb21Sb290KTsKKyAgICAgICAg
cmVmZXJlbmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFBhZGRpbmdCb3g6CiAgICAgICAgIHJlZmVyZW5jZUJveCA9IGJveC5wYWRkaW5nQm94UmVj
dCgpOwotICAgICAgICByZWZlcmVuY2VCb3gubW92ZUJ5KG9mZnNldEZyb21Sb290KTsKKyAgICAg
ICAgcmVmZXJlbmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOwogICAgICAgICBicmVhazsKICAg
ICAvLyBGSVhNRTogU3VwcG9ydCBtYXJnaW4tYm94LiBVc2UgYm91bmRpbmcgY2xpZW50IHJlY3Qg
Zm9yIG5vdy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI3OTg0CkBAIC0zNzgyLDE0ICszNzgyLDE0IEBAIHN0YXRpYyBpbmxpbmUgTGF5b3V0UmVjdCBj
b21wdXRlUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0CiAg
ICAgY2FzZSBCb3JkZXJCb3g6CiAgICAgY2FzZSBCb3hNaXNzaW5nOgogICAgICAgICByZWZlcmVu
Y2VCb3ggPSBib3guYm9yZGVyQm94UmVjdCgpOwotICAgICAgICByZWZlcmVuY2VCb3gubW92ZUJ5
KG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgcmVmZXJlbmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJv
b3QpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gcmVmZXJlbmNlQm94Owog
fQogCi1ib29sIFJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIG9mZnNldEZyb21Sb290LCBMYXlvdXRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJv
b2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKQorYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBD
bGlwUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiBwYWludGluZ0luZm8sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBMYXlvdXRS
ZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVk
KQogewogICAgIGlmICghcmVuZGVyZXIoKS5oYXNDbGlwUGF0aCgpIHx8IGNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzgxNCw3ICszODE0LDcg
QEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmYKICAgICAgICAgQm94Q2xpcFBhdGhPcGVyYXRpb24m
IGNsaXBwaW5nUGF0aCA9IHRvQm94Q2xpcFBhdGhPcGVyYXRpb24oKihzdHlsZS5jbGlwUGF0aCgp
KSk7CiAKICAgICAgICAgUm91bmRlZFJlY3Qgc2hhcGVSZWN0ID0gY29tcHV0ZVJvdW5kZWRSZWN0
Rm9yQm94U2hhcGUoY2xpcHBpbmdQYXRoLnJlZmVyZW5jZUJveCgpLCB0b1JlbmRlckJveChyZW5k
ZXJlcigpKSk7Ci0gICAgICAgIHNoYXBlUmVjdC5tb3ZlQnkob2Zmc2V0RnJvbVJvb3QpOworICAg
ICAgICBzaGFwZVJlY3QubW92ZShvZmZzZXRGcm9tUm9vdCk7CiAKICAgICAgICAgY29udGV4dC0+
c2F2ZSgpOwogICAgICAgICBjb250ZXh0LT5jbGlwUGF0aChjbGlwcGluZ1BhdGgucGF0aEZvclJl
ZmVyZW5jZVJlY3Qoc2hhcGVSZWN0KSwgUlVMRV9OT05aRVJPKTsKQEAgLTM4MzYsNyArMzgzNiw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mCiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAK
LXN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlcj4gUmVuZGVyTGF5ZXI6
OnNldHVwRmlsdGVycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIExheWVyUGFpbnRpbmdJbmZv
JiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzLCBjb25zdCBMYXlvdXRQ
b2ludCYgb2Zmc2V0RnJvbVJvb3QsIExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcywgYm9v
bCYgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpCitzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZm
ZWN0UmVuZGVyZXJIZWxwZXI+IFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBQYWludExheWVy
RmxhZ3MgcGFpbnRGbGFncywgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIExheW91
dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcywgYm9vbCYgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0
ZWQpCiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0zODU0LDcgKzM4NTQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVy
RWZmZWN0UmVuZGVyZXJIZWxwZXI+IFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMoR3JhcGhpY3ND
bwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBMYXlvdXRSZWN0IGZpbHRlclJl
cGFpbnRSZWN0ID0gZmlsdGVySW5mby0+ZGlydHlTb3VyY2VSZWN0KCk7Ci0gICAgZmlsdGVyUmVw
YWludFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdC54KCksIG9mZnNldEZyb21Sb290LnkoKSk7Cisg
ICAgZmlsdGVyUmVwYWludFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdCk7CiAKICAgICBpZiAoIXJv
b3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKSB7CiAgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kcyA9
IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9t
Um9vdCwgMCk7CkBAIC0zOTYzLDcgKzM5NjMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExh
eWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQog
ICAgICAgICAmJiByZW5kZXJlcigpLmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWlu
aW5nQmxvY2soKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5b3V0UG9pbnQgb2Zmc2V0RnJv
bVJvb3QgPSB0b0xheW91dFBvaW50KG9mZnNldEZyb21BbmNlc3RvcihwYWludGluZ0luZm8ucm9v
dExheWVyKSk7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNl
c3RvcihwYWludGluZ0luZm8ucm9vdExheWVyKTsKICAgICBMYXlvdXRSZWN0IHJvb3RSZWxhdGl2
ZUJvdW5kczsKICAgICBib29sIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gZmFsc2U7CiAK
QEAgLTQwOTQsMTcgKzQwOTQsMTcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQnlB
cHBseWluZ1RyYW5zZm9ybShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzLCBjb25z
dCBMYXlvdXRQb2ludCYgdHJhbnNsYXRpb25PZmZzZXQpCit2b2lkIFJlbmRlckxheWVyOjpwYWlu
dExheWVyQnlBcHBseWluZ1RyYW5zZm9ybShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZs
YWdzLCBjb25zdCBMYXlvdXRTaXplJiB0cmFuc2xhdGlvbk9mZnNldCkKIHsKICAgICAvLyBUaGlz
IGludm9sdmVzIHN1YnRyYWN0aW5nIG91dCB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyIGluIG91
ciBjdXJyZW50IGNvb3JkaW5hdGUgc3BhY2UsIGJ1dCBwcmVzZXJ2aW5nCiAgICAgLy8gdGhlIGFj
Y3VtdWxhdGVkIGVycm9yIGZvciBzdWItcGl4ZWwgbGF5b3V0LgogICAgIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0g
ICAgTGF5b3V0UG9pbnQgb2Zmc2V0RnJvbVBhcmVudCA9IHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJv
bUFuY2VzdG9yKHBhaW50aW5nSW5mby5yb290TGF5ZXIpKTsKLSAgICBvZmZzZXRGcm9tUGFyZW50
Lm1vdmVCeSh0cmFuc2xhdGlvbk9mZnNldCk7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUGFy
ZW50ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHBhaW50aW5nSW5mby5yb290TGF5ZXIpOworICAgIG9m
ZnNldEZyb21QYXJlbnQgKz0gdHJhbnNsYXRpb25PZmZzZXQ7CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdHJhbnNmb3JtKHJlbmRlcmFibGVUcmFuc2Zvcm0ocGFpbnRpbmdJbmZvLnBhaW50QmVo
YXZpb3IpKTsKLSAgICBGbG9hdFBvaW50IGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZyb21QYXJl
bnQgPSByb3VuZGVkRm9yUGFpbnRpbmcob2Zmc2V0RnJvbVBhcmVudCwgZGV2aWNlU2NhbGVGYWN0
b3IpOworICAgIEZsb2F0U2l6ZSBkZXZpY2VQaXhlbFNuYXBwZWRPZmZzZXRGcm9tUGFyZW50ID0g
cm91bmRlZEZvclBhaW50aW5nKG9mZnNldEZyb21QYXJlbnQsIGRldmljZVNjYWxlRmFjdG9yKTsK
ICAgICAvLyBUcmFuc2xhdGUgdGhlIGdyYXBoaWNzIGNvbnRleHQgdG8gdGhlIHNuYXBwaW5nIHBv
c2l0aW9uIHRvIGF2b2lkIG9mZi1kZXZpY2UtcGl4ZWwgcG9zaXRpbmcuCi0gICAgdHJhbnNmb3Jt
LnRyYW5zbGF0ZVJpZ2h0KGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZyb21QYXJlbnQueCgpLCBk
ZXZpY2VQaXhlbFNuYXBwZWRPZmZzZXRGcm9tUGFyZW50LnkoKSk7CisgICAgdHJhbnNmb3JtLnRy
YW5zbGF0ZVJpZ2h0KGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZyb21QYXJlbnQud2lkdGgoKSwg
ZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0RnJvbVBhcmVudC5oZWlnaHQoKSk7CiAgICAgLy8gV2Ug
aGFuZGxlIGFjY3VtdWxhdGVkIHN1YnBpeGVscyB0aHJvdWdoIG5lc3RlZCBsYXllcnMgaGVyZS4g
U2luY2UgdGhlIGNvbnRleHQgZ2V0cyB0cmFuc2xhdGVkIHRvIGRldmljZSBwaXhlbHMsCiAgICAg
Ly8gYWxsIHdlIG5lZWQgdG8gZG8gaXMgYWRkIHRoZSBkZWx0YSB0byB0aGUgYWNjdW11bGF0ZWQg
cGl4ZWxzIGNvbWluZyBmcm9tIGFuY2VzdG9yIGxheWVycy4gV2l0aCBkZWVwIG5lc3Rpbmcgb2Yg
c3VicGl4ZWwgcG9zaXRpb25lZAogICAgIC8vIGJveGVzLCB0aGlzIGNvdWxkIGdyb3cgdG8gYSBy
ZWxhdGl2ZWx5IGxhcmdlIG51bWJlciwgYnV0IHRoZSB0cmFuc2xhdGVSaWdodCgpIGJhbGFuY2Vz
IGl0LgpAQCAtNDE2NSw3ICs0MTY1LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNs
b3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHIKIH0KIAog
dm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21l
bnRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0
eVJlY3QsIFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIGluY2x1c2lvbk1vZGUsCi0gICAgQ2xpcFJl
Y3RzVHlwZSBjbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIHJl
c3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCwKKyAg
ICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIFNob3VsZFJlc3BlY3RPdmVyZmxv
d0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJv
b3QsCiAgICAgY29uc3QgTGF5b3V0UmVjdCogbGF5ZXJCb3VuZGluZ0JveCwgU2hvdWxkQXBwbHlS
b290T2Zmc2V0VG9GcmFnbWVudHMgYXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMpCiB7CiAgICAg
UmVuZGVyTGF5ZXIqIHBhZ2luYXRpb25MYXllciA9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcklu
U3VidHJlZShyb290TGF5ZXIsIGluY2x1c2lvbk1vZGUpOwpAQCAtNDE3OSw3ICs0MTc5LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21l
bnRzLCBjb25zdCBSZW5kZXJMYXllcioKICAgICB9CiAgICAgCiAgICAgLy8gQ29tcHV0ZSBvdXIg
b2Zmc2V0IHdpdGhpbiB0aGUgZW5jbG9zaW5nIHBhZ2luYXRpb24gbGF5ZXIuCi0gICAgTGF5b3V0
UG9pbnQgb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXIgPSB0b0xheW91dFBvaW50KG9mZnNldEZy
b21BbmNlc3RvcihwYWdpbmF0aW9uTGF5ZXIpKTsKKyAgICBMYXlvdXRTaXplIG9mZnNldFdpdGhp
blBhZ2luYXRlZExheWVyID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHBhZ2luYXRpb25MYXllcik7CiAg
ICAgCiAgICAgLy8gQ2FsY3VsYXRlIGNsaXAgcmVjdHMgcmVsYXRpdmUgdG8gdGhlIGVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllci4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjYWxsIGlzIHRvIGRldGVybWlu
ZSBvdXIgYm91bmRzIGNsaXBwZWQgdG8gaW50ZXJtZWRpYXRlCiAgICAgLy8gbGF5ZXJzIGJldHdl
ZW4gdXMgYW5kIHRoZSBwYWdpbmF0aW9uIGNvbnRleHQuIEl0J3MgaW1wb3J0YW50IHRvIG1pbmlt
aXplIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIHdlIG5lZWQgdG8gY3JlYXRlIGFuZCB0aGlzIGhl
bHBzIHdpdGggdGhhdC4KQEAgLTQyMTUsNyArNDIxNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNv
bGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5
ZXIqCiAgICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3JGcmFnbWVudCA6IGFuY2VzdG9yRnJhZ21l
bnRzKSB7CiAgICAgICAgICAgICAvLyBTaGlmdCB0aGUgZGlydHkgcmVjdCBpbnRvIGZsb3cgdGhy
ZWFkIGNvb3JkaW5hdGVzLgogICAgICAgICAgICAgTGF5b3V0UmVjdCBkaXJ0eVJlY3RJbkZsb3dU
aHJlYWQoZGlydHlSZWN0KTsKLSAgICAgICAgICAgIGRpcnR5UmVjdEluRmxvd1RocmVhZC5tb3Zl
KHRvTGF5b3V0UG9pbnQoLW9mZnNldFdpdGhpblBhcmVudFBhZ2luYXRlZExheWVyKSAtIGFuY2Vz
dG9yRnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCk7CisgICAgICAgICAgICBkaXJ0eVJlY3RJbkZs
b3dUaHJlYWQubW92ZSgtb2Zmc2V0V2l0aGluUGFyZW50UGFnaW5hdGVkTGF5ZXIgLSBhbmNlc3Rv
ckZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
aXplX3Qgb2xkU2l6ZSA9IGZyYWdtZW50cy5zaXplKCk7CiAgICAgICAgICAgICAKQEAgLTQyMzUs
NyArNDIzNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFn
bWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgICAgICAgICAgICAgZnJh
Z21lbnQuc2V0UmVjdHMobGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJhY2tncm91bmRSZWN0SW5G
bG93VGhyZWFkLCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZCwgb3V0bGluZVJlY3RJbkZsb3dU
aHJlYWQsICZsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFkKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgcm9vdC1yZWxhdGl2ZSBwaHlzaWNhbCBw
b3NpdGlvbiB1c2VkIHdoZW4gcGFpbnRpbmcgdGhlIGZsb3cgdGhyZWFkIGluIHRoaXMgZnJhZ21l
bnQuCi0gICAgICAgICAgICAgICAgZnJhZ21lbnQubW92ZUJ5KGFuY2VzdG9yRnJhZ21lbnQucGFn
aW5hdGlvbk9mZnNldCArIGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRXaXRoaW5Q
YXJlbnRQYWdpbmF0ZWRMYXllcik7CisgICAgICAgICAgICAgICAgZnJhZ21lbnQubW92ZUJ5KHRv
TGF5b3V0UG9pbnQoYW5jZXN0b3JGcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0ICsgZnJhZ21lbnQu
cGFnaW5hdGlvbk9mZnNldCArIG9mZnNldFdpdGhpblBhcmVudFBhZ2luYXRlZExheWVyKSk7CiAK
ICAgICAgICAgICAgICAgICAvLyBJbnRlcnNlY3QgdGhlIGZyYWdtZW50IHdpdGggb3VyIGFuY2Vz
dG9yJ3MgYmFja2dyb3VuZCBjbGlwIHNvIHRoYXQgZS5nLiwgY29sdW1ucyBpbiBhbiBvdmVyZmxv
dzpoaWRkZW4gYmxvY2sgYXJlCiAgICAgICAgICAgICAgICAgLy8gcHJvcGVybHkgY2xpcHBlZCBi
eSB0aGUgb3ZlcmZsb3cuCkBAIC00MjgwLDcgKzQyODAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpj
b2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxh
eWVyKgogICAgICAgICBmcmFnbWVudC5zZXRSZWN0cyhsYXllckJvdW5kc0luRmxvd1RocmVhZCwg
YmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQsIGZvcmVncm91bmRSZWN0SW5GbG93VGhyZWFkLCBv
dXRsaW5lUmVjdEluRmxvd1RocmVhZCwgJmxheWVyQm91bmRpbmdCb3hJbkZsb3dUaHJlYWQpOwog
ICAgICAgICAKICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIHJvb3QtcmVsYXRpdmUgcGh5c2ljYWwg
cG9zaXRpb24gdXNlZCB3aGVuIHBhaW50aW5nIHRoZSBmbG93IHRocmVhZCBpbiB0aGlzIGZyYWdt
ZW50LgotICAgICAgICBmcmFnbWVudC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCAr
IG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOworICAgICAgICBmcmFnbWVudC5tb3Zl
QnkodG9MYXlvdXRQb2ludChmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0ICsgb2Zmc2V0T2ZQYWdp
bmF0aW9uTGF5ZXJGcm9tUm9vdCkpOwogCiAgICAgICAgIC8vIEludGVyc2VjdCB0aGUgZnJhZ21l
bnQgd2l0aCBvdXIgYW5jZXN0b3IncyBiYWNrZ3JvdW5kIGNsaXAgc28gdGhhdCBlLmcuLCBjb2x1
bW5zIGluIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayBhcmUKICAgICAgICAgLy8gcHJvcGVybHkg
Y2xpcHBlZCBieSB0aGUgb3ZlcmZsb3cuCkBAIC00Mjk2LDE0ICs0Mjk2LDE0IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29u
c3QgUmVuZGVyTGF5ZXIqCiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5m
b0ZvckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBsb2NhbFBhaW50Rmxh
Z3MsCi0gICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFBvaW50KiBvZmZz
ZXRGcm9tUm9vdCkKKyAgICBib29sIHNob3VsZFBhaW50Q29udGVudCwgY29uc3QgTGF5b3V0U2l6
ZSogb2Zmc2V0RnJvbVJvb3QpCiB7CiAgICAgQVNTRVJUKG9mZnNldEZyb21Sb290KTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBM
YXllckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKICAgICAgICAgZnJhZ21l
bnQuc2hvdWxkUGFpbnRDb250ZW50ID0gc2hvdWxkUGFpbnRDb250ZW50OwogICAgICAgICBpZiAo
dGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50RmxhZ3Mg
JiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkgewotICAgICAgICAgICAgTGF5
b3V0UG9pbnQgbmV3T2Zmc2V0RnJvbVJvb3QgPSAqb2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5w
YWdpbmF0aW9uT2Zmc2V0OworICAgICAgICAgICAgTGF5b3V0U2l6ZSBuZXdPZmZzZXRGcm9tUm9v
dCA9ICpvZmZzZXRGcm9tUm9vdCArIGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQ7CiAgICAgICAg
ICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3Qo
ZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgbG9j
YWxQYWludGluZ0luZm8ucm9vdExheWVyLCAmbmV3T2Zmc2V0RnJvbVJvb3QsIGZyYWdtZW50Lmhh
c0JvdW5kaW5nQm94ID8gJmZyYWdtZW50LmJvdW5kaW5nQm94IDogMCk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC00MzEyLDcgKzQzMTIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWludGlu
Z0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29ucwogdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBh
aW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQogewogICAgIExheWVyRnJhZ21lbnRzIGVuY2xvc2lu
Z1BhZ2luYXRpb25GcmFnbWVudHM7Ci0gICAgTGF5b3V0UG9pbnQgb2Zmc2V0T2ZQYWdpbmF0aW9u
TGF5ZXJGcm9tUm9vdDsKKyAgICBMYXlvdXRTaXplIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJv
bVJvb3Q7CiAgICAgUmVuZGVyTGF5ZXIqIHBhZ2luYXRlZExheWVyID0gZW5jbG9zaW5nUGFnaW5h
dGlvbkxheWVyKEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzKTsKICAgICBMYXlvdXRS
ZWN0IHRyYW5zZm9ybWVkRXh0ZW50ID0gdHJhbnNwYXJlbmN5Q2xpcEJveCh0aGlzLCBwYWdpbmF0
ZWRMYXllciwgUGFpbnRpbmdUcmFuc3BhcmVuY3lDbGlwQm94LCBSb290T2ZUcmFuc3BhcmVuY3lD
bGlwQm94LCBwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7CiAgICAgcGFnaW5hdGVkTGF5ZXIt
PmNvbGxlY3RGcmFnbWVudHMoZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cywgcGFpbnRpbmdJ
bmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBFeGNsdWRlQ29tcG9z
aXRlZFBhZ2luYXRlZExheWVycywKQEAgLTQzMjgsMTIgKzQzMjgsMTIgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGMKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBjb21wdXRlIHRoZSBjbGlwcyB3
aXRoaW4gYSBnaXZlbiBmcmFnbWVudAogICAgICAgICBpZiAocGFyZW50KCkgIT0gcGFnaW5hdGVk
TGF5ZXIpIHsKLSAgICAgICAgICAgIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QgPSBw
YWdpbmF0ZWRMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMocGFpbnRpbmdJbmZvLnJvb3RMYXll
ciwgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisgICAgICAgICAgICBvZmZzZXRP
ZlBhZ2luYXRpb25MYXllckZyb21Sb290ID0gdG9MYXlvdXRTaXplKHBhZ2luYXRlZExheWVyLT5j
b252ZXJ0VG9MYXllckNvb3JkcyhwYWludGluZ0luZm8ucm9vdExheWVyLCB0b0xheW91dFBvaW50
KG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpKSk7CiAgICAgCiAgICAgICAgICAgICBD
bGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocGFnaW5hdGVkTGF5ZXIsIChwYWludEZs
YWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykgPyBUZW1wb3JhcnlDbGlwUmVjdHMg
OiBQYWludGluZ0NsaXBSZWN0cywKICAgICAgICAgICAgICAgICBJZ25vcmVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSwgKHBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRz
KSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXApOwogICAgICAgICAg
ICAgTGF5b3V0UmVjdCBwYXJlbnRDbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChjbGlwUmVj
dHNDb250ZXh0KS5yZWN0KCk7Ci0gICAgICAgICAgICBwYXJlbnRDbGlwUmVjdC5tb3ZlQnkoZnJh
Z21lbnQucGFnaW5hdGlvbk9mZnNldCArIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3Qp
OworICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3QubW92ZShmcmFnbWVudC5wYWdpbmF0aW9uT2Zm
c2V0ICsgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CiAgICAgICAgICAgICBjbGlw
UmVjdC5pbnRlcnNlY3QocGFyZW50Q2xpcFJlY3QpOwogICAgICAgICB9CiAKQEAgLTQ1NzcsNyAr
NDU3Nyw3IEBAIHN0YXRpYyBkb3VibGUgY29tcHV0ZVpPZmZzZXQoY29uc3QgSGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkKIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlPiBSZW5kZXJMYXllcjo6Y3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZShSZW5kZXJM
YXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJl
Y3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTGF5b3V0UG9pbnQmIHRyYW5zbGF0aW9uT2Zmc2V0KSBjb25zdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFNpemUm
IHRyYW5zbGF0aW9uT2Zmc2V0KSBjb25zdAogewogICAgIFJlZlB0cjxIaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGU+IHRyYW5zZm9ybVN0YXRlOwogICAgIExheW91dFNpemUgb2Zmc2V0OwpAQCAtNDU5
MSw3ICs0NTkxLDcgQEAgUGFzc1JlZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IFJlbmRl
ckxheWVyOjpjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKFJlbmQKICAgICAgICAgdHJhbnNmb3Jt
U3RhdGUgPSBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmNyZWF0ZShoaXRUZXN0TG9jYXRpb24u
dHJhbnNmb3JtZWRQb2ludCgpLCBoaXRUZXN0TG9jYXRpb24udHJhbnNmb3JtZWRSZWN0KCksIEZs
b2F0UXVhZChoaXRUZXN0UmVjdCkpOwogICAgICAgICBvZmZzZXQgPSBvZmZzZXRGcm9tQW5jZXN0
b3Iocm9vdExheWVyKTsKICAgICB9Ci0gICAgb2Zmc2V0ICs9IHRvTGF5b3V0U2l6ZSh0cmFuc2xh
dGlvbk9mZnNldCk7CisgICAgb2Zmc2V0ICs9IHRyYW5zbGF0aW9uT2Zmc2V0OwogCiAgICAgUmVu
ZGVyT2JqZWN0KiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5lckxheWVyID8gJmNvbnRhaW5l
ckxheWVyLT5yZW5kZXJlcigpIDogMDsKICAgICBpZiAocmVuZGVyZXIoKS5zaG91bGRVc2VUcmFu
c2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lclJlbmRlcmVyKSkgewpAQCAtNDkxMiw3ICs0OTEy
LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllcklu
RnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGEKICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRU
ZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkK
IHsKICAgICBMYXllckZyYWdtZW50cyBlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzOwotICAg
IExheW91dFBvaW50IG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3Q7CisgICAgTGF5b3V0
U2l6ZSBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290OwogICAgIFJlbmRlckxheWVyKiBw
YWdpbmF0ZWRMYXllciA9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcihJbmNsdWRlQ29tcG9zaXRl
ZFBhZ2luYXRlZExheWVycyk7CiAgICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1lZEV4dGVudCA9IHRy
YW5zcGFyZW5jeUNsaXBCb3godGhpcywgcGFnaW5hdGVkTGF5ZXIsIEhpdFRlc3RpbmdUcmFuc3Bh
cmVuY3lDbGlwQm94LCBSb290T2ZUcmFuc3BhcmVuY3lDbGlwQm94KTsKICAgICBwYWdpbmF0ZWRM
YXllci0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCByb290
TGF5ZXIsIGhpdFRlc3RSZWN0LCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywKQEAg
LTQ5MjcsMTEgKzQ5MjcsMTEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJh
bnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGEKICAgICAgICAgCiAg
ICAgICAgIC8vIE5vdyBjb21wdXRlIHRoZSBjbGlwcyB3aXRoaW4gYSBnaXZlbiBmcmFnbWVudAog
ICAgICAgICBpZiAocGFyZW50KCkgIT0gcGFnaW5hdGVkTGF5ZXIpIHsKLSAgICAgICAgICAgIG9m
ZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QgPSBwYWdpbmF0ZWRMYXllci0+Y29udmVydFRv
TGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsK
KyAgICAgICAgICAgIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QgPSB0b0xheW91dFNp
emUocGFnaW5hdGVkTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgdG9MYXlv
dXRQb2ludChvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KSkpOwogICAgIAogICAgICAg
ICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KHBhZ2luYXRlZExheWVyLCBS
b290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAgICAg
ICAgICAgICBMYXlvdXRSZWN0IHBhcmVudENsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KGNs
aXBSZWN0c0NvbnRleHQpLnJlY3QoKTsKLSAgICAgICAgICAgIHBhcmVudENsaXBSZWN0Lm1vdmVC
eShmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0ICsgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9t
Um9vdCk7CisgICAgICAgICAgICBwYXJlbnRDbGlwUmVjdC5tb3ZlKGZyYWdtZW50LnBhZ2luYXRp
b25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290KTsKICAgICAgICAgICAg
IGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRDbGlwUmVjdCk7CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC00OTQ5LDcgKzQ5NDksNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RU
cmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYQogCiBSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExh
eW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2Nh
dGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91
YmxlKiB6T2Zmc2V0LAotICAgIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCkK
KyAgICBjb25zdCBMYXlvdXRTaXplJiB0cmFuc2xhdGlvbk9mZnNldCkKIHsKICAgICAvLyBDcmVh
dGUgYSB0cmFuc2Zvcm0gc3RhdGUgdG8gYWNjdW11bGF0ZSB0aGlzIHRyYW5zZm9ybS4KICAgICBS
ZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBuZXdUcmFuc2Zvcm1TdGF0ZSA9IGNyZWF0
ZUxvY2FsVHJhbnNmb3JtU3RhdGUocm9vdExheWVyLCBjb250YWluZXJMYXllciwgaGl0VGVzdFJl
Y3QsIGhpdFRlc3RMb2NhdGlvbiwgdHJhbnNmb3JtU3RhdGUsIHRyYW5zbGF0aW9uT2Zmc2V0KTsK
QEAgLTUyNTEsNyArNTI1MSw3IEBAIENsaXBSZWN0IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kQ2xp
cFJlY3QoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4CiB9CiAKIHZvaWQg
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBS
ZWN0c0NvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHBhaW50RGlydHlSZWN0LCBMYXlvdXRSZWN0
JiBsYXllckJvdW5kcywKLSAgICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBm
b3JlZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRQb2ludCog
b2Zmc2V0RnJvbVJvb3QpIGNvbnN0CisgICAgQ2xpcFJlY3QmIGJhY2tncm91bmRSZWN0LCBDbGlw
UmVjdCYgZm9yZWdyb3VuZFJlY3QsIENsaXBSZWN0JiBvdXRsaW5lUmVjdCwgY29uc3QgTGF5b3V0
U2l6ZSogb2Zmc2V0RnJvbVJvb3QpIGNvbnN0CiB7CiAgICAgaWYgKGNsaXBSZWN0c0NvbnRleHQu
cm9vdExheWVyICE9IHRoaXMgJiYgcGFyZW50KCkpIHsKICAgICAgICAgYmFja2dyb3VuZFJlY3Qg
PSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4dCk7CkBAIC01MjU5LDIxICs1MjU5
LDIxIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0Nv
bnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0CiAgICAgfSBlbHNlCiAgICAgICAgIGJhY2tn
cm91bmRSZWN0ID0gcGFpbnREaXJ0eVJlY3Q7CiAKLSAgICBMYXlvdXRQb2ludCBvZmZzZXQ7Cisg
ICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQWNlc3RvcjsKICAgICBpZiAob2Zmc2V0RnJvbVJvb3Qp
Ci0gICAgICAgIG9mZnNldCA9ICpvZmZzZXRGcm9tUm9vdDsKKyAgICAgICAgb2Zmc2V0RnJvbUFj
ZXN0b3IgPSAqb2Zmc2V0RnJvbVJvb3Q7CiAgICAgZWxzZQotICAgICAgICBvZmZzZXQgPSB0b0xh
eW91dFBvaW50KG9mZnNldEZyb21BbmNlc3RvcihjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllcikp
OworICAgICAgICBvZmZzZXRGcm9tQWNlc3RvciA9IG9mZnNldEZyb21BbmNlc3RvcihjbGlwUmVj
dHNDb250ZXh0LnJvb3RMYXllcik7CiAKICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFt
ZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKICAgICAv
LyBJZiB0aGUgdmlldyBpcyBzY3JvbGxlZCwgdGhlIGZsb3cgdGhyZWFkIGlzIG5vdCBzY3JvbGxl
ZCB3aXRoIGl0IGFuZCB3ZSBzaG91bGQKICAgICAvLyB0YWtlIHRoZSBzY3JvbGwgb2Zmc2V0IGlu
dG8gYWNjb3VudC4KICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXItPmlzT3V0T2ZG
bG93UmVuZGVyRmxvd1RocmVhZCgpICYmICFuYW1lZEZsb3dGcmFnbWVudCkgewotICAgICAgICBG
bG9hdFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCkudmlldygpLmxvY2FsVG9BYnNvbHV0ZShGbG9h
dFBvaW50KCksIElzRml4ZWQpOwotICAgICAgICBvZmZzZXQgKz0gTGF5b3V0U2l6ZShhYnNQb3Mu
eCgpLCBhYnNQb3MueSgpKTsKKyAgICAgICAgTGF5b3V0UG9pbnQgYWJzUG9zID0gTGF5b3V0UG9p
bnQocmVuZGVyZXIoKS52aWV3KCkubG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgSXNGaXhl
ZCkpOworICAgICAgICBvZmZzZXRGcm9tQWNlc3RvciArPSB0b0xheW91dFNpemUoYWJzUG9zKTsK
ICAgICB9CiAKLSAgICBsYXllckJvdW5kcyA9IExheW91dFJlY3Qob2Zmc2V0LCBzaXplKCkpOwor
ICAgIGxheWVyQm91bmRzID0gTGF5b3V0UmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZyb21BY2Vz
dG9yKSwgc2l6ZSgpKTsKIAogICAgIGZvcmVncm91bmRSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAg
ICAgb3V0bGluZVJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKQEAgLTUyOTYsNyArNTI5Niw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNs
aXBSZWN0c0NvbnRleHQsIGNvbnN0CiAgICAgICAgICAgICAgICAgcmVuZGVyZXJDb250YWluaW5n
QmxvY2stPmZsaXBGb3JXcml0aW5nTW9kZShsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7
CiAgICAgICAgIH0KIAotICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3Zl
Qnkob2Zmc2V0KTsKKyAgICAgICAgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZShv
ZmZzZXRGcm9tQWNlc3Rvcik7CiAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChsYXll
ckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7CiAKICAgICAgICAgZm9yZWdyb3VuZFJlY3QgPSBi
YWNrZ3JvdW5kUmVjdDsKQEAgLTUzMTMsMTQgKzUzMTMsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwg
Y29uc3QKICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwT3JPdmVyZmxvd0NsaXAoKSkgewogICAg
ICAgICAvLyBUaGlzIGxheWVyIGVzdGFibGlzaGVzIGEgY2xpcCBvZiBzb21lIGtpbmQuCiAgICAg
ICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICh0aGlzICE9IGNsaXBSZWN0
c0NvbnRleHQucm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xp
cCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKSkgewotICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3Qu
aW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3Qob2Zmc2V0
LCBuYW1lZEZsb3dGcmFnbWVudCwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSkpOworICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVu
ZGVyQm94KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRG
cm9tQWNlc3RvciksIG5hbWVkRmxvd0ZyYWdtZW50LCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5KSk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHls
ZSgpLmhhc0JvcmRlclJhZGl1cygpKQogICAgICAgICAgICAgICAgIGZvcmVncm91bmRSZWN0LnNl
dEhhc1JhZGl1cyh0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhh
c0NsaXAoKSkgewogICAgICAgICAgICAgLy8gQ2xpcCBhcHBsaWVzIHRvICp1cyogYXMgd2VsbCwg
c28gZ28gYWhlYWQgYW5kIHVwZGF0ZSB0aGUgZGFtYWdlUmVjdC4KLSAgICAgICAgICAgIExheW91
dFJlY3QgbmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KG9mZnNl
dCwgbmFtZWRGbG93RnJhZ21lbnQpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlw
ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRG
cm9tQWNlc3RvciksIG5hbWVkRmxvd0ZyYWdtZW50KTsKICAgICAgICAgICAgIGJhY2tncm91bmRS
ZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIGZvcmVncm91bmRSZWN0Lmlu
dGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIG91dGxpbmVSZWN0LmludGVyc2VjdChu
ZXdQb3NDbGlwKTsKQEAgLTUzMzQsNyArNTMzNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1
bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0
CiAgICAgICAgICAgICAvLyBpbmRpdmlkdWFsIHJlZ2lvbiBib3hlcyBhcyBvdmVyZmxvdy4KICAg
ICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cgPSBuYW1l
ZEZsb3dGcmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT52aXN1YWxPdmVyZmxvd1JlY3RGb3JC
b3gocmVuZGVyQm94KCkpIDogcmVuZGVyQm94KCktPnZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAg
ICAgICAgICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9kZShsYXllckJvdW5kc1dpdGhW
aXN1YWxPdmVyZmxvdyk7IC8vIExheWVycyBhcmUgaW4gcGh5c2ljYWwgY29vcmRpbmF0ZXMsIHNv
IHRoZSBvdmVyZmxvdyBoYXMgdG8gYmUgZmxpcHBlZC4KLSAgICAgICAgICAgIGxheWVyQm91bmRz
V2l0aFZpc3VhbE92ZXJmbG93Lm1vdmVCeShvZmZzZXQpOworICAgICAgICAgICAgbGF5ZXJCb3Vu
ZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZShvZmZzZXRGcm9tQWNlc3Rvcik7CiAgICAgICAgICAg
ICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250
ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKICAgICAgICAg
ICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3Zl
cmZsb3cpOwogICAgICAgICB9IGVsc2UgewpAQCAtNTM0Myw3ICs1MzQzLDcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3Rz
Q29udGV4dCwgY29uc3QKICAgICAgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCkKICAgICAg
ICAgICAgICAgICBib3VuZHMgPSBuYW1lZEZsb3dGcmFnbWVudC0+cmVjdEZsb3dQb3J0aW9uRm9y
Qm94KHJlbmRlckJveCgpLCBib3VuZHMpOwogCi0gICAgICAgICAgICBib3VuZHMubW92ZUJ5KG9m
ZnNldCk7CisgICAgICAgICAgICBib3VuZHMubW92ZShvZmZzZXRGcm9tQWNlc3Rvcik7CiAgICAg
ICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVj
dHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKICAg
ICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QoYm91bmRzKTsKICAgICAgICAg
ICAgIApAQCAtNTM5NCw3ICs1Mzk0LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxD
bGlwUmVjdChib29sJiBjbGlwRXhjZWVkc0JvdW5kcykgY29uc3QKICAgICAvLyBGSVhNRTogYm9y
ZGVyLXJhZGl1cyBub3QgYWNjb3VudGVkIGZvci4KICAgICAvLyBGSVhNRTogUmVnaW9ucyBub3Qg
YWNjb3VudGVkIGZvci4KICAgICBSZW5kZXJMYXllciogY2xpcHBpbmdSb290TGF5ZXIgPSBjbGlw
cGluZ1Jvb3RGb3JQYWludGluZygpOwotICAgIExheW91dFBvaW50IG9mZnNldEZyb21Sb290ID0g
dG9MYXlvdXRQb2ludChvZmZzZXRGcm9tQW5jZXN0b3IoY2xpcHBpbmdSb290TGF5ZXIpKTsKKyAg
ICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKGNsaXBwaW5n
Um9vdExheWVyKTsKIAogICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3Qg
YmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdDsKQEAgLTU0MDcsNyAr
NTQwNyw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xp
cEV4Y2VlZHNCb3VuZHMpIGNvbnN0CiAKICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpIHsK
ICAgICAgICAgLy8gQ1NTIGNsaXAgbWF5IGJlIGxhcmdlciB0aGFuIG91ciBib3JkZXIgYm94Lgot
ICAgICAgICBMYXlvdXRSZWN0IGNzc0NsaXBSZWN0ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSku
Y2xpcFJlY3Qob2Zmc2V0RnJvbVJvb3QsIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgp
KTsKKyAgICAgICAgTGF5b3V0UmVjdCBjc3NDbGlwUmVjdCA9IHRvUmVuZGVyQm94KHJlbmRlcmVy
KCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbVJvb3QpLCBjdXJyZW50UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoKSk7CiAgICAgICAgIGNsaXBFeGNlZWRzQm91bmRzID0gIWNsaXBS
ZWN0LmNvbnRhaW5zKGNzc0NsaXBSZWN0KTsKICAgICB9CiAKQEAgLTU0NDUsNyArNTQ0NSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQogICAgICAgICBy
ZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6
OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25z
dCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBj
b25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91dFJlY3QqIGNhY2hl
ZEJvdW5kaW5nQm94KSBjb25zdAorYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJl
Y3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFn
ZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFNpemUqIG9m
ZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3VuZGluZ0JveCkgY29uc3QK
IHsKICAgICAvLyBBbHdheXMgZXhhbWluZSB0aGUgY2FudmFzIGFuZCB0aGUgcm9vdC4KICAgICAv
LyBGSVhNRTogQ291bGQgZWxpbWluYXRlIHRoZSBpc1Jvb3QoKSBjaGVjayBpZiB3ZSBmaXggYmFj
a2dyb3VuZCBwYWludGluZyBzbyB0aGF0IHRoZSBSZW5kZXJWaWV3CkBAIC01NTI3LDcgKzU1Mjcs
NyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbEJvdW5kaW5nQm94KENhbGN1bGF0ZUxh
eWVyQm91bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTGF5
b3V0UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2Vz
dG9yTGF5ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgZmxhZ3MsIGNvbnN0IExheW91dFBv
aW50KiBvZmZzZXRGcm9tUm9vdCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5k
aW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBDYWxjdWxhdGVMYXllckJv
dW5kc0ZsYWdzIGZsYWdzLCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCkgY29uc3QK
IHsgICAgCiAgICAgTGF5b3V0UmVjdCByZXN1bHQgPSBsb2NhbEJvdW5kaW5nQm94KGZsYWdzKTsK
ICAgICBpZiAocmVuZGVyZXIoKS5pc0JveCgpKQpAQCAtNTU2Myw3ICs1NTYzLDcgQEAgTGF5b3V0
UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9y
TGF5ZXIsIENhbGN1bGF0ZUwKICAgICAKICAgICBMYXlvdXRTaXplIGRlbHRhOwogICAgIGlmIChv
ZmZzZXRGcm9tUm9vdCkKLSAgICAgICAgZGVsdGEgPSB0b0xheW91dFNpemUoKm9mZnNldEZyb21S
b290KTsKKyAgICAgICAgZGVsdGEgPSAqb2Zmc2V0RnJvbVJvb3Q7CiAgICAgZWxzZQogICAgICAg
ICBkZWx0YSA9IG9mZnNldEZyb21BbmNlc3RvcihhbmNlc3RvckxheWVyKTsKICAgICAKQEAgLTU1
ODEsNyArNTU4MSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJMYXllcjo6YWJzb2x1dGVCb3VuZGluZ0Jv
eEZvclBhaW50aW5nKCkgY29uc3QKICAgICByZXR1cm4gcGl4ZWxTbmFwcGVkRm9yUGFpbnRpbmco
Ym91bmRpbmdCb3gocm9vdCgpKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5k
cyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9m
ZnNldEZyb21Sb290LCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdAorTGF5
b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5
ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFNpemUqIG9mZnNldEZyb21Sb290LCBDYWxj
dWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFp
bnRpbmdMYXllcigpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwpAQCAtNTY5NCwxMiAr
NTY5NCwxMiBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhj
b25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogICAgICAgICB1bmlvbkJvdW5kcyA9
IGFmZmluZVRyYW5zLT5tYXBSZWN0KHVuaW9uQm91bmRzKTsKICAgICB9CiAKLSAgICBMYXlvdXRT
aXplIGFuY2VzdG9yUmVsT2Zmc2V0OworICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUFuY2VzdG9y
OwogICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKLSAgICAgICAgYW5jZXN0b3JSZWxPZmZzZXQgPSB0
b0xheW91dFNpemUoKm9mZnNldEZyb21Sb290KTsKKyAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9y
ID0gKm9mZnNldEZyb21Sb290OwogICAgIGVsc2UKLSAgICAgICAgYW5jZXN0b3JSZWxPZmZzZXQg
PSBvZmZzZXRGcm9tQW5jZXN0b3IoYW5jZXN0b3JMYXllcik7Ci0gICAgdW5pb25Cb3VuZHMubW92
ZShhbmNlc3RvclJlbE9mZnNldCk7CisgICAgICAgIG9mZnNldEZyb21BbmNlc3RvciA9IHRoaXMt
Pm9mZnNldEZyb21BbmNlc3RvcihhbmNlc3RvckxheWVyKTsKKyAgICB1bmlvbkJvdW5kcy5tb3Zl
KG9mZnNldEZyb21BbmNlc3Rvcik7CiAgICAgCiAgICAgcmV0dXJuIHVuaW9uQm91bmRzOwogfQpA
QCAtNjc0MSw3ICs2NzQxLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Rmxv
d1RocmVhZElmUmVnaW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ20KIAogICAgICAgICAv
LyBFeHBhbmQgdGhlIGhpdC10ZXN0IHJlY3QgdG8gdGhlIGZsb3cgdGhyZWFkJ3MgY29vcmRpbmF0
ZSBzeXN0ZW0uCiAgICAgICAgIExheW91dFJlY3QgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQgPSBo
aXRUZXN0UmVjdDsKLSAgICAgICAgaGl0VGVzdFJlY3RJbkZsb3dUaHJlYWQubW92ZShoaXRUZXN0
T2Zmc2V0LndpZHRoKCksIGhpdFRlc3RPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICBoaXRUZXN0
UmVjdEluRmxvd1RocmVhZC5tb3ZlKGhpdFRlc3RPZmZzZXQpOwogICAgICAgICBoaXRUZXN0UmVj
dEluRmxvd1RocmVhZC5leHBhbmQoTGF5b3V0U2l6ZShmYWJzKChkb3VibGUpaGl0VGVzdE9mZnNl
dC53aWR0aCgpKSwgZmFicygoZG91YmxlKWhpdFRlc3RPZmZzZXQuaGVpZ2h0KCkpKSk7CiAKICAg
ICAgICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFpbmVyIGZsb3dUaHJlYWRNYWludGFp
bmVyKGZsb3dUaHJlYWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRl
eCBkMGE2ZTVkYmQwNmVjNjYxYzk1N2NmNzljMjY0YWI5MzFmYWFlNWIwLi5jNjFhNmNjN2NkMzY5
YmMyMDk3NmRhYTRhYTMzNTE4MzZjMWVmZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaApAQCAtMzIwLDcgKzMyMCw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGJv
dW5kaW5nQm94OwogICAgIAogICAgIC8vIFVuaXF1ZSB0byBwYWdpbmF0ZWQgZnJhZ21lbnRzLiBU
aGUgcGh5c2ljYWwgdHJhbnNsYXRpb24gdG8gYXBwbHkgdG8gc2hpZnQgdGhlIGxheWVyIHdoZW4g
cGFpbnRpbmcvaGl0LXRlc3RpbmcuCi0gICAgTGF5b3V0UG9pbnQgcGFnaW5hdGlvbk9mZnNldDsK
KyAgICBMYXlvdXRTaXplIHBhZ2luYXRpb25PZmZzZXQ7CiAgICAgCiAgICAgLy8gQWxzbyB1bmlx
dWUgdG8gcGFnaW5hdGVkIGZyYWdtZW50cy4gQW4gYWRkaXRpb25hbCBjbGlwIHRoYXQgYXBwbGll
cyB0byB0aGUgbGF5ZXIuIEl0IGlzIGluIGxheWVyLWxvY2FsCiAgICAgLy8gKHBoeXNpY2FsKSBj
b29yZGluYXRlcy4KQEAgLTcwMCw3ICs3MDAsNyBAQCBwdWJsaWM6CiAgICAgLy8gZm9yIHBhaW50
aW5nL2V2ZW50IGhhbmRsaW5nLgogICAgIC8vIFBhc3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25vd24u
CiAgICAgdm9pZCBjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiwgY29uc3Qg
TGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIExheW91dFJlY3QmIGxheWVyQm91bmRzLAotICAg
ICAgICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwg
Q2xpcFJlY3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3Qg
PSBudWxscHRyKSBjb25zdDsKKyAgICAgICAgQ2xpcFJlY3QmIGJhY2tncm91bmRSZWN0LCBDbGlw
UmVjdCYgZm9yZWdyb3VuZFJlY3QsIENsaXBSZWN0JiBvdXRsaW5lUmVjdCwgY29uc3QgTGF5b3V0
U2l6ZSogb2Zmc2V0RnJvbVJvb3QgPSBudWxscHRyKSBjb25zdDsKIAogICAgIC8vIENvbXB1dGUg
YW5kIGNhY2hlIGNsaXAgcmVjdHMgY29tcHV0ZWQgd2l0aCB0aGUgZ2l2ZW4gbGF5ZXIgYXMgdGhl
IHJvb3QKICAgICB2b2lkIHVwZGF0ZUNsaXBSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0Jik7
CkBAIC03MTksNyArNzE5LDcgQEAgcHVibGljOgogICAgIExheW91dFJlY3QgbG9jYWxDbGlwUmVj
dChib29sJiBjbGlwRXhjZWVkc0JvdW5kcykgY29uc3Q7IC8vIFJldHVybnMgdGhlIGJhY2tncm91
bmQgY2xpcCByZWN0IG9mIHRoZSBsYXllciBpbiB0aGUgbG9jYWwgY29vcmRpbmF0ZSBzcGFjZS4K
IAogICAgIC8vIFBhc3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCi0gICAgYm9vbCBpbnRlcnNl
Y3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5b3V0
UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5
b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0ciwgY29uc3QgTGF5b3V0UmVjdCogY2Fj
aGVkQm91bmRpbmdCb3ggPSBudWxscHRyKSBjb25zdDsKKyAgICBib29sIGludGVyc2VjdHNEYW1h
Z2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBk
YW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXpl
KiBvZmZzZXRGcm9tUm9vdCA9IG51bGxwdHIsIGNvbnN0IExheW91dFJlY3QqIGNhY2hlZEJvdW5k
aW5nQm94ID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICBlbnVtIENhbGN1bGF0ZUxheWVyQm91bmRz
RmxhZyB7CiAgICAgICAgIEluY2x1ZGVTZWxmVHJhbnNmb3JtID0gMSA8PCAwLApAQCAtNzM1LDcg
KzczNSw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHVuc2lnbmVkIENhbGN1bGF0ZUxheWVyQm91
bmRzRmxhZ3M7CiAKICAgICAvLyBCb3VuZGluZyBib3ggcmVsYXRpdmUgdG8gc29tZSBhbmNlc3Rv
ciBsYXllci4gUGFzcyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93bi4KLSAgICBMYXlvdXRSZWN0IGJv
dW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENhbGN1bGF0ZUxheWVyQm91
bmRzRmxhZ3MgPSAwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSBudWxscHRy
KSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBy
b290TGF5ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAwLCBjb25zdCBMYXlvdXRTaXpl
KiBvZmZzZXRGcm9tUm9vdCA9IG51bGxwdHIpIGNvbnN0OwogICAgIC8vIEJvdW5kaW5nIGJveCBp
biB0aGUgY29vcmRpbmF0ZXMgb2YgdGhpcyBsYXllci4KICAgICBMYXlvdXRSZWN0IGxvY2FsQm91
bmRpbmdCb3goQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IDApIGNvbnN0OwogICAgIC8vIERl
cHJlY2F0ZWQ6IFBpeGVsIHNuYXBwZWQgYm91bmRpbmcgYm94IHJlbGF0aXZlIHRvIHRoZSByb290
LgpAQCAtNzU1LDcgKzc1NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gQ2FuIHBhc3Mg
b2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCi0gICAgTGF5b3V0UmVjdCBjYWxjdWxhdGVMYXllckJv
dW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5b3V0UG9pbnQq
IG9mZnNldEZyb21Sb290ID0gbnVsbHB0ciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IERl
ZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGNh
bGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25z
dCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCA9IG51bGxwdHIsIENhbGN1bGF0ZUxheWVyQm91
bmRzRmxhZ3MgPSBEZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncykgY29uc3Q7CiAgICAg
CiAgICAgLy8gUmV0dXJuIGEgY2FjaGVkIHJlcGFpbnQgcmVjdCwgY29tcHV0ZWQgcmVsYXRpdmUg
dG8gdGhlIGxheWVyIHJlbmRlcmVyJ3MgY29udGFpbmVyRm9yUmVwYWludC4KICAgICBMYXlvdXRS
ZWN0IHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQpAQCAtOTg2
LDI0ICs5ODYsMjQgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgYm9vbCBzZXR1cEZvbnRTdWJw
aXhlbFF1YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQqLCBib29sJiBkaWRRdWFudGl6ZUZvbnRz
KTsKLSAgICBib29sIHNldHVwQ2xpcFBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgb2Zmc2V0RnJvbVJvb3QsIExheW91dFJl
Y3QmIHJvb3RSZWxhdGl2ZUJvdW5kcywgYm9vbCYgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQp
OworICAgIGJvb2wgc2V0dXBDbGlwUGF0aChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBMYXlvdXRSZWN0
JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKTsK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVj
dFJlbmRlcmVySGVscGVyPiBzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250ZXh0KiwgTGF5ZXJQYWlu
dGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExheW91dFBvaW50JiBvZmZzZXRGcm9t
Um9vdCwgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzLCBib29sJiByb290UmVsYXRpdmVC
b3VuZHNDb21wdXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVy
SGVscGVyPiBzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250ZXh0KiwgTGF5ZXJQYWludGluZ0luZm8m
LCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBMYXlv
dXRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1
dGVkKTsKICAgICBHcmFwaGljc0NvbnRleHQqIGFwcGx5RmlsdGVycyhGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlciosIEdyYXBoaWNzQ29udGV4dCogb3JpZ2luYWxDb250ZXh0LCBMYXllclBhaW50
aW5nSW5mbyYsIExheWVyRnJhZ21lbnRzJik7CiAjZW5kaWYKIAogICAgIHZvaWQgcGFpbnRMYXll
cihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJG
bGFncyk7CiAgICAgdm9pZCBwYWludEZpeGVkTGF5ZXJzSW5OYW1lZEZsb3dzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKICAgICB2
b2lkIHBhaW50TGF5ZXJDb250ZW50c0FuZFJlZmxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwotICAgIHZvaWQgcGFpbnRM
YXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWlu
dGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlv
bk9mZnNldCA9IExheW91dFBvaW50KCkpOworICAgIHZvaWQgcGFpbnRMYXllckJ5QXBwbHlpbmdU
cmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWlu
dExheWVyRmxhZ3MsIGNvbnN0IExheW91dFNpemUmIHRyYW5zbGF0aW9uT2Zmc2V0ID0gTGF5b3V0
U2l6ZSgpKTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWlu
dExpc3QoVmVjdG9yPFJlbmRlckxheWVyKj4qLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAKICAgICB2b2lkIGNvbGxlY3RGcmFn
bWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25z
dCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCiAgICAgICAgIFBhZ2luYXRpb25JbmNsdXNpb25Nb2Rl
LAogICAgICAgICBDbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBp
bk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUsCi0gICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dD
bGlwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QgPSBudWxscHRyLCBjb25zdCBM
YXlvdXRSZWN0KiBsYXllckJvdW5kaW5nQm94ID0gbnVsbHB0ciwgU2hvdWxkQXBwbHlSb290T2Zm
c2V0VG9GcmFnbWVudHMgPSBJZ25vcmVSb290T2Zmc2V0Rm9yRnJhZ21lbnRzKTsKLSAgICB2b2lk
IHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzLCBib29sIHNob3VsZFBhaW50Q29udGVu
dCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgU2hvdWxkUmVz
cGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFNpemUq
IG9mZnNldEZyb21Sb290ID0gbnVsbHB0ciwgY29uc3QgTGF5b3V0UmVjdCogbGF5ZXJCb3VuZGlu
Z0JveCA9IG51bGxwdHIsIFNob3VsZEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzID0gSWdub3Jl
Um9vdE9mZnNldEZvckZyYWdtZW50cyk7CisgICAgdm9pZCB1cGRhdGVQYWludGluZ0luZm9Gb3JG
cmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50
TGF5ZXJGbGFncywgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFNpemUqIG9m
ZnNldEZyb21Sb290KTsKICAgICB2b2lkIHBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJh
bnNwYXJlbmN5TGF5ZXJDb250ZXh0LAogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3Bh
cmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3Bh
cmVuY3lMYXllckNvbnRleHQsCkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVsbHB0ciwgZG91YmxlKiB6T2Zm
c2V0ID0gbnVsbHB0cik7CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXllckJ5QXBwbHlpbmdU
cmFuc2Zvcm0oUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxh
eWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLAogICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3Qg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJsZSogek9mZnNldCA9IG51
bGxwdHIsCi0gICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExh
eW91dFBvaW50KCkpOworICAgICAgICBjb25zdCBMYXlvdXRTaXplJiB0cmFuc2xhdGlvbk9mZnNl
dCA9IExheW91dFNpemUoKSk7CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMaXN0KFZlY3RvcjxS
ZW5kZXJMYXllcio+KiwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKICAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsCiAgICAgICAgIGNvbnN0
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSosIGRvdWJsZSogek9mZnNldEZvckRlc2NlbmRhbnRz
LCBkb3VibGUqIHpPZmZzZXQsCkBAIC0xMDM3LDcgKzEwMzcsNyBAQCBwcml2YXRlOgogICAgIFBh
c3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0
YXRlKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwK
ICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYsCiAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVy
VHJhbnNmb3JtU3RhdGUsCi0gICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0cmFuc2xhdGlvbk9m
ZnNldCA9IExheW91dFBvaW50KCkpIGNvbnN0OworICAgICAgICBjb25zdCBMYXlvdXRTaXplJiB0
cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFNpemUoKSkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBo
aXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRl
c3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xp
cFJlY3QpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtblNldC5jcHAKaW5kZXggNDFmZTk3NTUwNDA1YjI1NDQ4ZmFiZWRmZDA0Mjc1NjY0ZGIx
NTQ0NC4uYWY1OWVlZWViNWM3OGRhYjZlZDc1YzM3NTcyOWUyMjc2YmNhMTdhOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCkBAIC03
NTUsNyArNzU1LDcgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6Y29sbGVjdExheWVyRnJh
Z21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnMKICAgICAgICAgCiAgICAgICAg
IC8vIFdlIGFsc28gbmVlZCB0byBpbnRlcnNlY3QgdGhlIGRpcnR5IHJlY3QuIFdlIGhhdmUgdG8g
YXBwbHkgYSB0cmFuc2xhdGlvbiBhbmQgc2hpZnQgYmFzZWQgb2ZmCiAgICAgICAgIC8vIG91ciBj
b2x1bW4gaW5kZXguCi0gICAgICAgIExheW91dFBvaW50IHRyYW5zbGF0aW9uT2Zmc2V0OworICAg
ICAgICBMYXlvdXRTaXplIHRyYW5zbGF0aW9uT2Zmc2V0OwogICAgICAgICBMYXlvdXRVbml0IGlu
bGluZU9mZnNldCA9IHByb2dyZXNzaW9uSXNJbmxpbmUgPyBpICogKGNvbExvZ2ljYWxXaWR0aCAr
IGNvbEdhcCkgOiBMYXlvdXRVbml0KCk7CiAgICAgICAgIAogICAgICAgICBib29sIGxlZnRUb1Jp
Z2h0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgXiBwcm9ncmVzc2lvblJldmVy
c2VkOwpAQCAtNzY0LDcgKzc2NCw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmNvbGxl
Y3RMYXllckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zCiAgICAgICAg
ICAgICBpZiAocHJvZ3Jlc3Npb25SZXZlcnNlZCkKICAgICAgICAgICAgICAgICBpbmxpbmVPZmZz
ZXQgKz0gY29udGVudExvZ2ljYWxXaWR0aCgpIC0gY29sTG9naWNhbFdpZHRoOwogICAgICAgICB9
Ci0gICAgICAgIHRyYW5zbGF0aW9uT2Zmc2V0LnNldFgoaW5saW5lT2Zmc2V0KTsKKyAgICAgICAg
dHJhbnNsYXRpb25PZmZzZXQuc2V0V2lkdGgoaW5saW5lT2Zmc2V0KTsKICAgICAgICAgTGF5b3V0
VW5pdCBibG9ja09mZnNldCA9IGluaXRpYWxCbG9ja09mZnNldCArIGxvZ2ljYWxUb3AoKSAtIGZs
b3dUaHJlYWQoKS0+bG9naWNhbFRvcCgpICsgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAt
Zmxvd1RocmVhZFBvcnRpb24ueSgpIDogLWZsb3dUaHJlYWRQb3J0aW9uLngoKSk7CiAgICAgICAg
IGlmICghcHJvZ3Jlc3Npb25Jc0lubGluZSkgewogICAgICAgICAgICAgaWYgKCFwcm9ncmVzc2lv
blJldmVyc2VkKQpAQCAtNzc0LDEzICs3NzQsMTMgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNl
dDo6Y29sbGVjdExheWVyRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnMK
ICAgICAgICAgfQogICAgICAgICBpZiAoaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoc3R5bGUo
KS53cml0aW5nTW9kZSgpKSkKICAgICAgICAgICAgIGJsb2NrT2Zmc2V0ID0gLWJsb2NrT2Zmc2V0
OwotICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5zZXRZKGJsb2NrT2Zmc2V0KTsKKyAgICAgICAg
dHJhbnNsYXRpb25PZmZzZXQuc2V0SGVpZ2h0KGJsb2NrT2Zmc2V0KTsKICAgICAgICAgaWYgKCFp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQg
PSB0cmFuc2xhdGlvbk9mZnNldC50cmFuc3Bvc2VkUG9pbnQoKTsKKyAgICAgICAgICAgIHRyYW5z
bGF0aW9uT2Zmc2V0ID0gdHJhbnNsYXRpb25PZmZzZXQudHJhbnNwb3NlZFNpemUoKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIFNoaWZ0IHRoZSBkaXJ0eSByZWN0IHRvIGJlIGluIGZsb3cgdGhyZWFk
IGNvb3JkaW5hdGVzIHdpdGggdGhpcyB0cmFuc2xhdGlvbiBhcHBsaWVkLgogICAgICAgICBMYXlv
dXRSZWN0IHRyYW5zbGF0ZWREaXJ0eVJlY3QoZGlydHlSZWN0KTsKLSAgICAgICAgdHJhbnNsYXRl
ZERpcnR5UmVjdC5tb3ZlQnkoLXRyYW5zbGF0aW9uT2Zmc2V0KTsKKyAgICAgICAgdHJhbnNsYXRl
ZERpcnR5UmVjdC5tb3ZlKC10cmFuc2xhdGlvbk9mZnNldCk7CiAgICAgICAgIAogICAgICAgICAv
LyBTZWUgaWYgd2UgaW50ZXJzZWN0IHRoZSBkaXJ0eSByZWN0LgogICAgICAgICBjbGlwcGVkUmVj
dCA9IGxheWVyQm91bmRpbmdCb3g7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233579</attachid>
            <date>2014-06-22 16:38:49 -0700</date>
            <delta_ts>2014-06-22 17:34:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134156-20140622163827.patch</filename>
            <type>text/plain</type>
            <size>40171</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMjI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2JiNjBiOWM3MDJkMWZm
NzU3MDQ2OGI1MzNiNGFkYjIxNTAxZGMzZC4uZmQ4MDVkZDcyZTNlMjA1ZmRlZWVmYWU2OWRmZjQz
YmFhMDRmMjM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE0LTA2LTIxICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgVHJhbnNpdGlvbiBsYXllciBv
ZmZzZXRzIGZyb20gTGF5b3V0UG9pbnQgdG8gTGF5b3V0U2l6ZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDE1NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICBVc2UgYmV0dGVyIHJlcHJlc2VudGF0aW9uIGZv
ciBvZmZzZXQgdmFsdWVzLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0U2l6ZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6cm91bmRlZEZvclBhaW50aW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpmcmFnbWVu
dHNCb3VuZGluZ0JveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyk6
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVmZXJlbmNlQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRM
YXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmNvbGxlY3RGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6Y3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyQnlBcHBseWluZ1RyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3Rz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVs
dGlDb2x1bW5TZXQ6OmNvbGxlY3RMYXllckZyYWdtZW50cyk6CisKIDIwMTQtMDYtMjAgIEJldGgg
RGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQxMTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbG93VGhyZWFkLmNwcAppbmRleCA0ZGJiZGM1YTczMzA1ZWZjNmZiNzdmMTE0NjZmMDZj
YjQ1MWJjOTQ1Li4wZjQ1YTJiZDg5MGE3MTljMWY1ZWM4ZDkxZDliMTQ5NmNhNWE1Y2FlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCkBAIC0xMTU5
LDcgKzExNTksNyBAQCBMYXlvdXRSZWN0IFJlbmRlckZsb3dUaHJlYWQ6OmZyYWdtZW50c0JvdW5k
aW5nQm94KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbgogICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGZyYWdtZW50IDogZnJhZ21lbnRzKSB7CiAgICAgICAgICAgICBMYXlvdXRSZWN0IGZy
YWdtZW50UmVjdChsYXllckJvdW5kaW5nQm94KTsKICAgICAgICAgICAgIGZyYWdtZW50UmVjdC5p
bnRlcnNlY3QoZnJhZ21lbnQucGFnaW5hdGlvbkNsaXApOwotICAgICAgICAgICAgZnJhZ21lbnRS
ZWN0Lm1vdmVCeShmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0KTsKKyAgICAgICAgICAgIGZyYWdt
ZW50UmVjdC5tb3ZlKGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQpOwogICAgICAgICAgICAgcmVz
dWx0LnVuaXRlKGZyYWdtZW50UmVjdCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAyMzI0YTAwMjU0MWUzZDQ4Njk1Mzk5ZWY1
MmY2YmQ2YTM2YzczN2Y0Li4wNzk1ZWJlNjdlYTg3NjE1YzYyNzc4NGMyN2JmOTQ1NWYzNDg4NDY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE1OTAsNyAr
MTU5MCw3IEBAIHN0YXRpYyB2b2lkIGV4cGFuZENsaXBSZWN0Rm9yRGVzY2VuZGFudHNBbmRSZWZs
ZWN0aW9uKExheW91dFJlY3QmIGNsaXBSZWN0LCBjb25zCiAgICAgLy8gc2l6ZSBpbnRvIHRoZSBw
YXJlbnQgbGF5ZXIuCiAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmhhc1JlZmxlY3Rpb24oKSkg
ewogICAgICAgICBMYXlvdXRTaXplIGRlbHRhID0gbGF5ZXItPm9mZnNldEZyb21BbmNlc3Rvcihy
b290TGF5ZXIpOwotICAgICAgICBjbGlwUmVjdC5tb3ZlKC1kZWx0YS53aWR0aCgpLCAtZGVsdGEu
aGVpZ2h0KCkpOworICAgICAgICBjbGlwUmVjdC5tb3ZlKC1kZWx0YSk7CiAgICAgICAgIGNsaXBS
ZWN0LnVuaXRlKGxheWVyLT5yZW5kZXJCb3goKS0+cmVmbGVjdGVkUmVjdChjbGlwUmVjdCkpOwog
ICAgICAgICBjbGlwUmVjdC5tb3ZlKGRlbHRhKTsKICAgICB9CkBAIC0yMDAwLDcgKzIwMDAsNyBA
QCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0VG9MYXllckNvb3Jkcyhjb25zdCBSZW5k
ZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogewogICAgIExheW91dFBvaW50IGRlbHRhID0gY29u
dmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgTGF5b3V0UG9pbnQoKSwgYWRqdXN0Rm9y
Q29sdW1ucyk7CiAgICAgTGF5b3V0UmVjdCByZWN0SW5MYXllckNvb3JkcyA9IHJlY3Q7Ci0gICAg
cmVjdEluTGF5ZXJDb29yZHMubW92ZSgtZGVsdGEueCgpLCAtZGVsdGEueSgpKTsKKyAgICByZWN0
SW5MYXllckNvb3Jkcy5tb3ZlQnkoLWRlbHRhKTsKICAgICByZXR1cm4gcmVjdEluTGF5ZXJDb29y
ZHM7CiB9CiAKQEAgLTM3NTQsNyArMzc1NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwRm9u
dFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgYm9vbCYKIH0K
IAogdGVtcGxhdGUgPGNsYXNzIFJlZmVyZW5jZUJveENsaXBQYXRoT3BlcmF0aW9uPgotc3RhdGlj
IGlubGluZSBMYXlvdXRSZWN0IGNvbXB1dGVSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlciwgY29uc3QgUmVmZXJlbmNlQm94Q2xpcFBhdGhPcGVyYXRpb24mIGNsaXBwaW5n
UGF0aCwgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRSZWN0
JiByb290UmVsYXRpdmVCb3VuZHMpCitzdGF0aWMgaW5saW5lIExheW91dFJlY3QgY29tcHV0ZVJl
ZmVyZW5jZUJveChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZWZlcmVuY2VC
b3hDbGlwUGF0aE9wZXJhdGlvbiYgY2xpcHBpbmdQYXRoLCBjb25zdCBMYXlvdXRTaXplJiBvZmZz
ZXRGcm9tUm9vdCwgY29uc3QgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzKQogewogICAg
IC8vIEZJWE1FOiBTdXBwb3J0IGRpZmZlcmVudCByZWZlcmVuY2UgYm94ZXMgZm9yIGlubGluZSBj
b250ZW50LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjkwNDcKQEAgLTM3NjYsMTEgKzM3NjYsMTEgQEAgc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGNv
bXB1dGVSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QKICAg
ICBzd2l0Y2ggKGNsaXBwaW5nUGF0aC5yZWZlcmVuY2VCb3goKSkgewogICAgIGNhc2UgQ29udGVu
dEJveDoKICAgICAgICAgcmVmZXJlbmNlQm94ID0gYm94LmNvbnRlbnRCb3hSZWN0KCk7Ci0gICAg
ICAgIHJlZmVyZW5jZUJveC5tb3ZlQnkob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICByZWZlcmVu
Y2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGFk
ZGluZ0JveDoKICAgICAgICAgcmVmZXJlbmNlQm94ID0gYm94LnBhZGRpbmdCb3hSZWN0KCk7Ci0g
ICAgICAgIHJlZmVyZW5jZUJveC5tb3ZlQnkob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICByZWZl
cmVuY2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7CiAgICAgICAgIGJyZWFrOwogICAgIC8vIEZJ
WE1FOiBTdXBwb3J0IG1hcmdpbi1ib3guIFVzZSBib3VuZGluZyBjbGllbnQgcmVjdCBmb3Igbm93
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODQK
QEAgLTM3ODIsMTQgKzM3ODIsMTQgQEAgc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGNvbXB1dGVS
ZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QKICAgICBjYXNl
IEJvcmRlckJveDoKICAgICBjYXNlIEJveE1pc3Npbmc6CiAgICAgICAgIHJlZmVyZW5jZUJveCA9
IGJveC5ib3JkZXJCb3hSZWN0KCk7Ci0gICAgICAgIHJlZmVyZW5jZUJveC5tb3ZlQnkob2Zmc2V0
RnJvbVJvb3QpOworICAgICAgICByZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiByZWZlcmVuY2VCb3g7CiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
b2Zmc2V0RnJvbVJvb3QsIExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcywgYm9vbCYgcm9v
dFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpCitib29sIFJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRo
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50
aW5nSW5mbywgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIExheW91dFJlY3QmIHJv
b3RSZWxhdGl2ZUJvdW5kcywgYm9vbCYgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpCiB7CiAg
ICAgaWYgKCFyZW5kZXJlcigpLmhhc0NsaXBQYXRoKCkgfHwgY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODE0LDcgKzM4MTQsNyBAQCBib29s
IFJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgTGF5ZXJQYWludGluZ0luZgogICAgICAgICBCb3hDbGlwUGF0aE9wZXJhdGlvbiYgY2xpcHBp
bmdQYXRoID0gdG9Cb3hDbGlwUGF0aE9wZXJhdGlvbigqKHN0eWxlLmNsaXBQYXRoKCkpKTsKIAog
ICAgICAgICBSb3VuZGVkUmVjdCBzaGFwZVJlY3QgPSBjb21wdXRlUm91bmRlZFJlY3RGb3JCb3hT
aGFwZShjbGlwcGluZ1BhdGgucmVmZXJlbmNlQm94KCksIHRvUmVuZGVyQm94KHJlbmRlcmVyKCkp
KTsKLSAgICAgICAgc2hhcGVSZWN0Lm1vdmVCeShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIHNo
YXBlUmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKIAogICAgICAgICBjb250ZXh0LT5zYXZlKCk7
CiAgICAgICAgIGNvbnRleHQtPmNsaXBQYXRoKGNsaXBwaW5nUGF0aC5wYXRoRm9yUmVmZXJlbmNl
UmVjdChzaGFwZVJlY3QpLCBSVUxFX05PTlpFUk8pOwpAQCAtMzgzNiw3ICszODM2LDcgQEAgYm9v
bCBSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IExheWVyUGFpbnRpbmdJbmYKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKIAotc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPiBSZW5kZXJMYXllcjo6c2V0dXBG
aWx0ZXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50
aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MsIGNvbnN0IExheW91dFBvaW50JiBv
ZmZzZXRGcm9tUm9vdCwgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzLCBib29sJiByb290
UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkKK3N0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5k
ZXJlckhlbHBlcj4gUmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBw
YWludEZsYWdzLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgTGF5b3V0UmVjdCYg
cm9vdFJlbGF0aXZlQm91bmRzLCBib29sJiByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkKIHsK
ICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTM4NTQsNyArMzg1NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RS
ZW5kZXJlckhlbHBlcj4gUmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyhHcmFwaGljc0NvCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIExheW91dFJlY3QgZmlsdGVyUmVwYWludFJl
Y3QgPSBmaWx0ZXJJbmZvLT5kaXJ0eVNvdXJjZVJlY3QoKTsKLSAgICBmaWx0ZXJSZXBhaW50UmVj
dC5tb3ZlKG9mZnNldEZyb21Sb290LngoKSwgb2Zmc2V0RnJvbVJvb3QueSgpKTsKKyAgICBmaWx0
ZXJSZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKIAogICAgIGlmICghcm9vdFJlbGF0
aXZlQm91bmRzQ29tcHV0ZWQpIHsKICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzID0gY2FsY3Vs
YXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm9mZnNldEZyb21Sb290LCAw
KTsKQEAgLTM5NjMsNyArMzk2Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250
ZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAg
ICYmIHJlbmRlcmVyKCkuZml4ZWRQb3NpdGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9j
aygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRQb2ludCBvZmZzZXRGcm9tUm9vdCA9
IHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbUFuY2VzdG9yKHBhaW50aW5nSW5mby5yb290TGF5ZXIp
KTsKKyAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHBh
aW50aW5nSW5mby5yb290TGF5ZXIpOwogICAgIExheW91dFJlY3Qgcm9vdFJlbGF0aXZlQm91bmRz
OwogICAgIGJvb2wgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQgPSBmYWxzZTsKIApAQCAtNDA5
NCwxNyArNDA5NCwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICBjb250ZXh0
LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJCeUFwcGx5aW5n
VHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MsIGNvbnN0IExheW91
dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJC
eUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MsIGNv
bnN0IExheW91dFNpemUmIHRyYW5zbGF0aW9uT2Zmc2V0KQogewogICAgIC8vIFRoaXMgaW52b2x2
ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIgaW4gb3VyIGN1cnJl
bnQgY29vcmRpbmF0ZSBzcGFjZSwgYnV0IHByZXNlcnZpbmcKICAgICAvLyB0aGUgYWNjdW11bGF0
ZWQgZXJyb3IgZm9yIHN1Yi1waXhlbCBsYXlvdXQuCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IgPSByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBMYXlv
dXRQb2ludCBvZmZzZXRGcm9tUGFyZW50ID0gdG9MYXlvdXRQb2ludChvZmZzZXRGcm9tQW5jZXN0
b3IocGFpbnRpbmdJbmZvLnJvb3RMYXllcikpOwotICAgIG9mZnNldEZyb21QYXJlbnQubW92ZUJ5
KHRyYW5zbGF0aW9uT2Zmc2V0KTsKKyAgICBMYXlvdXRTaXplIG9mZnNldEZyb21QYXJlbnQgPSBv
ZmZzZXRGcm9tQW5jZXN0b3IocGFpbnRpbmdJbmZvLnJvb3RMYXllcik7CisgICAgb2Zmc2V0RnJv
bVBhcmVudCArPSB0cmFuc2xhdGlvbk9mZnNldDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0ocmVuZGVyYWJsZVRyYW5zZm9ybShwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcikp
OwotICAgIEZsb2F0UG9pbnQgZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0RnJvbVBhcmVudCA9IHJv
dW5kZWRGb3JQYWludGluZyhvZmZzZXRGcm9tUGFyZW50LCBkZXZpY2VTY2FsZUZhY3Rvcik7Cisg
ICAgRmxvYXRTaXplIGRldmljZVBpeGVsU25hcHBlZE9mZnNldEZyb21QYXJlbnQgPSB0b0Zsb2F0
U2l6ZShyb3VuZGVkRm9yUGFpbnRpbmcodG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUGFyZW50KSwg
ZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICAvLyBUcmFuc2xhdGUgdGhlIGdyYXBoaWNzIGNvbnRl
eHQgdG8gdGhlIHNuYXBwaW5nIHBvc2l0aW9uIHRvIGF2b2lkIG9mZi1kZXZpY2UtcGl4ZWwgcG9z
aXRpbmcuCi0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGRldmljZVBpeGVsU25hcHBlZE9m
ZnNldEZyb21QYXJlbnQueCgpLCBkZXZpY2VQaXhlbFNuYXBwZWRPZmZzZXRGcm9tUGFyZW50Lnko
KSk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZVJpZ2h0KGRldmljZVBpeGVsU25hcHBlZE9mZnNl
dEZyb21QYXJlbnQud2lkdGgoKSwgZGV2aWNlUGl4ZWxTbmFwcGVkT2Zmc2V0RnJvbVBhcmVudC5o
ZWlnaHQoKSk7CiAgICAgLy8gV2UgaGFuZGxlIGFjY3VtdWxhdGVkIHN1YnBpeGVscyB0aHJvdWdo
IG5lc3RlZCBsYXllcnMgaGVyZS4gU2luY2UgdGhlIGNvbnRleHQgZ2V0cyB0cmFuc2xhdGVkIHRv
IGRldmljZSBwaXhlbHMsCiAgICAgLy8gYWxsIHdlIG5lZWQgdG8gZG8gaXMgYWRkIHRoZSBkZWx0
YSB0byB0aGUgYWNjdW11bGF0ZWQgcGl4ZWxzIGNvbWluZyBmcm9tIGFuY2VzdG9yIGxheWVycy4g
V2l0aCBkZWVwIG5lc3Rpbmcgb2Ygc3VicGl4ZWwgcG9zaXRpb25lZAogICAgIC8vIGJveGVzLCB0
aGlzIGNvdWxkIGdyb3cgdG8gYSByZWxhdGl2ZWx5IGxhcmdlIG51bWJlciwgYnV0IHRoZSB0cmFu
c2xhdGVSaWdodCgpIGJhbGFuY2VzIGl0LgpAQCAtNDE2NSw3ICs0MTY1LDcgQEAgUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3Qg
UmVuZGVyTGF5ZXIqIHIKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhM
YXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBj
b25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIGluY2x1
c2lvbk1vZGUsCi0gICAgQ2xpcFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCBTaG91bGRS
ZXNwZWN0T3ZlcmZsb3dDbGlwIHJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFBvaW50
KiBvZmZzZXRGcm9tUm9vdCwKKyAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ks
IFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5
b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QsCiAgICAgY29uc3QgTGF5b3V0UmVjdCogbGF5ZXJCb3Vu
ZGluZ0JveCwgU2hvdWxkQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMgYXBwbHlSb290T2Zmc2V0
VG9GcmFnbWVudHMpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIHBhZ2luYXRpb25MYXllciA9IGVuY2xv
c2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShyb290TGF5ZXIsIGluY2x1c2lvbk1vZGUpOwpA
QCAtNDE3OSw3ICs0MTc5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhM
YXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllcioKICAgICB9CiAgICAg
CiAgICAgLy8gQ29tcHV0ZSBvdXIgb2Zmc2V0IHdpdGhpbiB0aGUgZW5jbG9zaW5nIHBhZ2luYXRp
b24gbGF5ZXIuCi0gICAgTGF5b3V0UG9pbnQgb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXIgPSB0
b0xheW91dFBvaW50KG9mZnNldEZyb21BbmNlc3RvcihwYWdpbmF0aW9uTGF5ZXIpKTsKKyAgICBM
YXlvdXRTaXplIG9mZnNldFdpdGhpblBhZ2luYXRlZExheWVyID0gb2Zmc2V0RnJvbUFuY2VzdG9y
KHBhZ2luYXRpb25MYXllcik7CiAgICAgCiAgICAgLy8gQ2FsY3VsYXRlIGNsaXAgcmVjdHMgcmVs
YXRpdmUgdG8gdGhlIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllci4gVGhlIHB1cnBvc2Ugb2YgdGhp
cyBjYWxsIGlzIHRvIGRldGVybWluZSBvdXIgYm91bmRzIGNsaXBwZWQgdG8gaW50ZXJtZWRpYXRl
CiAgICAgLy8gbGF5ZXJzIGJldHdlZW4gdXMgYW5kIHRoZSBwYWdpbmF0aW9uIGNvbnRleHQuIEl0
J3MgaW1wb3J0YW50IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIHdlIG5lZWQg
dG8gY3JlYXRlIGFuZCB0aGlzIGhlbHBzIHdpdGggdGhhdC4KQEAgLTQyMTUsNyArNDIxNSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdt
ZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3JGcmFn
bWVudCA6IGFuY2VzdG9yRnJhZ21lbnRzKSB7CiAgICAgICAgICAgICAvLyBTaGlmdCB0aGUgZGly
dHkgcmVjdCBpbnRvIGZsb3cgdGhyZWFkIGNvb3JkaW5hdGVzLgogICAgICAgICAgICAgTGF5b3V0
UmVjdCBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQoZGlydHlSZWN0KTsKLSAgICAgICAgICAgIGRpcnR5
UmVjdEluRmxvd1RocmVhZC5tb3ZlKHRvTGF5b3V0UG9pbnQoLW9mZnNldFdpdGhpblBhcmVudFBh
Z2luYXRlZExheWVyKSAtIGFuY2VzdG9yRnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCk7CisgICAg
ICAgICAgICBkaXJ0eVJlY3RJbkZsb3dUaHJlYWQubW92ZSgtb2Zmc2V0V2l0aGluUGFyZW50UGFn
aW5hdGVkTGF5ZXIgLSBhbmNlc3RvckZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IGZyYWdtZW50cy5zaXplKCk7CiAg
ICAgICAgICAgICAKQEAgLTQyMzUsNyArNDIzNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxl
Y3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIq
CiAgICAgICAgICAgICAgICAgZnJhZ21lbnQuc2V0UmVjdHMobGF5ZXJCb3VuZHNJbkZsb3dUaHJl
YWQsIGJhY2tncm91bmRSZWN0SW5GbG93VGhyZWFkLCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVh
ZCwgb3V0bGluZVJlY3RJbkZsb3dUaHJlYWQsICZsYXllckJvdW5kaW5nQm94SW5GbG93VGhyZWFk
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgcm9v
dC1yZWxhdGl2ZSBwaHlzaWNhbCBwb3NpdGlvbiB1c2VkIHdoZW4gcGFpbnRpbmcgdGhlIGZsb3cg
dGhyZWFkIGluIHRoaXMgZnJhZ21lbnQuCi0gICAgICAgICAgICAgICAgZnJhZ21lbnQubW92ZUJ5
KGFuY2VzdG9yRnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCArIGZyYWdtZW50LnBhZ2luYXRpb25P
ZmZzZXQgKyBvZmZzZXRXaXRoaW5QYXJlbnRQYWdpbmF0ZWRMYXllcik7CisgICAgICAgICAgICAg
ICAgZnJhZ21lbnQubW92ZUJ5KHRvTGF5b3V0UG9pbnQoYW5jZXN0b3JGcmFnbWVudC5wYWdpbmF0
aW9uT2Zmc2V0ICsgZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCArIG9mZnNldFdpdGhpblBhcmVu
dFBhZ2luYXRlZExheWVyKSk7CiAKICAgICAgICAgICAgICAgICAvLyBJbnRlcnNlY3QgdGhlIGZy
YWdtZW50IHdpdGggb3VyIGFuY2VzdG9yJ3MgYmFja2dyb3VuZCBjbGlwIHNvIHRoYXQgZS5nLiwg
Y29sdW1ucyBpbiBhbiBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgYXJlCiAgICAgICAgICAgICAgICAg
Ly8gcHJvcGVybHkgY2xpcHBlZCBieSB0aGUgb3ZlcmZsb3cuCkBAIC00MjgwLDcgKzQyODAsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFn
bWVudHMsIGNvbnN0IFJlbmRlckxheWVyKgogICAgICAgICBmcmFnbWVudC5zZXRSZWN0cyhsYXll
ckJvdW5kc0luRmxvd1RocmVhZCwgYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQsIGZvcmVncm91
bmRSZWN0SW5GbG93VGhyZWFkLCBvdXRsaW5lUmVjdEluRmxvd1RocmVhZCwgJmxheWVyQm91bmRp
bmdCb3hJbkZsb3dUaHJlYWQpOwogICAgICAgICAKICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIHJv
b3QtcmVsYXRpdmUgcGh5c2ljYWwgcG9zaXRpb24gdXNlZCB3aGVuIHBhaW50aW5nIHRoZSBmbG93
IHRocmVhZCBpbiB0aGlzIGZyYWdtZW50LgotICAgICAgICBmcmFnbWVudC5tb3ZlQnkoZnJhZ21l
bnQucGFnaW5hdGlvbk9mZnNldCArIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpOwor
ICAgICAgICBmcmFnbWVudC5tb3ZlQnkodG9MYXlvdXRQb2ludChmcmFnbWVudC5wYWdpbmF0aW9u
T2Zmc2V0ICsgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCkpOwogCiAgICAgICAgIC8v
IEludGVyc2VjdCB0aGUgZnJhZ21lbnQgd2l0aCBvdXIgYW5jZXN0b3IncyBiYWNrZ3JvdW5kIGNs
aXAgc28gdGhhdCBlLmcuLCBjb2x1bW5zIGluIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayBhcmUK
ICAgICAgICAgLy8gcHJvcGVybHkgY2xpcHBlZCBieSB0aGUgb3ZlcmZsb3cuCkBAIC00Mjk2LDE0
ICs0Mjk2LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFn
bWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqCiB9CiAKIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21l
bnRzLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIFBhaW50TGF5
ZXJGbGFncyBsb2NhbFBhaW50RmxhZ3MsCi0gICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNv
bnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCkKKyAgICBib29sIHNob3VsZFBhaW50Q29u
dGVudCwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QpCiB7CiAgICAgQVNTRVJUKG9m
ZnNldEZyb21Sb290KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXpl
KCk7ICsraSkgewogICAgICAgICBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5h
dChpKTsKICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ID0gc2hvdWxkUGFpbnRD
b250ZW50OwogICAgICAgICBpZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIg
fHwgIShsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRz
KSkgewotICAgICAgICAgICAgTGF5b3V0UG9pbnQgbmV3T2Zmc2V0RnJvbVJvb3QgPSAqb2Zmc2V0
RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0OworICAgICAgICAgICAgTGF5b3V0
U2l6ZSBuZXdPZmZzZXRGcm9tUm9vdCA9ICpvZmZzZXRGcm9tUm9vdCArIGZyYWdtZW50LnBhZ2lu
YXRpb25PZmZzZXQ7CiAgICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRlbnQgJj0g
aW50ZXJzZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCAmbmV3T2Zmc2V0
RnJvbVJvb3QsIGZyYWdtZW50Lmhhc0JvdW5kaW5nQm94ID8gJmZyYWdtZW50LmJvdW5kaW5nQm94
IDogMCk7CiAgICAgICAgIH0KICAgICB9CkBAIC00MzEyLDcgKzQzMTIsNyBAQCB2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZy
YWdtZW50cywgY29ucwogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50
b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQogewogICAgIExh
eWVyRnJhZ21lbnRzIGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHM7Ci0gICAgTGF5b3V0UG9p
bnQgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdDsKKyAgICBMYXlvdXRTaXplIG9mZnNl
dE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3Q7CiAgICAgUmVuZGVyTGF5ZXIqIHBhZ2luYXRlZExh
eWVyID0gZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVk
TGF5ZXJzKTsKICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkRXh0ZW50ID0gdHJhbnNwYXJlbmN5
Q2xpcEJveCh0aGlzLCBwYWdpbmF0ZWRMYXllciwgUGFpbnRpbmdUcmFuc3BhcmVuY3lDbGlwQm94
LCBSb290T2ZUcmFuc3BhcmVuY3lDbGlwQm94LCBwYWludGluZ0luZm8ucGFpbnRCZWhhdmlvcik7
CiAgICAgcGFnaW5hdGVkTGF5ZXItPmNvbGxlY3RGcmFnbWVudHMoZW5jbG9zaW5nUGFnaW5hdGlv
bkZyYWdtZW50cywgcGFpbnRpbmdJbmZvLnJvb3RMYXllciwgcGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywKQEAgLTQzMjgsMTIgKzQz
MjgsMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdt
ZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGMKICAgICAgICAgCiAgICAgICAgIC8vIE5v
dyBjb21wdXRlIHRoZSBjbGlwcyB3aXRoaW4gYSBnaXZlbiBmcmFnbWVudAogICAgICAgICBpZiAo
cGFyZW50KCkgIT0gcGFnaW5hdGVkTGF5ZXIpIHsKLSAgICAgICAgICAgIG9mZnNldE9mUGFnaW5h
dGlvbkxheWVyRnJvbVJvb3QgPSBwYWdpbmF0ZWRMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMo
cGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7
CisgICAgICAgICAgICBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290ID0gdG9MYXlvdXRT
aXplKHBhZ2luYXRlZExheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhwYWludGluZ0luZm8ucm9v
dExheWVyLCB0b0xheW91dFBvaW50KG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QpKSk7
CiAgICAgCiAgICAgICAgICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0NvbnRleHQocGFn
aW5hdGVkTGF5ZXIsIChwYWludEZsYWdzICYgUGFpbnRMYXllclRlbXBvcmFyeUNsaXBSZWN0cykg
PyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBQYWludGluZ0NsaXBSZWN0cywKICAgICAgICAgICAgICAg
ICBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgKHBhaW50RmxhZ3MgJiBQYWludExheWVyUGFp
bnRpbmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVy
Zmxvd0NsaXApOwogICAgICAgICAgICAgTGF5b3V0UmVjdCBwYXJlbnRDbGlwUmVjdCA9IGJhY2tn
cm91bmRDbGlwUmVjdChjbGlwUmVjdHNDb250ZXh0KS5yZWN0KCk7Ci0gICAgICAgICAgICBwYXJl
bnRDbGlwUmVjdC5tb3ZlQnkoZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldCArIG9mZnNldE9mUGFn
aW5hdGlvbkxheWVyRnJvbVJvb3QpOworICAgICAgICAgICAgcGFyZW50Q2xpcFJlY3QubW92ZShm
cmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0ICsgb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9v
dCk7CiAgICAgICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFyZW50Q2xpcFJlY3QpOwogICAg
ICAgICB9CiAKQEAgLTQ1NzcsNyArNDU3Nyw3IEBAIHN0YXRpYyBkb3VibGUgY29tcHV0ZVpPZmZz
ZXQoY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkKIFBhc3NS
ZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBSZW5kZXJMYXllcjo6Y3JlYXRlTG9jYWxU
cmFuc2Zvcm1TdGF0ZShSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFp
bmVyTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExv
Y2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UG9pbnQmIHRyYW5z
bGF0aW9uT2Zmc2V0KSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IExheW91dFNpemUmIHRyYW5zbGF0aW9uT2Zmc2V0KSBjb25zdAogewogICAgIFJl
ZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IHRyYW5zZm9ybVN0YXRlOwogICAgIExheW91
dFNpemUgb2Zmc2V0OwpAQCAtNDU5MSw3ICs0NTkxLDcgQEAgUGFzc1JlZlB0cjxIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGU+IFJlbmRlckxheWVyOjpjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKFJl
bmQKICAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmNy
ZWF0ZShoaXRUZXN0TG9jYXRpb24udHJhbnNmb3JtZWRQb2ludCgpLCBoaXRUZXN0TG9jYXRpb24u
dHJhbnNmb3JtZWRSZWN0KCksIEZsb2F0UXVhZChoaXRUZXN0UmVjdCkpOwogICAgICAgICBvZmZz
ZXQgPSBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKTsKICAgICB9Ci0gICAgb2Zmc2V0ICs9
IHRvTGF5b3V0U2l6ZSh0cmFuc2xhdGlvbk9mZnNldCk7CisgICAgb2Zmc2V0ICs9IHRyYW5zbGF0
aW9uT2Zmc2V0OwogCiAgICAgUmVuZGVyT2JqZWN0KiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRh
aW5lckxheWVyID8gJmNvbnRhaW5lckxheWVyLT5yZW5kZXJlcigpIDogMDsKICAgICBpZiAocmVu
ZGVyZXIoKS5zaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lclJlbmRlcmVy
KSkgewpAQCAtNDkxMiw3ICs0OTEyLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRU
ZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGEKICAgICBj
b25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRU
ZXN0TG9jYXRpb24sIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3Rh
dGUsIGRvdWJsZSogek9mZnNldCkKIHsKICAgICBMYXllckZyYWdtZW50cyBlbmNsb3NpbmdQYWdp
bmF0aW9uRnJhZ21lbnRzOwotICAgIExheW91dFBvaW50IG9mZnNldE9mUGFnaW5hdGlvbkxheWVy
RnJvbVJvb3Q7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290
OwogICAgIFJlbmRlckxheWVyKiBwYWdpbmF0ZWRMYXllciA9IGVuY2xvc2luZ1BhZ2luYXRpb25M
YXllcihJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyk7CiAgICAgTGF5b3V0UmVjdCB0
cmFuc2Zvcm1lZEV4dGVudCA9IHRyYW5zcGFyZW5jeUNsaXBCb3godGhpcywgcGFnaW5hdGVkTGF5
ZXIsIEhpdFRlc3RpbmdUcmFuc3BhcmVuY3lDbGlwQm94LCBSb290T2ZUcmFuc3BhcmVuY3lDbGlw
Qm94KTsKICAgICBwYWdpbmF0ZWRMYXllci0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdp
bmF0aW9uRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RSZWN0LCBJbmNsdWRlQ29tcG9zaXRl
ZFBhZ2luYXRlZExheWVycywKQEAgLTQ5MjcsMTEgKzQ5MjcsMTEgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVy
KiByb290TGEKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBjb21wdXRlIHRoZSBjbGlwcyB3aXRo
aW4gYSBnaXZlbiBmcmFnbWVudAogICAgICAgICBpZiAocGFyZW50KCkgIT0gcGFnaW5hdGVkTGF5
ZXIpIHsKLSAgICAgICAgICAgIG9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QgPSBwYWdp
bmF0ZWRMYXllci0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZzZXRPZlBhZ2lu
YXRpb25MYXllckZyb21Sb290KTsKKyAgICAgICAgICAgIG9mZnNldE9mUGFnaW5hdGlvbkxheWVy
RnJvbVJvb3QgPSB0b0xheW91dFNpemUocGFnaW5hdGVkTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29v
cmRzKHJvb3RMYXllciwgdG9MYXlvdXRQb2ludChvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21S
b290KSkpOwogICAgIAogICAgICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250
ZXh0KHBhZ2luYXRlZExheWVyLCBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSk7CiAgICAgICAgICAgICBMYXlvdXRSZWN0IHBhcmVudENsaXBSZWN0ID0g
YmFja2dyb3VuZENsaXBSZWN0KGNsaXBSZWN0c0NvbnRleHQpLnJlY3QoKTsKLSAgICAgICAgICAg
IHBhcmVudENsaXBSZWN0Lm1vdmVCeShmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0ICsgb2Zmc2V0
T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCk7CisgICAgICAgICAgICBwYXJlbnRDbGlwUmVjdC5t
b3ZlKGZyYWdtZW50LnBhZ2luYXRpb25PZmZzZXQgKyBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZy
b21Sb290KTsKICAgICAgICAgICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRDbGlwUmVjdCk7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00OTQ5LDcgKzQ5NDksNyBAQCBSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5
ZXIqIHJvb3RMYQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllckJ5QXBw
bHlpbmdUcmFuc2Zvcm0oUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRh
aW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
KiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0LAotICAgIGNvbnN0IExheW91dFBvaW50
JiB0cmFuc2xhdGlvbk9mZnNldCkKKyAgICBjb25zdCBMYXlvdXRTaXplJiB0cmFuc2xhdGlvbk9m
ZnNldCkKIHsKICAgICAvLyBDcmVhdGUgYSB0cmFuc2Zvcm0gc3RhdGUgdG8gYWNjdW11bGF0ZSB0
aGlzIHRyYW5zZm9ybS4KICAgICBSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBuZXdU
cmFuc2Zvcm1TdGF0ZSA9IGNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUocm9vdExheWVyLCBjb250
YWluZXJMYXllciwgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgdHJhbnNmb3JtU3RhdGUs
IHRyYW5zbGF0aW9uT2Zmc2V0KTsKQEAgLTUyNTEsNyArNTI1MSw3IEBAIENsaXBSZWN0IFJlbmRl
ckxheWVyOjpiYWNrZ3JvdW5kQ2xpcFJlY3QoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJl
Y3RzQ29udGV4CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENs
aXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHBhaW50
RGlydHlSZWN0LCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywKLSAgICBDbGlwUmVjdCYgYmFja2dy
b3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxpbmVSZWN0
LCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QpIGNvbnN0CisgICAgQ2xpcFJlY3Qm
IGJhY2tncm91bmRSZWN0LCBDbGlwUmVjdCYgZm9yZWdyb3VuZFJlY3QsIENsaXBSZWN0JiBvdXRs
aW5lUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QpIGNvbnN0CiB7CiAgICAg
aWYgKGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyICE9IHRoaXMgJiYgcGFyZW50KCkpIHsKICAg
ICAgICAgYmFja2dyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4
dCk7CkBAIC01MjU5LDIxICs1MjU5LDIxIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJl
Y3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0CiAgICAg
fSBlbHNlCiAgICAgICAgIGJhY2tncm91bmRSZWN0ID0gcGFpbnREaXJ0eVJlY3Q7CiAKLSAgICBM
YXlvdXRQb2ludCBvZmZzZXQ7CisgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQWNlc3RvcjsKICAg
ICBpZiAob2Zmc2V0RnJvbVJvb3QpCi0gICAgICAgIG9mZnNldCA9ICpvZmZzZXRGcm9tUm9vdDsK
KyAgICAgICAgb2Zmc2V0RnJvbUFjZXN0b3IgPSAqb2Zmc2V0RnJvbVJvb3Q7CiAgICAgZWxzZQot
ICAgICAgICBvZmZzZXQgPSB0b0xheW91dFBvaW50KG9mZnNldEZyb21BbmNlc3RvcihjbGlwUmVj
dHNDb250ZXh0LnJvb3RMYXllcikpOworICAgICAgICBvZmZzZXRGcm9tQWNlc3RvciA9IG9mZnNl
dEZyb21BbmNlc3RvcihjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllcik7CiAKICAgICBSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKTsKICAgICAvLyBJZiB0aGUgdmlldyBpcyBzY3JvbGxlZCwgdGhlIGZsb3cg
dGhyZWFkIGlzIG5vdCBzY3JvbGxlZCB3aXRoIGl0IGFuZCB3ZSBzaG91bGQKICAgICAvLyB0YWtl
IHRoZSBzY3JvbGwgb2Zmc2V0IGludG8gYWNjb3VudC4KICAgICBpZiAoY2xpcFJlY3RzQ29udGV4
dC5yb290TGF5ZXItPmlzT3V0T2ZGbG93UmVuZGVyRmxvd1RocmVhZCgpICYmICFuYW1lZEZsb3dG
cmFnbWVudCkgewotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCkudmlldygp
LmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIElzRml4ZWQpOwotICAgICAgICBvZmZzZXQg
Kz0gTGF5b3V0U2l6ZShhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsKKyAgICAgICAgTGF5b3V0UG9p
bnQgYWJzUG9zID0gTGF5b3V0UG9pbnQocmVuZGVyZXIoKS52aWV3KCkubG9jYWxUb0Fic29sdXRl
KEZsb2F0UG9pbnQoKSwgSXNGaXhlZCkpOworICAgICAgICBvZmZzZXRGcm9tQWNlc3RvciArPSB0
b0xheW91dFNpemUoYWJzUG9zKTsKICAgICB9CiAKLSAgICBsYXllckJvdW5kcyA9IExheW91dFJl
Y3Qob2Zmc2V0LCBzaXplKCkpOworICAgIGxheWVyQm91bmRzID0gTGF5b3V0UmVjdCh0b0xheW91
dFBvaW50KG9mZnNldEZyb21BY2VzdG9yKSwgc2l6ZSgpKTsKIAogICAgIGZvcmVncm91bmRSZWN0
ID0gYmFja2dyb3VuZFJlY3Q7CiAgICAgb3V0bGluZVJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKQEAg
LTUyOTYsNyArNTI5Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0
IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0CiAgICAgICAgICAgICAg
ICAgcmVuZGVyZXJDb250YWluaW5nQmxvY2stPmZsaXBGb3JXcml0aW5nTW9kZShsYXllckJvdW5k
c1dpdGhWaXN1YWxPdmVyZmxvdyk7CiAgICAgICAgIH0KIAotICAgICAgICBsYXllckJvdW5kc1dp
dGhWaXN1YWxPdmVyZmxvdy5tb3ZlQnkob2Zmc2V0KTsKKyAgICAgICAgbGF5ZXJCb3VuZHNXaXRo
VmlzdWFsT3ZlcmZsb3cubW92ZShvZmZzZXRGcm9tQWNlc3Rvcik7CiAgICAgICAgIGJhY2tncm91
bmRSZWN0LmludGVyc2VjdChsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7CiAKICAgICAg
ICAgZm9yZWdyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsKQEAgLTUzMTMsMTQgKzUzMTMsMTQg
QEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4
dCYgY2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwT3JP
dmVyZmxvd0NsaXAoKSkgewogICAgICAgICAvLyBUaGlzIGxheWVyIGVzdGFibGlzaGVzIGEgY2xp
cCBvZiBzb21lIGtpbmQuCiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ICYmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRl
eHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKSkgewotICAgICAg
ICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLm92
ZXJmbG93Q2xpcFJlY3Qob2Zmc2V0LCBuYW1lZEZsb3dGcmFnbWVudCwgY2xpcFJlY3RzQ29udGV4
dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOworICAgICAgICAgICAgZm9yZWdyb3Vu
ZFJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3Qo
dG9MYXlvdXRQb2ludChvZmZzZXRGcm9tQWNlc3RvciksIG5hbWVkRmxvd0ZyYWdtZW50LCBjbGlw
UmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KSk7CiAgICAgICAgICAg
ICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKQogICAgICAgICAgICAg
ICAgIGZvcmVncm91bmRSZWN0LnNldEhhc1JhZGl1cyh0cnVlKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkgewogICAgICAgICAgICAgLy8gQ2xpcCBhcHBs
aWVzIHRvICp1cyogYXMgd2VsbCwgc28gZ28gYWhlYWQgYW5kIHVwZGF0ZSB0aGUgZGFtYWdlUmVj
dC4KLSAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRl
cmVyKCkpLmNsaXBSZWN0KG9mZnNldCwgbmFtZWRGbG93RnJhZ21lbnQpOworICAgICAgICAgICAg
TGF5b3V0UmVjdCBuZXdQb3NDbGlwID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qo
dG9MYXlvdXRQb2ludChvZmZzZXRGcm9tQWNlc3RvciksIG5hbWVkRmxvd0ZyYWdtZW50KTsKICAg
ICAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAg
ICAgIGZvcmVncm91bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIG91
dGxpbmVSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKQEAgLTUzMzQsNyArNTMzNCw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNs
aXBSZWN0c0NvbnRleHQsIGNvbnN0CiAgICAgICAgICAgICAvLyBpbmRpdmlkdWFsIHJlZ2lvbiBi
b3hlcyBhcyBvdmVyZmxvdy4KICAgICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRo
VmlzdWFsT3ZlcmZsb3cgPSBuYW1lZEZsb3dGcmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT52
aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3gocmVuZGVyQm94KCkpIDogcmVuZGVyQm94KCktPnZpc3Vh
bE92ZXJmbG93UmVjdCgpOwogICAgICAgICAgICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5n
TW9kZShsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7IC8vIExheWVycyBhcmUgaW4gcGh5
c2ljYWwgY29vcmRpbmF0ZXMsIHNvIHRoZSBvdmVyZmxvdyBoYXMgdG8gYmUgZmxpcHBlZC4KLSAg
ICAgICAgICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1vdmVCeShvZmZzZXQpOwor
ICAgICAgICAgICAgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZShvZmZzZXRGcm9t
QWNlc3Rvcik7CiAgICAgICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RM
YXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92
ZXJmbG93Q2xpcCkKICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QobGF5
ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogICAgICAgICB9IGVsc2UgewpAQCAtNTM0Myw3
ICs1MzQzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJl
Y3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICAgICAgICAgIGlmIChuYW1l
ZEZsb3dGcmFnbWVudCkKICAgICAgICAgICAgICAgICBib3VuZHMgPSBuYW1lZEZsb3dGcmFnbWVu
dC0+cmVjdEZsb3dQb3J0aW9uRm9yQm94KHJlbmRlckJveCgpLCBib3VuZHMpOwogCi0gICAgICAg
ICAgICBib3VuZHMubW92ZUJ5KG9mZnNldCk7CisgICAgICAgICAgICBib3VuZHMubW92ZShvZmZz
ZXRGcm9tQWNlc3Rvcik7CiAgICAgICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0
LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVz
cGVjdE92ZXJmbG93Q2xpcCkKICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNl
Y3QoYm91bmRzKTsKICAgICAgICAgICAgIApAQCAtNTM5NCw3ICs1Mzk0LDcgQEAgTGF5b3V0UmVj
dCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29sJiBjbGlwRXhjZWVkc0JvdW5kcykgY29u
c3QKICAgICAvLyBGSVhNRTogYm9yZGVyLXJhZGl1cyBub3QgYWNjb3VudGVkIGZvci4KICAgICAv
LyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KICAgICBSZW5kZXJMYXllciogY2xp
cHBpbmdSb290TGF5ZXIgPSBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpOwotICAgIExheW91dFBv
aW50IG9mZnNldEZyb21Sb290ID0gdG9MYXlvdXRQb2ludChvZmZzZXRGcm9tQW5jZXN0b3IoY2xp
cHBpbmdSb290TGF5ZXIpKTsKKyAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290ID0gb2Zmc2V0
RnJvbUFuY2VzdG9yKGNsaXBwaW5nUm9vdExheWVyKTsKIAogICAgIExheW91dFJlY3QgbGF5ZXJC
b3VuZHM7CiAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRs
aW5lUmVjdDsKQEAgLTU0MDcsNyArNTQwNyw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6Omxv
Y2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0CiAKICAgICBpZiAocmVu
ZGVyZXIoKS5oYXNDbGlwKCkpIHsKICAgICAgICAgLy8gQ1NTIGNsaXAgbWF5IGJlIGxhcmdlciB0
aGFuIG91ciBib3JkZXIgYm94LgotICAgICAgICBMYXlvdXRSZWN0IGNzc0NsaXBSZWN0ID0gdG9S
ZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3Qob2Zmc2V0RnJvbVJvb3QsIGN1cnJlbnRSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpKTsKKyAgICAgICAgTGF5b3V0UmVjdCBjc3NDbGlwUmVjdCA9
IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJv
bVJvb3QpLCBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSk7CiAgICAgICAgIGNsaXBF
eGNlZWRzQm91bmRzID0gIWNsaXBSZWN0LmNvbnRhaW5zKGNzc0NsaXBSZWN0KTsKICAgICB9CiAK
QEAgLTU0NDUsNyArNTQ0NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1NlbGVj
dGlvbkdhcHMoKQogICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CiB9
CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJl
Y3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJvb3QsIGNv
bnN0IExheW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAorYm9vbCBSZW5kZXJMYXll
cjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IGNvbnN0IExheW91dFNpemUqIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRSZWN0KiBjYWNo
ZWRCb3VuZGluZ0JveCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgZXhhbWluZSB0aGUgY2FudmFz
IGFuZCB0aGUgcm9vdC4KICAgICAvLyBGSVhNRTogQ291bGQgZWxpbWluYXRlIHRoZSBpc1Jvb3Qo
KSBjaGVjayBpZiB3ZSBmaXggYmFja2dyb3VuZCBwYWludGluZyBzbyB0aGF0IHRoZSBSZW5kZXJW
aWV3CkBAIC01NTI3LDcgKzU1MjcsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbEJv
dW5kaW5nQm94KENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29u
c3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3Mg
ZmxhZ3MsIGNvbnN0IExheW91dFBvaW50KiBvZmZzZXRGcm9tUm9vdCkgY29uc3QKK0xheW91dFJl
Y3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3Rvckxh
eWVyLCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzLCBjb25zdCBMYXlvdXRTaXplKiBv
ZmZzZXRGcm9tUm9vdCkgY29uc3QKIHsgICAgCiAgICAgTGF5b3V0UmVjdCByZXN1bHQgPSBsb2Nh
bEJvdW5kaW5nQm94KGZsYWdzKTsKICAgICBpZiAocmVuZGVyZXIoKS5pc0JveCgpKQpAQCAtNTU2
Myw3ICs1NTYzLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29uc3Qg
UmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIENhbGN1bGF0ZUwKICAgICAKICAgICBMYXlvdXRT
aXplIGRlbHRhOwogICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKLSAgICAgICAgZGVsdGEgPSB0b0xh
eW91dFNpemUoKm9mZnNldEZyb21Sb290KTsKKyAgICAgICAgZGVsdGEgPSAqb2Zmc2V0RnJvbVJv
b3Q7CiAgICAgZWxzZQogICAgICAgICBkZWx0YSA9IG9mZnNldEZyb21BbmNlc3RvcihhbmNlc3Rv
ckxheWVyKTsKICAgICAKQEAgLTU1ODEsNyArNTU4MSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJMYXll
cjo6YWJzb2x1dGVCb3VuZGluZ0JveEZvclBhaW50aW5nKCkgY29uc3QKICAgICByZXR1cm4gcGl4
ZWxTbmFwcGVkRm9yUGFpbnRpbmcoYm91bmRpbmdCb3gocm9vdCgpKSwgcmVuZGVyZXIoKS5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckxheWVy
OjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwg
Y29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290LCBDYWxjdWxhdGVMYXllckJvdW5kc0Zs
YWdzIGZsYWdzKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJC
b3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFNpemUq
IG9mZnNldEZyb21Sb290LCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdAog
ewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpKQogICAgICAgICByZXR1cm4gTGF5b3V0
UmVjdCgpOwpAQCAtNTY5NCwxMiArNTY5NCwxMiBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpj
YWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwog
ICAgICAgICB1bmlvbkJvdW5kcyA9IGFmZmluZVRyYW5zLT5tYXBSZWN0KHVuaW9uQm91bmRzKTsK
ICAgICB9CiAKLSAgICBMYXlvdXRTaXplIGFuY2VzdG9yUmVsT2Zmc2V0OworICAgIExheW91dFNp
emUgb2Zmc2V0RnJvbUFuY2VzdG9yOwogICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKLSAgICAgICAg
YW5jZXN0b3JSZWxPZmZzZXQgPSB0b0xheW91dFNpemUoKm9mZnNldEZyb21Sb290KTsKKyAgICAg
ICAgb2Zmc2V0RnJvbUFuY2VzdG9yID0gKm9mZnNldEZyb21Sb290OwogICAgIGVsc2UKLSAgICAg
ICAgYW5jZXN0b3JSZWxPZmZzZXQgPSBvZmZzZXRGcm9tQW5jZXN0b3IoYW5jZXN0b3JMYXllcik7
Ci0gICAgdW5pb25Cb3VuZHMubW92ZShhbmNlc3RvclJlbE9mZnNldCk7CisgICAgICAgIG9mZnNl
dEZyb21BbmNlc3RvciA9IHRoaXMtPm9mZnNldEZyb21BbmNlc3RvcihhbmNlc3RvckxheWVyKTsK
KyAgICB1bmlvbkJvdW5kcy5tb3ZlKG9mZnNldEZyb21BbmNlc3Rvcik7CiAgICAgCiAgICAgcmV0
dXJuIHVuaW9uQm91bmRzOwogfQpAQCAtNjc0MSw3ICs2NzQxLDcgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0Rmxvd1RocmVhZElmUmVnaW9uRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ20KIAogICAgICAgICAvLyBFeHBhbmQgdGhlIGhpdC10ZXN0IHJlY3QgdG8gdGhlIGZs
b3cgdGhyZWFkJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgICAgIExheW91dFJlY3QgaGl0VGVz
dFJlY3RJbkZsb3dUaHJlYWQgPSBoaXRUZXN0UmVjdDsKLSAgICAgICAgaGl0VGVzdFJlY3RJbkZs
b3dUaHJlYWQubW92ZShoaXRUZXN0T2Zmc2V0LndpZHRoKCksIGhpdFRlc3RPZmZzZXQuaGVpZ2h0
KCkpOworICAgICAgICBoaXRUZXN0UmVjdEluRmxvd1RocmVhZC5tb3ZlKGhpdFRlc3RPZmZzZXQp
OwogICAgICAgICBoaXRUZXN0UmVjdEluRmxvd1RocmVhZC5leHBhbmQoTGF5b3V0U2l6ZShmYWJz
KChkb3VibGUpaGl0VGVzdE9mZnNldC53aWR0aCgpKSwgZmFicygoZG91YmxlKWhpdFRlc3RPZmZz
ZXQuaGVpZ2h0KCkpKSk7CiAKICAgICAgICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRNYWludGFp
bmVyIGZsb3dUaHJlYWRNYWludGFpbmVyKGZsb3dUaHJlYWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuaAppbmRleCBkMGE2ZTVkYmQwNmVjNjYxYzk1N2NmNzljMjY0YWI5MzFm
YWFlNWIwLi5jNjFhNmNjN2NkMzY5YmMyMDk3NmRhYTRhYTMzNTE4MzZjMWVmZmQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMzIwLDcgKzMyMCw3IEBAIHB1Ymxp
YzoKICAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94OwogICAgIAogICAgIC8vIFVuaXF1ZSB0byBw
YWdpbmF0ZWQgZnJhZ21lbnRzLiBUaGUgcGh5c2ljYWwgdHJhbnNsYXRpb24gdG8gYXBwbHkgdG8g
c2hpZnQgdGhlIGxheWVyIHdoZW4gcGFpbnRpbmcvaGl0LXRlc3RpbmcuCi0gICAgTGF5b3V0UG9p
bnQgcGFnaW5hdGlvbk9mZnNldDsKKyAgICBMYXlvdXRTaXplIHBhZ2luYXRpb25PZmZzZXQ7CiAg
ICAgCiAgICAgLy8gQWxzbyB1bmlxdWUgdG8gcGFnaW5hdGVkIGZyYWdtZW50cy4gQW4gYWRkaXRp
b25hbCBjbGlwIHRoYXQgYXBwbGllcyB0byB0aGUgbGF5ZXIuIEl0IGlzIGluIGxheWVyLWxvY2Fs
CiAgICAgLy8gKHBoeXNpY2FsKSBjb29yZGluYXRlcy4KQEAgLTcwMCw3ICs3MDAsNyBAQCBwdWJs
aWM6CiAgICAgLy8gZm9yIHBhaW50aW5nL2V2ZW50IGhhbmRsaW5nLgogICAgIC8vIFBhc3Mgb2Zm
c2V0RnJvbVJvb3QgaWYga25vd24uCiAgICAgdm9pZCBjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlw
UmVjdHNDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIExheW91dFJl
Y3QmIGxheWVyQm91bmRzLAotICAgICAgICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBS
ZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRQ
b2ludCogb2Zmc2V0RnJvbVJvb3QgPSBudWxscHRyKSBjb25zdDsKKyAgICAgICAgQ2xpcFJlY3Qm
IGJhY2tncm91bmRSZWN0LCBDbGlwUmVjdCYgZm9yZWdyb3VuZFJlY3QsIENsaXBSZWN0JiBvdXRs
aW5lUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QgPSBudWxscHRyKSBjb25z
dDsKIAogICAgIC8vIENvbXB1dGUgYW5kIGNhY2hlIGNsaXAgcmVjdHMgY29tcHV0ZWQgd2l0aCB0
aGUgZ2l2ZW4gbGF5ZXIgYXMgdGhlIHJvb3QKICAgICB2b2lkIHVwZGF0ZUNsaXBSZWN0cyhjb25z
dCBDbGlwUmVjdHNDb250ZXh0Jik7CkBAIC03MTksNyArNzE5LDcgQEAgcHVibGljOgogICAgIExh
eW91dFJlY3QgbG9jYWxDbGlwUmVjdChib29sJiBjbGlwRXhjZWVkc0JvdW5kcykgY29uc3Q7IC8v
IFJldHVybnMgdGhlIGJhY2tncm91bmQgY2xpcCByZWN0IG9mIHRoZSBsYXllciBpbiB0aGUgbG9j
YWwgY29vcmRpbmF0ZSBzcGFjZS4KIAogICAgIC8vIFBhc3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25v
d24uCi0gICAgYm9vbCBpbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXll
ckJvdW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0ciwg
Y29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3ggPSBudWxscHRyKSBjb25zdDsKKyAg
ICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRz
LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExh
eWVyLCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCA9IG51bGxwdHIsIGNvbnN0IExh
eW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94ID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICBlbnVt
IENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZyB7CiAgICAgICAgIEluY2x1ZGVTZWxmVHJhbnNmb3Jt
ID0gMSA8PCAwLApAQCAtNzM1LDcgKzczNSw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHVuc2ln
bmVkIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3M7CiAKICAgICAvLyBCb3VuZGluZyBib3ggcmVs
YXRpdmUgdG8gc29tZSBhbmNlc3RvciBsYXllci4gUGFzcyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93
bi4KLSAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5
ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zm
c2V0RnJvbVJvb3QgPSBudWxscHRyKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94
KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3Mg
PSAwLCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCA9IG51bGxwdHIpIGNvbnN0Owog
ICAgIC8vIEJvdW5kaW5nIGJveCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhpcyBsYXllci4KICAg
ICBMYXlvdXRSZWN0IGxvY2FsQm91bmRpbmdCb3goQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9
IDApIGNvbnN0OwogICAgIC8vIERlcHJlY2F0ZWQ6IFBpeGVsIHNuYXBwZWQgYm91bmRpbmcgYm94
IHJlbGF0aXZlIHRvIHRoZSByb290LgpAQCAtNzU1LDcgKzc1NSw3IEBAIHB1YmxpYzoKICNlbmRp
ZgogCiAgICAgLy8gQ2FuIHBhc3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCi0gICAgTGF5b3V0
UmVjdCBjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXll
ciwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0ciwgQ2FsY3VsYXRl
TGF5ZXJCb3VuZHNGbGFncyA9IERlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25z
dDsKKyAgICBMYXlvdXRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVy
KiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCA9IG51bGxw
dHIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSBEZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3Vu
ZHNGbGFncykgY29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJuIGEgY2FjaGVkIHJlcGFpbnQgcmVj
dCwgY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhlIGxheWVyIHJlbmRlcmVyJ3MgY29udGFpbmVyRm9y
UmVwYWludC4KICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZXBhaW50UmVjdDsgfQpAQCAtOTg2LDI0ICs5ODYsMjQgQEAgcHJpdmF0ZToKICAgICB9OwogCiAg
ICAgYm9vbCBzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQqLCBi
b29sJiBkaWRRdWFudGl6ZUZvbnRzKTsKLSAgICBib29sIHNldHVwQ2xpcFBhdGgoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgb2Zm
c2V0RnJvbVJvb3QsIExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcywgYm9vbCYgcm9vdFJl
bGF0aXZlQm91bmRzQ29tcHV0ZWQpOworICAgIGJvb2wgc2V0dXBDbGlwUGF0aChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIGNvbnN0IExheW91dFNpemUmIG9mZnNl
dEZyb21Sb290LCBMYXlvdXRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJvb3RSZWxh
dGl2ZUJvdW5kc0NvbXB1dGVkKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPiBzZXR1cEZpbHRlcnMoR3JhcGhp
Y3NDb250ZXh0KiwgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExh
eW91dFBvaW50JiBvZmZzZXRGcm9tUm9vdCwgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRz
LCBib29sJiByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPiBzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250ZXh0
KiwgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290LCBMYXlvdXRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMsIGJvb2wmIHJv
b3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKTsKICAgICBHcmFwaGljc0NvbnRleHQqIGFwcGx5Rmls
dGVycyhGaWx0ZXJFZmZlY3RSZW5kZXJlckhlbHBlciosIEdyYXBoaWNzQ29udGV4dCogb3JpZ2lu
YWxDb250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYsIExheWVyRnJhZ21lbnRzJik7CiAjZW5kaWYK
IAogICAgIHZvaWQgcGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludEZpeGVkTGF5ZXJzSW5O
YW1lZEZsb3dzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFp
bnRMYXllckZsYWdzKTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50c0FuZFJlZmxlY3Rpb24o
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxh
Z3MpOwotICAgIHZvaWQgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExh
eW91dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFBvaW50KCkpOworICAgIHZvaWQg
cGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGNvbnN0IExheW91dFNpemUmIHRyYW5z
bGF0aW9uT2Zmc2V0ID0gTGF5b3V0U2l6ZSgpKTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50
cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJG
bGFncyk7CiAgICAgdm9pZCBwYWludExpc3QoVmVjdG9yPFJlbmRlckxheWVyKj4qLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAK
ICAgICB2b2lkIGNvbGxlY3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBSZW5kZXJM
YXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsCiAgICAgICAgIFBh
Z2luYXRpb25JbmNsdXNpb25Nb2RlLAogICAgICAgICBDbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUsCi0gICAgICAgIFNob3VsZFJlc3BlY3RPdmVyZmxvd0Ns
aXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRQb2ludCogb2Zmc2V0RnJvbVJv
b3QgPSBudWxscHRyLCBjb25zdCBMYXlvdXRSZWN0KiBsYXllckJvdW5kaW5nQm94ID0gbnVsbHB0
ciwgU2hvdWxkQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMgPSBJZ25vcmVSb290T2Zmc2V0Rm9y
RnJhZ21lbnRzKTsKLSAgICB2b2lkIHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhMYXll
ckZyYWdtZW50cyYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzLCBi
b29sIHNob3VsZFBhaW50Q29udGVudCwgY29uc3QgTGF5b3V0UG9pbnQqIG9mZnNldEZyb21Sb290
KTsKKyAgICAgICAgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0Ns
aXAsIGNvbnN0IExheW91dFNpemUqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0ciwgY29uc3QgTGF5
b3V0UmVjdCogbGF5ZXJCb3VuZGluZ0JveCA9IG51bGxwdHIsIFNob3VsZEFwcGx5Um9vdE9mZnNl
dFRvRnJhZ21lbnRzID0gSWdub3JlUm9vdE9mZnNldEZvckZyYWdtZW50cyk7CisgICAgdm9pZCB1
cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgYm9vbCBzaG91bGRQYWludENvbnRlbnQs
IGNvbnN0IExheW91dFNpemUqIG9mZnNldEZyb21Sb290KTsKICAgICB2b2lkIHBhaW50QmFja2dy
b3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCos
IEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAogICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNw
YXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9i
amVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5k
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgR3Jh
cGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCkBAIC0xMDIwLDcgKzEwMjAs
NyBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0g
bnVsbHB0ciwgZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAgICAgUmVuZGVyTGF5ZXIqIGhp
dFRlc3RMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVu
ZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLAogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIs
IGRvdWJsZSogek9mZnNldCA9IG51bGxwdHIsCi0gICAgICAgIGNvbnN0IExheW91dFBvaW50JiB0
cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFBvaW50KCkpOworICAgICAgICBjb25zdCBMYXlvdXRT
aXplJiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFNpemUoKSk7CiAgICAgUmVuZGVyTGF5ZXIq
IGhpdFRlc3RMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiwgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwK
ICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYsCiAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSosIGRvdWJsZSog
ek9mZnNldEZvckRlc2NlbmRhbnRzLCBkb3VibGUqIHpPZmZzZXQsCkBAIC0xMDM3LDcgKzEwMzcs
NyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBj
cmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxh
eWVyKiBjb250YWluZXJMYXllciwKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJl
Y3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsCiAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFu
c2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUsCi0gICAgICAgIGNvbnN0IExheW91
dFBvaW50JiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFBvaW50KCkpIGNvbnN0OworICAgICAg
ICBjb25zdCBMYXlvdXRTaXplJiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFNpemUoKSkgY29u
c3Q7CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENv
bnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZp
bHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKaW5kZXggNDFmZTk3NTUwNDA1YjI1
NDQ4ZmFiZWRmZDA0Mjc1NjY0ZGIxNTQ0NC4uYWY1OWVlZWViNWM3OGRhYjZlZDc1YzM3NTcyOWUy
Mjc2YmNhMTdhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TZXQuY3BwCkBAIC03NTUsNyArNzU1LDcgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVt
blNldDo6Y29sbGVjdExheWVyRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNv
bnMKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGFsc28gbmVlZCB0byBpbnRlcnNlY3QgdGhlIGRp
cnR5IHJlY3QuIFdlIGhhdmUgdG8gYXBwbHkgYSB0cmFuc2xhdGlvbiBhbmQgc2hpZnQgYmFzZWQg
b2ZmCiAgICAgICAgIC8vIG91ciBjb2x1bW4gaW5kZXguCi0gICAgICAgIExheW91dFBvaW50IHRy
YW5zbGF0aW9uT2Zmc2V0OworICAgICAgICBMYXlvdXRTaXplIHRyYW5zbGF0aW9uT2Zmc2V0Owog
ICAgICAgICBMYXlvdXRVbml0IGlubGluZU9mZnNldCA9IHByb2dyZXNzaW9uSXNJbmxpbmUgPyBp
ICogKGNvbExvZ2ljYWxXaWR0aCArIGNvbEdhcCkgOiBMYXlvdXRVbml0KCk7CiAgICAgICAgIAog
ICAgICAgICBib29sIGxlZnRUb1JpZ2h0ID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgXiBwcm9ncmVzc2lvblJldmVyc2VkOwpAQCAtNzY0LDcgKzc2NCw3IEBAIHZvaWQgUmVuZGVy
TXVsdGlDb2x1bW5TZXQ6OmNvbGxlY3RMYXllckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJh
Z21lbnRzLCBjb25zCiAgICAgICAgICAgICBpZiAocHJvZ3Jlc3Npb25SZXZlcnNlZCkKICAgICAg
ICAgICAgICAgICBpbmxpbmVPZmZzZXQgKz0gY29udGVudExvZ2ljYWxXaWR0aCgpIC0gY29sTG9n
aWNhbFdpZHRoOwogICAgICAgICB9Ci0gICAgICAgIHRyYW5zbGF0aW9uT2Zmc2V0LnNldFgoaW5s
aW5lT2Zmc2V0KTsKKyAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQuc2V0V2lkdGgoaW5saW5lT2Zm
c2V0KTsKICAgICAgICAgTGF5b3V0VW5pdCBibG9ja09mZnNldCA9IGluaXRpYWxCbG9ja09mZnNl
dCArIGxvZ2ljYWxUb3AoKSAtIGZsb3dUaHJlYWQoKS0+bG9naWNhbFRvcCgpICsgKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyAtZmxvd1RocmVhZFBvcnRpb24ueSgpIDogLWZsb3dUaHJlYWRQ
b3J0aW9uLngoKSk7CiAgICAgICAgIGlmICghcHJvZ3Jlc3Npb25Jc0lubGluZSkgewogICAgICAg
ICAgICAgaWYgKCFwcm9ncmVzc2lvblJldmVyc2VkKQpAQCAtNzc0LDEzICs3NzQsMTMgQEAgdm9p
ZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6Y29sbGVjdExheWVyRnJhZ21lbnRzKExheWVyRnJhZ21l
bnRzJiBmcmFnbWVudHMsIGNvbnMKICAgICAgICAgfQogICAgICAgICBpZiAoaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoc3R5bGUoKS53cml0aW5nTW9kZSgpKSkKICAgICAgICAgICAgIGJsb2Nr
T2Zmc2V0ID0gLWJsb2NrT2Zmc2V0OwotICAgICAgICB0cmFuc2xhdGlvbk9mZnNldC5zZXRZKGJs
b2NrT2Zmc2V0KTsKKyAgICAgICAgdHJhbnNsYXRpb25PZmZzZXQuc2V0SGVpZ2h0KGJsb2NrT2Zm
c2V0KTsKICAgICAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAg
ICAgdHJhbnNsYXRpb25PZmZzZXQgPSB0cmFuc2xhdGlvbk9mZnNldC50cmFuc3Bvc2VkUG9pbnQo
KTsKKyAgICAgICAgICAgIHRyYW5zbGF0aW9uT2Zmc2V0ID0gdHJhbnNsYXRpb25PZmZzZXQudHJh
bnNwb3NlZFNpemUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFNoaWZ0IHRoZSBkaXJ0eSByZWN0
IHRvIGJlIGluIGZsb3cgdGhyZWFkIGNvb3JkaW5hdGVzIHdpdGggdGhpcyB0cmFuc2xhdGlvbiBh
cHBsaWVkLgogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zbGF0ZWREaXJ0eVJlY3QoZGlydHlSZWN0
KTsKLSAgICAgICAgdHJhbnNsYXRlZERpcnR5UmVjdC5tb3ZlQnkoLXRyYW5zbGF0aW9uT2Zmc2V0
KTsKKyAgICAgICAgdHJhbnNsYXRlZERpcnR5UmVjdC5tb3ZlKC10cmFuc2xhdGlvbk9mZnNldCk7
CiAgICAgICAgIAogICAgICAgICAvLyBTZWUgaWYgd2UgaW50ZXJzZWN0IHRoZSBkaXJ0eSByZWN0
LgogICAgICAgICBjbGlwcGVkUmVjdCA9IGxheWVyQm91bmRpbmdCb3g7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>