<?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>164778</bug_id>
          
          <creation_ts>2016-11-15 10:02:12 -0800</creation_ts>
          <short_desc>Avoid copying vector of attributes as much as possible in the HTML parser</short_desc>
          <delta_ts>2016-11-15 17:16:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1251467</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-11-15 10:02:12 -0800</bug_when>
    <thetext>Avoid copying vector of attributes as much as possible in the HTML parser by moving AtomicHTMLToken around and making it obvious it is safe to move its attributes vector as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251469</commentid>
    <comment_count>1</comment_count>
      <attachid>294847</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-11-15 10:04:45 -0800</bug_when>
    <thetext>Created attachment 294847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251471</commentid>
    <comment_count>2</comment_count>
      <attachid>294848</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-11-15 10:18:01 -0800</bug_when>
    <thetext>Created attachment 294848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251733</commentid>
    <comment_count>3</comment_count>
      <attachid>294848</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-15 17:16:35 -0800</bug_when>
    <thetext>Comment on attachment 294848
Patch

Clearing flags on attachment: 294848

Committed r208776: &lt;http://trac.webkit.org/changeset/208776&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251734</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-15 17:16:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294847</attachid>
            <date>2016-11-15 10:04:45 -0800</date>
            <delta_ts>2016-11-15 10:17:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164778-20161115100444.patch</filename>
            <type>text/plain</type>
            <size>90583</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGFkYmNiMTRlMjNhMGZk
OGZmY2JjOGVjNTVlNWIyZmMxZDdkOWU3MC4uYjgxZGYzZDE5NDk3NzExZmQ1MGE1MzM5NDBlNDM2
ZjdjNjg4OTRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDE2LTExLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgY29weWluZyB2ZWN0
b3Igb2YgYXR0cmlidXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGluIHRoZSBIVE1MIHBhcnNlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0Nzc4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgY29w
eWluZyB2ZWN0b3Igb2YgYXR0cmlidXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGluIHRoZSBIVE1M
IHBhcnNlciBieSBtb3ZpbmcKKyAgICAgICAgQXRvbWljSFRNTFRva2VuIGFyb3VuZCBhbmQgbWFr
aW5nIGl0IG9idmlvdXMgaXQgaXMgc2FmZSB0byBtb3ZlIGl0cyBhdHRyaWJ1dGVzCisgICAgICAg
IHZlY3RvciBhcyB3ZWxsLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gV2ViLWV4cG9zZWQg
YmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogaHRtbC9wYXJzZXIvQXRvbWljSFRNTFRva2Vu
Lmg6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OkF0b21pY0hUTUxUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpmaW5kQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbklu
dG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25Eb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uSFRNTEh0
bWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSGVhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxCb2R5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVt
ZW50SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JtYXR0aW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9yZWlnbkVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50T3JG
aW5kQ3VzdG9tRWxlbWVudEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJz
ZXI6OmNvbnN0cnVjdFRyZWVGcm9tSFRNTFRva2VuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MU3RhY2tJdGVtLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tJdGVtOjpIVE1MU3Rh
Y2tJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdGFja0l0ZW06OmNyZWF0ZSk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rpb25EYXRhOjpDdXN0b21FbGVtZW50Q29uc3RydWN0aW9u
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlRW5kVGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5C
dXR0b25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3ND
bG9zZVdoZW5OZXN0ZWRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjppbnNlcnRHZW5lcmljSFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZUVuZFRhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGVGb3JJblRlbXBsYXRlQ29udGVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
blRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0h0bWxTdGFy
dFRhZ0ZvckluQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NCb2R5RW5kVGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluUm93KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJbkJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5U
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29tbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckJlZm9yZUhUTUwpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQmVmb3JlSGVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5IZWFkTm9zY3JpcHQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQWZ0ZXJIZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9y
SW5IZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVy
aWNSQ0RBVEFTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6c2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6cGFyc2VFcnJvcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVs
ZW1lbnQpOgorCiAyMDE2LTExLTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgQXZvaWQgY29weWluZyBhdHRyaWJ1dGVzIHZlY3RvciB3aGVuIGNvbnN0cnVjdGlu
ZyBhIEN1c3RvbUVsZW1lbnQgaW4gSFRNTFRyZWVCdWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9BdG9taWNIVE1MVG9rZW4uaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0F0b21pY0hUTUxUb2tlbi5oCmluZGV4IDExZjJiZGE4YzFhMDVlYTc4MTRhOTdk
YjY5NTQzYWU5NjBiNzdjNzAuLjdlOTUxMDc5MjE2ZDkyN2JlY2UxOWMyNDczMzE0ZWMzM2JmNGY1
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21pY0hUTUxUb2tl
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21pY0hUTUxUb2tlbi5oCkBA
IC0zMyw3ICszMywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdG9taWNIVE1MVG9r
ZW4gewogcHVibGljOgogICAgIGV4cGxpY2l0IEF0b21pY0hUTUxUb2tlbihIVE1MVG9rZW4mKTsK
LSAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuOjpUeXBlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIFZlY3RvcjxBdHRyaWJ1dGU+JiYgPSBWZWN0b3I8QXR0cmlidXRlPigpKTsgLy8gT25s
eSBTdGFydFRhZyBvciBFbmRUYWcuCisgICAgQXRvbWljSFRNTFRva2VuKEhUTUxUb2tlbjo6VHlw
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0b3I8QXR0cmlidXRlPiYmID0geyB9KTsg
Ly8gT25seSBTdGFydFRhZyBvciBFbmRUYWcuCisKKyAgICBBdG9taWNIVE1MVG9rZW4oY29uc3Qg
QXRvbWljSFRNTFRva2VuJikgPSBkZWxldGU7CisgICAgQXRvbWljSFRNTFRva2VuKEF0b21pY0hU
TUxUb2tlbiYmKSA9IGRlZmF1bHQ7CiAKICAgICBIVE1MVG9rZW46OlR5cGUgdHlwZSgpIGNvbnN0
OwogCkBAIC04OCw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEF0dHJpYnV0ZT4gbV9h
dHRyaWJ1dGVzOyAvLyBTdGFydFRhZywgRW5kVGFnLgogfTsKIAotQXR0cmlidXRlKiBmaW5kQXR0
cmlidXRlKFZlY3RvcjxBdHRyaWJ1dGU+JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworY29uc3Qg
QXR0cmlidXRlKiBmaW5kQXR0cmlidXRlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogCiBpbmxpbmUgSFRNTFRva2VuOjpUeXBlIEF0b21pY0hUTUxUb2tl
bjo6dHlwZSgpIGNvbnN0CiB7CkBAIC0xNjksNyArMTcyLDcgQEAgaW5saW5lIFN0cmluZyBBdG9t
aWNIVE1MVG9rZW46OnN5c3RlbUlkZW50aWZpZXIoKSBjb25zdAogICAgIHJldHVybiBTdHJpbmdJ
bXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShtX2RvY3R5cGVEYXRhLT5zeXN0ZW1JZGVudGlmaWVy
KTsKIH0KIAotaW5saW5lIEF0dHJpYnV0ZSogZmluZEF0dHJpYnV0ZShWZWN0b3I8QXR0cmlidXRl
PiYgYXR0cmlidXRlcywgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK2lubGluZSBjb25zdCBB
dHRyaWJ1dGUqIGZpbmRBdHRyaWJ1dGUoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0
ZXMsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7CiAgICAgZm9yIChhdXRvJiBhdHRyaWJ1
dGUgOiBhdHRyaWJ1dGVzKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpLm1hdGNoZXMo
bmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAKaW5kZXggZTBkMjdlMjMwNTAwNzU2NDA5YjhmYTc1NjYxNmYzYTY4OTk3ZDU0
OC4uZmMzOTA0MGE4ZTNlODRlZGEzNzlhNDJhYTI4NDNmN2E2YWZlZjBkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAt
NDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFRlbXBsYXRlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxVbmtub3duRWxlbWVudC5oIgor
I2luY2x1ZGUgIkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAg
LTI1OCwxOSArMjU5LDE5IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmRpc3BhdGNoRG9j
dW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKQogICAgICAgICBmcmFtZS0+aW5qZWN0VXNl
clNjcmlwdHMoSW5qZWN0QXREb2N1bWVudFN0YXJ0KTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRU
YWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIGF1dG8gZWxlbWVu
dCA9IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwogICAgIHNldEF0dHJpYnV0
ZXMoZWxlbWVudCwgdG9rZW4sIG1fcGFyc2VyQ29udGVudFBvbGljeSk7CiAgICAgYXR0YWNoTGF0
ZXIobV9hdHRhY2htZW50Um9vdCwgZWxlbWVudC5jb3B5UmVmKCkpOwotICAgIG1fb3BlbkVsZW1l
bnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQuY29w
eVJlZigpLCB0b2tlbikpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQo
SFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQuY29weVJlZigpLCBXVEZNb3ZlKHRva2VuKSkp
OwogCiAgICAgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgZWxlbWVudC0+aW5zZXJ0ZWRCeVBh
cnNlcigpOwogICAgIGRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKTsK
IH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2Vu
SW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgRWxlbWVudCYgZWxlbWVudCkKK3Zv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuLCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlm
ICh0b2tlbi5hdHRyaWJ1dGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0yODEs
MTkgKzI4MiwxOSBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNG
cm9tVG9rZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4mCiAgICAgfQogfQogCi12b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRt
bFN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIC8vIEZyYWdt
ZW50cyBkbyBub3QgaGF2ZSBhIHJvb3QgSFRNTCBlbGVtZW50LCBzbyBhbnkgYWRkaXRpb25hbCBI
VE1MIGVsZW1lbnRzCiAgICAgLy8gZW5jb3VudGVyZWQgZHVyaW5nIGZyYWdtZW50IHBhcnNpbmcg
c2hvdWxkIGJlIGlnbm9yZWQuCiAgICAgaWYgKG1faXNQYXJzaW5nRnJhZ21lbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KHRva2Vu
LCBtX29wZW5FbGVtZW50cy5odG1sRWxlbWVudCgpKTsKKyAgICBtZXJnZUF0dHJpYnV0ZXNGcm9t
VG9rZW5JbnRvRWxlbWVudChXVEZNb3ZlKHRva2VuKSwgbV9vcGVuRWxlbWVudHMuaHRtbEVsZW1l
bnQoKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5U3Rh
cnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlv
blNpdGU6Omluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYgdG9r
ZW4pCiB7Ci0gICAgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQodG9rZW4sIG1f
b3BlbkVsZW1lbnRzLmJvZHlFbGVtZW50KCkpOworICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tl
bkludG9FbGVtZW50KFdURk1vdmUodG9rZW4pLCBtX29wZW5FbGVtZW50cy5ib2R5RWxlbWVudCgp
KTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6c2V0RGVmYXVsdENvbXBhdGliaWxp
dHlNb2RlKCkKQEAgLTQwNCw3ICs0MDUsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpm
aW5pc2hlZFBhcnNpbmcoKQogICAgIG1fZG9jdW1lbnQuZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAK
LXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkRPQ1RZUEUpOwogCkBAIC00MjgsNjUgKzQyOSw2NSBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHNl
dENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUodG9rZW4ubmFtZSgpLCBwdWJsaWNJZCwgc3lz
dGVtSWQpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRD
b21tZW50KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuOjpDb21tZW50KTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgp
LCBDb21tZW50OjpjcmVhdGUob3duZXJEb2N1bWVudEZvckN1cnJlbnROb2RlKCksIHRva2VuLmNv
bW1lbnQoKSkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50
T25Eb2N1bWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7
CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1lbnQpOwogICAgIGF0
dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3QsIENvbW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50LCB0
b2tlbi5jb21tZW50KCkpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
Q29tbWVudE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkNvbW1lbnQpOwogICAgIENvbnRhaW5lck5vZGUmIHBhcmVudCA9IG1fb3BlbkVsZW1lbnRz
LnJvb3ROb2RlKCk7CiAgICAgYXR0YWNoTGF0ZXIocGFyZW50LCBDb21tZW50OjpjcmVhdGUocGFy
ZW50LmRvY3VtZW50KCksIHRva2VuLmNvbW1lbnQoKSkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIZWFkRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQoIXNob3VsZEZvc3RlclBhcmVudCgpKTsK
LSAgICBtX2hlYWQgPSBIVE1MU3RhY2tJdGVtOjpjcmVhdGUoY3JlYXRlSFRNTEVsZW1lbnQodG9r
ZW4pLCB0b2tlbik7CisgICAgbV9oZWFkID0gSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGNyZWF0ZUhU
TUxFbGVtZW50KHRva2VuKSwgV1RGTW92ZSh0b2tlbikpOwogICAgIGF0dGFjaExhdGVyKGN1cnJl
bnROb2RlKCksIG1faGVhZC0+ZWxlbWVudCgpKTsKICAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRN
TEhlYWRFbGVtZW50KCptX2hlYWQpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4mJiB0
b2tlbikKIHsKICAgICBBU1NFUlQoIXNob3VsZEZvc3RlclBhcmVudCgpKTsKICAgICBhdXRvIGJv
ZHkgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5v
ZGUoKSwgYm9keS5jb3B5UmVmKCkpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9keUVs
ZW1lbnQoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFdURk1vdmUoYm9keSksIHRva2VuKSk7CisgICAg
bV9vcGVuRWxlbWVudHMucHVzaEhUTUxCb2R5RWxlbWVudChIVE1MU3RhY2tJdGVtOjpjcmVhdGUo
V1RGTW92ZShib2R5KSwgV1RGTW92ZSh0b2tlbikpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGJv
b2wgaXNEZW1vdGVkKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1F
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuLCBib29sIGlzRGVtb3RlZCkKIHsKICAgICBh
dXRvIGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgbV9mb3JtID0gJmRv
d25jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxlbWVudC5nZXQoKSk7CiAgICAgbV9mb3JtLT5zZXRE
ZW1vdGVkKGlzRGVtb3RlZCk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgKm1fZm9y
bSk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoKm1fZm9y
bSwgdG9rZW4pKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0
ZSgqbV9mb3JtLCBXVEZNb3ZlKHRva2VuKSkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiYgdG9r
ZW4pCiB7CiAgICAgYXV0byBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAg
IGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQuY29weVJlZigpKTsKLSAgICBtX29w
ZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShXVEZNb3ZlKGVsZW1lbnQpLCB0
b2tlbikpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFdU
Rk1vdmUoZWxlbWVudCksIFdURk1vdmUodG9rZW4pKSk7CiB9CiAKLUpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZSogSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3Vz
dG9tRWxlbWVudEludGVyZmFjZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQorc3RkOjp1bmlxdWVf
cHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rpb25EYXRhPiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKEF0b21pY0hUTUxU
b2tlbiYmIHRva2VuKQogewogICAgIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSogZWxlbWVudElu
dGVyZmFjZSA9IG51bGxwdHI7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBjcmVhdGVI
VE1MRWxlbWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UodG9rZW4sICZlbGVtZW50SW50
ZXJmYWNlKTsKICAgICBpZiAoVU5MSUtFTFkoZWxlbWVudEludGVyZmFjZSkpCi0gICAgICAgIHJl
dHVybiBlbGVtZW50SW50ZXJmYWNlOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxD
dXN0b21FbGVtZW50Q29uc3RydWN0aW9uRGF0YT4oKmVsZW1lbnRJbnRlcmZhY2UsIHRva2VuLm5h
bWUoKSwgV1RGTW92ZSh0b2tlbi5hdHRyaWJ1dGVzKCkpKTsKICAgICBhdHRhY2hMYXRlcihjdXJy
ZW50Tm9kZSgpLCAqZWxlbWVudCk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJ
dGVtOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpLCB0b2tlbikpOworICAgIG1fb3Bl
bkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZU5vbk51
bGwoKSwgV1RGTW92ZSh0b2tlbikpKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDk3
LDcgKzQ5OCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEN1c3RvbUVsZW1l
bnQoUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgY29uc3QgQXRvCiAgICAgbV9vcGVuRWxlbWVudHMu
cHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoV1RGTW92ZShlbGVtZW50KSwgbG9jYWxOYW1lLCBX
VEZNb3ZlKGF0dHJpYnV0ZXMpKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OlN0YXJ0VGFnKTsKICAgICAvLyBOb3JtYWxseSBIVE1MRWxlbWVudFN0YWNrIGlzIHJlc3Bv
bnNpYmxlIGZvciBjYWxsaW5nIGZpbmlzaFBhcnNpbmdDaGlsZHJlbiwKQEAgLTUwOCwxNyArNTA5
LDE3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNlbGZDbG9zaW5nSFRNTEVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRt
bCNhY2tub3dsZWRnZS1zZWxmLWNsb3NpbmctZmxhZwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3RoZS1zdGFjay1v
Zi1vcGVuLWVsZW1lbnRzCiAgICAgLy8gUG9zc2libGUgYWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVu
dHMgaW5jbHVkZToKICAgICAvLyBhLCBiLCBiaWcsIGNvZGUsIGVtLCBmb250LCBpLCBub2JyLCBz
LCBzbWFsbCwgc3RyaWtlLCBzdHJvbmcsIHR0LCBhbmQgdS4KICAgICBBU1NFUlQoaXNGb3JtYXR0
aW5nVGFnKHRva2VuLm5hbWUoKSkpOwotICAgIGluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAg
ICBpbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgbV9hY3RpdmVGb3JtYXR0
aW5nRWxlbWVudHMuYXBwZW5kKGN1cnJlbnRTdGFja0l0ZW0oKSk7CiB9CiAKLXZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNhbHJlYWR5
LXN0YXJ0ZWQKICAgICAvLyBodHRwOi8vaHRtbDUub3JnL3NwZWNzL2RvbS1wYXJzaW5nLmh0bWwj
ZG9tLXJhbmdlLWNyZWF0ZWNvbnRleHR1YWxmcmFnbWVudApAQCAtNTMxLDEwICs1MzIsMTAgQEAg
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgIHNldEF0dHJpYnV0ZXMoZWxlbWVudCwgdG9rZW4sIG1fcGFyc2Vy
Q29udGVudFBvbGljeSk7CiAgICAgaWYgKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9wYXJz
ZXJDb250ZW50UG9saWN5KSkKICAgICAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxl
bWVudC5jb3B5UmVmKCkpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6
Y3JlYXRlKFdURk1vdmUoZWxlbWVudCksIHRva2VuKSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVz
aChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoV1RGTW92ZShlbGVtZW50KSwgV1RGTW92ZSh0b2tlbikp
KTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9yZWlnbkVsZW1lbnQo
QXRvbWljSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkp
Cit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpCiB7CiAg
ICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOyAvLyBwYXJzZUVycm9yIHdoZW4geG1sbnMgb3IgeG1sbnM6eGxpbmsgYXJl
IHdyb25nLgpAQCAtNTQzLDcgKzU0NCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEZvcmVpZ25FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0CiAgICAg
aWYgKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAh
dG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShlbGVtZW50LnB0cigpKSkKICAgICAgICAgYXR0YWNo
TGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudC5jb3B5UmVmKCksIHRva2VuLnNlbGZDbG9zaW5n
KCkpOwogICAgIGlmICghdG9rZW4uc2VsZkNsb3NpbmcoKSkKLSAgICAgICAgbV9vcGVuRWxlbWVu
dHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoV1RGTW92ZShlbGVtZW50KSwgdG9rZW4sIG5h
bWVzcGFjZVVSSSkpOworICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06
OmNyZWF0ZShXVEZNb3ZlKGVsZW1lbnQpLCBXVEZNb3ZlKHRva2VuKSwgbmFtZXNwYWNlVVJJKSk7
CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFRleHROb2RlKGNvbnN0IFN0
cmluZyYgY2hhcmFjdGVycywgV2hpdGVzcGFjZU1vZGUgd2hpdGVzcGFjZU1vZGUpCkBAIC02NDIs
OCArNjQzLDcgQEAgaW5saW5lIERvY3VtZW50JiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6b3duZXJE
b2N1bWVudEZvckN1cnJlbnROb2RlKCkKICAgICByZXR1cm4gY3VycmVudE5vZGUoKS5kb2N1bWVu
dCgpOwogfQogCi1SZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhU
TUxFbGVtZW50T3JGaW5kQ3VzdG9tRWxlbWVudEludGVyZmFjZSgKLSAgICBBdG9taWNIVE1MVG9r
ZW4mIHRva2VuLCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UqKiBjdXN0b21FbGVtZW50SW50ZXJm
YWNlKQorUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxl
bWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwg
SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiogY3VzdG9tRWxlbWVudEludGVyZmFjZSkKIHsKICAg
ICBhdXRvJiBsb2NhbE5hbWUgPSB0b2tlbi5uYW1lKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgY2Fu
J3QgdXNlIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50IGJlY2F1c2Ugd2UKQEAg
LTY5OCw3ICs2OTgsNyBAQCBSZWY8SFRNTFN0YWNrSXRlbT4gSFRNTENvbnN0cnVjdGlvblNpdGU6
OmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbihIVE1MU3RhY2tJdAogICAgIEF0b21pY0hUTUxU
b2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgaXRlbS5sb2NhbE5hbWUoKSwgVmVj
dG9yPEF0dHJpYnV0ZT4oaXRlbS5hdHRyaWJ1dGVzKCkpKTsKICAgICBBU1NFUlQoaXRlbS5uYW1l
c3BhY2VVUkkoKSA9PSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKICAgICBBU1NFUlQo
aXNGb3JtYXR0aW5nVGFnKGl0ZW0ubG9jYWxOYW1lKCkpKTsKLSAgICByZXR1cm4gSFRNTFN0YWNr
SXRlbTo6Y3JlYXRlKGNyZWF0ZUhUTUxFbGVtZW50KGZha2VUb2tlbiksIGZha2VUb2tlbiwgaXRl
bS5uYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIEhUTUxTdGFja0l0ZW06OmNyZWF0ZShjcmVh
dGVIVE1MRWxlbWVudChmYWtlVG9rZW4pLCBXVEZNb3ZlKGZha2VUb2tlbiksIGl0ZW0ubmFtZXNw
YWNlVVJJKCkpOwogfQogCiBPcHRpb25hbDx1bnNpZ25lZD4gSFRNTENvbnN0cnVjdGlvblNpdGU6
OmluZGV4T2ZGaXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50KCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCmluZGV4IDYxODkw
ZWE4MmQyNWUxMjI0NTU3MTg5ODk1YmM5YmQ2YmI2MjU3Y2EuLjAyZTkzZTk0MWY3YTkzY2M1YWZj
ZjY1ZDI1YzQzNGIwM2ZiMGEwMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaApAQCAtODAsNiArODAsNyBAQCBlbnVtIFdoaXRlc3Bh
Y2VNb2RlIHsKIH07CiAKIGNsYXNzIEF0b21pY0hUTUxUb2tlbjsKK3N0cnVjdCBDdXN0b21FbGVt
ZW50Q29uc3RydWN0aW9uRGF0YTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNs
YXNzIEhUTUxGb3JtRWxlbWVudDsKQEAgLTk3LDI1ICs5OCwyNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXREZWZhdWx0Q29tcGF0aWJpbGl0eU1vZGUoKTsKICAgICB2b2lkIGZpbmlzaGVkUGFyc2lu
ZygpOwogCi0gICAgdm9pZCBpbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZv
aWQgaW5zZXJ0Q29tbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2VydENvbW1l
bnRPbkRvY3VtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9u
SFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiBp
bnNlcnRIVE1MRWxlbWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoQXRvbWljSFRNTFRv
a2VuJik7CisgICAgdm9pZCBpbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2
b2lkIGluc2VydENvbW1lbnQoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZvaWQgaW5zZXJ0Q29t
bWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZvaWQgaW5zZXJ0Q29tbWVu
dE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lkIGluc2VydEhU
TUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VzdG9t
RWxlbWVudENvbnN0cnVjdGlvbkRhdGE+IGluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3VzdG9tRWxl
bWVudEludGVyZmFjZShBdG9taWNIVE1MVG9rZW4mJik7CiAgICAgdm9pZCBpbnNlcnRDdXN0b21F
bGVtZW50KFJlZjxFbGVtZW50PiYmLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgVmVj
dG9yPEF0dHJpYnV0ZT4mJik7Ci0gICAgdm9pZCBpbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50
KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRv
bWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRN
TFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
Jik7Ci0gICAgdm9pZCBpbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgYm9v
bCBpc0RlbW90ZWQgPSBmYWxzZSk7Ci0gICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudChBdG9t
aWNIVE1MVG9rZW4mJik7CisgICAgdm9pZCBpbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mJik7CisgICAgdm9pZCBpbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRv
a2VuJiYpOworICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYm
KTsKKyAgICB2b2lkIGluc2VydEhUTUxGb3JtRWxlbWVudChBdG9taWNIVE1MVG9rZW4mJiwgYm9v
bCBpc0RlbW90ZWQgPSBmYWxzZSk7CisgICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiYmKTsKICAgICB2b2lkIGluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYsIFdo
aXRlc3BhY2VNb2RlID0gV2hpdGVzcGFjZVVua25vd24pOwotICAgIHZvaWQgaW5zZXJ0Rm9yZWln
bkVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkkpOworICAgIHZvaWQgaW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKTsKIAotICAgIHZvaWQgaW5zZXJ0SFRNTEh0
bWxTdGFydFRhZ0JlZm9yZUhUTUwoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRI
VE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0
SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIGluc2Vy
dEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lk
IGluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZv
aWQgaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4mJik7CiAKICAg
ICB2b2lkIHJlcGFyZW50KEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQmIG5ld1BhcmVu
dCwgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCYgY2hpbGQpOwogICAgIHZvaWQgcmVw
YXJlbnQoSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCYgbmV3UGFyZW50LCBIVE1MU3Rh
Y2tJdGVtJiBjaGlsZCk7CkBAIC0xOTAsNyArMTkxLDcgQEAgcHJpdmF0ZToKICAgICBSZWY8RWxl
bWVudD4gY3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CiAgICAgUmVmPEVsZW1l
bnQ+IGNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkkpOwogCi0gICAgdm9pZCBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxl
bWVudChBdG9taWNIVE1MVG9rZW4mLCBFbGVtZW50Jik7CisgICAgdm9pZCBtZXJnZUF0dHJpYnV0
ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4mJiwgRWxlbWVudCYpOwogICAg
IHZvaWQgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgpOwogCiAgICAg
RG9jdW1lbnQmIG1fZG9jdW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCAwYTcwMWY2ZTk0ZGRkNTAxMzkzYmJiODM3YmJk
NDg0NGZkNDRjYzAzLi5jMDdjZDM0NGNiYTViMWIyYjc5MWJjZjFmMjgwYWU3ZDdiMDNjYTI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6Y29uc3RydWN0
VHJlZUZyb21IVE1MVG9rZW4oSFRNTFRva2VuaXplcjo6VG9rZW5QdHImIHJhdwogICAgICAgICBy
YXdUb2tlbi5jbGVhcigpOwogICAgIH0KIAotICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVjdFRy
ZWUodG9rZW4pOworICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVjdFRyZWUoV1RGTW92ZSh0b2tl
bikpOwogfQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aGFzSW5zZXJ0aW9uUG9pbnQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oCmluZGV4IGUwNmE2ZTAx
MzVlZjRhMzUxMTMwZmIwYThjMzJhYzUwZTA4YzcxMWYuLmVmMjA2ZjZjMWUxYTU2MTQ3NTA5NmUy
MmFiNzk3ZDMyMmM5YmUxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTdGFja0l0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3Rh
Y2tJdGVtLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRN
TFN0YWNrSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEhUTUxTdGFja0l0ZW0+IHsKIHB1YmxpYzoK
ICAgICAvLyBOb3JtYWwgSFRNTEVsZW1lbnRTdGFjayBhbmQgSFRNTEZvcm1hdHRpbmdFbGVtZW50
TGlzdCBpdGVtcy4KLSAgICBzdGF0aWMgUmVmPEhUTUxTdGFja0l0ZW0+IGNyZWF0ZShSZWY8RWxl
bWVudD4mJiwgQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKKyAgICBzdGF0aWMgUmVmPEhUTUxT
dGFja0l0ZW0+IGNyZWF0ZShSZWY8RWxlbWVudD4mJiwgQXRvbWljSFRNTFRva2VuJiYsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVS
SSk7CiAgICAgc3RhdGljIFJlZjxIVE1MU3RhY2tJdGVtPiBjcmVhdGUoUmVmPEVsZW1lbnQ+JiYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxBdHRyaWJ1dGU+JiYpOwogCiAgICAgLy8gRG9j
dW1lbnQgZnJhZ21lbnQgb3IgZWxlbWVudCBmb3IgcGFyc2luZyBjb250ZXh0LgpAQCAtNjEsNyAr
NjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXRjaGVzSFRNTFRhZyhjb25zdCBBdG9taWNTdHJp
bmcmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBIVE1MU3RhY2tJdGVtKFJlZjxFbGVtZW50PiYm
LCBBdG9taWNIVE1MVG9rZW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7Cisg
ICAgSFRNTFN0YWNrSXRlbShSZWY8RWxlbWVudD4mJiwgQXRvbWljSFRNTFRva2VuJiYsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKTsKICAgICBIVE1MU3RhY2tJdGVtKFJlZjxFbGVt
ZW50PiYmLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIFZlY3RvcjxBdHRyaWJ1dGU+JiYpOwogICAgIGV4cGxpY2l0IEhUTUxT
dGFja0l0ZW0oRWxlbWVudCYpOwogICAgIGV4cGxpY2l0IEhUTUxTdGFja0l0ZW0oRG9jdW1lbnRG
cmFnbWVudCYpOwpAQCAtNzYsMTggKzc2LDE3IEBAIGJvb2wgaXNJbkhUTUxOYW1lc3BhY2UoY29u
c3QgSFRNTFN0YWNrSXRlbSYpOwogYm9vbCBpc051bWJlcmVkSGVhZGVyRWxlbWVudChjb25zdCBI
VE1MU3RhY2tJdGVtJik7CiBib29sIGlzU3BlY2lhbE5vZGUoY29uc3QgSFRNTFN0YWNrSXRlbSYp
OwogCi1pbmxpbmUgSFRNTFN0YWNrSXRlbTo6SFRNTFN0YWNrSXRlbShSZWY8RWxlbWVudD4mJiBl
bGVtZW50LCBBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCitpbmxpbmUgSFRNTFN0YWNr
SXRlbTo6SFRNTFN0YWNrSXRlbShSZWY8RWxlbWVudD4mJiBlbGVtZW50LCBBdG9taWNIVE1MVG9r
ZW4mJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJKQogICAgIDogbV9ub2RlKFdURk1vdmUoZWxlbWVudCkpCiAgICAg
LCBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpCiAgICAgLCBtX2xvY2FsTmFtZSh0b2tlbi5u
YW1lKCkpCi0gICAgLCBtX2F0dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpKQorICAgICwgbV9h
dHRyaWJ1dGVzKFdURk1vdmUodG9rZW4uYXR0cmlidXRlcygpKSkKIHsKLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gbW92ZSB0aGUgYXR0cmlidXRlcyB2ZWN0b3IgaW4gdGhl
IG5vcm1hbCBjb2RlIHBhdGggaW5zdGVhZCBvZiBjb3B5aW5nIGl0LgogfQogCi1pbmxpbmUgUmVm
PEhUTUxTdGFja0l0ZW0+IEhUTUxTdGFja0l0ZW06OmNyZWF0ZShSZWY8RWxlbWVudD4mJiBlbGVt
ZW50LCBBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSkKK2lubGluZSBSZWY8SFRNTFN0YWNrSXRlbT4gSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFJl
ZjxFbGVtZW50PiYmIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiYmIHRva2VuLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVzcGFjZVVSSSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1M
U3RhY2tJdGVtKFdURk1vdmUoZWxlbWVudCksIHRva2VuLCBuYW1lc3BhY2VVUkkpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MU3RhY2tJdGVtKFdURk1vdmUoZWxlbWVudCksIFdURk1v
dmUodG9rZW4pLCBuYW1lc3BhY2VVUkkpKTsKIH0KIAogaW5saW5lIEhUTUxTdGFja0l0ZW06OkhU
TUxTdGFja0l0ZW0oUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBWZWN0b3I8QXR0cmli
dXRlPiYmIGF0dHJpYnV0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmNwcAppbmRleCA0MzllYjA4MzU1MmIyYmQ1ZGUyYTkzNjg4YjEzMGNjZDQwZWY1
NTdlLi40YTdjNzkzOWViMDUxYWIzZjZiNmJhNzYyMjYxYmZhYWFjMjU1NTEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTUzLDEwICs1
MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLUN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rpb25EYXRhOjpDdXN0b21FbGVtZW50Q29uc3RydWN0
aW9uRGF0YShSZWY8SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlPiYmIGN1c3RvbUVsZW1lbnRJbnRl
cmZhY2UsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
IGF0dHJpYnV0ZXMpCitDdXN0b21FbGVtZW50Q29uc3RydWN0aW9uRGF0YTo6Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdGlvbkRhdGEoUmVmPEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZT4mJiBjdXN0b21F
bGVtZW50SW50ZXJmYWNlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxBdHRyaWJ1
dGU+JiYgYXR0cmlidXRlcykKICAgICA6IGVsZW1lbnRJbnRlcmZhY2UoV1RGTW92ZShjdXN0b21F
bGVtZW50SW50ZXJmYWNlKSkKICAgICAsIG5hbWUobmFtZSkKLSAgICAsIGF0dHJpYnV0ZXMoYXR0
cmlidXRlcykgLy8gRklYTUU6IEF2b2lkIGNvcHlpbmcgYXR0cmlidXRlcy4KKyAgICAsIGF0dHJp
YnV0ZXMoV1RGTW92ZShhdHRyaWJ1dGVzKSkKIHsgfQogCiBDdXN0b21FbGVtZW50Q29uc3RydWN0
aW9uRGF0YTo6fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rpb25EYXRhKCkKQEAgLTMzMyw3ICszMzMs
NyBAQCBSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNz
KFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQbwogICAgIHJldHVybiBXVEZNb3ZlKG1fc2NyaXB0
VG9Qcm9jZXNzKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWUoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVl
KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBB
U1NFUlQoIW1fZGVzdHJveWVkKTsKQEAgLTM0Miw5ICszNDIsOSBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6Y29uc3RydWN0VHJlZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogI2VuZGlmCiAKICAg
ICBpZiAoc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbikpCi0gICAgICAg
IHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQodG9rZW4pOworICAgICAgICBwcm9jZXNzVG9r
ZW5JbkZvcmVpZ25Db250ZW50KFdURk1vdmUodG9rZW4pKTsKICAgICBlbHNlCi0gICAgICAgIHBy
b2Nlc3NUb2tlbih0b2tlbik7CisgICAgICAgIHByb2Nlc3NUb2tlbihXVEZNb3ZlKHRva2VuKSk7
CiAKICAgICBib29sIGluRm9yZWlnbkNvbnRlbnQgPSAhbV90cmVlLmlzRW1wdHkoKQogICAgICAg
ICAmJiAhaXNJbkhUTUxOYW1lc3BhY2UoYWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCkpCkBAIC0z
NjIsNyArMzYyLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWUoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAvLyBUaGUgdHJlZSBidWlsZGVyIG1pZ2h0IGhhdmUgYmVl
biBkZXN0cm95ZWQgYXMgYW4gaW5kaXJlY3QgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgcXVldWVk
IHRhc2tzLgogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEF0b21p
Y0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAg
Y2FzZSBIVE1MVG9rZW46OlVuaW5pdGlhbGl6ZWQ6CkBAIC0zNzAsNDEgKzM3MCw0MSBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSFRNTFRva2VuOjpET0NUWVBFOgogICAgICAgICBtX3No
b3VsZFNraXBMZWFkaW5nTmV3bGluZSA9IGZhbHNlOwotICAgICAgICBwcm9jZXNzRG9jdHlwZVRv
a2VuKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0RvY3R5cGVUb2tlbihXVEZNb3ZlKHRva2VuKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSFRNTFRva2VuOjpTdGFydFRhZzoKICAgICAgICAg
bV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSBmYWxzZTsKLSAgICAgICAgcHJvY2Vzc1N0YXJ0
VGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBIVE1MVG9rZW46OkVuZFRhZzoKICAgICAgICAgbV9zaG91
bGRTa2lwTGVhZGluZ05ld2xpbmUgPSBmYWxzZTsKLSAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tl
bik7CisgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEhUTUxUb2tlbjo6Q29tbWVudDoKICAgICAgICAgbV9zaG91bGRTa2lwTGVh
ZGluZ05ld2xpbmUgPSBmYWxzZTsKLSAgICAgICAgcHJvY2Vzc0NvbW1lbnQodG9rZW4pOworICAg
ICAgICBwcm9jZXNzQ29tbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEhUTUxUb2tlbjo6Q2hhcmFjdGVyOgotICAgICAgICBwcm9jZXNzQ2hhcmFjdGVyKHRv
a2VuKTsKKyAgICAgICAgcHJvY2Vzc0NoYXJhY3RlcihXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSFRNTFRva2VuOjpFbmRPZkZpbGU6CiAgICAgICAgIG1fc2hvdWxk
U2tpcExlYWRpbmdOZXdsaW5lID0gZmFsc2U7Ci0gICAgICAgIHByb2Nlc3NFbmRPZkZpbGUodG9r
ZW4pOworICAgICAgICBwcm9jZXNzRW5kT2ZGaWxlKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RvY3R5cGVU
b2tlbihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkRPQ1RZUEUpOwogICAgIGlmIChtX2luc2VydGlvbk1v
ZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCkgewotICAgICAgICBtX3RyZWUuaW5zZXJ0RG9j
dHlwZSh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnREb2N0eXBlKFdURk1vdmUodG9rZW4p
KTsKICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTDsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9pbnNlcnRpb25Nb2RlID09IEluc2Vy
dGlvbk1vZGU6OkluVGFibGVUZXh0KSB7CiAgICAgICAgIGRlZmF1bHRGb3JJblRhYmxlVGV4dCgp
OwotICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0Rv
Y3R5cGVUb2tlbihXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
cGFyc2VFcnJvcih0b2tlbik7CkBAIC00MTQsMTMgKzQxNCwxMyBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBW
ZWN0b3I8QQogewogICAgIC8vIEZJWE1FOiBXZSdsbCBuZWVkIGEgZmFuY2llciBjb252ZXJzaW9u
IHRoYW4ganVzdCAibG9jYWxOYW1lIiBmb3IgU1ZHL01hdGhNTCB0YWdzLgogICAgIEF0b21pY0hU
TUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgdGFnTmFtZS5sb2NhbE5hbWUo
KSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7Ci0gICAgcHJvY2Vzc1N0YXJ0VGFnKGZha2VUb2tlbik7
CisgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUoZmFrZVRva2VuKSk7CiB9CiAKIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZUVuZFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUpCiB7CiAgICAgQXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW46OkVuZFRhZywg
dGFnTmFtZSk7Ci0gICAgcHJvY2Vzc0VuZFRhZyhmYWtlVG9rZW4pOworICAgIHByb2Nlc3NFbmRU
YWcoV1RGTW92ZShmYWtlVG9rZW4pKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NGYWtlRW5kVGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCkBAIC00NDEsNyArNDQx
LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9u
U2NvcGUoKQogICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLmluQnV0dG9uU2NvcGUocFRh
Zy5sb2NhbE5hbWUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBBdG9taWNIVE1MVG9rZW4gZW5k
UChIVE1MVG9rZW46OkVuZFRhZywgcFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vzc0VuZFRh
ZyhlbmRQKTsKKyAgICBwcm9jZXNzRW5kVGFnKFdURk1vdmUoZW5kUCkpOwogfQogCiBuYW1lc3Bh
Y2UgewpAQCAtNDU4LDcgKzQ1OCw3IEBAIGJvb2wgaXNEZE9yRHQoY29uc3QgSFRNTFN0YWNrSXRl
bSYgaXRlbSkKIAogfQogCi10ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShjb25zdCBIVE1MU3Rh
Y2tJdGVtJik+IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFn
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShjb25z
dCBIVE1MU3RhY2tJdGVtJik+IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VXaGVu
TmVzdGVkVGFnKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIG1fZnJhbWVzZXRPayA9
IGZhbHNlOwogICAgIGZvciAoYXV0byogbm9kZVJlY29yZCA9ICZtX3RyZWUub3BlbkVsZW1lbnRz
KCkudG9wUmVjb3JkKCk7IDsgbm9kZVJlY29yZCA9IG5vZGVSZWNvcmQtPm5leHQoKSkgewpAQCAt
NDcyLDcgKzQ3Miw3IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IEhUTUxTdGFj
a0l0ZW0mKT4gdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDCiAgICAgICAgICAgICBicmVh
azsKICAgICB9CiAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwotICAg
IG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KFdURk1vdmUodG9rZW4pKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVh
bGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBj
cmVhdGVDYXNlTWFwKGNvbnN0IFRhYmxlUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5z
aWduZWQgbGVuZ3RoKQpAQCAtNTUxLDExICs1NTEsMTEgQEAgc3RhdGljIHZvaWQgYWRqdXN0Rm9y
ZWlnbkF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBhZGp1c3RBdHRyaWJ1
dGVzKG1hcCwgdG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewog
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CiAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdG
b3JJbkJvZHkodG9rZW4pOworICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KFdU
Rk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGJhc2VUYWcKQEAgLTU2OCw3ICs1NjgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcKICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHN0eWxlVGFnCiAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0aXRsZVRhZykgewotICAgICAg
ICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOworICAg
ICAgICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGRpZFByb2Nlc3MsIGRpZFByb2Nlc3MpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTgxLDcgKzU4MSw3IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBm
YWxzZTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJvZHkodG9rZW4p
OworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBm
cmFtZXNldFRhZykgewpAQCAtNTk2LDcgKzU5Niw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAg
bV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsKG1fdHJlZS5vcGVuRWxlbWVudHMoKS5ib2R5
RWxlbWVudCgpKTsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcEhUTUxCb2R5RWxl
bWVudCgpOwogICAgICAgICBBU1NFUlQoJm1fdHJlZS5vcGVuRWxlbWVudHMoKS50b3AoKSA9PSAm
bV90cmVlLm9wZW5FbGVtZW50cygpLmh0bWxFbGVtZW50KCkpOwotICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
V1RGTW92ZSh0b2tlbikpOwogICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2Rl
OjpJbkZyYW1lc2V0OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjI0LDcgKzYyNCw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN1bW1hcnlUYWcKICAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVu
ZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4p
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNOdW1iZXJlZEhlYWRlclRhZyh0
b2tlbi5uYW1lKCkpKSB7CkBAIC02MzMsMTIgKzYzMywxMiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS5wb3AoKTsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
dG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcHJlVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVu
ZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4p
KTsKICAgICAgICAgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBt
X2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjQ5LDIwICs2NDksMjAg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmlu
c2VydEhUTUxGb3JtRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRm9y
bUVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gbGlUYWcpIHsKLSAgICAgICAgcHJvY2Vzc0Nsb3NlV2hlbk5lc3Rl
ZFRhZzxpc0xpPih0b2tlbik7CisgICAgICAgIHByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWc8aXNM
aT4oV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gZGRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFnKSB7Ci0gICAgICAgIHBy
b2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWc8aXNEZE9yRHQ+KHRva2VuKTsKKyAgICAgICAgcHJvY2Vz
c0Nsb3NlV2hlbk5lc3RlZFRhZzxpc0RkT3JEdD4oV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcGxhaW50ZXh0VGFnKSB7CiAg
ICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgbV9wYXJzZXIudG9rZW5pemVyKCkuc2V0
UExBSU5URVhUU3RhdGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3MCwxMSArNjcw
LDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxlbWVudHMoKS5p
blNjb3BlKGJ1dHRvblRhZykpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcoYnV0dG9uVGFnKTsKLSAgICAgICAgICAgIHByb2Nl
c3NTdGFydFRhZyh0b2tlbik7IC8vIEZJWE1FOiBDb3VsZCB3ZSBqdXN0IGZhbGwgdGhyb3VnaCBo
ZXJlPworICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsgLy8gRklY
TUU6IENvdWxkIHdlIGp1c3QgZmFsbCB0aHJvdWdoIGhlcmU/CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGlu
Z0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7Cisg
ICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
IG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjg4LDEy
ICs2ODgsMTIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9k
eShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS5yZW1vdmUoKmFjdGl2ZUFUYWcpOwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5y
ZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBtX3RyZWUu
aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9y
bWF0dGluZ0VsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmIChpc05vbkFuY2hvck5vbk5vYnJGb3JtYXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsK
ICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7
Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CisgICAgICAg
IG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub2JyVGFnKSB7CkBAIC03
MDMsNyArNzAzLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRU
YWcobm9iclRhZyk7CiAgICAgICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0
dGluZ0VsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1l
bnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gYXBwbGV0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBlbWJlZFRhZyB8fCB0b2tl
bi5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7CkBAIC03MTIsNyArNzEyLDcgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGFwcGxldFRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gbWFycXVlZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7CiAgICAgICAg
IG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0
dGluZ0VsZW1lbnRzKCkuYXBwZW5kTWFya2VyKCk7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZh
bHNlOwogICAgICAgICByZXR1cm47CkBAIC03MjAsNyArNzIwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgaWYgKCFtX3RyZWUu
aW5RdWlya3NNb2RlKCkgJiYgbV90cmVlLm9wZW5FbGVtZW50cygpLmluQnV0dG9uU2NvcGUocFRh
ZykpCiAgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhwVGFnKTsKLSAgICAgICAgbV90cmVl
Lmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAg
ICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGU7CiAgICAgICAgIHJl
dHVybjsKQEAgLTczOCwzMCArNzM4LDMxIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGtleWdlblRhZwogICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gd2JyVGFn
KSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7
CisgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9r
ZW4pKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBpbnB1dFRhZykgewogICAgICAgICBtX3RyZWUu
cmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgbV90cmVl
Lmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwotICAgICAgICBBdHRyaWJ1dGUq
IHR5cGVBdHRyaWJ1dGUgPSBmaW5kQXR0cmlidXRlKHRva2VuLmF0dHJpYnV0ZXMoKSwgdHlwZUF0
dHIpOwotICAgICAgICBpZiAoIXR5cGVBdHRyaWJ1dGUgfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHR5cGVBdHRyaWJ1dGUtPnZhbHVlKCksICJoaWRkZW4iKSkKKyAgICAgICAgYXV0
byogdHlwZUF0dHJpYnV0ZSA9IGZpbmRBdHRyaWJ1dGUodG9rZW4uYXR0cmlidXRlcygpLCB0eXBl
QXR0cik7CisgICAgICAgIGJvb2wgc2hvdWxkQ2xlYXJGcmFtZXNldE9LID0gIXR5cGVBdHRyaWJ1
dGUgfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHR5cGVBdHRyaWJ1dGUtPnZhbHVl
KCksICJoaWRkZW4iKTsKKyAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1l
bnQoV1RGTW92ZSh0b2tlbikpOworICAgICAgICBpZiAoc2hvdWxkQ2xlYXJGcmFtZXNldE9LKQog
ICAgICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwYXJhbVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc291
cmNlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0cmFja1RhZykgewotICAgICAgICBtX3RyZWUuaW5z
ZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRT
ZWxmQ2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NG
YWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmluc2VydFNlbGZD
bG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3Np
bmdIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZh
bHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGV4
dGFyZWFUYWcpIHsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAg
bV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBtX3BhcnNlci50b2tl
bml6ZXIoKS5zZXRSQ0RBVEFTdGF0ZSgpOwogICAgICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9k
ZSA9IG1faW5zZXJ0aW9uTW9kZTsKQEAgLTc3MywyNSArNzc0LDI1IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwogICAgICAgICBt
X3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAg
bV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0
VGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcoV1RGTW92
ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gaWZyYW1lVGFnKSB7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwotICAgICAgICBw
cm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NHZW5l
cmljUmF3VGV4dFN0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vZW1iZWRUYWcgJiYgbV9vcHRpb25zLnBsdWdp
bnNFbmFibGVkKSB7Ci0gICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcoV1RGTW92ZSh0b2tlbikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9zY3Jp
cHRUYWcgJiYgbV9vcHRpb25zLnNjcmlwdEVuYWJsZWQpIHsKLSAgICAgICAgcHJvY2Vzc0dlbmVy
aWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOworICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRT
dGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBzZWxlY3RUYWcpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0
VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3Zl
KHRva2VuKSk7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICBpZiAobV9p
bnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluVGFibGUKICAgICAgICAgICAgIHx8IG1f
aW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb24KQEAgLTgwNywxMCArODA4
LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGdyb3VwVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKICAgICAgICAgaWYgKGlzPEhUTUxPcHRp
b25FbGVtZW50PihtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLm5vZGUoKSkpIHsKICAgICAgICAg
ICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlvblRh
Zy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbik7Cisg
ICAgICAgICAgICBwcm9jZXNzRW5kVGFnKFdURk1vdmUoZW5kT3B0aW9uKSk7CiAgICAgICAgIH0K
ICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7
Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSByYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gcnRj
VGFnKSB7CkBAIC04MTksNyArODIwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NT
dGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaWYg
KCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLmhhc1RhZ05hbWUocnVieVRhZykpCiAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVlLmlu
c2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4u
bmFtZSgpID09IHJ0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBycFRhZykgewpAQCAtODI4LDIxICs4
MjksMjEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0
YWNrSXRlbSgpLmhhc1RhZ05hbWUocnVieVRhZykgJiYgIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVt
KCkuaGFzVGFnTmFtZShydGNUYWcpKQogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OwogICAgICAgICB9Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7Cisg
ICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBNYXRoTUxOYW1lczo6bWF0
aFRhZy5sb2NhbE5hbWUoKSkgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgYWRqdXN0TWF0aE1MQXR0cmlidXRlcyh0b2tl
bik7CiAgICAgICAgIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKHRva2VuKTsKLSAgICAgICAgbV90
cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KHRva2VuLCBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNw
YWNlVVJJKTsKKyAgICAgICAgbV90cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KFdURk1vdmUodG9r
ZW4pLCBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNwYWNlVVJJKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IFNWR05hbWVzOjpzdmdUYWcubG9jYWxOYW1l
KCkpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1l
bnRzKCk7CiAgICAgICAgIGFkanVzdFNWR0F0dHJpYnV0ZXModG9rZW4pOwogICAgICAgICBhZGp1
c3RGb3JlaWduQXR0cmlidXRlcyh0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRGb3JlaWdu
RWxlbWVudCh0b2tlbiwgU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSk7CisgICAgICAgIG1fdHJl
ZS5pbnNlcnRGb3JlaWduRWxlbWVudChXVEZNb3ZlKHRva2VuKSwgU1ZHTmFtZXM6OnN2Z05hbWVz
cGFjZVVSSSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzQ2FwdGlvbkNvbE9y
Q29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQpAQCAtODU2LDE4ICs4NTcsMTYgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CiAgICAg
ICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwotICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRh
Zyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKFdURk1vdmUodG9rZW4p
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICBpbnNlcnRHZW5lcmljSFRNTEVsZW1lbnQodG9r
ZW4pOworICAgIGluc2VydEdlbmVyaWNIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiB9CiAK
LWlubGluZSB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0R2VuZXJpY0hUTUxFbGVtZW50KEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCitpbmxpbmUgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2Vy
dEdlbmVyaWNIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKLSAgICBhdXRv
KiBlbGVtZW50SW50ZXJmYWNlID0gbV90cmVlLmluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3VzdG9t
RWxlbWVudEludGVyZmFjZSh0b2tlbik7Ci0gICAgaWYgKFVOTElLRUxZKGVsZW1lbnRJbnRlcmZh
Y2UpKQotICAgICAgICBtX2N1c3RvbUVsZW1lbnRUb0NvbnN0cnVjdCA9IHN0ZDo6bWFrZV91bmlx
dWU8Q3VzdG9tRWxlbWVudENvbnN0cnVjdGlvbkRhdGE+KCplbGVtZW50SW50ZXJmYWNlLCB0b2tl
bi5uYW1lKCksIHRva2VuLmF0dHJpYnV0ZXMoKSk7CisgICAgbV9jdXN0b21FbGVtZW50VG9Db25z
dHJ1Y3QgPSBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJm
YWNlKFdURk1vdmUodG9rZW4pKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRpZENyZWF0
ZUN1c3RvbU9yQ2FsbGJhY2tFbGVtZW50KFJlZjxFbGVtZW50PiYmIGVsZW1lbnQsIEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rpb25EYXRhJiBkYXRhKQpAQCAtODc1LDE1ICs4NzQsMTUgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OmRpZENyZWF0ZUN1c3RvbU9yQ2FsbGJhY2tFbGVtZW50KFJlZjxFbGVt
ZW50PiYmIGVsZW1lbnQsIEMKICAgICBtX3RyZWUuaW5zZXJ0Q3VzdG9tRWxlbWVudChXVEZNb3Zl
KGVsZW1lbnQpLCBkYXRhLm5hbWUsIFdURk1vdmUoZGF0YS5hdHRyaWJ1dGVzKSk7CiB9CiAKLXZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFn
KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMoKS5hcHBlbmRNYXJrZXIoKTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
dG9rZW4pOworICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAg
ICAgbV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmFwcGVuZChJbnNlcnRpb25Nb2RlOjpUZW1wbGF0
ZUNvbnRlbnRzKTsKICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0
ZUNvbnRlbnRzOwogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RlbXBsYXRlRW5k
VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCitib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1RlbXBsYXRlRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIEFTU0VSVCh0
b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcubG9jYWxOYW1lKCkpOwogICAgIGlmICghbV90cmVl
Lm9wZW5FbGVtZW50cygpLmhhc1RlbXBsYXRlSW5IVE1MU2NvcGUoKSkgewpAQCAtOTAxLDEzICs5
MDAsMTMgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQorYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGVGb3JJ
blRlbXBsYXRlQ29udGVudHMoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQXRvbWlj
SFRNTFRva2VuIGVuZFRlbXBsYXRlKEhUTUxUb2tlbjo6RW5kVGFnLCB0ZW1wbGF0ZVRhZy5sb2Nh
bE5hbWUoKSk7Ci0gICAgaWYgKCFwcm9jZXNzVGVtcGxhdGVFbmRUYWcoZW5kVGVtcGxhdGUpKQor
ICAgIGlmICghcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKFdURk1vdmUoZW5kVGVtcGxhdGUpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcHJvY2Vzc0VuZE9mRmlsZSh0b2tlbik7CisgICAg
cHJvY2Vzc0VuZE9mRmlsZShXVEZNb3ZlKHRva2VuKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTkzOSwzOCArOTM4LDM4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjbG9zZVRoZUNlbGwo
KQogICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOwog
fQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
Z0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKICAgICBpZiAodG9rZW4ubmFtZSgpID09
IGNhcHRpb25UYWcpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsVGFi
bGVTY29wZU1hcmtlcigpOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRz
KCkuYXBwZW5kTWFya2VyKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAg
ICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbGdyb3VwVGFnKSB7
CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIo
KTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgbV9pbnNlcnRp
b25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5Hcm91cDsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbFRhZykgewogICAgICAgICBwcm9jZXNz
RmFrZVN0YXJ0VGFnKGNvbGdyb3VwVGFnKTsKICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwKTsKLSAgICAgICAgcHJvY2Vzc1N0YXJ0
VGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2Vu
Lm5hbWUoKSkpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsVGFibGVT
Y29wZU1hcmtlcigpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwor
ICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAg
ICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUo
KSkgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRU
YWcodGJvZHlUYWcpOwogICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlv
bk1vZGU6OkluVGFibGVCb2R5KTsKLSAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAg
ICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CkBAIC05NzksMTggKzk3
OCwxOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdt
ZW50T3JUZW1wbGF0ZUNvbnRlbnRzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NTdGFydFRh
ZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBzdHlsZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7Ci0gICAg
ICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CisgICAgICAgIHByb2Nlc3NTdGFy
dFRhZ0ZvckluSGVhZChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBpbnB1dFRhZykgewotICAgICAgICBBdHRyaWJ1dGUqIHR5
cGVBdHRyaWJ1dGUgPSBmaW5kQXR0cmlidXRlKHRva2VuLmF0dHJpYnV0ZXMoKSwgdHlwZUF0dHIp
OworICAgICAgICBhdXRvKiB0eXBlQXR0cmlidXRlID0gZmluZEF0dHJpYnV0ZSh0b2tlbi5hdHRy
aWJ1dGVzKCksIHR5cGVBdHRyKTsKICAgICAgICAgaWYgKHR5cGVBdHRyaWJ1dGUgJiYgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodHlwZUF0dHJpYnV0ZS0+dmFsdWUoKSwgImhpZGRlbiIp
KSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gImFueXRoaW5n
IGVsc2UiIGNhc2UuCkBAIC05OTksMjAgKzk5OCwyMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgaWYgKG1fdHJlZS5mb3JtKCkgJiYgIWlzUGFy
c2luZ1RlbXBsYXRlQ29udGVudHMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV90
cmVlLmluc2VydEhUTUxGb3JtRWxlbWVudCh0b2tlbiwgdHJ1ZSk7CisgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRm9ybUVsZW1lbnQoV1RGTW92ZSh0b2tlbiksIHRydWUpOwogICAgICAgICBtX3Ry
ZWUub3BlbkVsZW1lbnRzKCkucG9wKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewotICAgICAgICBwcm9jZXNzVGVtcGxhdGVT
dGFydFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKFdURk1vdmUo
dG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6UmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkIHJl
ZGlyZWN0ZXIobV90cmVlKTsKLSAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwor
ICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShXVEZNb3ZlKHRva2VuKSk7CiB9CiAKLXZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiYg
dG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFn
KTsKICAgICBzd2l0Y2ggKG1faW5zZXJ0aW9uTW9kZSkgewpAQCAtMTAyMiw3ICsxMDIxLDcgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9y
ZUhUTUw6CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKHRva2VuKTsKKyAgICAg
ICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZv
cmVIZWFkOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDMxLDExICsxMDMw
LDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpCZWZvcmVIZWFkOgogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOworICAgICAgICAg
ICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoZWFk
VGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEhlYWRFbGVtZW50KHRva2VuKTsK
KyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSGVhZEVsZW1lbnQoV1RGTW92ZSh0b2tlbikp
OwogICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDQzLDI0ICsxMDQyLDI0IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhl
YWQpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluSGVh
ZDoKLSAgICAgICAgaWYgKHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbikpCisgICAgICAg
IGlmIChwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoV1RGTW92ZSh0b2tlbikpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFkKCk7CiAgICAgICAgIEFTU0VSVCht
X2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsKICAgICAgICAgRkFM
TFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQ6CiAgICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFy
dFRhZ0ZvckluQm9keSh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9y
SW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpIHsKICAgICAgICAgICAgIG1fZnJh
bWVzZXRPayA9IGZhbHNlOwotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5RWxlbWVu
dCh0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlFbGVtZW50KFdURk1v
dmUodG9rZW4pKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6
OkluQm9keTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGZyYW1lc2V0VGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRN
TEVsZW1lbnQodG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdU
Rk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1v
ZGU6OkluRnJhbWVzZXQ7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEwNzcs
NyArMTA3Niw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAg
ICAgICAgQVNTRVJUKG1fdHJlZS5oZWFkU3RhY2tJdGVtKCkpOwogICAgICAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLnB1c2hIVE1MSGVhZEVsZW1lbnQoKm1fdHJlZS5oZWFkU3RhY2tJdGVt
KCkpOwotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKKyAgICAg
ICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
ICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucmVtb3ZlSFRNTEhlYWRFbGVtZW50KG1fdHJlZS5o
ZWFkKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDg5LDEwICsxMDg4
LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25N
b2RlOjpJbkJvZHkpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1v
ZGU6OkluQm9keToKLSAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKKyAg
ICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlOgotICAgICAgICBwcm9jZXNz
U3RhcnRUYWdGb3JJblRhYmxlKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5U
YWJsZShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9u
TW9kZTo6SW5DYXB0aW9uOgogICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0
b2tlbi5uYW1lKCkpCkBAIC0xMTA0LDM0ICsxMTAzLDM0IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAgICAg
ICAgICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsK
KyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOgogICAgICAg
ICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKLSAgICAgICAgICAgIHByb2Nlc3NIdG1s
U3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOworICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRh
Z0ZvckluQm9keShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjb2xUYWcpIHsKLSAgICAgICAgICAgIG1f
dHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIG1f
dHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRl
bXBsYXRlVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyh0b2tlbik7
CisgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwcm9jZXNzQ29sZ3Jv
dXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNp
bmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50cygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOworICAgICAgICBwcm9jZXNz
U3RhcnRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2Vy
dGlvbk1vZGU6OkluVGFibGVCb2R5OgogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRyVGFn
KSB7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucG9wVW50aWxUYWJsZUJvZHlT
Y29wZU1hcmtlcigpOyAvLyBIb3cgaXMgdGhlcmUgZXZlciBhbnl0aGluZyB0byBwb3A/Ci0gICAg
ICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluUm93OwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0xMTM5LDcgKzExMzgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKICAgICAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcodHJUYWcpOwogICAg
ICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7
Ci0gICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOworICAgICAgICAgICAgcHJvY2Vz
c1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpIHx8
IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CkBAIC0xMTUyLDE1ICsxMTUx
LDE1IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BVbnRpbFRh
YmxlQm9keVNjb3BlTWFya2VyKCk7CiAgICAgICAgICAgICBBU1NFUlQoaXNUYWJsZUJvZHlDb250
ZXh0VGFnKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lKCkpKTsKICAgICAgICAg
ICAgIHByb2Nlc3NGYWtlRW5kVGFnKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1l
KCkpOwotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAgICAgICAgICAgIHBy
b2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZSh0b2tlbik7CisgICAgICAg
IHByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluUm93OgogICAgICAgICBpZiAoaXNUYWJsZUNl
bGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS5wb3BVbnRpbFRhYmxlUm93U2NvcGVNYXJrZXIoKTsKLSAgICAgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRN
TEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0g
SW5zZXJ0aW9uTW9kZTo6SW5DZWxsOwogICAgICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLmFwcGVuZE1hcmtlcigpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTE3
MywxMCArMTE3MiwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2Rl
OjpJblRhYmxlQm9keSk7Ci0gICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOworICAg
ICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShXVEZNb3ZlKHRva2VuKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5DZWxsOgogICAgICAgICBp
ZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpCkBAIC0xMTkwLDIzICsx
MTg5LDIzIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjbG9zZVRoZUNlbGwoKTsKLSAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0
b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHByb2Nlc3NTdGFydFRhZ0Zvcklu
Qm9keSh0b2tlbik7CisgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5
OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckJvZHk6CiAgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRh
Z0ZvckluQm9keSh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5C
b2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk7Ci0gICAgICAgIHBy
b2Nlc3NTdGFydFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9z
Y3JpcHQ6CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAg
ICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CisgICAgICAgICAgICBwcm9j
ZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJhc2Vmb250VGFn
CkBAIC0xMjE1LDcgKzEyMTQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gbWV0YVRhZwogICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnCiAg
ICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcpIHsKLSAgICAgICAgICAgIGJv
b2wgZGlkUHJvY2VzcyA9IHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CisgICAgICAg
ICAgICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkaWRQcm9jZXNzLCBkaWRQcm9jZXNz
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTIyNCwyMyArMTIyMywyMyBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdEZv
ckluSGVhZE5vc2NyaXB0KCk7Ci0gICAgICAgIHByb2Nlc3NUb2tlbih0b2tlbik7CisgICAgICAg
IHByb2Nlc3NUb2tlbihXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldDoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBo
dG1sVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2Vu
KTsKKyAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoV1RGTW92ZSh0b2tl
bikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCh0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92
ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gZnJhbWVUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxm
Q2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxm
Q2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOworICAgICAgICAgICAg
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKQEAgLTEyNDgsMTEg
KzEyNDcsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldDoK
ICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldDoKICAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0
VGFnRm9ySW5Cb2R5KHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJ
bkJvZHkoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzU3RhcnRU
YWdGb3JJbkhlYWQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwpAQCAtMTI2NSw0MCArMTI2NCw0MCBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkg
ewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBBdG9taWNIVE1M
VG9rZW4gZW5kU2VsZWN0KEhUTUxUb2tlbjo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkp
OwotICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QpOwotICAgICAgICAgICAgcHJv
Y2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShl
bmRTZWxlY3QpKTsKKyAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgRkFMTFRIUk9VR0g7CiAg
ICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdDoKICAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBodG1sVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5
KHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoV1RGTW92
ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubm9kZSgpKSkgewogICAgICAgICAg
ICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlv
blRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRp
b24pOworICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShlbmRPcHRpb24pKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gb3B0Z3JvdXBUYWcpIHsKICAgICAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVu
dD4obV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAg
QXRvbWljSFRNTFRva2VuIGVuZE9wdGlvbihIVE1MVG9rZW46OkVuZFRhZywgb3B0aW9uVGFnLmxv
Y2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbik7Cisg
ICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhXVEZNb3ZlKGVuZE9wdGlvbikpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KG1fdHJlZS5j
dXJyZW50U3RhY2tJdGVtKCkubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEF0b21pY0hUTUxU
b2tlbiBlbmRPcHRncm91cChIVE1MVG9rZW46OkVuZFRhZywgb3B0Z3JvdXBUYWcubG9jYWxOYW1l
KCkpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0Z3JvdXApOworICAgICAg
ICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShlbmRPcHRncm91cCkpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAg
ICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzZWxl
Y3RUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgQXRv
bWljSFRNTFRva2VuIGVuZFNlbGVjdChIVE1MVG9rZW46OkVuZFRhZywgc2VsZWN0VGFnLmxvY2Fs
TmFtZSgpKTsKLSAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0KTsKKyAgICAgICAg
ICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShlbmRTZWxlY3QpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGlucHV0VGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBrZXlnZW5UYWcgfHwgdG9rZW4ubmFtZSgpID09IHRleHRhcmVhVGFnKSB7
CkBAIC0xMzA4LDMwICsxMzA3LDMwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3Rh
cnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kU2VsZWN0KEhUTUxU
b2tlbjo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgcHJvY2Vz
c0VuZFRhZyhlbmRTZWxlY3QpOwotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsK
KyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShlbmRTZWxlY3QpKTsKKyAgICAgICAg
ICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcpIHsKLSAg
ICAgICAgICAgIGJvb2wgZGlkUHJvY2VzcyA9IHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tl
bik7CisgICAgICAgICAgICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhl
YWQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkaWRQcm9jZXNz
LCBkaWRQcm9jZXNzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzVGVt
cGxhdGVTdGFydFRhZyh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRh
ZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlVGV4dDoKICAgICAgICAg
ZGVmYXVsdEZvckluVGFibGVUZXh0KCk7Ci0gICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7
CisgICAgICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGV4dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVD
b250ZW50czoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewotICAg
ICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3RhcnRUYWcodG9rZW4pOworICAgICAgICAgICAgcHJv
Y2Vzc1RlbXBsYXRlU3RhcnRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTEzMzksNyArMTMzOCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcKICAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBzdHlsZVRhZwogICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CisgICAgICAgICAgICBw
cm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTEzNjAsMjIgKzEzNTksMjIgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBt
X3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMubGFzdCgpID0gaW5zZXJ0aW9uTW9kZTsKICAgICAgICAg
bV9pbnNlcnRpb25Nb2RlID0gaW5zZXJ0aW9uTW9kZTsKIAotICAgICAgICBwcm9jZXNzU3RhcnRU
YWcodG9rZW4pOworICAgICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAg
ICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSHRt
bFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mJiB0
b2tlbikKIHsKICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICBpZiAobV90cmVlLm9wZW5FbGVt
ZW50cygpLmhhc1RlbXBsYXRlSW5IVE1MU2NvcGUoKSkgewogICAgICAgICBBU1NFUlQoaXNQYXJz
aW5nVGVtcGxhdGVDb250ZW50cygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSh0b2tlbik7CisgICAgbV90cmVlLmluc2Vy
dEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoV1RGTW92ZSh0b2tlbikpOwogfQogCi1ib29sIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShB
dG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhU
TUxUb2tlbjo6RW5kVGFnKTsKICAgICBBU1NFUlQodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpOwpA
QCAtMTM4OCw3ICsxMzg3LDcgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NCb2R5RW5k
VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55
T3RoZXJFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNT
RVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CiAgICAgZm9yIChhdXRvKiBy
ZWNvcmQgPSAmbV90cmVlLm9wZW5FbGVtZW50cygpLnRvcFJlY29yZCgpOyA7IHJlY29yZCA9IHJl
Y29yZC0+bmV4dCgpKSB7CkBAIC0xNDIzLDcgKzE0MjIsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAg
IEVsZW1lbnQqIGZvcm1hdHRpbmdFbGVtZW50ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpLmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKHRva2VuLm5hbWUoKSk7CiAgICAg
ICAgIC8vIDQuYQogICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50KQotICAgICAgICAgICAg
cmV0dXJuIHByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keSh0b2tlbik7CisgICAgICAgICAg
ICByZXR1cm4gcHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsK
ICAgICAgICAgLy8gNC5jCiAgICAgICAgIGlmICgobV90cmVlLm9wZW5FbGVtZW50cygpLmNvbnRh
aW5zKCpmb3JtYXR0aW5nRWxlbWVudCkpICYmICFtX3RyZWUub3BlbkVsZW1lbnRzKCkuaW5TY29w
ZSgqZm9ybWF0dGluZ0VsZW1lbnQpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
QEAgLTE1OTIsNyArMTU5MSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpyZXNldEluc2VydGlv
bk1vZGVBcHByb3ByaWF0ZWx5KCkKICAgICB9CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkoQXRvbWljSFRNTFRv
a2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVu
ZFRhZyk7CiAgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CkBA
IC0xNjE1LDcgKzE2MTQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zv
ckluVGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1fdHJlZS5vcGVu
RWxlbWVudHMoKS5wb3BVbnRpbFRhYmxlQm9keVNjb3BlTWFya2VyKCk7CiAgICAgICAgIEFTU0VS
VChpc1RhYmxlQm9keUNvbnRleHRUYWcobV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5h
bWUoKSkpOwogICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhtX3RyZWUuY3VycmVudFN0YWNrSXRl
bSgpLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CisgICAgICAg
IHByb2Nlc3NFbmRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZwpAQCAtMTYyNiwxMCArMTYyNSwxMCBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKHRva2VuKTsKKyAgICBwcm9j
ZXNzRW5kVGFnRm9ySW5UYWJsZShXVEZNb3ZlKHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3Zv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRvbWljSFRNTFRva2Vu
JiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRh
Zyk7CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0clRhZykgewpAQCAtMTY0Miw3ICsxNjQxLDcg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFT
U0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOwotICAg
ICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZyhXVEZNb3Zl
KHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzVGFibGVCb2R5Q29u
dGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CkBAIC0xNjUyLDcgKzE2NTEsNyBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIH0KICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcodHJUYWcpOwogICAgICAgICBB
U1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5KTsKLSAg
ICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92
ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gYm9keVRhZwpAQCAtMTY2MiwxMCArMTY2MSwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHByb2Nlc3NFbmRU
YWdGb3JJblRhYmxlKHRva2VuKTsKKyAgICBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShXVEZNb3Zl
KHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5D
ZWxsKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKICAgICBpZiAoaXNUYWJsZUNlbGxD
b250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKQEAgLTE2OTYsMjMgKzE2OTUsMjMgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJbkNlbGwoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBjbG9zZVRoZUNl
bGwoKTsKLSAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRU
YWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHByb2Nlc3NF
bmRUYWdGb3JJbkJvZHkodG9rZW4pOworICAgIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHkoV1RGTW92
ZSh0b2tlbikpOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJU
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CiAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBib2R5VGFnKSB7Ci0gICAgICAgIHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoV1RGTW92ZSh0b2tlbikpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykg
ewogICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kQm9keShIVE1MVG9rZW46OkVuZFRhZywgYm9k
eVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGlmIChwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9k
eShlbmRCb2R5KSkKLSAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOworICAgICAgICBp
ZiAocHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoV1RGTW92ZShlbmRCb2R5KSkpCisgICAgICAg
ICAgICBwcm9jZXNzRW5kVGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGFkZHJlc3NUYWcKQEAgLTE3NzcsNyArMTc3Niw3
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcocFRhZyk7CiAgICAgICAgICAgICBBU1NFUlQobV90cmVl
Lm9wZW5FbGVtZW50cygpLmluU2NvcGUodG9rZW4ubmFtZSgpKSk7Ci0gICAgICAgICAgICBwcm9j
ZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZSh0b2tl
bikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5nZW5l
cmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOwpAQCAtMTg0MSwx
MCArMTg0MCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQm9k
eShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKLSAgICAgICAgcHJvY2Vzc1RlbXBsYXRl
RW5kVGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKFdURk1vdmUodG9r
ZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwcm9jZXNzQW55T3RoZXJFbmRUYWdG
b3JJbkJvZHkodG9rZW4pOworICAgIHByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShXVEZN
b3ZlKHRva2VuKSk7CiB9CiAKIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2FwdGlvbkVu
ZFRhZ0ZvckluQ2FwdGlvbigpCkBAIC0xODg4LDcgKzE4ODcsNyBAQCBib29sIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1RhYmxlRW5kVGFnRm9ySW5UYWJsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJ
blRhYmxlKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVU
YWcpIHsKQEAgLTE5MDcsMTAgKzE5MDYsMTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgcGFyc2VFcnJv
cih0b2tlbik7CiAgICAgLy8gSXMgdGhpcyByZWRpcmVjdGlvbiBuZWNlc3NhcnkgaGVyZT8KICAg
ICBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6UmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkIHJlZGly
ZWN0ZXIobV90cmVlKTsKLSAgICBwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKKyAgICBw
cm9jZXNzRW5kVGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKIH0KIAotdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewog
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwogICAgIHN3aXRj
aCAobV9pbnNlcnRpb25Nb2RlKSB7CkBAIC0xOTM5LDcgKzE5MzgsNyBAQCB2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAv
LyBiZWNhdXNlIG90aGVyIGVuZCB0YWcgY2FzZXMgbm93IHJlZmVyIHRvIGl0ICgicHJvY2VzcyB0
aGUgdG9rZW4gZm9yIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgImluIGhlYWQiIGluc2VydGlvbiBt
b2RlIikuCiAgICAgICAgIC8vIGJ1dCBiZWNhdXNlIHRoZSBsb2dpYyBmYWxscyB0aHJvdWdoIHRv
IEluc2VydGlvbk1vZGU6OkFmdGVySGVhZCwgdGhhdCBnZXRzIGEgbGl0dGxlIG1lc3N5LgogICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzVGVtcGxhdGVFbmRUYWcodG9rZW4pOworICAgICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlRW5k
VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKQEAgLTE5NjMsMTAgKzE5NjIsMTAg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJ
bkJvZHkpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6Oklu
Qm9keToKLSAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluQm9keSh0b2tlbik7CisgICAgICAgIHBy
b2Nlc3NFbmRUYWdGb3JJbkJvZHkoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGU6Ci0gICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJ
blRhYmxlKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ2FwdGlv
bjoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7CkBAIC0xOTc5LDcg
KzE5NzgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBw
cm9jZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gYm9keVRhZwpAQCAtMTk5Miw3ICsxOTkxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHkodG9rZW4pOworICAgICAgICBwcm9jZXNzRW5kVGFn
Rm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOgogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNv
bGdyb3VwVGFnKSB7CkBAIC0yMDA0LDIzICsyMDAzLDIzIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykg
ewotICAgICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKHRva2VuKTsKKyAgICAgICAgICAg
IHByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwcm9jZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNv
bHVtbkdyb3VwKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudE9yVGVt
cGxhdGVDb250ZW50cygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZyhXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Sb3c6Ci0g
ICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJblJvdyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRU
YWdGb3JJblJvdyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5z
ZXJ0aW9uTW9kZTo6SW5DZWxsOgotICAgICAgICBwcm9jZXNzRW5kVGFnRm9ySW5DZWxsKHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChXVEZNb3ZlKHRva2VuKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHk6Ci0gICAgICAg
IHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keSh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRU
YWdGb3JJblRhYmxlQm9keShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5OgogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09
IGh0bWxUYWcpIHsKQEAgLTIwMzYsNyArMjAzNSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIEFTU0VSVChtX2lu
c2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5IHx8IG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keSk7CiAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk7
Ci0gICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOworICAgICAgICBwcm9jZXNzRW5kVGFnKFdU
Rk1vdmUodG9rZW4pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJ
bkhlYWROb3NjcmlwdDoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub3NjcmlwdFRhZykg
ewpAQCAtMjA1MSw3ICsyMDUwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRU
YWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFkTm9zY3JpcHQoKTsKLSAgICAgICAgcHJvY2Vzc1Rv
a2VuKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1Rva2VuKFdURk1vdmUodG9rZW4pKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpUZXh0OgogICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IHNjcmlwdFRhZykgewpAQCAtMjEwNiw4ICsyMTA1LDggQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxl
bWVudHMoKS5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgICAgIEF0
b21pY0hUTUxUb2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuOjpFbmRUYWcsIHNlbGVjdFRhZy5sb2Nh
bE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QpOwotICAg
ICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOworICAgICAgICAgICAgICAgIHByb2Nl
c3NFbmRUYWcoV1RGTW92ZShlbmRTZWxlY3QpKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzRW5k
VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjE0Myw0NiArMjE0Miw0NiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsK
LSAgICAgICAgICAgIHByb2Nlc3NUZW1wbGF0ZUVuZFRhZyh0b2tlbik7CisgICAgICAgICAgICBw
cm9jZXNzVGVtcGxhdGVFbmRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5U
YWJsZVRleHQ6CiAgICAgICAgIGRlZmF1bHRGb3JJblRhYmxlVGV4dCgpOwotICAgICAgICBwcm9j
ZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZyhXVEZNb3ZlKHRva2VuKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50
czoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewotICAgICAgICAg
ICAgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NUZW1w
bGF0ZUVuZFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6Q29tbWVudCk7CiAgICAgaWYgKG1faW5zZXJ0aW9u
TW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbml0aWFsCiAgICAgICAgIHx8IG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MCiAgICAgICAgIHx8IG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keQogICAgICAgICB8fCBtX2luc2VydGlv
bk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0KSB7Ci0gICAgICAgIG1f
dHJlZS5pbnNlcnRDb21tZW50T25Eb2N1bWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNl
cnRDb21tZW50T25Eb2N1bWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckJvZHkp
IHsKLSAgICAgICAgbV90cmVlLmluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudCh0b2tlbik7
CisgICAgICAgIG1fdHJlZS5pbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2luc2VydGlvbk1vZGUg
PT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQpIHsKICAgICAgICAgZGVmYXVsdEZvckluVGFi
bGVUZXh0KCk7Ci0gICAgICAgIHByb2Nlc3NDb21tZW50KHRva2VuKTsKKyAgICAgICAgcHJvY2Vz
c0NvbW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1f
dHJlZS5pbnNlcnRDb21tZW50KHRva2VuKTsKKyAgICBtX3RyZWUuaW5zZXJ0Q29tbWVudChXVEZN
b3ZlKHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVy
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0No
YXJhY3RlcihBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVyKTsKICAgICBFeHRlcm5hbENoYXJhY3RlclRva2Vu
QnVmZmVyIGJ1ZmZlcih0b2tlbik7CkBAIC0yNDQwLDcgKzI0MzksNyBAQCB2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlckJ1ZmZlckZvckluQm9keShFeHRlcm5hbENoYXJhY3Rl
clRva2VuQnVmZgogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKIH0KIAotdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3Zv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKEF0b21pY0hUTUxUb2tlbiYmIHRv
a2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRPZkZpbGUp
OwogICAgIHN3aXRjaCAobV9pbnNlcnRpb25Nb2RlKSB7CkBAIC0yNDcwLDcgKzI0NjksNyBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmlsZShBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Sb3c6CiAgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7IC8vIEVtaXQgcGFyc2UgZXJyb3IgYmFzZWQgb24gd2hhdCBlbGVtZW50cyBhcmUgc3Rp
bGwgb3Blbi4KICAgICAgICAgaWYgKCFtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBpZiAocHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50
cyh0b2tlbikpCisgICAgICAgICAgICBpZiAocHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVD
b250ZW50cyhXVEZNb3ZlKHRva2VuKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjQ3OSw3ICsyNDc4LDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkhlYWROb3NjcmlwdDoKICAgICAgICAg
ZGVmYXVsdEZvckluSGVhZE5vc2NyaXB0KCk7Ci0gICAgICAgIHByb2Nlc3NFbmRPZkZpbGUodG9r
ZW4pOworICAgICAgICBwcm9jZXNzRW5kT2ZGaWxlKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldDoKICAgICBjYXNl
IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldDoKQEAgLTI1MDEsMTMgKzI1MDAsMTMg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICAgICAgaWYgKCZtX3RyZWUuY3VycmVudE5vZGUoKSAhPSAmbV90cmVlLm9w
ZW5FbGVtZW50cygpLnJvb3ROb2RlKCkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICAgICAgaWYgKCFtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBpZiAocHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyh0b2tlbikp
CisgICAgICAgICAgICBpZiAocHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyhX
VEZNb3ZlKHRva2VuKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQ6CiAgICAgICAg
IGRlZmF1bHRGb3JJblRhYmxlVGV4dCgpOwotICAgICAgICBwcm9jZXNzRW5kT2ZGaWxlKHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc0VuZE9mRmlsZShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OlRleHQ6CiAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwpAQCAtMjUxNiwxMCArMjUxNSwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZE9mRmlsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCkucG9wKCk7CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsSW5zZXJ0aW9uTW9k
ZSAhPSBJbnNlcnRpb25Nb2RlOjpUZXh0KTsKICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gbV9v
cmlnaW5hbEluc2VydGlvbk1vZGU7Ci0gICAgICAgIHByb2Nlc3NFbmRPZkZpbGUodG9rZW4pOwor
ICAgICAgICBwcm9jZXNzRW5kT2ZGaWxlKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50czoKLSAgICAgICAgaWYg
KHByb2Nlc3NFbmRPZkZpbGVGb3JJblRlbXBsYXRlQ29udGVudHModG9rZW4pKQorICAgICAgICBp
ZiAocHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyhXVEZNb3ZlKHRva2VuKSkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI1MzcsMzIg
KzI1MzYsMzIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbml0aWFsKCkKIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQmVmb3JlSFRNTCgpCiB7CiAgICAgQXRvbWlj
SFRNTFRva2VuIHN0YXJ0SFRNTChIVE1MVG9rZW46OlN0YXJ0VGFnLCBodG1sVGFnLmxvY2FsTmFt
ZSgpKTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoc3RhcnRI
VE1MKTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoV1RGTW92
ZShzdGFydEhUTUwpKTsKICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZv
cmVIZWFkOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckJlZm9yZUhlYWQo
KQogewogICAgIEF0b21pY0hUTUxUb2tlbiBzdGFydEhlYWQoSFRNTFRva2VuOjpTdGFydFRhZywg
aGVhZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vzc1N0YXJ0VGFnKHN0YXJ0SGVhZCk7Cisg
ICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUoc3RhcnRIZWFkKSk7CiB9CiAKIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5IZWFkKCkKIHsKICAgICBBdG9taWNIVE1MVG9rZW4gZW5k
SGVhZChIVE1MVG9rZW46OkVuZFRhZywgaGVhZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vz
c0VuZFRhZyhlbmRIZWFkKTsKKyAgICBwcm9jZXNzRW5kVGFnKFdURk1vdmUoZW5kSGVhZCkpOwog
fQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluSGVhZE5vc2NyaXB0KCkKIHsK
ICAgICBBdG9taWNIVE1MVG9rZW4gZW5kTm9zY3JpcHQoSFRNTFRva2VuOjpFbmRUYWcsIG5vc2Ny
aXB0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzRW5kVGFnKGVuZE5vc2NyaXB0KTsKKyAg
ICBwcm9jZXNzRW5kVGFnKFdURk1vdmUoZW5kTm9zY3JpcHQpKTsKIH0KIAogdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OmRlZmF1bHRGb3JBZnRlckhlYWQoKQogewogICAgIEF0b21pY0hUTUxUb2tlbiBz
dGFydEJvZHkoSFRNTFRva2VuOjpTdGFydFRhZywgYm9keVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAg
cHJvY2Vzc1N0YXJ0VGFnKHN0YXJ0Qm9keSk7CisgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUo
c3RhcnRCb2R5KSk7CiAgICAgbV9mcmFtZXNldE9rID0gdHJ1ZTsKIH0KIApAQCAtMjU4MywxMSAr
MjU4MiwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluVGFibGVUZXh0KCkK
ICAgICBtX2luc2VydGlvbk1vZGUgPSBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZTsKIH0KIAotYm9v
bCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQorYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluSGVh
ZChBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09
IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykg
ewotICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKKyAgICAgICAg
cHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJhc2VUYWcKQEAgLTI1
OTYsMzYgKzI1OTUsMzcgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zv
ckluSGVhZChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gY29tbWFuZFRhZwogICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlua1RhZwogICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gbWV0YVRhZykgewotICAgICAgICBtX3RyZWUuaW5zZXJ0U2Vs
ZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xv
c2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgLy8gTm90ZTogVGhlIGN1
c3RvbSBwcm9jZXNzaW5nIGZvciB0aGUgPG1ldGE+IHRhZyBpcyBkb25lIGluIEhUTUxNZXRhRWxl
bWVudDo6cHJvY2VzcygpLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSB0aXRsZVRhZykgewotICAgICAgICBwcm9jZXNzR2VuZXJpY1JDREFUQVN0
YXJ0VGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyhXVEZN
b3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAodG9rZW4u
bmFtZSgpID09IG5vc2NyaXB0VGFnKSB7CiAgICAgICAgIGlmIChtX29wdGlvbnMuc2NyaXB0RW5h
YmxlZCkgewotICAgICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcodG9rZW4p
OworICAgICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcoV1RGTW92ZSh0b2tl
bikpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVl
Lmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9u
TW9kZTo6SW5IZWFkTm9zY3JpcHQ7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzdHlsZVRh
ZykgewotICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyh0b2tlbik7CisgICAg
ICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFn
KSB7Ci0gICAgICAgIHByb2Nlc3NTY3JpcHRTdGFydFRhZyh0b2tlbik7Ci0gICAgICAgIGlmICht
X29wdGlvbnMudXNlUHJlSFRNTDVQYXJzZXJRdWlya3MgJiYgdG9rZW4uc2VsZkNsb3NpbmcoKSkK
KyAgICAgICAgYm9vbCBpc1NlbGZDbG9zaW5nID0gdG9rZW4uc2VsZkNsb3NpbmcoKTsKKyAgICAg
ICAgcHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKKyAgICAgICAgaWYgKG1f
b3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiBpc1NlbGZDbG9zaW5nKQogICAgICAg
ICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcoc2NyaXB0VGFnKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKICAgICAgICAg
bV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAgIHByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKHRv
a2VuKTsKKyAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3RhcnRUYWcoV1RGTW92ZSh0b2tlbikpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoZWFk
VGFnKSB7CkBAIC0yNjM1LDI4ICsyNjM1LDI4IEBAIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1JDREFUQVN0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAg
ICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwotICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KFdURk1vdmUodG9rZW4pKTsKICAgICBtX3BhcnNlci50b2tlbml6ZXIoKS5zZXRSQ0RBVEFTdGF0
ZSgpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwogICAg
IG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OlRleHQ7CiB9CiAKLXZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0
VGFnKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuOjpTdGFydFRhZyk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRv
a2VuKTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAg
IG1fcGFyc2VyLnRva2VuaXplcigpLnNldFJBV1RFWFRTdGF0ZSgpOwogICAgIG1fb3JpZ2luYWxJ
bnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwogICAgIG1faW5zZXJ0aW9uTW9kZSA9IElu
c2VydGlvbk1vZGU6OlRleHQ7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2Ny
aXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAg
QVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKLSAgICBtX3RyZWUu
aW5zZXJ0U2NyaXB0RWxlbWVudCh0b2tlbik7CisgICAgbV90cmVlLmluc2VydFNjcmlwdEVsZW1l
bnQoV1RGTW92ZSh0b2tlbikpOwogICAgIG1fcGFyc2VyLnRva2VuaXplcigpLnNldFNjcmlwdERh
dGFTdGF0ZSgpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2Rl
OwogCkBAIC0yNjc4LDcgKzI2NzgsNyBAQCBIVE1MU3RhY2tJdGVtJiBIVE1MVHJlZUJ1aWxkZXI6
OmFkanVzdGVkQ3VycmVudFN0YWNrSXRlbSgpIGNvbnN0CiB9CiAKIC8vIGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RyZWUtY29uc3Ry
dWN0aW9uLmh0bWwjdHJlZS1jb25zdHJ1Y3Rpb24KLWJvb2wgSFRNTFRyZWVCdWlsZGVyOjpzaG91
bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiti
b29sIEhUTUxUcmVlQnVpbGRlcjo6c2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChj
b25zdCBBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIGlmIChtX3RyZWUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzA4LDEyICsyNzA4LDEyIEBAIGJvb2wgSFRN
TFRyZWVCdWlsZGVyOjpzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGhhc0F0
dHJpYnV0ZShBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
KQorc3RhdGljIGJvb2wgaGFzQXR0cmlidXRlKGNvbnN0IEF0b21pY0hUTUxUb2tlbiYgdG9rZW4s
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7CiAgICAgcmV0dXJuIGZpbmRBdHRyaWJ1dGUo
dG9rZW4uYXR0cmlidXRlcygpLCBuYW1lKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxU
b2tlbiYmIHRva2VuKQogewogICAgIEhUTUxTdGFja0l0ZW0mIGFkanVzdGVkQ3VycmVudE5vZGUg
PSBhZGp1c3RlZEN1cnJlbnRTdGFja0l0ZW0oKTsKICAgICAKQEAgLTI3NjcsNyArMjc2Nyw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICB8fCAodG9rZW4ubmFtZSgpID09IGZvbnRU
YWcgJiYgKGhhc0F0dHJpYnV0ZSh0b2tlbiwgY29sb3JBdHRyKSB8fCBoYXNBdHRyaWJ1dGUodG9r
ZW4sIGZhY2VBdHRyKSB8fCBoYXNBdHRyaWJ1dGUodG9rZW4sIHNpemVBdHRyKSkpKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS5wb3BVbnRpbEZvcmVpZ25Db250ZW50U2NvcGVNYXJrZXIoKTsKLSAgICAgICAgICAgIHBy
b2Nlc3NTdGFydFRhZyh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92
ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgY3VycmVudE5hbWVzcGFjZSA9IGFkanVzdGVkQ3VycmVudE5vZGUubmFt
ZXNwYWNlVVJJKCk7CkBAIC0yNzc4LDcgKzI3NzgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICAgICAgYWRqdXN0U1ZHQXR0cmlidXRlcyh0b2tlbik7CiAgICAgICAgIH0KICAgICAgICAg
YWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXModG9rZW4pOwotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9y
ZWlnbkVsZW1lbnQodG9rZW4sIGN1cnJlbnROYW1lc3BhY2UpOworICAgICAgICBtX3RyZWUuaW5z
ZXJ0Rm9yZWlnbkVsZW1lbnQoV1RGTW92ZSh0b2tlbiksIGN1cnJlbnROYW1lc3BhY2UpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIVE1MVG9rZW46OkVuZFRhZzogewpAQCAtMjgw
OCwxMSArMjgwOCwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3Jl
aWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIC8vIE90aGVyd2lzZSwgcHJvY2VzcyB0aGUgdG9rZW4gYWNjb3JkaW5nIHRv
IHRoZSBydWxlcyBnaXZlbiBpbiB0aGUgc2VjdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJy
ZW50IGluc2VydGlvbiBtb2RlIGluIEhUTUwgY29udGVudC4KLSAgICAgICAgcHJvY2Vzc0VuZFRh
Zyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIVE1MVG9rZW46OkNvbW1lbnQ6Ci0gICAgICAgIG1f
dHJlZS5pbnNlcnRDb21tZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydENvbW1lbnQo
V1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBIVE1MVG9rZW46OkNo
YXJhY3RlcjogewogICAgICAgICBTdHJpbmcgY2hhcmFjdGVycyA9IFN0cmluZyh0b2tlbi5jaGFy
YWN0ZXJzKCksIHRva2VuLmNoYXJhY3RlcnNMZW5ndGgoKSk7CkBAIC0yODQwLDcgKzI4NDAsNyBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZmluaXNoZWQoKQogICAgIC8vIFRoZSB0cmVlIGJ1aWxk
ZXIgbWlnaHQgaGF2ZSBiZWVuIGRlc3Ryb3llZCBhcyBhbiBpbmRpcmVjdCByZXN1bHQgb2YgZmlu
aXNoaW5nIHRoZSBwYXJzaW5nLgogfQogCi1pbmxpbmUgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBh
cnNlRXJyb3IoQXRvbWljSFRNTFRva2VuJikKK2lubGluZSB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cGFyc2VFcnJvcihjb25zdCBBdG9taWNIVE1MVG9rZW4mKQogewogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IDU1OWYyNzkyYmE4NjU2MmIz
Nzk5YjZlOTc4OTIyMTg2NDJhOWQ4YjMuLmQ3MDkyOWY2MGE2MGJjNjU5NmY2NzkwY2QwMGRlZjE2
Zjk4NTU5YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5oCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTsKIGNs
YXNzIEhUTUxEb2N1bWVudFBhcnNlcjsKIAogc3RydWN0IEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rp
b25EYXRhIHsKLSAgICBDdXN0b21FbGVtZW50Q29uc3RydWN0aW9uRGF0YShSZWY8SlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlPiYmLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3Rv
cjxBdHRyaWJ1dGU+Jik7CisgICAgQ3VzdG9tRWxlbWVudENvbnN0cnVjdGlvbkRhdGEoUmVmPEpT
Q3VzdG9tRWxlbWVudEludGVyZmFjZT4mJiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0
b3I8QXR0cmlidXRlPiYmKTsKICAgICB+Q3VzdG9tRWxlbWVudENvbnN0cnVjdGlvbkRhdGEoKTsK
IAogICAgIFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+IGVsZW1lbnRJbnRlcmZhY2U7CkBA
IC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQoKSBj
b25zdDsKIAotICAgIHZvaWQgY29uc3RydWN0VHJlZShBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2
b2lkIGNvbnN0cnVjdFRyZWUoQXRvbWljSFRNTFRva2VuJiYpOwogCiAgICAgYm9vbCBpc1BhcnNp
bmdUZW1wbGF0ZUNvbnRlbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNQYXJzZXJCbG9ja2luZ1Nj
cmlwdFdvcmsoKSBjb25zdDsKQEAgLTEwOCwzMiArMTA4LDMyIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBsaW5raWZ5UGhvbmVOdW1iZXJzKGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKLSAgICB2b2lk
IHByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4mKTsKLQotICAgIHZvaWQgcHJvY2Vzc0RvY3R5
cGVUb2tlbihBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NTdGFydFRhZyhBdG9t
aWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJik7
Ci0gICAgdm9pZCBwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHBy
b2Nlc3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kT2ZG
aWxlKEF0b21pY0hUTUxUb2tlbiYpOwotCi0gICAgYm9vbCBwcm9jZXNzU3RhcnRUYWdGb3JJbkhl
YWQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKEF0
b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxU
b2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0b21pY0hUTUxU
b2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxUb2tlbiYp
OwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4mKTsKLQot
ICAgIHZvaWQgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mKTsK
LSAgICBib29sIHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwor
ICAgIHZvaWQgcHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYmKTsKKworICAgIHZvaWQgcHJv
Y2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4mJik7CisgICAgdm9pZCBwcm9jZXNzU3Rh
cnRUYWcoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZyhBdG9taWNI
VE1MVG9rZW4mJik7CisgICAgdm9pZCBwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4mJik7
CisgICAgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lk
IHByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2VuJiYpOworCisgICAgYm9vbCBwcm9jZXNz
U3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZvaWQgcHJvY2Vzc1N0
YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lkIHByb2Nlc3NTdGFy
dFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZvaWQgcHJvY2Vzc0VuZFRh
Z0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mJik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9y
SW5UYWJsZShBdG9taWNIVE1MVG9rZW4mJik7CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5U
YWJsZUJvZHkoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0Zvcklu
Um93KEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJbkNlbGwo
QXRvbWljSFRNTFRva2VuJiYpOworCisgICAgdm9pZCBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICBib29sIHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYmKTsKICAgICBib29sIHByb2Nlc3NUYWJsZUVuZFRhZ0Zvcklu
VGFibGUoKTsKICAgICBib29sIHByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKCk7CiAg
ICAgYm9vbCBwcm9jZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCk7CiAgICAgYm9v
bCBwcm9jZXNzVHJFbmRUYWdGb3JJblJvdygpOwogCi0gICAgdm9pZCBwcm9jZXNzQW55T3RoZXJF
bmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzQW55T3Ro
ZXJFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYpOwogCiAgICAgdm9pZCBwcm9jZXNz
Q2hhcmFjdGVyQnVmZmVyKEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXImKTsKICAgICBpbmxp
bmUgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyRm9ySW5Cb2R5KEV4dGVybmFsQ2hhcmFjdGVy
VG9rZW5CdWZmZXImKTsKQEAgLTE0NCw5ICsxNDQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJv
Y2Vzc0Zha2VDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VQ
RW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwogCi0gICAgdm9pZCBwcm9jZXNzR2VuZXJpY1JDREFU
QVN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0dlbmVyaWNSYXdU
ZXh0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzU2NyaXB0U3Rh
cnRUYWcoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzR2VuZXJpY1JDREFUQVN0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lkIHByb2Nlc3NHZW5lcmljUmF3VGV4
dFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lkIHByb2Nlc3NTY3JpcHRTdGFy
dFRhZyhBdG9taWNIVE1MVG9rZW4mJik7CiAKICAgICAvLyBEZWZhdWx0IHByb2Nlc3NpbmcgZm9y
IHRoZSBkaWZmZXJlbnQgaW5zZXJ0aW9uIG1vZGVzLgogICAgIHZvaWQgZGVmYXVsdEZvckluaXRp
YWwoKTsKQEAgLTE1Nyw4ICsxNTcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVmYXVsdEZvckFm
dGVySGVhZCgpOwogICAgIHZvaWQgZGVmYXVsdEZvckluVGFibGVUZXh0KCk7CiAKLSAgICBib29s
IHNob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJik7Ci0g
ICAgdm9pZCBwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYpOwor
ICAgIGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChjb25zdCBBdG9taWNI
VE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWlj
SFRNTFRva2VuJiYpOwogICAgIAogICAgIEhUTUxTdGFja0l0ZW0mIGFkanVzdGVkQ3VycmVudFN0
YWNrSXRlbSgpIGNvbnN0OwogCkBAIC0xNjYsMTcgKzE2NiwxNyBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBjbG9zZVRoZUNlbGwoKTsKIAotICAgIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNv
bnN0IEhUTUxTdGFja0l0ZW0mKT4gdm9pZCBwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnKEF0b21p
Y0hUTUxUb2tlbiYpOworICAgIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IEhUTUxT
dGFja0l0ZW0mKT4gdm9pZCBwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnKEF0b21pY0hUTUxUb2tl
biYmKTsKIAotICAgIHZvaWQgcGFyc2VFcnJvcihBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lk
IHBhcnNlRXJyb3IoY29uc3QgQXRvbWljSFRNTFRva2VuJik7CiAKICAgICB2b2lkIHJlc2V0SW5z
ZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkoKTsKIAotICAgIHZvaWQgaW5zZXJ0R2VuZXJpY0hUTUxF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0R2VuZXJpY0hUTUxFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYmKTsKIAotICAgIHZvaWQgcHJvY2Vzc1RlbXBsYXRlU3RhcnRU
YWcoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgYm9vbCBwcm9jZXNzVGVtcGxhdGVFbmRUYWcoQXRv
bWljSFRNTFRva2VuJik7Ci0gICAgYm9vbCBwcm9jZXNzRW5kT2ZGaWxlRm9ySW5UZW1wbGF0ZUNv
bnRlbnRzKEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc1RlbXBsYXRlU3RhcnRU
YWcoQXRvbWljSFRNTFRva2VuJiYpOworICAgIGJvb2wgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKEF0
b21pY0hUTUxUb2tlbiYmKTsKKyAgICBib29sIHByb2Nlc3NFbmRPZkZpbGVGb3JJblRlbXBsYXRl
Q29udGVudHMoQXRvbWljSFRNTFRva2VuJiYpOwogCiAgICAgY2xhc3MgRnJhZ21lbnRQYXJzaW5n
Q29udGV4dCB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L1RleHREb2N1bWVudFBhcnNlci5jcHAKaW5kZXggYTNmNWIyYzdlMTRjZDEyMTFhN2YxYzMyY2Nh
NWIxNDQ5YmQ5ZDQzNy4uYWQ1ZjZlNzhlMzgxYWFkY2NjNmI5MWJhOTdjYTQyNTU4MDRjYjk3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIu
Y3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgVGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtl
UHJlRWxlbWVudCgpCiAgICAgVmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlczsKICAgICBhdHRy
aWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoc3R5bGVBdHRyLCAid29yZC13cmFwOiBicmVhay13b3Jk
OyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IikpOwogICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlUHJl
KEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy5sb2NhbE5hbWUoKSwgV1RGTW92ZShhdHRyaWJ1
dGVzKSk7Ci0gICAgdHJlZUJ1aWxkZXIoKS5jb25zdHJ1Y3RUcmVlKGZha2VQcmUpOworICAgIHRy
ZWVCdWlsZGVyKCkuY29uc3RydWN0VHJlZShXVEZNb3ZlKGZha2VQcmUpKTsKIAogICAgIC8vIE5v
cm1hbGx5IHdlIHdvdWxkIHNraXAgdGhlIGZpcnN0IFxuIGFmdGVyIGEgPHByZT4gZWxlbWVudCwg
YnV0IHdlIGRvbid0CiAgICAgLy8gd2FudCB0byBza2lwIHRoZSBmaXJzdCBcbiBmb3IgdGV4dCBk
b2N1bWVudHMhCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294848</attachid>
            <date>2016-11-15 10:18:01 -0800</date>
            <delta_ts>2016-11-15 17:16:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164778-20161115101800.patch</filename>
            <type>text/plain</type>
            <size>91119</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGFkYmNiMTRlMjNhMGZk
OGZmY2JjOGVjNTVlNWIyZmMxZDdkOWU3MC4uYjgxZGYzZDE5NDk3NzExZmQ1MGE1MzM5NDBlNDM2
ZjdjNjg4OTRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDE2LTExLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgY29weWluZyB2ZWN0
b3Igb2YgYXR0cmlidXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGluIHRoZSBIVE1MIHBhcnNlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0Nzc4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgY29w
eWluZyB2ZWN0b3Igb2YgYXR0cmlidXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGluIHRoZSBIVE1M
IHBhcnNlciBieSBtb3ZpbmcKKyAgICAgICAgQXRvbWljSFRNTFRva2VuIGFyb3VuZCBhbmQgbWFr
aW5nIGl0IG9idmlvdXMgaXQgaXMgc2FmZSB0byBtb3ZlIGl0cyBhdHRyaWJ1dGVzCisgICAgICAg
IHZlY3RvciBhcyB3ZWxsLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gV2ViLWV4cG9zZWQg
YmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogaHRtbC9wYXJzZXIvQXRvbWljSFRNTFRva2Vu
Lmg6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OkF0b21pY0hUTUxUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpmaW5kQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbklu
dG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25Eb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uSFRNTEh0
bWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSGVhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxCb2R5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVt
ZW50SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JtYXR0aW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9yZWlnbkVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50T3JG
aW5kQ3VzdG9tRWxlbWVudEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJz
ZXI6OmNvbnN0cnVjdFRyZWVGcm9tSFRNTFRva2VuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MU3RhY2tJdGVtLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tJdGVtOjpIVE1MU3Rh
Y2tJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdGFja0l0ZW06OmNyZWF0ZSk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rpb25EYXRhOjpDdXN0b21FbGVtZW50Q29uc3RydWN0aW9u
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlRW5kVGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5C
dXR0b25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3ND
bG9zZVdoZW5OZXN0ZWRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjppbnNlcnRHZW5lcmljSFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZUVuZFRhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGVGb3JJblRlbXBsYXRlQ29udGVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
blRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0h0bWxTdGFy
dFRhZ0ZvckluQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NCb2R5RW5kVGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluUm93KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJbkJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5U
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29tbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckJlZm9yZUhUTUwpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQmVmb3JlSGVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5IZWFkTm9zY3JpcHQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQWZ0ZXJIZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9y
SW5IZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVy
aWNSQ0RBVEFTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6c2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUcmVlQnVpbGRlcjo6cGFyc2VFcnJvcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVs
ZW1lbnQpOgorCiAyMDE2LTExLTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgQXZvaWQgY29weWluZyBhdHRyaWJ1dGVzIHZlY3RvciB3aGVuIGNvbnN0cnVjdGlu
ZyBhIEN1c3RvbUVsZW1lbnQgaW4gSFRNTFRyZWVCdWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9BdG9taWNIVE1MVG9rZW4uaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0F0b21pY0hUTUxUb2tlbi5oCmluZGV4IDExZjJiZGE4YzFhMDVlYTc4MTRhOTdk
YjY5NTQzYWU5NjBiNzdjNzAuLjdlOTUxMDc5MjE2ZDkyN2JlY2UxOWMyNDczMzE0ZWMzM2JmNGY1
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21pY0hUTUxUb2tl
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0F0b21pY0hUTUxUb2tlbi5oCkBA
IC0zMyw3ICszMywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdG9taWNIVE1MVG9r
ZW4gewogcHVibGljOgogICAgIGV4cGxpY2l0IEF0b21pY0hUTUxUb2tlbihIVE1MVG9rZW4mKTsK
LSAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuOjpUeXBlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIFZlY3RvcjxBdHRyaWJ1dGU+JiYgPSBWZWN0b3I8QXR0cmlidXRlPigpKTsgLy8gT25s
eSBTdGFydFRhZyBvciBFbmRUYWcuCisgICAgQXRvbWljSFRNTFRva2VuKEhUTUxUb2tlbjo6VHlw
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0b3I8QXR0cmlidXRlPiYmID0geyB9KTsg
Ly8gT25seSBTdGFydFRhZyBvciBFbmRUYWcuCisKKyAgICBBdG9taWNIVE1MVG9rZW4oY29uc3Qg
QXRvbWljSFRNTFRva2VuJikgPSBkZWxldGU7CisgICAgQXRvbWljSFRNTFRva2VuKEF0b21pY0hU
TUxUb2tlbiYmKSA9IGRlZmF1bHQ7CiAKICAgICBIVE1MVG9rZW46OlR5cGUgdHlwZSgpIGNvbnN0
OwogCkBAIC04OCw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEF0dHJpYnV0ZT4gbV9h
dHRyaWJ1dGVzOyAvLyBTdGFydFRhZywgRW5kVGFnLgogfTsKIAotQXR0cmlidXRlKiBmaW5kQXR0
cmlidXRlKFZlY3RvcjxBdHRyaWJ1dGU+JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworY29uc3Qg
QXR0cmlidXRlKiBmaW5kQXR0cmlidXRlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwogCiBpbmxpbmUgSFRNTFRva2VuOjpUeXBlIEF0b21pY0hUTUxUb2tl
bjo6dHlwZSgpIGNvbnN0CiB7CkBAIC0xNjksNyArMTcyLDcgQEAgaW5saW5lIFN0cmluZyBBdG9t
aWNIVE1MVG9rZW46OnN5c3RlbUlkZW50aWZpZXIoKSBjb25zdAogICAgIHJldHVybiBTdHJpbmdJ
bXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShtX2RvY3R5cGVEYXRhLT5zeXN0ZW1JZGVudGlmaWVy
KTsKIH0KIAotaW5saW5lIEF0dHJpYnV0ZSogZmluZEF0dHJpYnV0ZShWZWN0b3I8QXR0cmlidXRl
PiYgYXR0cmlidXRlcywgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK2lubGluZSBjb25zdCBB
dHRyaWJ1dGUqIGZpbmRBdHRyaWJ1dGUoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0
ZXMsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7CiAgICAgZm9yIChhdXRvJiBhdHRyaWJ1
dGUgOiBhdHRyaWJ1dGVzKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpLm1hdGNoZXMo
bmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAKaW5kZXggZTBkMjdlMjMwNTAwNzU2NDA5YjhmYTc1NjYxNmYzYTY4OTk3ZDU0
OC4uZmMzOTA0MGE4ZTNlODRlZGEzNzlhNDJhYTI4NDNmN2E2YWZlZjBkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAt
NDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFRlbXBsYXRlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxVbmtub3duRWxlbWVudC5oIgor
I2luY2x1ZGUgIkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAg
LTI1OCwxOSArMjU5LDE5IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmRpc3BhdGNoRG9j
dW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKQogICAgICAgICBmcmFtZS0+aW5qZWN0VXNl
clNjcmlwdHMoSW5qZWN0QXREb2N1bWVudFN0YXJ0KTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRU
YWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIGF1dG8gZWxlbWVu
dCA9IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwogICAgIHNldEF0dHJpYnV0
ZXMoZWxlbWVudCwgdG9rZW4sIG1fcGFyc2VyQ29udGVudFBvbGljeSk7CiAgICAgYXR0YWNoTGF0
ZXIobV9hdHRhY2htZW50Um9vdCwgZWxlbWVudC5jb3B5UmVmKCkpOwotICAgIG1fb3BlbkVsZW1l
bnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQuY29w
eVJlZigpLCB0b2tlbikpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQo
SFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQuY29weVJlZigpLCBXVEZNb3ZlKHRva2VuKSkp
OwogCiAgICAgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgZWxlbWVudC0+aW5zZXJ0ZWRCeVBh
cnNlcigpOwogICAgIGRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKTsK
IH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2Vu
SW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgRWxlbWVudCYgZWxlbWVudCkKK3Zv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuLCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlm
ICh0b2tlbi5hdHRyaWJ1dGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0yODEs
MTkgKzI4MiwxOSBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNG
cm9tVG9rZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4mCiAgICAgfQogfQogCi12b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRt
bFN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIC8vIEZyYWdt
ZW50cyBkbyBub3QgaGF2ZSBhIHJvb3QgSFRNTCBlbGVtZW50LCBzbyBhbnkgYWRkaXRpb25hbCBI
VE1MIGVsZW1lbnRzCiAgICAgLy8gZW5jb3VudGVyZWQgZHVyaW5nIGZyYWdtZW50IHBhcnNpbmcg
c2hvdWxkIGJlIGlnbm9yZWQuCiAgICAgaWYgKG1faXNQYXJzaW5nRnJhZ21lbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KHRva2Vu
LCBtX29wZW5FbGVtZW50cy5odG1sRWxlbWVudCgpKTsKKyAgICBtZXJnZUF0dHJpYnV0ZXNGcm9t
VG9rZW5JbnRvRWxlbWVudChXVEZNb3ZlKHRva2VuKSwgbV9vcGVuRWxlbWVudHMuaHRtbEVsZW1l
bnQoKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5U3Rh
cnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlv
blNpdGU6Omluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYgdG9r
ZW4pCiB7Ci0gICAgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQodG9rZW4sIG1f
b3BlbkVsZW1lbnRzLmJvZHlFbGVtZW50KCkpOworICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tl
bkludG9FbGVtZW50KFdURk1vdmUodG9rZW4pLCBtX29wZW5FbGVtZW50cy5ib2R5RWxlbWVudCgp
KTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6c2V0RGVmYXVsdENvbXBhdGliaWxp
dHlNb2RlKCkKQEAgLTQwNCw3ICs0MDUsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpm
aW5pc2hlZFBhcnNpbmcoKQogICAgIG1fZG9jdW1lbnQuZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAK
LXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkRPQ1RZUEUpOwogCkBAIC00MjgsNjUgKzQyOSw2NSBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHNl
dENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUodG9rZW4ubmFtZSgpLCBwdWJsaWNJZCwgc3lz
dGVtSWQpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRD
b21tZW50KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuOjpDb21tZW50KTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgp
LCBDb21tZW50OjpjcmVhdGUob3duZXJEb2N1bWVudEZvckN1cnJlbnROb2RlKCksIHRva2VuLmNv
bW1lbnQoKSkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50
T25Eb2N1bWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7
CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1lbnQpOwogICAgIGF0
dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3QsIENvbW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50LCB0
b2tlbi5jb21tZW50KCkpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
Q29tbWVudE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkNvbW1lbnQpOwogICAgIENvbnRhaW5lck5vZGUmIHBhcmVudCA9IG1fb3BlbkVsZW1lbnRz
LnJvb3ROb2RlKCk7CiAgICAgYXR0YWNoTGF0ZXIocGFyZW50LCBDb21tZW50OjpjcmVhdGUocGFy
ZW50LmRvY3VtZW50KCksIHRva2VuLmNvbW1lbnQoKSkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIZWFkRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQoIXNob3VsZEZvc3RlclBhcmVudCgpKTsK
LSAgICBtX2hlYWQgPSBIVE1MU3RhY2tJdGVtOjpjcmVhdGUoY3JlYXRlSFRNTEVsZW1lbnQodG9r
ZW4pLCB0b2tlbik7CisgICAgbV9oZWFkID0gSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGNyZWF0ZUhU
TUxFbGVtZW50KHRva2VuKSwgV1RGTW92ZSh0b2tlbikpOwogICAgIGF0dGFjaExhdGVyKGN1cnJl
bnROb2RlKCksIG1faGVhZC0+ZWxlbWVudCgpKTsKICAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRN
TEhlYWRFbGVtZW50KCptX2hlYWQpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4mJiB0
b2tlbikKIHsKICAgICBBU1NFUlQoIXNob3VsZEZvc3RlclBhcmVudCgpKTsKICAgICBhdXRvIGJv
ZHkgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5v
ZGUoKSwgYm9keS5jb3B5UmVmKCkpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9keUVs
ZW1lbnQoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFdURk1vdmUoYm9keSksIHRva2VuKSk7CisgICAg
bV9vcGVuRWxlbWVudHMucHVzaEhUTUxCb2R5RWxlbWVudChIVE1MU3RhY2tJdGVtOjpjcmVhdGUo
V1RGTW92ZShib2R5KSwgV1RGTW92ZSh0b2tlbikpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGJv
b2wgaXNEZW1vdGVkKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1F
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuLCBib29sIGlzRGVtb3RlZCkKIHsKICAgICBh
dXRvIGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgbV9mb3JtID0gJmRv
d25jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxlbWVudC5nZXQoKSk7CiAgICAgbV9mb3JtLT5zZXRE
ZW1vdGVkKGlzRGVtb3RlZCk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgKm1fZm9y
bSk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoKm1fZm9y
bSwgdG9rZW4pKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0
ZSgqbV9mb3JtLCBXVEZNb3ZlKHRva2VuKSkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiYgdG9r
ZW4pCiB7CiAgICAgYXV0byBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAg
IGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQuY29weVJlZigpKTsKLSAgICBtX29w
ZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShXVEZNb3ZlKGVsZW1lbnQpLCB0
b2tlbikpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFdU
Rk1vdmUoZWxlbWVudCksIFdURk1vdmUodG9rZW4pKSk7CiB9CiAKLUpTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZSogSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3Vz
dG9tRWxlbWVudEludGVyZmFjZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQorc3RkOjp1bmlxdWVf
cHRyPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rpb25EYXRhPiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKEF0b21pY0hUTUxU
b2tlbiYmIHRva2VuKQogewogICAgIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSogZWxlbWVudElu
dGVyZmFjZSA9IG51bGxwdHI7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBjcmVhdGVI
VE1MRWxlbWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UodG9rZW4sICZlbGVtZW50SW50
ZXJmYWNlKTsKICAgICBpZiAoVU5MSUtFTFkoZWxlbWVudEludGVyZmFjZSkpCi0gICAgICAgIHJl
dHVybiBlbGVtZW50SW50ZXJmYWNlOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxD
dXN0b21FbGVtZW50Q29uc3RydWN0aW9uRGF0YT4oKmVsZW1lbnRJbnRlcmZhY2UsIHRva2VuLm5h
bWUoKSwgV1RGTW92ZSh0b2tlbi5hdHRyaWJ1dGVzKCkpKTsKICAgICBhdHRhY2hMYXRlcihjdXJy
ZW50Tm9kZSgpLCAqZWxlbWVudCk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJ
dGVtOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpLCB0b2tlbikpOworICAgIG1fb3Bl
bkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZU5vbk51
bGwoKSwgV1RGTW92ZSh0b2tlbikpKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDk3
LDcgKzQ5OCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEN1c3RvbUVsZW1l
bnQoUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgY29uc3QgQXRvCiAgICAgbV9vcGVuRWxlbWVudHMu
cHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoV1RGTW92ZShlbGVtZW50KSwgbG9jYWxOYW1lLCBX
VEZNb3ZlKGF0dHJpYnV0ZXMpKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OlN0YXJ0VGFnKTsKICAgICAvLyBOb3JtYWxseSBIVE1MRWxlbWVudFN0YWNrIGlzIHJlc3Bv
bnNpYmxlIGZvciBjYWxsaW5nIGZpbmlzaFBhcnNpbmdDaGlsZHJlbiwKQEAgLTUwOCwxNyArNTA5
LDE3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNlbGZDbG9zaW5nSFRNTEVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRt
bCNhY2tub3dsZWRnZS1zZWxmLWNsb3NpbmctZmxhZwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3RoZS1zdGFjay1v
Zi1vcGVuLWVsZW1lbnRzCiAgICAgLy8gUG9zc2libGUgYWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVu
dHMgaW5jbHVkZToKICAgICAvLyBhLCBiLCBiaWcsIGNvZGUsIGVtLCBmb250LCBpLCBub2JyLCBz
LCBzbWFsbCwgc3RyaWtlLCBzdHJvbmcsIHR0LCBhbmQgdS4KICAgICBBU1NFUlQoaXNGb3JtYXR0
aW5nVGFnKHRva2VuLm5hbWUoKSkpOwotICAgIGluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAg
ICBpbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgbV9hY3RpdmVGb3JtYXR0
aW5nRWxlbWVudHMuYXBwZW5kKGN1cnJlbnRTdGFja0l0ZW0oKSk7CiB9CiAKLXZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNhbHJlYWR5
LXN0YXJ0ZWQKICAgICAvLyBodHRwOi8vaHRtbDUub3JnL3NwZWNzL2RvbS1wYXJzaW5nLmh0bWwj
ZG9tLXJhbmdlLWNyZWF0ZWNvbnRleHR1YWxmcmFnbWVudApAQCAtNTMxLDEwICs1MzIsMTAgQEAg
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgIHNldEF0dHJpYnV0ZXMoZWxlbWVudCwgdG9rZW4sIG1fcGFyc2Vy
Q29udGVudFBvbGljeSk7CiAgICAgaWYgKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9wYXJz
ZXJDb250ZW50UG9saWN5KSkKICAgICAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxl
bWVudC5jb3B5UmVmKCkpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6
Y3JlYXRlKFdURk1vdmUoZWxlbWVudCksIHRva2VuKSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVz
aChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoV1RGTW92ZShlbGVtZW50KSwgV1RGTW92ZSh0b2tlbikp
KTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9yZWlnbkVsZW1lbnQo
QXRvbWljSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkp
Cit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpCiB7CiAg
ICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOyAvLyBwYXJzZUVycm9yIHdoZW4geG1sbnMgb3IgeG1sbnM6eGxpbmsgYXJl
IHdyb25nLgpAQCAtNTQzLDcgKzU0NCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEZvcmVpZ25FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0CiAgICAg
aWYgKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAh
dG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShlbGVtZW50LnB0cigpKSkKICAgICAgICAgYXR0YWNo
TGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudC5jb3B5UmVmKCksIHRva2VuLnNlbGZDbG9zaW5n
KCkpOwogICAgIGlmICghdG9rZW4uc2VsZkNsb3NpbmcoKSkKLSAgICAgICAgbV9vcGVuRWxlbWVu
dHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoV1RGTW92ZShlbGVtZW50KSwgdG9rZW4sIG5h
bWVzcGFjZVVSSSkpOworICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06
OmNyZWF0ZShXVEZNb3ZlKGVsZW1lbnQpLCBXVEZNb3ZlKHRva2VuKSwgbmFtZXNwYWNlVVJJKSk7
CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFRleHROb2RlKGNvbnN0IFN0
cmluZyYgY2hhcmFjdGVycywgV2hpdGVzcGFjZU1vZGUgd2hpdGVzcGFjZU1vZGUpCkBAIC02NDIs
OCArNjQzLDcgQEAgaW5saW5lIERvY3VtZW50JiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6b3duZXJE
b2N1bWVudEZvckN1cnJlbnROb2RlKCkKICAgICByZXR1cm4gY3VycmVudE5vZGUoKS5kb2N1bWVu
dCgpOwogfQogCi1SZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhU
TUxFbGVtZW50T3JGaW5kQ3VzdG9tRWxlbWVudEludGVyZmFjZSgKLSAgICBBdG9taWNIVE1MVG9r
ZW4mIHRva2VuLCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UqKiBjdXN0b21FbGVtZW50SW50ZXJm
YWNlKQorUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxl
bWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwg
SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiogY3VzdG9tRWxlbWVudEludGVyZmFjZSkKIHsKICAg
ICBhdXRvJiBsb2NhbE5hbWUgPSB0b2tlbi5uYW1lKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgY2Fu
J3QgdXNlIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50IGJlY2F1c2Ugd2UKQEAg
LTY5OCw3ICs2OTgsNyBAQCBSZWY8SFRNTFN0YWNrSXRlbT4gSFRNTENvbnN0cnVjdGlvblNpdGU6
OmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbihIVE1MU3RhY2tJdAogICAgIEF0b21pY0hUTUxU
b2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgaXRlbS5sb2NhbE5hbWUoKSwgVmVj
dG9yPEF0dHJpYnV0ZT4oaXRlbS5hdHRyaWJ1dGVzKCkpKTsKICAgICBBU1NFUlQoaXRlbS5uYW1l
c3BhY2VVUkkoKSA9PSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKICAgICBBU1NFUlQo
aXNGb3JtYXR0aW5nVGFnKGl0ZW0ubG9jYWxOYW1lKCkpKTsKLSAgICByZXR1cm4gSFRNTFN0YWNr
SXRlbTo6Y3JlYXRlKGNyZWF0ZUhUTUxFbGVtZW50KGZha2VUb2tlbiksIGZha2VUb2tlbiwgaXRl
bS5uYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIEhUTUxTdGFja0l0ZW06OmNyZWF0ZShjcmVh
dGVIVE1MRWxlbWVudChmYWtlVG9rZW4pLCBXVEZNb3ZlKGZha2VUb2tlbiksIGl0ZW0ubmFtZXNw
YWNlVVJJKCkpOwogfQogCiBPcHRpb25hbDx1bnNpZ25lZD4gSFRNTENvbnN0cnVjdGlvblNpdGU6
OmluZGV4T2ZGaXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50KCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCmluZGV4IDYxODkw
ZWE4MmQyNWUxMjI0NTU3MTg5ODk1YmM5YmQ2YmI2MjU3Y2EuLjAyZTkzZTk0MWY3YTkzY2M1YWZj
ZjY1ZDI1YzQzNGIwM2ZiMGEwMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaApAQCAtODAsNiArODAsNyBAQCBlbnVtIFdoaXRlc3Bh
Y2VNb2RlIHsKIH07CiAKIGNsYXNzIEF0b21pY0hUTUxUb2tlbjsKK3N0cnVjdCBDdXN0b21FbGVt
ZW50Q29uc3RydWN0aW9uRGF0YTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNs
YXNzIEhUTUxGb3JtRWxlbWVudDsKQEAgLTk3LDI1ICs5OCwyNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXREZWZhdWx0Q29tcGF0aWJpbGl0eU1vZGUoKTsKICAgICB2b2lkIGZpbmlzaGVkUGFyc2lu
ZygpOwogCi0gICAgdm9pZCBpbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZv
aWQgaW5zZXJ0Q29tbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2VydENvbW1l
bnRPbkRvY3VtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9u
SFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiBp
bnNlcnRIVE1MRWxlbWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoQXRvbWljSFRNTFRv
a2VuJik7CisgICAgdm9pZCBpbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2
b2lkIGluc2VydENvbW1lbnQoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZvaWQgaW5zZXJ0Q29t
bWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZvaWQgaW5zZXJ0Q29tbWVu
dE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lkIGluc2VydEhU
TUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VzdG9t
RWxlbWVudENvbnN0cnVjdGlvbkRhdGE+IGluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3VzdG9tRWxl
bWVudEludGVyZmFjZShBdG9taWNIVE1MVG9rZW4mJik7CiAgICAgdm9pZCBpbnNlcnRDdXN0b21F
bGVtZW50KFJlZjxFbGVtZW50PiYmLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgVmVj
dG9yPEF0dHJpYnV0ZT4mJik7Ci0gICAgdm9pZCBpbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50
KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRv
bWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRN
TFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
Jik7Ci0gICAgdm9pZCBpbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgYm9v
bCBpc0RlbW90ZWQgPSBmYWxzZSk7Ci0gICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudChBdG9t
aWNIVE1MVG9rZW4mJik7CisgICAgdm9pZCBpbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mJik7CisgICAgdm9pZCBpbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRv
a2VuJiYpOworICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYm
KTsKKyAgICB2b2lkIGluc2VydEhUTUxGb3JtRWxlbWVudChBdG9taWNIVE1MVG9rZW4mJiwgYm9v
bCBpc0RlbW90ZWQgPSBmYWxzZSk7CisgICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiYmKTsKICAgICB2b2lkIGluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYsIFdo
aXRlc3BhY2VNb2RlID0gV2hpdGVzcGFjZVVua25vd24pOwotICAgIHZvaWQgaW5zZXJ0Rm9yZWln
bkVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkkpOworICAgIHZvaWQgaW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKTsKIAotICAgIHZvaWQgaW5zZXJ0SFRNTEh0
bWxTdGFydFRhZ0JlZm9yZUhUTUwoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRI
VE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0
SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIGluc2Vy
dEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lk
IGluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZv
aWQgaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4mJik7CiAKICAg
ICB2b2lkIHJlcGFyZW50KEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQmIG5ld1BhcmVu
dCwgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCYgY2hpbGQpOwogICAgIHZvaWQgcmVw
YXJlbnQoSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCYgbmV3UGFyZW50LCBIVE1MU3Rh
Y2tJdGVtJiBjaGlsZCk7CkBAIC0xOTAsNyArMTkxLDcgQEAgcHJpdmF0ZToKICAgICBSZWY8RWxl
bWVudD4gY3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CiAgICAgUmVmPEVsZW1l
bnQ+IGNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkkpOwogCi0gICAgdm9pZCBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxl
bWVudChBdG9taWNIVE1MVG9rZW4mLCBFbGVtZW50Jik7CisgICAgdm9pZCBtZXJnZUF0dHJpYnV0
ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4mJiwgRWxlbWVudCYpOwogICAg
IHZvaWQgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgpOwogCiAgICAg
RG9jdW1lbnQmIG1fZG9jdW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCAwYTcwMWY2ZTk0ZGRkNTAxMzkzYmJiODM3YmJk
NDg0NGZkNDRjYzAzLi5jMDdjZDM0NGNiYTViMWIyYjc5MWJjZjFmMjgwYWU3ZDdiMDNjYTI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6Y29uc3RydWN0
VHJlZUZyb21IVE1MVG9rZW4oSFRNTFRva2VuaXplcjo6VG9rZW5QdHImIHJhdwogICAgICAgICBy
YXdUb2tlbi5jbGVhcigpOwogICAgIH0KIAotICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVjdFRy
ZWUodG9rZW4pOworICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVjdFRyZWUoV1RGTW92ZSh0b2tl
bikpOwogfQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aGFzSW5zZXJ0aW9uUG9pbnQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oCmluZGV4IGUwNmE2ZTAx
MzVlZjRhMzUxMTMwZmIwYThjMzJhYzUwZTA4YzcxMWYuLmVmMjA2ZjZjMWUxYTU2MTQ3NTA5NmUy
MmFiNzk3ZDMyMmM5YmUxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxTdGFja0l0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3Rh
Y2tJdGVtLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRN
TFN0YWNrSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEhUTUxTdGFja0l0ZW0+IHsKIHB1YmxpYzoK
ICAgICAvLyBOb3JtYWwgSFRNTEVsZW1lbnRTdGFjayBhbmQgSFRNTEZvcm1hdHRpbmdFbGVtZW50
TGlzdCBpdGVtcy4KLSAgICBzdGF0aWMgUmVmPEhUTUxTdGFja0l0ZW0+IGNyZWF0ZShSZWY8RWxl
bWVudD4mJiwgQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKKyAgICBzdGF0aWMgUmVmPEhUTUxT
dGFja0l0ZW0+IGNyZWF0ZShSZWY8RWxlbWVudD4mJiwgQXRvbWljSFRNTFRva2VuJiYsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVS
SSk7CiAgICAgc3RhdGljIFJlZjxIVE1MU3RhY2tJdGVtPiBjcmVhdGUoUmVmPEVsZW1lbnQ+JiYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxBdHRyaWJ1dGU+JiYpOwogCiAgICAgLy8gRG9j
dW1lbnQgZnJhZ21lbnQgb3IgZWxlbWVudCBmb3IgcGFyc2luZyBjb250ZXh0LgpAQCAtNjEsNyAr
NjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXRjaGVzSFRNTFRhZyhjb25zdCBBdG9taWNTdHJp
bmcmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBIVE1MU3RhY2tJdGVtKFJlZjxFbGVtZW50PiYm
LCBBdG9taWNIVE1MVG9rZW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7Cisg
ICAgSFRNTFN0YWNrSXRlbShSZWY8RWxlbWVudD4mJiwgQXRvbWljSFRNTFRva2VuJiYsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKTsKICAgICBIVE1MU3RhY2tJdGVtKFJlZjxFbGVt
ZW50PiYmLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIFZlY3RvcjxBdHRyaWJ1dGU+JiYpOwogICAgIGV4cGxpY2l0IEhUTUxT
dGFja0l0ZW0oRWxlbWVudCYpOwogICAgIGV4cGxpY2l0IEhUTUxTdGFja0l0ZW0oRG9jdW1lbnRG
cmFnbWVudCYpOwpAQCAtNzYsMTggKzc2LDE3IEBAIGJvb2wgaXNJbkhUTUxOYW1lc3BhY2UoY29u
c3QgSFRNTFN0YWNrSXRlbSYpOwogYm9vbCBpc051bWJlcmVkSGVhZGVyRWxlbWVudChjb25zdCBI
VE1MU3RhY2tJdGVtJik7CiBib29sIGlzU3BlY2lhbE5vZGUoY29uc3QgSFRNTFN0YWNrSXRlbSYp
OwogCi1pbmxpbmUgSFRNTFN0YWNrSXRlbTo6SFRNTFN0YWNrSXRlbShSZWY8RWxlbWVudD4mJiBl
bGVtZW50LCBBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCitpbmxpbmUgSFRNTFN0YWNr
SXRlbTo6SFRNTFN0YWNrSXRlbShSZWY8RWxlbWVudD4mJiBlbGVtZW50LCBBdG9taWNIVE1MVG9r
ZW4mJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJKQogICAgIDogbV9ub2RlKFdURk1vdmUoZWxlbWVudCkpCiAgICAg
LCBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpCiAgICAgLCBtX2xvY2FsTmFtZSh0b2tlbi5u
YW1lKCkpCi0gICAgLCBtX2F0dHJpYnV0ZXModG9rZW4uYXR0cmlidXRlcygpKQorICAgICwgbV9h
dHRyaWJ1dGVzKFdURk1vdmUodG9rZW4uYXR0cmlidXRlcygpKSkKIHsKLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gbW92ZSB0aGUgYXR0cmlidXRlcyB2ZWN0b3IgaW4gdGhl
IG5vcm1hbCBjb2RlIHBhdGggaW5zdGVhZCBvZiBjb3B5aW5nIGl0LgogfQogCi1pbmxpbmUgUmVm
PEhUTUxTdGFja0l0ZW0+IEhUTUxTdGFja0l0ZW06OmNyZWF0ZShSZWY8RWxlbWVudD4mJiBlbGVt
ZW50LCBBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSkKK2lubGluZSBSZWY8SFRNTFN0YWNrSXRlbT4gSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFJl
ZjxFbGVtZW50PiYmIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiYmIHRva2VuLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVzcGFjZVVSSSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1M
U3RhY2tJdGVtKFdURk1vdmUoZWxlbWVudCksIHRva2VuLCBuYW1lc3BhY2VVUkkpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBIVE1MU3RhY2tJdGVtKFdURk1vdmUoZWxlbWVudCksIFdURk1v
dmUodG9rZW4pLCBuYW1lc3BhY2VVUkkpKTsKIH0KIAogaW5saW5lIEhUTUxTdGFja0l0ZW06OkhU
TUxTdGFja0l0ZW0oUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBWZWN0b3I8QXR0cmli
dXRlPiYmIGF0dHJpYnV0ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmNwcAppbmRleCA0MzllYjA4MzU1MmIyYmQ1ZGUyYTkzNjg4YjEzMGNjZDQwZWY1
NTdlLi43NTVlMDBkY2Q3MGE5OTIzMmQ2M2MxMzkzMmMzMDE2ZmQ0MmNlZTBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTUzLDEwICs1
MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLUN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rpb25EYXRhOjpDdXN0b21FbGVtZW50Q29uc3RydWN0
aW9uRGF0YShSZWY8SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlPiYmIGN1c3RvbUVsZW1lbnRJbnRl
cmZhY2UsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
IGF0dHJpYnV0ZXMpCitDdXN0b21FbGVtZW50Q29uc3RydWN0aW9uRGF0YTo6Q3VzdG9tRWxlbWVu
dENvbnN0cnVjdGlvbkRhdGEoUmVmPEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZT4mJiBjdXN0b21F
bGVtZW50SW50ZXJmYWNlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxBdHRyaWJ1
dGU+JiYgYXR0cmlidXRlcykKICAgICA6IGVsZW1lbnRJbnRlcmZhY2UoV1RGTW92ZShjdXN0b21F
bGVtZW50SW50ZXJmYWNlKSkKICAgICAsIG5hbWUobmFtZSkKLSAgICAsIGF0dHJpYnV0ZXMoYXR0
cmlidXRlcykgLy8gRklYTUU6IEF2b2lkIGNvcHlpbmcgYXR0cmlidXRlcy4KKyAgICAsIGF0dHJp
YnV0ZXMoV1RGTW92ZShhdHRyaWJ1dGVzKSkKIHsgfQogCiBDdXN0b21FbGVtZW50Q29uc3RydWN0
aW9uRGF0YTo6fkN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rpb25EYXRhKCkKQEAgLTMzMyw3ICszMzMs
NyBAQCBSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNz
KFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQbwogICAgIHJldHVybiBXVEZNb3ZlKG1fc2NyaXB0
VG9Qcm9jZXNzKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWUoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVl
KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBB
U1NFUlQoIW1fZGVzdHJveWVkKTsKQEAgLTM0Miw5ICszNDIsOSBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6Y29uc3RydWN0VHJlZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogI2VuZGlmCiAKICAg
ICBpZiAoc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbikpCi0gICAgICAg
IHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQodG9rZW4pOworICAgICAgICBwcm9jZXNzVG9r
ZW5JbkZvcmVpZ25Db250ZW50KFdURk1vdmUodG9rZW4pKTsKICAgICBlbHNlCi0gICAgICAgIHBy
b2Nlc3NUb2tlbih0b2tlbik7CisgICAgICAgIHByb2Nlc3NUb2tlbihXVEZNb3ZlKHRva2VuKSk7
CiAKICAgICBib29sIGluRm9yZWlnbkNvbnRlbnQgPSAhbV90cmVlLmlzRW1wdHkoKQogICAgICAg
ICAmJiAhaXNJbkhUTUxOYW1lc3BhY2UoYWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCkpCkBAIC0z
NjIsNyArMzYyLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWUoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAvLyBUaGUgdHJlZSBidWlsZGVyIG1pZ2h0IGhhdmUgYmVl
biBkZXN0cm95ZWQgYXMgYW4gaW5kaXJlY3QgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgcXVldWVk
IHRhc2tzLgogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEF0b21p
Y0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAg
Y2FzZSBIVE1MVG9rZW46OlVuaW5pdGlhbGl6ZWQ6CkBAIC0zNzAsNDEgKzM3MCw0MSBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSFRNTFRva2VuOjpET0NUWVBFOgogICAgICAgICBtX3No
b3VsZFNraXBMZWFkaW5nTmV3bGluZSA9IGZhbHNlOwotICAgICAgICBwcm9jZXNzRG9jdHlwZVRv
a2VuKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0RvY3R5cGVUb2tlbihXVEZNb3ZlKHRva2VuKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSFRNTFRva2VuOjpTdGFydFRhZzoKICAgICAgICAg
bV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSBmYWxzZTsKLSAgICAgICAgcHJvY2Vzc1N0YXJ0
VGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBIVE1MVG9rZW46OkVuZFRhZzoKICAgICAgICAgbV9zaG91
bGRTa2lwTGVhZGluZ05ld2xpbmUgPSBmYWxzZTsKLSAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tl
bik7CisgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEhUTUxUb2tlbjo6Q29tbWVudDoKICAgICAgICAgbV9zaG91bGRTa2lwTGVh
ZGluZ05ld2xpbmUgPSBmYWxzZTsKLSAgICAgICAgcHJvY2Vzc0NvbW1lbnQodG9rZW4pOworICAg
ICAgICBwcm9jZXNzQ29tbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEhUTUxUb2tlbjo6Q2hhcmFjdGVyOgotICAgICAgICBwcm9jZXNzQ2hhcmFjdGVyKHRv
a2VuKTsKKyAgICAgICAgcHJvY2Vzc0NoYXJhY3RlcihXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSFRNTFRva2VuOjpFbmRPZkZpbGU6CiAgICAgICAgIG1fc2hvdWxk
U2tpcExlYWRpbmdOZXdsaW5lID0gZmFsc2U7Ci0gICAgICAgIHByb2Nlc3NFbmRPZkZpbGUodG9r
ZW4pOworICAgICAgICBwcm9jZXNzRW5kT2ZGaWxlKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RvY3R5cGVU
b2tlbihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkRPQ1RZUEUpOwogICAgIGlmIChtX2luc2VydGlvbk1v
ZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCkgewotICAgICAgICBtX3RyZWUuaW5zZXJ0RG9j
dHlwZSh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnREb2N0eXBlKFdURk1vdmUodG9rZW4p
KTsKICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTDsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9pbnNlcnRpb25Nb2RlID09IEluc2Vy
dGlvbk1vZGU6OkluVGFibGVUZXh0KSB7CiAgICAgICAgIGRlZmF1bHRGb3JJblRhYmxlVGV4dCgp
OwotICAgICAgICBwcm9jZXNzRG9jdHlwZVRva2VuKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0Rv
Y3R5cGVUb2tlbihXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
cGFyc2VFcnJvcih0b2tlbik7CkBAIC00MTQsMTMgKzQxNCwxMyBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBW
ZWN0b3I8QQogewogICAgIC8vIEZJWE1FOiBXZSdsbCBuZWVkIGEgZmFuY2llciBjb252ZXJzaW9u
IHRoYW4ganVzdCAibG9jYWxOYW1lIiBmb3IgU1ZHL01hdGhNTCB0YWdzLgogICAgIEF0b21pY0hU
TUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgdGFnTmFtZS5sb2NhbE5hbWUo
KSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7Ci0gICAgcHJvY2Vzc1N0YXJ0VGFnKGZha2VUb2tlbik7
CisgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUoZmFrZVRva2VuKSk7CiB9CiAKIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZUVuZFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUpCiB7CiAgICAgQXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW46OkVuZFRhZywg
dGFnTmFtZSk7Ci0gICAgcHJvY2Vzc0VuZFRhZyhmYWtlVG9rZW4pOworICAgIHByb2Nlc3NFbmRU
YWcoV1RGTW92ZShmYWtlVG9rZW4pKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NGYWtlRW5kVGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCkBAIC00NDEsNyArNDQx
LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9u
U2NvcGUoKQogICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLmluQnV0dG9uU2NvcGUocFRh
Zy5sb2NhbE5hbWUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBBdG9taWNIVE1MVG9rZW4gZW5k
UChIVE1MVG9rZW46OkVuZFRhZywgcFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vzc0VuZFRh
ZyhlbmRQKTsKKyAgICBwcm9jZXNzRW5kVGFnKFdURk1vdmUoZW5kUCkpOwogfQogCiBuYW1lc3Bh
Y2UgewpAQCAtNDU4LDcgKzQ1OCw3IEBAIGJvb2wgaXNEZE9yRHQoY29uc3QgSFRNTFN0YWNrSXRl
bSYgaXRlbSkKIAogfQogCi10ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShjb25zdCBIVE1MU3Rh
Y2tJdGVtJik+IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFn
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDbG9zZShjb25z
dCBIVE1MU3RhY2tJdGVtJik+IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VXaGVu
TmVzdGVkVGFnKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIG1fZnJhbWVzZXRPayA9
IGZhbHNlOwogICAgIGZvciAoYXV0byogbm9kZVJlY29yZCA9ICZtX3RyZWUub3BlbkVsZW1lbnRz
KCkudG9wUmVjb3JkKCk7IDsgbm9kZVJlY29yZCA9IG5vZGVSZWNvcmQtPm5leHQoKSkgewpAQCAt
NDcyLDcgKzQ3Miw3IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IEhUTUxTdGFj
a0l0ZW0mKT4gdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDCiAgICAgICAgICAgICBicmVh
azsKICAgICB9CiAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwotICAg
IG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KFdURk1vdmUodG9rZW4pKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVh
bGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBj
cmVhdGVDYXNlTWFwKGNvbnN0IFRhYmxlUXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5z
aWduZWQgbGVuZ3RoKQpAQCAtNTUxLDExICs1NTEsMTEgQEAgc3RhdGljIHZvaWQgYWRqdXN0Rm9y
ZWlnbkF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBhZGp1c3RBdHRyaWJ1
dGVzKG1hcCwgdG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewog
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CiAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdG
b3JJbkJvZHkodG9rZW4pOworICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KFdU
Rk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGJhc2VUYWcKQEAgLTU2OCw3ICs1NjgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcKICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHN0eWxlVGFnCiAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0aXRsZVRhZykgewotICAgICAg
ICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOworICAg
ICAgICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGRpZFByb2Nlc3MsIGRpZFByb2Nlc3MpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTgxLDcgKzU4MSw3IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBm
YWxzZTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJvZHkodG9rZW4p
OworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBm
cmFtZXNldFRhZykgewpAQCAtNTk2LDcgKzU5Niw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAg
bV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsKG1fdHJlZS5vcGVuRWxlbWVudHMoKS5ib2R5
RWxlbWVudCgpKTsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcEhUTUxCb2R5RWxl
bWVudCgpOwogICAgICAgICBBU1NFUlQoJm1fdHJlZS5vcGVuRWxlbWVudHMoKS50b3AoKSA9PSAm
bV90cmVlLm9wZW5FbGVtZW50cygpLmh0bWxFbGVtZW50KCkpOwotICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
V1RGTW92ZSh0b2tlbikpOwogICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2Rl
OjpJbkZyYW1lc2V0OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjI0LDcgKzYyNCw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN1bW1hcnlUYWcKICAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVu
ZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4p
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNOdW1iZXJlZEhlYWRlclRhZyh0
b2tlbi5uYW1lKCkpKSB7CkBAIC02MzMsMTIgKzYzMywxMiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS5wb3AoKTsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
dG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcHJlVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVu
ZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4p
KTsKICAgICAgICAgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBt
X2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjQ5LDIwICs2NDksMjAg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmlu
c2VydEhUTUxGb3JtRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRm9y
bUVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gbGlUYWcpIHsKLSAgICAgICAgcHJvY2Vzc0Nsb3NlV2hlbk5lc3Rl
ZFRhZzxpc0xpPih0b2tlbik7CisgICAgICAgIHByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWc8aXNM
aT4oV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gZGRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFnKSB7Ci0gICAgICAgIHBy
b2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWc8aXNEZE9yRHQ+KHRva2VuKTsKKyAgICAgICAgcHJvY2Vz
c0Nsb3NlV2hlbk5lc3RlZFRhZzxpc0RkT3JEdD4oV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcGxhaW50ZXh0VGFnKSB7CiAg
ICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgbV9wYXJzZXIudG9rZW5pemVyKCkuc2V0
UExBSU5URVhUU3RhdGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3MCwxMSArNjcw
LDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxlbWVudHMoKS5p
blNjb3BlKGJ1dHRvblRhZykpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcoYnV0dG9uVGFnKTsKLSAgICAgICAgICAgIHByb2Nl
c3NTdGFydFRhZyh0b2tlbik7IC8vIEZJWE1FOiBDb3VsZCB3ZSBqdXN0IGZhbGwgdGhyb3VnaCBo
ZXJlPworICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsgLy8gRklY
TUU6IENvdWxkIHdlIGp1c3QgZmFsbCB0aHJvdWdoIGhlcmU/CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGlu
Z0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7Cisg
ICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
IG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjg4LDEy
ICs2ODgsMTIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9k
eShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS5yZW1vdmUoKmFjdGl2ZUFUYWcpOwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5y
ZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBtX3RyZWUu
aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9y
bWF0dGluZ0VsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmIChpc05vbkFuY2hvck5vbk5vYnJGb3JtYXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsK
ICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7
Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CisgICAgICAg
IG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub2JyVGFnKSB7CkBAIC03
MDMsNyArNzAzLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRU
YWcobm9iclRhZyk7CiAgICAgICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0
dGluZ0VsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1l
bnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gYXBwbGV0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBlbWJlZFRhZyB8fCB0b2tl
bi5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7CkBAIC03MTIsNyArNzEyLDcgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGFwcGxldFRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gbWFycXVlZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7CiAgICAgICAg
IG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0
dGluZ0VsZW1lbnRzKCkuYXBwZW5kTWFya2VyKCk7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZh
bHNlOwogICAgICAgICByZXR1cm47CkBAIC03MjAsNyArNzIwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgaWYgKCFtX3RyZWUu
aW5RdWlya3NNb2RlKCkgJiYgbV90cmVlLm9wZW5FbGVtZW50cygpLmluQnV0dG9uU2NvcGUocFRh
ZykpCiAgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhwVGFnKTsKLSAgICAgICAgbV90cmVl
Lmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAg
ICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGU7CiAgICAgICAgIHJl
dHVybjsKQEAgLTczOCwzMCArNzM4LDMxIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGtleWdlblRhZwogICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gd2JyVGFn
KSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7
CisgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9r
ZW4pKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBpbnB1dFRhZykgewogICAgICAgICBtX3RyZWUu
cmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgbV90cmVl
Lmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwotICAgICAgICBBdHRyaWJ1dGUq
IHR5cGVBdHRyaWJ1dGUgPSBmaW5kQXR0cmlidXRlKHRva2VuLmF0dHJpYnV0ZXMoKSwgdHlwZUF0
dHIpOwotICAgICAgICBpZiAoIXR5cGVBdHRyaWJ1dGUgfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKHR5cGVBdHRyaWJ1dGUtPnZhbHVlKCksICJoaWRkZW4iKSkKKyAgICAgICAgYXV0
byogdHlwZUF0dHJpYnV0ZSA9IGZpbmRBdHRyaWJ1dGUodG9rZW4uYXR0cmlidXRlcygpLCB0eXBl
QXR0cik7CisgICAgICAgIGJvb2wgc2hvdWxkQ2xlYXJGcmFtZXNldE9LID0gIXR5cGVBdHRyaWJ1
dGUgfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHR5cGVBdHRyaWJ1dGUtPnZhbHVl
KCksICJoaWRkZW4iKTsKKyAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1l
bnQoV1RGTW92ZSh0b2tlbikpOworICAgICAgICBpZiAoc2hvdWxkQ2xlYXJGcmFtZXNldE9LKQog
ICAgICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwYXJhbVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc291
cmNlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0cmFja1RhZykgewotICAgICAgICBtX3RyZWUuaW5z
ZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRT
ZWxmQ2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NG
YWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmluc2VydFNlbGZD
bG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3Np
bmdIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZh
bHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGV4
dGFyZWFUYWcpIHsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAg
bV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBtX3BhcnNlci50b2tl
bml6ZXIoKS5zZXRSQ0RBVEFTdGF0ZSgpOwogICAgICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9k
ZSA9IG1faW5zZXJ0aW9uTW9kZTsKQEAgLTc3MywyNSArNzc0LDI1IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwogICAgICAgICBt
X3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAg
bV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0
VGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcoV1RGTW92
ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gaWZyYW1lVGFnKSB7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwotICAgICAgICBw
cm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NHZW5l
cmljUmF3VGV4dFN0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vZW1iZWRUYWcgJiYgbV9vcHRpb25zLnBsdWdp
bnNFbmFibGVkKSB7Ci0gICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcoV1RGTW92ZSh0b2tlbikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9zY3Jp
cHRUYWcgJiYgbV9vcHRpb25zLnNjcmlwdEVuYWJsZWQpIHsKLSAgICAgICAgcHJvY2Vzc0dlbmVy
aWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOworICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRT
dGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBzZWxlY3RUYWcpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0
VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3Zl
KHRva2VuKSk7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICBpZiAobV9p
bnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluVGFibGUKICAgICAgICAgICAgIHx8IG1f
aW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb24KQEAgLTgwNywxMCArODA4
LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGdyb3VwVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKICAgICAgICAgaWYgKGlzPEhUTUxPcHRp
b25FbGVtZW50PihtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLm5vZGUoKSkpIHsKICAgICAgICAg
ICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlvblRh
Zy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbik7Cisg
ICAgICAgICAgICBwcm9jZXNzRW5kVGFnKFdURk1vdmUoZW5kT3B0aW9uKSk7CiAgICAgICAgIH0K
ICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7
Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSByYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gcnRj
VGFnKSB7CkBAIC04MTksNyArODIwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NT
dGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaWYg
KCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLmhhc1RhZ05hbWUocnVieVRhZykpCiAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVlLmlu
c2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4u
bmFtZSgpID09IHJ0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBycFRhZykgewpAQCAtODI4LDIxICs4
MjksMjEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0
YWNrSXRlbSgpLmhhc1RhZ05hbWUocnVieVRhZykgJiYgIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVt
KCkuaGFzVGFnTmFtZShydGNUYWcpKQogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OwogICAgICAgICB9Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7Cisg
ICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBNYXRoTUxOYW1lczo6bWF0
aFRhZy5sb2NhbE5hbWUoKSkgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgYWRqdXN0TWF0aE1MQXR0cmlidXRlcyh0b2tl
bik7CiAgICAgICAgIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKHRva2VuKTsKLSAgICAgICAgbV90
cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KHRva2VuLCBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNw
YWNlVVJJKTsKKyAgICAgICAgbV90cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KFdURk1vdmUodG9r
ZW4pLCBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNwYWNlVVJJKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IFNWR05hbWVzOjpzdmdUYWcubG9jYWxOYW1l
KCkpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1l
bnRzKCk7CiAgICAgICAgIGFkanVzdFNWR0F0dHJpYnV0ZXModG9rZW4pOwogICAgICAgICBhZGp1
c3RGb3JlaWduQXR0cmlidXRlcyh0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRGb3JlaWdu
RWxlbWVudCh0b2tlbiwgU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSk7CisgICAgICAgIG1fdHJl
ZS5pbnNlcnRGb3JlaWduRWxlbWVudChXVEZNb3ZlKHRva2VuKSwgU1ZHTmFtZXM6OnN2Z05hbWVz
cGFjZVVSSSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzQ2FwdGlvbkNvbE9y
Q29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQpAQCAtODU2LDE4ICs4NTcsMTYgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CiAgICAg
ICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwotICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRh
Zyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKFdURk1vdmUodG9rZW4p
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICBpbnNlcnRHZW5lcmljSFRNTEVsZW1lbnQodG9r
ZW4pOworICAgIGluc2VydEdlbmVyaWNIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiB9CiAK
LWlubGluZSB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0R2VuZXJpY0hUTUxFbGVtZW50KEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCitpbmxpbmUgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2Vy
dEdlbmVyaWNIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKLSAgICBhdXRv
KiBlbGVtZW50SW50ZXJmYWNlID0gbV90cmVlLmluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3VzdG9t
RWxlbWVudEludGVyZmFjZSh0b2tlbik7Ci0gICAgaWYgKFVOTElLRUxZKGVsZW1lbnRJbnRlcmZh
Y2UpKQotICAgICAgICBtX2N1c3RvbUVsZW1lbnRUb0NvbnN0cnVjdCA9IHN0ZDo6bWFrZV91bmlx
dWU8Q3VzdG9tRWxlbWVudENvbnN0cnVjdGlvbkRhdGE+KCplbGVtZW50SW50ZXJmYWNlLCB0b2tl
bi5uYW1lKCksIHRva2VuLmF0dHJpYnV0ZXMoKSk7CisgICAgbV9jdXN0b21FbGVtZW50VG9Db25z
dHJ1Y3QgPSBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJm
YWNlKFdURk1vdmUodG9rZW4pKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRpZENyZWF0
ZUN1c3RvbU9yQ2FsbGJhY2tFbGVtZW50KFJlZjxFbGVtZW50PiYmIGVsZW1lbnQsIEN1c3RvbUVs
ZW1lbnRDb25zdHJ1Y3Rpb25EYXRhJiBkYXRhKQpAQCAtODc1LDE1ICs4NzQsMTUgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OmRpZENyZWF0ZUN1c3RvbU9yQ2FsbGJhY2tFbGVtZW50KFJlZjxFbGVt
ZW50PiYmIGVsZW1lbnQsIEMKICAgICBtX3RyZWUuaW5zZXJ0Q3VzdG9tRWxlbWVudChXVEZNb3Zl
KGVsZW1lbnQpLCBkYXRhLm5hbWUsIFdURk1vdmUoZGF0YS5hdHRyaWJ1dGVzKSk7CiB9CiAKLXZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFn
KEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMoKS5hcHBlbmRNYXJrZXIoKTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
dG9rZW4pOworICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAg
ICAgbV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmFwcGVuZChJbnNlcnRpb25Nb2RlOjpUZW1wbGF0
ZUNvbnRlbnRzKTsKICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0
ZUNvbnRlbnRzOwogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RlbXBsYXRlRW5k
VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCitib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1RlbXBsYXRlRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIEFTU0VSVCh0
b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcubG9jYWxOYW1lKCkpOwogICAgIGlmICghbV90cmVl
Lm9wZW5FbGVtZW50cygpLmhhc1RlbXBsYXRlSW5IVE1MU2NvcGUoKSkgewpAQCAtOTAxLDEzICs5
MDAsMTMgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQorYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGVGb3JJ
blRlbXBsYXRlQ29udGVudHMoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQXRvbWlj
SFRNTFRva2VuIGVuZFRlbXBsYXRlKEhUTUxUb2tlbjo6RW5kVGFnLCB0ZW1wbGF0ZVRhZy5sb2Nh
bE5hbWUoKSk7Ci0gICAgaWYgKCFwcm9jZXNzVGVtcGxhdGVFbmRUYWcoZW5kVGVtcGxhdGUpKQor
ICAgIGlmICghcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKFdURk1vdmUoZW5kVGVtcGxhdGUpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcHJvY2Vzc0VuZE9mRmlsZSh0b2tlbik7CisgICAg
cHJvY2Vzc0VuZE9mRmlsZShXVEZNb3ZlKHRva2VuKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTkzOSwzOCArOTM4LDM4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjbG9zZVRoZUNlbGwo
KQogICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOwog
fQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
Z0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKICAgICBpZiAodG9rZW4ubmFtZSgpID09
IGNhcHRpb25UYWcpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsVGFi
bGVTY29wZU1hcmtlcigpOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRz
KCkuYXBwZW5kTWFya2VyKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAg
ICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbGdyb3VwVGFnKSB7
CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIo
KTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgbV9pbnNlcnRp
b25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5Hcm91cDsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbFRhZykgewogICAgICAgICBwcm9jZXNz
RmFrZVN0YXJ0VGFnKGNvbGdyb3VwVGFnKTsKICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwKTsKLSAgICAgICAgcHJvY2Vzc1N0YXJ0
VGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2Vu
Lm5hbWUoKSkpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsVGFibGVT
Y29wZU1hcmtlcigpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwor
ICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAg
ICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUo
KSkgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRU
YWcodGJvZHlUYWcpOwogICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlv
bk1vZGU6OkluVGFibGVCb2R5KTsKLSAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAg
ICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CkBAIC05NzksMTggKzk3
OCwxOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdt
ZW50T3JUZW1wbGF0ZUNvbnRlbnRzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NTdGFydFRh
ZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBzdHlsZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7Ci0gICAg
ICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CisgICAgICAgIHByb2Nlc3NTdGFy
dFRhZ0ZvckluSGVhZChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBpbnB1dFRhZykgewotICAgICAgICBBdHRyaWJ1dGUqIHR5
cGVBdHRyaWJ1dGUgPSBmaW5kQXR0cmlidXRlKHRva2VuLmF0dHJpYnV0ZXMoKSwgdHlwZUF0dHIp
OworICAgICAgICBhdXRvKiB0eXBlQXR0cmlidXRlID0gZmluZEF0dHJpYnV0ZSh0b2tlbi5hdHRy
aWJ1dGVzKCksIHR5cGVBdHRyKTsKICAgICAgICAgaWYgKHR5cGVBdHRyaWJ1dGUgJiYgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodHlwZUF0dHJpYnV0ZS0+dmFsdWUoKSwgImhpZGRlbiIp
KSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gImFueXRoaW5n
IGVsc2UiIGNhc2UuCkBAIC05OTksMjAgKzk5OCwyMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAg
ICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgaWYgKG1fdHJlZS5mb3JtKCkgJiYgIWlzUGFy
c2luZ1RlbXBsYXRlQ29udGVudHMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV90
cmVlLmluc2VydEhUTUxGb3JtRWxlbWVudCh0b2tlbiwgdHJ1ZSk7CisgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRm9ybUVsZW1lbnQoV1RGTW92ZSh0b2tlbiksIHRydWUpOwogICAgICAgICBtX3Ry
ZWUub3BlbkVsZW1lbnRzKCkucG9wKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewotICAgICAgICBwcm9jZXNzVGVtcGxhdGVT
dGFydFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKFdURk1vdmUo
dG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6UmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkIHJl
ZGlyZWN0ZXIobV90cmVlKTsKLSAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwor
ICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShXVEZNb3ZlKHRva2VuKSk7CiB9CiAKLXZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiYg
dG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFn
KTsKICAgICBzd2l0Y2ggKG1faW5zZXJ0aW9uTW9kZSkgewpAQCAtMTAyMiw3ICsxMDIxLDcgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9y
ZUhUTUw6CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKHRva2VuKTsKKyAgICAg
ICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZv
cmVIZWFkOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDMxLDExICsxMDMw
LDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpCZWZvcmVIZWFkOgogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOworICAgICAgICAg
ICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoZWFk
VGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEhlYWRFbGVtZW50KHRva2VuKTsK
KyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSGVhZEVsZW1lbnQoV1RGTW92ZSh0b2tlbikp
OwogICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDQzLDI0ICsxMDQyLDI0IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhl
YWQpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluSGVh
ZDoKLSAgICAgICAgaWYgKHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbikpCisgICAgICAg
IGlmIChwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoV1RGTW92ZSh0b2tlbikpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFkKCk7CiAgICAgICAgIEFTU0VSVCht
X2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsKICAgICAgICAgRkFM
TFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQ6CiAgICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFy
dFRhZ0ZvckluQm9keSh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9y
SW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpIHsKICAgICAgICAgICAgIG1fZnJh
bWVzZXRPayA9IGZhbHNlOwotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5RWxlbWVu
dCh0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlFbGVtZW50KFdURk1v
dmUodG9rZW4pKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6
OkluQm9keTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGZyYW1lc2V0VGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRN
TEVsZW1lbnQodG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KFdU
Rk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1v
ZGU6OkluRnJhbWVzZXQ7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEwNzcs
NyArMTA3Niw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAg
ICAgICAgQVNTRVJUKG1fdHJlZS5oZWFkU3RhY2tJdGVtKCkpOwogICAgICAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLnB1c2hIVE1MSGVhZEVsZW1lbnQoKm1fdHJlZS5oZWFkU3RhY2tJdGVt
KCkpOwotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKKyAgICAg
ICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
ICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucmVtb3ZlSFRNTEhlYWRFbGVtZW50KG1fdHJlZS5o
ZWFkKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDg5LDEwICsxMDg4
LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25N
b2RlOjpJbkJvZHkpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1v
ZGU6OkluQm9keToKLSAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKKyAg
ICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlOgotICAgICAgICBwcm9jZXNz
U3RhcnRUYWdGb3JJblRhYmxlKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5U
YWJsZShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9u
TW9kZTo6SW5DYXB0aW9uOgogICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0
b2tlbi5uYW1lKCkpCkBAIC0xMTA0LDM0ICsxMTAzLDM0IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAgICAg
ICAgICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsK
KyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOgogICAgICAg
ICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKLSAgICAgICAgICAgIHByb2Nlc3NIdG1s
U3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOworICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRh
Z0ZvckluQm9keShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjb2xUYWcpIHsKLSAgICAgICAgICAgIG1f
dHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIG1f
dHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRl
bXBsYXRlVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyh0b2tlbik7
CisgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwcm9jZXNzQ29sZ3Jv
dXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNp
bmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50cygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOworICAgICAgICBwcm9jZXNz
U3RhcnRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2Vy
dGlvbk1vZGU6OkluVGFibGVCb2R5OgogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRyVGFn
KSB7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucG9wVW50aWxUYWJsZUJvZHlT
Y29wZU1hcmtlcigpOyAvLyBIb3cgaXMgdGhlcmUgZXZlciBhbnl0aGluZyB0byBwb3A/Ci0gICAg
ICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluUm93OwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0xMTM5LDcgKzExMzgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKICAgICAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcodHJUYWcpOwogICAg
ICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7
Ci0gICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOworICAgICAgICAgICAgcHJvY2Vz
c1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpIHx8
IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CkBAIC0xMTUyLDE1ICsxMTUx
LDE1IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BVbnRpbFRh
YmxlQm9keVNjb3BlTWFya2VyKCk7CiAgICAgICAgICAgICBBU1NFUlQoaXNUYWJsZUJvZHlDb250
ZXh0VGFnKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lKCkpKTsKICAgICAgICAg
ICAgIHByb2Nlc3NGYWtlRW5kVGFnKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1l
KCkpOwotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAgICAgICAgICAgIHBy
b2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZSh0b2tlbik7CisgICAgICAg
IHByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluUm93OgogICAgICAgICBpZiAoaXNUYWJsZUNl
bGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS5wb3BVbnRpbFRhYmxlUm93U2NvcGVNYXJrZXIoKTsKLSAgICAgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRN
TEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0g
SW5zZXJ0aW9uTW9kZTo6SW5DZWxsOwogICAgICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLmFwcGVuZE1hcmtlcigpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTE3
MywxMCArMTE3MiwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2Rl
OjpJblRhYmxlQm9keSk7Ci0gICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOworICAg
ICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShXVEZNb3ZlKHRva2VuKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5DZWxsOgogICAgICAgICBp
ZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpCkBAIC0xMTkwLDIzICsx
MTg5LDIzIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjbG9zZVRoZUNlbGwoKTsKLSAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0
b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHByb2Nlc3NTdGFydFRhZ0Zvcklu
Qm9keSh0b2tlbik7CisgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5
OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckJvZHk6CiAgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRh
Z0ZvckluQm9keSh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5C
b2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk7Ci0gICAgICAgIHBy
b2Nlc3NTdGFydFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9z
Y3JpcHQ6CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAg
ICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CisgICAgICAgICAgICBwcm9j
ZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJhc2Vmb250VGFn
CkBAIC0xMjE1LDcgKzEyMTQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gbWV0YVRhZwogICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnCiAg
ICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcpIHsKLSAgICAgICAgICAgIGJv
b2wgZGlkUHJvY2VzcyA9IHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CisgICAgICAg
ICAgICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkaWRQcm9jZXNzLCBkaWRQcm9jZXNz
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTIyNCwyMyArMTIyMywyMyBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdEZv
ckluSGVhZE5vc2NyaXB0KCk7Ci0gICAgICAgIHByb2Nlc3NUb2tlbih0b2tlbik7CisgICAgICAg
IHByb2Nlc3NUb2tlbihXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldDoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBo
dG1sVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2Vu
KTsKKyAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoV1RGTW92ZSh0b2tl
bikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCh0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92
ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gZnJhbWVUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxm
Q2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxm
Q2xvc2luZ0hUTUxFbGVtZW50KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnKSB7Ci0g
ICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOworICAgICAgICAgICAg
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKQEAgLTEyNDgsMTEg
KzEyNDcsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldDoK
ICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldDoKICAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0
VGFnRm9ySW5Cb2R5KHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJ
bkJvZHkoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsKLSAgICAgICAgICAgIHBy
b2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzU3RhcnRU
YWdGb3JJbkhlYWQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwpAQCAtMTI2NSw0MCArMTI2NCw0MCBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkg
ewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBBdG9taWNIVE1M
VG9rZW4gZW5kU2VsZWN0KEhUTUxUb2tlbjo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkp
OwotICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QpOwotICAgICAgICAgICAgcHJv
Y2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShl
bmRTZWxlY3QpKTsKKyAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgRkFMTFRIUk9VR0g7CiAg
ICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdDoKICAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBodG1sVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5
KHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoV1RGTW92
ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7CiAgICAgICAgICAgICBpZiAoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubm9kZSgpKSkgewogICAgICAgICAg
ICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlv
blRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRp
b24pOworICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShlbmRPcHRpb24pKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gb3B0Z3JvdXBUYWcpIHsKICAgICAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVu
dD4obV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAg
QXRvbWljSFRNTFRva2VuIGVuZE9wdGlvbihIVE1MVG9rZW46OkVuZFRhZywgb3B0aW9uVGFnLmxv
Y2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbik7Cisg
ICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhXVEZNb3ZlKGVuZE9wdGlvbikpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KG1fdHJlZS5j
dXJyZW50U3RhY2tJdGVtKCkubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIEF0b21pY0hUTUxU
b2tlbiBlbmRPcHRncm91cChIVE1MVG9rZW46OkVuZFRhZywgb3B0Z3JvdXBUYWcubG9jYWxOYW1l
KCkpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0Z3JvdXApOworICAgICAg
ICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShlbmRPcHRncm91cCkpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAg
ICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzZWxl
Y3RUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgQXRv
bWljSFRNTFRva2VuIGVuZFNlbGVjdChIVE1MVG9rZW46OkVuZFRhZywgc2VsZWN0VGFnLmxvY2Fs
TmFtZSgpKTsKLSAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0KTsKKyAgICAgICAg
ICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShlbmRTZWxlY3QpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGlucHV0VGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBrZXlnZW5UYWcgfHwgdG9rZW4ubmFtZSgpID09IHRleHRhcmVhVGFnKSB7
CkBAIC0xMzA4LDMwICsxMzA3LDMwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3Rh
cnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kU2VsZWN0KEhUTUxU
b2tlbjo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgcHJvY2Vz
c0VuZFRhZyhlbmRTZWxlY3QpOwotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsK
KyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShlbmRTZWxlY3QpKTsKKyAgICAgICAg
ICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcpIHsKLSAg
ICAgICAgICAgIGJvb2wgZGlkUHJvY2VzcyA9IHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tl
bik7CisgICAgICAgICAgICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRUYWdGb3JJbkhl
YWQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChkaWRQcm9jZXNz
LCBkaWRQcm9jZXNzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7Ci0gICAgICAgICAgICBwcm9jZXNzVGVt
cGxhdGVTdGFydFRhZyh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRh
ZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlVGV4dDoKICAgICAgICAg
ZGVmYXVsdEZvckluVGFibGVUZXh0KCk7Ci0gICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7
CisgICAgICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGV4dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVD
b250ZW50czoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewotICAg
ICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3RhcnRUYWcodG9rZW4pOworICAgICAgICAgICAgcHJv
Y2Vzc1RlbXBsYXRlU3RhcnRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTEzMzksNyArMTMzOCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcKICAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBzdHlsZVRhZwogICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcpIHsKLSAg
ICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CisgICAgICAgICAgICBw
cm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTEzNjAsMjIgKzEzNTksMjIgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBt
X3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMubGFzdCgpID0gaW5zZXJ0aW9uTW9kZTsKICAgICAgICAg
bV9pbnNlcnRpb25Nb2RlID0gaW5zZXJ0aW9uTW9kZTsKIAotICAgICAgICBwcm9jZXNzU3RhcnRU
YWcodG9rZW4pOworICAgICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAg
ICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSHRt
bFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mJiB0
b2tlbikKIHsKICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICBpZiAobV90cmVlLm9wZW5FbGVt
ZW50cygpLmhhc1RlbXBsYXRlSW5IVE1MU2NvcGUoKSkgewogICAgICAgICBBU1NFUlQoaXNQYXJz
aW5nVGVtcGxhdGVDb250ZW50cygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSh0b2tlbik7CisgICAgbV90cmVlLmluc2Vy
dEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoV1RGTW92ZSh0b2tlbikpOwogfQogCi1ib29sIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShB
dG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhU
TUxUb2tlbjo6RW5kVGFnKTsKICAgICBBU1NFUlQodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpOwpA
QCAtMTM4OCw3ICsxMzg3LDcgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NCb2R5RW5k
VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55
T3RoZXJFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNT
RVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CiAgICAgZm9yIChhdXRvKiBy
ZWNvcmQgPSAmbV90cmVlLm9wZW5FbGVtZW50cygpLnRvcFJlY29yZCgpOyA7IHJlY29yZCA9IHJl
Y29yZC0+bmV4dCgpKSB7CkBAIC0xNDIzLDcgKzE0MjIsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAg
IEVsZW1lbnQqIGZvcm1hdHRpbmdFbGVtZW50ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpLmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKHRva2VuLm5hbWUoKSk7CiAgICAg
ICAgIC8vIDQuYQogICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50KQotICAgICAgICAgICAg
cmV0dXJuIHByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keSh0b2tlbik7CisgICAgICAgICAg
ICByZXR1cm4gcHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsK
ICAgICAgICAgLy8gNC5jCiAgICAgICAgIGlmICgobV90cmVlLm9wZW5FbGVtZW50cygpLmNvbnRh
aW5zKCpmb3JtYXR0aW5nRWxlbWVudCkpICYmICFtX3RyZWUub3BlbkVsZW1lbnRzKCkuaW5TY29w
ZSgqZm9ybWF0dGluZ0VsZW1lbnQpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
QEAgLTE1OTIsNyArMTU5MSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpyZXNldEluc2VydGlv
bk1vZGVBcHByb3ByaWF0ZWx5KCkKICAgICB9CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkoQXRvbWljSFRNTFRv
a2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVu
ZFRhZyk7CiAgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CkBA
IC0xNjE1LDcgKzE2MTQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zv
ckluVGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1fdHJlZS5vcGVu
RWxlbWVudHMoKS5wb3BVbnRpbFRhYmxlQm9keVNjb3BlTWFya2VyKCk7CiAgICAgICAgIEFTU0VS
VChpc1RhYmxlQm9keUNvbnRleHRUYWcobV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5h
bWUoKSkpOwogICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhtX3RyZWUuY3VycmVudFN0YWNrSXRl
bSgpLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CisgICAgICAg
IHByb2Nlc3NFbmRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZwpAQCAtMTYyNiwxMCArMTYyNSwxMCBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKHRva2VuKTsKKyAgICBwcm9j
ZXNzRW5kVGFnRm9ySW5UYWJsZShXVEZNb3ZlKHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3Zv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRvbWljSFRNTFRva2Vu
JiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRh
Zyk7CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0clRhZykgewpAQCAtMTY0Miw3ICsxNjQxLDcg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFT
U0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOwotICAg
ICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZyhXVEZNb3Zl
KHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzVGFibGVCb2R5Q29u
dGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CkBAIC0xNjUyLDcgKzE2NTEsNyBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIH0KICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcodHJUYWcpOwogICAgICAgICBB
U1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5KTsKLSAg
ICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92
ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gYm9keVRhZwpAQCAtMTY2MiwxMCArMTY2MSwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHByb2Nlc3NFbmRU
YWdGb3JJblRhYmxlKHRva2VuKTsKKyAgICBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShXVEZNb3Zl
KHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5D
ZWxsKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKICAgICBpZiAoaXNUYWJsZUNlbGxD
b250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKQEAgLTE2OTYsMjMgKzE2OTUsMjMgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJbkNlbGwoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBjbG9zZVRoZUNl
bGwoKTsKLSAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRU
YWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHByb2Nlc3NF
bmRUYWdGb3JJbkJvZHkodG9rZW4pOworICAgIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHkoV1RGTW92
ZSh0b2tlbikpOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0Zvcklu
Qm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJU
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CiAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBib2R5VGFnKSB7Ci0gICAgICAgIHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoV1RGTW92ZSh0b2tlbikpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykg
ewogICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kQm9keShIVE1MVG9rZW46OkVuZFRhZywgYm9k
eVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGlmIChwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9k
eShlbmRCb2R5KSkKLSAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOworICAgICAgICBp
ZiAocHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoV1RGTW92ZShlbmRCb2R5KSkpCisgICAgICAg
ICAgICBwcm9jZXNzRW5kVGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGFkZHJlc3NUYWcKQEAgLTE3NzcsNyArMTc3Niw3
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcocFRhZyk7CiAgICAgICAgICAgICBBU1NFUlQobV90cmVl
Lm9wZW5FbGVtZW50cygpLmluU2NvcGUodG9rZW4ubmFtZSgpKSk7Ci0gICAgICAgICAgICBwcm9j
ZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZSh0b2tl
bikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5nZW5l
cmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOwpAQCAtMTg0MSwx
MCArMTg0MCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQm9k
eShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKLSAgICAgICAgcHJvY2Vzc1RlbXBsYXRl
RW5kVGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKFdURk1vdmUodG9r
ZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwcm9jZXNzQW55T3RoZXJFbmRUYWdG
b3JJbkJvZHkodG9rZW4pOworICAgIHByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShXVEZN
b3ZlKHRva2VuKSk7CiB9CiAKIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2FwdGlvbkVu
ZFRhZ0ZvckluQ2FwdGlvbigpCkBAIC0xODg4LDcgKzE4ODcsNyBAQCBib29sIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1RhYmxlRW5kVGFnRm9ySW5UYWJsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJ
blRhYmxlKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVU
YWcpIHsKQEAgLTE5MDcsMTAgKzE5MDYsMTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgcGFyc2VFcnJv
cih0b2tlbik7CiAgICAgLy8gSXMgdGhpcyByZWRpcmVjdGlvbiBuZWNlc3NhcnkgaGVyZT8KICAg
ICBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6UmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkIHJlZGly
ZWN0ZXIobV90cmVlKTsKLSAgICBwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKKyAgICBw
cm9jZXNzRW5kVGFnRm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKIH0KIAotdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewog
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwogICAgIHN3aXRj
aCAobV9pbnNlcnRpb25Nb2RlKSB7CkBAIC0xOTM5LDcgKzE5MzgsNyBAQCB2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAv
LyBiZWNhdXNlIG90aGVyIGVuZCB0YWcgY2FzZXMgbm93IHJlZmVyIHRvIGl0ICgicHJvY2VzcyB0
aGUgdG9rZW4gZm9yIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgImluIGhlYWQiIGluc2VydGlvbiBt
b2RlIikuCiAgICAgICAgIC8vIGJ1dCBiZWNhdXNlIHRoZSBsb2dpYyBmYWxscyB0aHJvdWdoIHRv
IEluc2VydGlvbk1vZGU6OkFmdGVySGVhZCwgdGhhdCBnZXRzIGEgbGl0dGxlIG1lc3N5LgogICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7Ci0gICAgICAgICAgICBwcm9j
ZXNzVGVtcGxhdGVFbmRUYWcodG9rZW4pOworICAgICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlRW5k
VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKQEAgLTE5NjMsMTAgKzE5NjIsMTAg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJ
bkJvZHkpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6Oklu
Qm9keToKLSAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluQm9keSh0b2tlbik7CisgICAgICAgIHBy
b2Nlc3NFbmRUYWdGb3JJbkJvZHkoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGU6Ci0gICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJ
blRhYmxlKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ2FwdGlv
bjoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7CkBAIC0xOTc5LDcg
KzE5NzgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBw
cm9jZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gYm9keVRhZwpAQCAtMTk5Miw3ICsxOTkxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHkodG9rZW4pOworICAgICAgICBwcm9jZXNzRW5kVGFn
Rm9ySW5Cb2R5KFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOgogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNv
bGdyb3VwVGFnKSB7CkBAIC0yMDA0LDIzICsyMDAzLDIzIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykg
ewotICAgICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKHRva2VuKTsKKyAgICAgICAgICAg
IHByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwcm9jZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNv
bHVtbkdyb3VwKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudE9yVGVt
cGxhdGVDb250ZW50cygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZyhXVEZNb3ZlKHRv
a2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Sb3c6Ci0g
ICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJblJvdyh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRU
YWdGb3JJblJvdyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5z
ZXJ0aW9uTW9kZTo6SW5DZWxsOgotICAgICAgICBwcm9jZXNzRW5kVGFnRm9ySW5DZWxsKHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChXVEZNb3ZlKHRva2VuKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHk6Ci0gICAgICAg
IHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keSh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRU
YWdGb3JJblRhYmxlQm9keShXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5OgogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09
IGh0bWxUYWcpIHsKQEAgLTIwMzYsNyArMjAzNSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIEFTU0VSVChtX2lu
c2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5IHx8IG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keSk7CiAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk7
Ci0gICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOworICAgICAgICBwcm9jZXNzRW5kVGFnKFdU
Rk1vdmUodG9rZW4pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJ
bkhlYWROb3NjcmlwdDoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub3NjcmlwdFRhZykg
ewpAQCAtMjA1MSw3ICsyMDUwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRU
YWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFkTm9zY3JpcHQoKTsKLSAgICAgICAgcHJvY2Vzc1Rv
a2VuKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1Rva2VuKFdURk1vdmUodG9rZW4pKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpUZXh0OgogICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IHNjcmlwdFRhZykgewpAQCAtMjEwNiw4ICsyMTA1LDggQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxl
bWVudHMoKS5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgICAgIEF0
b21pY0hUTUxUb2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuOjpFbmRUYWcsIHNlbGVjdFRhZy5sb2Nh
bE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QpOwotICAg
ICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOworICAgICAgICAgICAgICAgIHByb2Nl
c3NFbmRUYWcoV1RGTW92ZShlbmRTZWxlY3QpKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzRW5k
VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjE0Myw0NiArMjE0Miw0NiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsK
LSAgICAgICAgICAgIHByb2Nlc3NUZW1wbGF0ZUVuZFRhZyh0b2tlbik7CisgICAgICAgICAgICBw
cm9jZXNzVGVtcGxhdGVFbmRUYWcoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5U
YWJsZVRleHQ6CiAgICAgICAgIGRlZmF1bHRGb3JJblRhYmxlVGV4dCgpOwotICAgICAgICBwcm9j
ZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZyhXVEZNb3ZlKHRva2VuKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50
czoKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewotICAgICAgICAg
ICAgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKHRva2VuKTsKKyAgICAgICAgICAgIHByb2Nlc3NUZW1w
bGF0ZUVuZFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6Q29tbWVudCk7CiAgICAgaWYgKG1faW5zZXJ0aW9u
TW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbml0aWFsCiAgICAgICAgIHx8IG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MCiAgICAgICAgIHx8IG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9keQogICAgICAgICB8fCBtX2luc2VydGlv
bk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0KSB7Ci0gICAgICAgIG1f
dHJlZS5pbnNlcnRDb21tZW50T25Eb2N1bWVudCh0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNl
cnRDb21tZW50T25Eb2N1bWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckJvZHkp
IHsKLSAgICAgICAgbV90cmVlLmluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudCh0b2tlbik7
CisgICAgICAgIG1fdHJlZS5pbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2luc2VydGlvbk1vZGUg
PT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQpIHsKICAgICAgICAgZGVmYXVsdEZvckluVGFi
bGVUZXh0KCk7Ci0gICAgICAgIHByb2Nlc3NDb21tZW50KHRva2VuKTsKKyAgICAgICAgcHJvY2Vz
c0NvbW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1f
dHJlZS5pbnNlcnRDb21tZW50KHRva2VuKTsKKyAgICBtX3RyZWUuaW5zZXJ0Q29tbWVudChXVEZN
b3ZlKHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVy
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0No
YXJhY3RlcihBdG9taWNIVE1MVG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVyKTsKICAgICBFeHRlcm5hbENoYXJhY3RlclRva2Vu
QnVmZmVyIGJ1ZmZlcih0b2tlbik7CkBAIC0yMjAyLDEwICsyMjAxLDEwIEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjppbnNlcnRQaG9uZU51bWJlckxpbmsoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAg
ICAgQXRvbWljSFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGFUYWdM
b2NhbE5hbWUsIFdURk1vdmUoYXR0cmlidXRlcykpOwogICAgIEF0b21pY0hUTUxUb2tlbiBhRW5k
VG9rZW4oSFRNTFRva2VuOjpFbmRUYWcsIGFUYWdMb2NhbE5hbWUpOwogCi0gICAgcHJvY2Vzc1N0
YXJ0VGFnKGFTdGFydFRva2VuKTsKKyAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZShhU3RhcnRU
b2tlbikpOwogICAgIG1fdHJlZS5leGVjdXRlUXVldWVkVGFza3MoKTsKICAgICBtX3RyZWUuaW5z
ZXJ0VGV4dE5vZGUoc3RyaW5nKTsKLSAgICBwcm9jZXNzRW5kVGFnKGFFbmRUb2tlbik7CisgICAg
cHJvY2Vzc0VuZFRhZyhXVEZNb3ZlKGFFbmRUb2tlbikpOwogfQogCiAvLyBMb2NhdGVzIHRoZSBw
aG9uZSBudW1iZXJzIGluIHRoZSBzdHJpbmcgYW5kIGRlYWxzIHdpdGggaXQKQEAgLTI0NDAsNyAr
MjQzOSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyRm9y
SW5Cb2R5KEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmCiAgICAgICAgIG1fZnJhbWVzZXRPayA9
IGZhbHNlOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmlsZShBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZp
bGUoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9
PSBIVE1MVG9rZW46OkVuZE9mRmlsZSk7CiAgICAgc3dpdGNoIChtX2luc2VydGlvbk1vZGUpIHsK
QEAgLTI0NzAsNyArMjQ2OSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZG
aWxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblJv
dzoKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gRW1pdCBwYXJzZSBlcnJvciBiYXNlZCBv
biB3aGF0IGVsZW1lbnRzIGFyZSBzdGlsbCBvcGVuLgogICAgICAgICBpZiAoIW1fdGVtcGxhdGVJ
bnNlcnRpb25Nb2Rlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzRW5kT2ZG
aWxlRm9ySW5UZW1wbGF0ZUNvbnRlbnRzKHRva2VuKSkKKyAgICAgICAgICAgIGlmIChwcm9jZXNz
RW5kT2ZGaWxlRm9ySW5UZW1wbGF0ZUNvbnRlbnRzKFdURk1vdmUodG9rZW4pKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yNDc5LDcgKzI0
NzgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmlsZShBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6Oklu
SGVhZE5vc2NyaXB0OgogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFkTm9zY3JpcHQoKTsKLSAgICAg
ICAgcHJvY2Vzc0VuZE9mRmlsZSh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRPZkZpbGUoV1RG
TW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpB
ZnRlckZyYW1lc2V0OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0
OgpAQCAtMjUwMSwxMyArMjUwMCwxMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZE9mRmlsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBpZiAoJm1fdHJlZS5jdXJy
ZW50Tm9kZSgpICE9ICZtX3RyZWUub3BlbkVsZW1lbnRzKCkucm9vdE5vZGUoKSkKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBpZiAoIW1fdGVtcGxhdGVJbnNlcnRpb25N
b2Rlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzRW5kT2ZGaWxlRm9ySW5U
ZW1wbGF0ZUNvbnRlbnRzKHRva2VuKSkKKyAgICAgICAgICAgIGlmIChwcm9jZXNzRW5kT2ZGaWxl
Rm9ySW5UZW1wbGF0ZUNvbnRlbnRzKFdURk1vdmUodG9rZW4pKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpJblRhYmxlVGV4dDoKICAgICAgICAgZGVmYXVsdEZvckluVGFibGVUZXh0KCk7Ci0gICAgICAg
IHByb2Nlc3NFbmRPZkZpbGUodG9rZW4pOworICAgICAgICBwcm9jZXNzRW5kT2ZGaWxlKFdURk1v
dmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGV4
dDoKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CkBAIC0yNTE2LDEwICsyNTE1LDEwIEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3AoKTsKICAgICAgICAgQVNTRVJU
KG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlICE9IEluc2VydGlvbk1vZGU6OlRleHQpOwogICAgICAg
ICBtX2luc2VydGlvbk1vZGUgPSBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZTsKLSAgICAgICAgcHJv
Y2Vzc0VuZE9mRmlsZSh0b2tlbik7CisgICAgICAgIHByb2Nlc3NFbmRPZkZpbGUoV1RGTW92ZSh0
b2tlbikpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0
ZUNvbnRlbnRzOgotICAgICAgICBpZiAocHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250
ZW50cyh0b2tlbikpCisgICAgICAgIGlmIChwcm9jZXNzRW5kT2ZGaWxlRm9ySW5UZW1wbGF0ZUNv
bnRlbnRzKFdURk1vdmUodG9rZW4pKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMjUzNywzMiArMjUzNiwzMiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
ZGVmYXVsdEZvckluaXRpYWwoKQogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JCZWZv
cmVIVE1MKCkKIHsKICAgICBBdG9taWNIVE1MVG9rZW4gc3RhcnRIVE1MKEhUTUxUb2tlbjo6U3Rh
cnRUYWcsIGh0bWxUYWcubG9jYWxOYW1lKCkpOwotICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0
YXJ0VGFnQmVmb3JlSFRNTChzdGFydEhUTUwpOworICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0
YXJ0VGFnQmVmb3JlSFRNTChXVEZNb3ZlKHN0YXJ0SFRNTCkpOwogICAgIG1faW5zZXJ0aW9uTW9k
ZSA9IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVy
OjpkZWZhdWx0Rm9yQmVmb3JlSGVhZCgpCiB7CiAgICAgQXRvbWljSFRNTFRva2VuIHN0YXJ0SGVh
ZChIVE1MVG9rZW46OlN0YXJ0VGFnLCBoZWFkVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNz
U3RhcnRUYWcoc3RhcnRIZWFkKTsKKyAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZShzdGFydEhl
YWQpKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWQoKQogewog
ICAgIEF0b21pY0hUTUxUb2tlbiBlbmRIZWFkKEhUTUxUb2tlbjo6RW5kVGFnLCBoZWFkVGFnLmxv
Y2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzRW5kVGFnKGVuZEhlYWQpOworICAgIHByb2Nlc3NFbmRU
YWcoV1RGTW92ZShlbmRIZWFkKSk7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0
Rm9ySW5IZWFkTm9zY3JpcHQoKQogewogICAgIEF0b21pY0hUTUxUb2tlbiBlbmROb3NjcmlwdChI
VE1MVG9rZW46OkVuZFRhZywgbm9zY3JpcHRUYWcubG9jYWxOYW1lKCkpOwotICAgIHByb2Nlc3NF
bmRUYWcoZW5kTm9zY3JpcHQpOworICAgIHByb2Nlc3NFbmRUYWcoV1RGTW92ZShlbmROb3Njcmlw
dCkpOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckFmdGVySGVhZCgpCiB7
CiAgICAgQXRvbWljSFRNTFRva2VuIHN0YXJ0Qm9keShIVE1MVG9rZW46OlN0YXJ0VGFnLCBib2R5
VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoc3RhcnRCb2R5KTsKKyAgICBw
cm9jZXNzU3RhcnRUYWcoV1RGTW92ZShzdGFydEJvZHkpKTsKICAgICBtX2ZyYW1lc2V0T2sgPSB0
cnVlOwogfQogCkBAIC0yNTgzLDExICsyNTgyLDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpk
ZWZhdWx0Rm9ySW5UYWJsZVRleHQoKQogICAgIG1faW5zZXJ0aW9uTW9kZSA9IG1fb3JpZ2luYWxJ
bnNlcnRpb25Nb2RlOwogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFn
Rm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCitib29sIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiYmIHRva2VuKQogewogICAg
IEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CiAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJ
bkJvZHkodG9rZW4pOworICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KFdURk1v
dmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gYmFzZVRhZwpAQCAtMjU5NiwzNiArMjU5NSwzNyBAQCBib29sIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBjb21tYW5kVGFnCiAgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBsaW5rVGFnCiAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRhVGFnKSB7Ci0g
ICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKKyAgICAg
ICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwog
ICAgICAgICAvLyBOb3RlOiBUaGUgY3VzdG9tIHByb2Nlc3NpbmcgZm9yIHRoZSA8bWV0YT4gdGFn
IGlzIGRvbmUgaW4gSFRNTE1ldGFFbGVtZW50Ojpwcm9jZXNzKCkuCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRpdGxlVGFnKSB7Ci0gICAgICAg
IHByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcodG9rZW4pOworICAgICAgICBwcm9jZXNzR2Vu
ZXJpY1JDREFUQVN0YXJ0VGFnKFdURk1vdmUodG9rZW4pKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9zY3JpcHRUYWcpIHsKICAgICAgICAg
aWYgKG1fb3B0aW9ucy5zY3JpcHRFbmFibGVkKSB7Ci0gICAgICAgICAgICBwcm9jZXNzR2VuZXJp
Y1Jhd1RleHRTdGFydFRhZyh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1Rl
eHRTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICBtX2lu
c2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkhlYWROb3NjcmlwdDsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcgfHwg
dG9rZW4ubmFtZSgpID09IHN0eWxlVGFnKSB7Ci0gICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4
dFN0YXJ0VGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWco
V1RGTW92ZSh0b2tlbikpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcpIHsKLSAgICAgICAgcHJvY2Vzc1NjcmlwdFN0YXJ0VGFn
KHRva2VuKTsKLSAgICAgICAgaWYgKG1fb3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAm
JiB0b2tlbi5zZWxmQ2xvc2luZygpKQorICAgICAgICBib29sIGlzU2VsZkNsb3NpbmcgPSB0b2tl
bi5zZWxmQ2xvc2luZygpOworICAgICAgICBwcm9jZXNzU2NyaXB0U3RhcnRUYWcoV1RGTW92ZSh0
b2tlbikpOworICAgICAgICBpZiAobV9vcHRpb25zLnVzZVByZUhUTUw1UGFyc2VyUXVpcmtzICYm
IGlzU2VsZkNsb3NpbmcpCiAgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhzY3JpcHRUYWcp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0
ZW1wbGF0ZVRhZykgewogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKLSAgICAgICAgcHJv
Y2Vzc1RlbXBsYXRlU3RhcnRUYWcodG9rZW4pOworICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFy
dFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKQEAgLTI2MzUsMjggKzI2MzUsMjggQEAgYm9v
bCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3Zv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1JDREFUQVN0YXJ0VGFnKEF0b21pY0hU
TUxUb2tlbiYmIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
OjpTdGFydFRhZyk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICBt
X3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoV1RGTW92ZSh0b2tlbikpOwogICAgIG1fcGFyc2VyLnRv
a2VuaXplcigpLnNldFJDREFUQVN0YXRlKCk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUg
PSBtX2luc2VydGlvbk1vZGU7CiAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6
VGV4dDsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmljUmF3VGV4dFN0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAg
ICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKLSAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVu
dChXVEZNb3ZlKHRva2VuKSk7CiAgICAgbV9wYXJzZXIudG9rZW5pemVyKCkuc2V0UkFXVEVYVFN0
YXRlKCk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CiAg
ICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6VGV4dDsKIH0KIAotdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1M
VG9rZW4mJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6
U3RhcnRUYWcpOwotICAgIG1fdHJlZS5pbnNlcnRTY3JpcHRFbGVtZW50KHRva2VuKTsKKyAgICBt
X3RyZWUuaW5zZXJ0U2NyaXB0RWxlbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgbV9wYXJzZXIu
dG9rZW5pemVyKCkuc2V0U2NyaXB0RGF0YVN0YXRlKCk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlv
bk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CiAKQEAgLTI2NzgsNyArMjY3OCw3IEBAIEhUTUxTdGFj
a0l0ZW0mIEhUTUxUcmVlQnVpbGRlcjo6YWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCkgY29uc3QK
IH0KIAogLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29y
ay9tdWx0aXBhZ2UvdHJlZS1jb25zdHJ1Y3Rpb24uaHRtbCN0cmVlLWNvbnN0cnVjdGlvbgotYm9v
bCBIVE1MVHJlZUJ1aWxkZXI6OnNob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWlsZGVyOjpzaG91bGRQcm9jZXNz
VG9rZW5JbkZvcmVpZ25Db250ZW50KGNvbnN0IEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAg
ICAgaWYgKG1fdHJlZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI3MDgs
MTIgKzI3MDgsMTIgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnNob3VsZFByb2Nlc3NUb2tlbklu
Rm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIGJvb2wgaGFzQXR0cmlidXRlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCitzdGF0aWMgYm9vbCBoYXNBdHRyaWJ1dGUoY29uc3Qg
QXRvbWljSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKICAg
ICByZXR1cm4gZmluZEF0dHJpYnV0ZSh0b2tlbi5hdHRyaWJ1dGVzKCksIG5hbWUpOwogfQogCi12
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9y
ZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiYgdG9rZW4pCiB7CiAgICAgSFRNTFN0YWNrSXRl
bSYgYWRqdXN0ZWRDdXJyZW50Tm9kZSA9IGFkanVzdGVkQ3VycmVudFN0YWNrSXRlbSgpOwogICAg
IApAQCAtMjc2Nyw3ICsyNzY3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tl
bkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHx8
ICh0b2tlbi5uYW1lKCkgPT0gZm9udFRhZyAmJiAoaGFzQXR0cmlidXRlKHRva2VuLCBjb2xvckF0
dHIpIHx8IGhhc0F0dHJpYnV0ZSh0b2tlbiwgZmFjZUF0dHIpIHx8IGhhc0F0dHJpYnV0ZSh0b2tl
biwgc2l6ZUF0dHIpKSkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAg
ICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsRm9yZWlnbkNvbnRlbnRTY29wZU1h
cmtlcigpOwotICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKKyAgICAgICAgICAg
IHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJyZW50TmFtZXNwYWNlID0g
YWRqdXN0ZWRDdXJyZW50Tm9kZS5uYW1lc3BhY2VVUkkoKTsKQEAgLTI3NzgsNyArMjc3OCw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBhZGp1c3RTVkdBdHRyaWJ1dGVzKHRva2Vu
KTsKICAgICAgICAgfQogICAgICAgICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyh0b2tlbik7Ci0g
ICAgICAgIG1fdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudCh0b2tlbiwgY3VycmVudE5hbWVzcGFj
ZSk7CisgICAgICAgIG1fdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudChXVEZNb3ZlKHRva2VuKSwg
Y3VycmVudE5hbWVzcGFjZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhUTUxU
b2tlbjo6RW5kVGFnOiB7CkBAIC0yODA4LDExICsyODA4LDExIEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8gT3RoZXJ3aXNlLCBwcm9jZXNz
IHRoZSB0b2tlbiBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGdpdmVuIGluIHRoZSBzZWN0aW9uIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgaW5zZXJ0aW9uIG1vZGUgaW4gSFRNTCBjb250ZW50
LgotICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0VuZFRhZyhX
VEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhUTUxUb2tl
bjo6Q29tbWVudDoKLSAgICAgICAgbV90cmVlLmluc2VydENvbW1lbnQodG9rZW4pOworICAgICAg
ICBtX3RyZWUuaW5zZXJ0Q29tbWVudChXVEZNb3ZlKHRva2VuKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEhUTUxUb2tlbjo6Q2hhcmFjdGVyOiB7CiAgICAgICAgIFN0cmluZyBjaGFyYWN0
ZXJzID0gU3RyaW5nKHRva2VuLmNoYXJhY3RlcnMoKSwgdG9rZW4uY2hhcmFjdGVyc0xlbmd0aCgp
KTsKQEAgLTI4NDAsNyArMjg0MCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpmaW5pc2hlZCgp
CiAgICAgLy8gVGhlIHRyZWUgYnVpbGRlciBtaWdodCBoYXZlIGJlZW4gZGVzdHJveWVkIGFzIGFu
IGluZGlyZWN0IHJlc3VsdCBvZiBmaW5pc2hpbmcgdGhlIHBhcnNpbmcuCiB9CiAKLWlubGluZSB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cGFyc2VFcnJvcihBdG9taWNIVE1MVG9rZW4mKQoraW5saW5l
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwYXJzZUVycm9yKGNvbnN0IEF0b21pY0hUTUxUb2tlbiYp
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgK
aW5kZXggNTU5ZjI3OTJiYTg2NTYyYjM3OTliNmU5Nzg5MjIxODY0MmE5ZDhiMy4uZDcwOTI5ZjYw
YTYwYmM2NTk2ZjY3OTBjZDAwZGVmMTZmOTg1NTlhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgSlNDdXN0
b21FbGVtZW50SW50ZXJmYWNlOwogY2xhc3MgSFRNTERvY3VtZW50UGFyc2VyOwogCiBzdHJ1Y3Qg
Q3VzdG9tRWxlbWVudENvbnN0cnVjdGlvbkRhdGEgewotICAgIEN1c3RvbUVsZW1lbnRDb25zdHJ1
Y3Rpb25EYXRhKFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+JiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKKyAgICBDdXN0b21FbGVtZW50
Q29uc3RydWN0aW9uRGF0YShSZWY8SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlPiYmLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxBdHRyaWJ1dGU+JiYpOwogICAgIH5DdXN0b21FbGVt
ZW50Q29uc3RydWN0aW9uRGF0YSgpOwogCiAgICAgUmVmPEpTQ3VzdG9tRWxlbWVudEludGVyZmFj
ZT4gZWxlbWVudEludGVyZmFjZTsKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc1BhcnNpbmdGcmFnbWVudCgpIGNvbnN0OwogCi0gICAgdm9pZCBjb25zdHJ1Y3RUcmVlKEF0
b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgY29uc3RydWN0VHJlZShBdG9taWNIVE1MVG9rZW4m
Jik7CiAKICAgICBib29sIGlzUGFyc2luZ1RlbXBsYXRlQ29udGVudHMoKSBjb25zdDsKICAgICBi
b29sIGhhc1BhcnNlckJsb2NraW5nU2NyaXB0V29yaygpIGNvbnN0OwpAQCAtMTA4LDMyICsxMDgs
MzIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxpbmtpZnlQaG9uZU51bWJlcnMoY29uc3QgU3RyaW5n
Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYpOwot
Ci0gICAgdm9pZCBwcm9jZXNzRG9jdHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZv
aWQgcHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0Vu
ZFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NDb21tZW50KEF0b21pY0hU
TUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0NoYXJhY3RlcihBdG9taWNIVE1MVG9rZW4mKTsK
LSAgICB2b2lkIHByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2VuJik7Ci0KLSAgICBib29s
IHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHBy
b2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nl
c3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNz
RW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRh
Z0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9y
SW5UYWJsZUJvZHkoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9y
SW5Sb3coQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5DZWxs
KEF0b21pY0hUTUxUb2tlbiYpOwotCi0gICAgdm9pZCBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIGJvb2wgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJv
ZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRv
a2VuJiYpOworCisgICAgdm9pZCBwcm9jZXNzRG9jdHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYm
KTsKKyAgICB2b2lkIHByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mJik7CisgICAgdm9p
ZCBwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lkIHByb2Nlc3NDb21t
ZW50KEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2b2lkIHByb2Nlc3NDaGFyYWN0ZXIoQXRvbWlj
SFRNTFRva2VuJiYpOworICAgIHZvaWQgcHJvY2Vzc0VuZE9mRmlsZShBdG9taWNIVE1MVG9rZW4m
Jik7CisKKyAgICBib29sIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChBdG9taWNIVE1MVG9rZW4m
Jik7CisgICAgdm9pZCBwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYp
OworICAgIHZvaWQgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mJik7
CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYmKTsKKyAg
ICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiYmKTsKKyAgICB2
b2lkIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keShBdG9taWNIVE1MVG9rZW4mJik7CisgICAg
dm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5Sb3coQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZvaWQg
cHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4mJik7CisKKyAgICB2b2lkIHBy
b2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYpOworICAgIGJvb2wg
cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiYpOwogICAgIGJvb2wg
cHJvY2Vzc1RhYmxlRW5kVGFnRm9ySW5UYWJsZSgpOwogICAgIGJvb2wgcHJvY2Vzc0NhcHRpb25F
bmRUYWdGb3JJbkNhcHRpb24oKTsKICAgICBib29sIHByb2Nlc3NDb2xncm91cEVuZFRhZ0Zvcklu
Q29sdW1uR3JvdXAoKTsKICAgICBib29sIHByb2Nlc3NUckVuZFRhZ0ZvckluUm93KCk7CiAKLSAg
ICB2b2lkIHByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mKTsK
KyAgICB2b2lkIHByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4m
Jik7CiAKICAgICB2b2lkIHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXIoRXh0ZXJuYWxDaGFyYWN0ZXJU
b2tlbkJ1ZmZlciYpOwogICAgIGlubGluZSB2b2lkIHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXJGb3JJ
bkJvZHkoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciYpOwpAQCAtMTQ0LDkgKzE0NCw5IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwcm9jZXNzRmFrZUNoYXJhY3RlcnMoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7CiAKLSAgICB2
b2lkIHByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJik7Ci0gICAg
dm9pZCBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKLSAg
ICB2b2lkIHByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lk
IHByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiYpOworICAgIHZv
aWQgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiYpOworICAg
IHZvaWQgcHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYmKTsKIAogICAgIC8v
IERlZmF1bHQgcHJvY2Vzc2luZyBmb3IgdGhlIGRpZmZlcmVudCBpbnNlcnRpb24gbW9kZXMuCiAg
ICAgdm9pZCBkZWZhdWx0Rm9ySW5pdGlhbCgpOwpAQCAtMTU3LDggKzE1Nyw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkZWZhdWx0Rm9yQWZ0ZXJIZWFkKCk7CiAgICAgdm9pZCBkZWZhdWx0Rm9ySW5U
YWJsZVRleHQoKTsKIAotICAgIGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVu
dChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRl
bnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgYm9vbCBzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVp
Z25Db250ZW50KGNvbnN0IEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc1Rva2Vu
SW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mJik7CiAgICAgCiAgICAgSFRNTFN0YWNr
SXRlbSYgYWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCkgY29uc3Q7CiAKQEAgLTE2NiwxNyArMTY2
LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNsb3NlVGhlQ2VsbCgpOwogCi0gICAgdGVtcGxh
dGUgPGJvb2wgc2hvdWxkQ2xvc2UoY29uc3QgSFRNTFN0YWNrSXRlbSYpPiB2b2lkIHByb2Nlc3ND
bG9zZVdoZW5OZXN0ZWRUYWcoQXRvbWljSFRNTFRva2VuJik7CisgICAgdGVtcGxhdGUgPGJvb2wg
c2hvdWxkQ2xvc2UoY29uc3QgSFRNTFN0YWNrSXRlbSYpPiB2b2lkIHByb2Nlc3NDbG9zZVdoZW5O
ZXN0ZWRUYWcoQXRvbWljSFRNTFRva2VuJiYpOwogCi0gICAgdm9pZCBwYXJzZUVycm9yKEF0b21p
Y0hUTUxUb2tlbiYpOworICAgIHZvaWQgcGFyc2VFcnJvcihjb25zdCBBdG9taWNIVE1MVG9rZW4m
KTsKIAogICAgIHZvaWQgcmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgpOwogCi0gICAg
dm9pZCBpbnNlcnRHZW5lcmljSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9p
ZCBpbnNlcnRHZW5lcmljSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiYpOwogCi0gICAgdm9p
ZCBwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKLSAgICBib29sIHBy
b2Nlc3NUZW1wbGF0ZUVuZFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKLSAgICBib29sIHByb2Nlc3NF
bmRPZkZpbGVGb3JJblRlbXBsYXRlQ29udGVudHMoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9p
ZCBwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mJik7CisgICAgYm9vbCBw
cm9jZXNzVGVtcGxhdGVFbmRUYWcoQXRvbWljSFRNTFRva2VuJiYpOworICAgIGJvb2wgcHJvY2Vz
c0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyhBdG9taWNIVE1MVG9rZW4mJik7CiAKICAg
ICBjbGFzcyBGcmFnbWVudFBhcnNpbmdDb250ZXh0IHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcAppbmRleCBhM2Y1
YjJjN2UxNGNkMTIxMWE3ZjFjMzJjY2E1YjE0NDliZDlkNDM3Li5hZDVmNmU3OGUzODFhYWRjY2M2
YjkxYmE5N2NhNDI1NTgwNGNiOTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBUZXh0RG9j
dW1lbnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50KCkKICAgICBWZWN0b3I8QXR0cmlidXRl
PiBhdHRyaWJ1dGVzOwogICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIs
ICJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKSk7CiAgICAg
QXRvbWljSFRNTFRva2VuIGZha2VQcmUoSFRNTFRva2VuOjpTdGFydFRhZywgcHJlVGFnLmxvY2Fs
TmFtZSgpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKLSAgICB0cmVlQnVpbGRlcigpLmNvbnN0cnVj
dFRyZWUoZmFrZVByZSk7CisgICAgdHJlZUJ1aWxkZXIoKS5jb25zdHJ1Y3RUcmVlKFdURk1vdmUo
ZmFrZVByZSkpOwogCiAgICAgLy8gTm9ybWFsbHkgd2Ugd291bGQgc2tpcCB0aGUgZmlyc3QgXG4g
YWZ0ZXIgYSA8cHJlPiBlbGVtZW50LCBidXQgd2UgZG9uJ3QKICAgICAvLyB3YW50IHRvIHNraXAg
dGhlIGZpcnN0IFxuIGZvciB0ZXh0IGRvY3VtZW50cyEK
</data>

          </attachment>
      

    </bug>

</bugzilla>