<?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>163286</bug_id>
          
          <creation_ts>2016-10-11 09:20:09 -0700</creation_ts>
          <short_desc>Refactor LineLayoutState&apos;s float box handling.</short_desc>
          <delta_ts>2016-10-12 09:48:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1238880</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2016-10-11 09:20:09 -0700</bug_when>
    <thetext>to make it more secure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238881</commentid>
    <comment_count>1</comment_count>
      <attachid>291267</attachid>
    <who name="alan">zalan</who>
    <bug_when>2016-10-11 09:24:33 -0700</bug_when>
    <thetext>Created attachment 291267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238921</commentid>
    <comment_count>2</comment_count>
      <attachid>291278</attachid>
    <who name="alan">zalan</who>
    <bug_when>2016-10-11 11:02:35 -0700</bug_when>
    <thetext>Created attachment 291278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239320</commentid>
    <comment_count>3</comment_count>
      <attachid>291278</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-12 09:32:57 -0700</bug_when>
    <thetext>Comment on attachment 291278
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239329</commentid>
    <comment_count>4</comment_count>
      <attachid>291278</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-12 09:48:31 -0700</bug_when>
    <thetext>Comment on attachment 291278
Patch

Clearing flags on attachment: 291278

Committed r207219: &lt;http://trac.webkit.org/changeset/207219&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239330</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-12 09:48:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291267</attachid>
            <date>2016-10-11 09:24:33 -0700</date>
            <delta_ts>2016-10-11 11:02:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163286-20161011092114.patch</filename>
            <type>text/plain</type>
            <size>33876</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2ODY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFjNzI4ZjIwOWFlZGEy
NmRhNGMyZTczZjc4ZTViNjkyZDI0YTcxYi4uMDAwNzM0YzJiMGYxY2VlYTk1MjE2M2E2M2QyNTBm
NGQ5MzM1YjRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE2LTEwLTExICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgTGluZUxheW91
dFN0YXRlJ3MgZmxvYXQgYm94IGhhbmRsaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNdWNoIHNlY3VyZS4KKworICAgICAgICBObyBj
aGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YXBwZW5kRmxvYXRpbmdPYmplY3RU
b0xhc3RMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGFpbnREaXJ0eUZsb2F0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxpbmtUb0VuZExpbmVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dExpbmVCb3hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRmxvYXRJbkNsZWFu
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmRldGVybWluZVN0YXJ0
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpkZXRlcm1pbmVF
bmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnJlcGFpbnRE
aXJ0eUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6
OmNoZWNrRmxvYXRzSW5DbGVhbkxpbmUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9s
aW5lL0xpbmVMYXlvdXRTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRXaXRoUmVjdDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0V2l0aFJlY3Q6OnJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0V2l0aFJlY3Q6OnJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRXaXRoUmVjdDo6ZXZlckhhZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFdp
dGhSZWN0OjphZGp1c3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0V2l0aFJlY3Q6OkZs
b2F0V2l0aFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRlOjpGbG9hdExp
c3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlz
dDo6c2V0TGFzdEZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6Rmxv
YXRMaXN0OjpsYXN0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRlOjpG
bG9hdExpc3Q6OnNldExhc3RDbGVhbkZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlv
dXRTdGF0ZTo6RmxvYXRMaXN0OjpsYXN0Q2xlYW5GbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpM
aW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlzdDo6ZmxvYXRXaXRoUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlzdDo6YmVnaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6TGluZUxheW91dFN0YXRlOjpGbG9hdExpc3Q6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpM
aW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlzdDo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0U3RhdGU6OkZsb2F0TGlzdDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0U3RhdGU6OkxpbmVMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5
b3V0U3RhdGU6OmZsb2F0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6
Omxhc3RGbG9hdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6
OnNldExhc3RGbG9hdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3Rh
dGU6OmZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6
OmZsb2F0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRl
OjpzZXRGbG9hdEluZGV4KTogRGVsZXRlZC4KKwogMjAxNi0xMC0wNiAgSm9obiBXaWxhbmRlciAg
PHdpbGFuZGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgUmVzb3VyY2UgTG9hZCBTdGF0
aXN0aWNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXgg
ODBlZDIwNDI4YTMxZTYzNzUzYjBmMTFhYTgxOGNmZDdlODI4ZjRlZS4uMDJkMjc3N2MwNGQ1ODIz
YWQwN2RkNjAyMmM3ZmZiNTQyMmUyNzliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuaApAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIEZsb2F0V2l0aFJlY3Q7CiBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7CiBj
bGFzcyBMaW5lQnJlYWtlcjsKIGNsYXNzIExpbmVJbmZvOwpAQCAtNDEsNyArNDIsNiBAQCBjbGFz
cyBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ7CiBjbGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDsKIGNsYXNzIFJlbmRlclJ1YnlSdW47CiAKLXN0cnVjdCBGbG9hdFdpdGhSZWN0Owogc3Ry
dWN0IFdvcmRNZWFzdXJlbWVudDsKIAogdGVtcGxhdGUgPGNsYXNzIFJ1bj4gY2xhc3MgQmlkaVJ1
bkxpc3Q7CkBAIC01NjYsNyArNTY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZmxvYXQmIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWlsaW5nU3Bh
Y2VSdW4sIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1hcCwg
VmVydGljYWxQb3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIHZvaWQgY29t
cHV0ZUJsb2NrRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiwgQmlkaVJ1
biosIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVydGljYWxQb3NpdGlvbkNh
Y2hlJik7CiAgICAgQmlkaVJ1biogaGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1bkxpc3Q8Qmlk
aVJ1bj4mLCBCaWRpQ29udGV4dCopOwotICAgIHZvaWQgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xh
c3RMaW5lKEZsb2F0aW5nT2JqZWN0Kik7CisgICAgdm9pZCBhcHBlbmRGbG9hdGluZ09iamVjdFRv
TGFzdExpbmUoRmxvYXRpbmdPYmplY3QmKTsKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGxh
eW91dElubGluZUNoaWxkcmVuKCkKICAgICBSb290SW5saW5lQm94KiBjcmVhdGVMaW5lQm94ZXNG
cm9tQmlkaVJ1bnModW5zaWduZWQgYmlkaUxldmVsLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGNv
bnN0IElubGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiwgVmVydGljYWxQb3NpdGlvbkNhY2hl
JiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIHZv
aWQgbGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmLCBib29sIGhhc0lubGluZUNo
aWxkKTsKQEAgLTU3NCw4ICs1NzQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbGF5b3V0UnVuc0Fu
ZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlkaVJlc29sdmVyJiwgY29u
c3QgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBjbGVh
bkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CiAg
ICAgdm9pZCByZWF0dGFjaENsZWFuTGluZUZsb2F0cyhSb290SW5saW5lQm94JiBjbGVhbkxpbmUs
IExheW91dFVuaXQgZGVsdGEsIGJvb2wgaXNGaXJzdENsZWFuTGluZSk7CiAgICAgdm9pZCBsaW5r
VG9FbmRMaW5lSWZOZWVkZWQoTGluZUxheW91dFN0YXRlJik7Ci0gICAgc3RhdGljIHZvaWQgcmVw
YWludERpcnR5RmxvYXRzKFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzKTsKLSAgICB2b2lk
IGNoZWNrRmxvYXRzSW5DbGVhbkxpbmUoUm9vdElubGluZUJveCosIFZlY3RvcjxGbG9hdFdpdGhS
ZWN0PiYsIHNpemVfdCYgZmxvYXRJbmRleCwgYm9vbCYgZW5jb3VudGVyZWROZXdGbG9hdCwgYm9v
bCYgZGlydGllZEJ5RmxvYXQpOworICAgIHZvaWQgY2hlY2tGbG9hdEluQ2xlYW5MaW5lKFJvb3RJ
bmxpbmVCb3gmIGNsZWFuTGluZSwgUmVuZGVyQm94JiBmbG9hdEJveE9uQ2xlYW5MaW5lLCBGbG9h
dFdpdGhSZWN0JiBtYXRjaGluZ0Zsb2F0V2l0aFJlY3QsCisgICAgICAgIGJvb2wmIGVuY291bnRl
cmVkTmV3RmxvYXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0KTsKICAgICBSb290SW5saW5lQm94KiBk
ZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZl
ciYpOwogICAgIHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgUm9v
dElubGluZUJveCogc3RhcnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgQmlk
aVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CiAgICAgYm9vbCBjaGVja1BhZ2luYXRpb25B
bmRGbG9hdHNBdEVuZExpbmUoTGluZUxheW91dFN0YXRlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IGJhZjE3YTljZmI3
NTY3YjYwYmUyODExNDUxMTI0ODU0MGI4YTNiY2UuLjM3NzQ3YzAwOTNmMThkZGNiOWU5YjYyOTU4
MDQ5ZWU0ZjQ5ODJlNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC0xMTAwLDExICsxMTAwLDExIEBAIGlubGluZSBCaWRp
UnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKEJpZGlSdW5MaXN0PEJp
ZGlSdW4+JiBiaWRpCiAgICAgcmV0dXJuIHRyYWlsaW5nU3BhY2VSdW47CiB9CiAKLXZvaWQgUmVu
ZGVyQmxvY2tGbG93OjphcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoRmxvYXRpbmdPYmpl
Y3QqIGZsb2F0aW5nT2JqZWN0KQordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZEZsb2F0aW5n
T2JqZWN0VG9MYXN0TGluZShGbG9hdGluZ09iamVjdCYgZmxvYXRpbmdPYmplY3QpCiB7Ci0gICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWZsb2F0aW5nT2JqZWN0LT5vcmlnaW5h
dGluZ0xpbmUoKSk7Ci0gICAgZmxvYXRpbmdPYmplY3QtPnNldE9yaWdpbmF0aW5nTGluZShsYXN0
Um9vdEJveCgpKTsKLSAgICBsYXN0Um9vdEJveCgpLT5hcHBlbmRGbG9hdChmbG9hdGluZ09iamVj
dC0+cmVuZGVyZXIoKSk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWZs
b2F0aW5nT2JqZWN0Lm9yaWdpbmF0aW5nTGluZSgpKTsKKyAgICBmbG9hdGluZ09iamVjdC5zZXRP
cmlnaW5hdGluZ0xpbmUobGFzdFJvb3RCb3goKSk7CisgICAgbGFzdFJvb3RCb3goKS0+YXBwZW5k
RmxvYXQoZmxvYXRpbmdPYmplY3QucmVuZGVyZXIoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBub3RpZnlSZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIFJlbmRlck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBzdGFydE9iamVjdCkKQEAg
LTEyNDksNiArMTI0OSwyMCBAQCBzdGF0aWMgdm9pZCBkZWxldGVMaW5lUmFuZ2UoTGluZUxheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSwgUm9vdElubGluZUJveCogc3RhcnRMaQogICAgIH0KIH0KIAor
c3RhdGljIHZvaWQgcmVwYWludERpcnR5RmxvYXRzKExpbmVMYXlvdXRTdGF0ZTo6RmxvYXRMaXN0
JiBmbG9hdHMpCit7CisgICAgLy8gRmxvYXRzIHRoYXQgZGlkIG5vdCBoYXZlIGxheW91dCBkaWQg
bm90IHJlcGFpbnQgd2hlbiB3ZSBsYWlkIHRoZW0gb3V0LiBUaGV5IHdvdWxkIGhhdmUKKyAgICAv
LyBwYWludGVkIGJ5IG5vdyBpZiB0aGV5IGhhZCBtb3ZlZCwgYnV0IGlmIHRoZXkgc3RheWVkIGF0
ICgwLCAwKSwgdGhleSBzdGlsbCBuZWVkIHRvIGJlCisgICAgLy8gcGFpbnRlZC4KKyAgICBmb3Ig
KGF1dG8mIGZsb2F0Qm94IDogZmxvYXRzKSB7CisgICAgICAgIGlmIChmbG9hdEJveC0+ZXZlckhh
ZExheW91dCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8mIGJveCA9IGZs
b2F0Qm94LT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIWJveC54KCkgJiYgIWJveC55KCkgJiYg
Ym94LmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQorICAgICAgICAgICAgYm94LnJlcGFp
bnQoKTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxv
YXRzKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saW5lQ2hpbGQpCiB7
CiAgICAgLy8gV2Ugd2FudCB0byBza2lwIGFoZWFkIHRvIHRoZSBmaXJzdCBkaXJ0eSBsaW5lCkBA
IC0xMjc5LDcgKzEyOTMsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVuc0FuZEZs
b2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhcwogICAgIH0KIAogICAg
IGlmIChjb250YWluc0Zsb2F0cygpKQotICAgICAgICBsYXlvdXRTdGF0ZS5zZXRMYXN0RmxvYXQo
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKS5nZXQoKSk7CisgICAgICAgIGxheW91dFN0
YXRlLmZsb2F0TGlzdCgpLnNldExhc3RGbG9hdChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFz
dCgpLmdldCgpKTsKIAogICAgIC8vIFdlIGFsc28gZmluZCB0aGUgZmlyc3QgY2xlYW4gbGluZSBh
bmQgZXh0cmFjdCB0aGVzZSBsaW5lcy4gIFdlIHdpbGwgYWRkIHRoZW0gYmFjawogICAgIC8vIGlm
IHdlIGRldGVybWluZSB0aGF0IHdlJ3JlIGFibGUgdG8gc3luY2hyb25pemUgYWZ0ZXIgaGFuZGxp
bmcgYWxsIG91ciBkaXJ0eSBsaW5lcy4KQEAgLTEzMTIsNyArMTMyNiw3IEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIGJvb2wgaGFzCiAKICAgICBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShsYXlvdXRTdGF0
ZSwgcmVzb2x2ZXIsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBjb25zZWN1
dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CiAgICAgbGlua1RvRW5kTGluZUlmTmVlZGVkKGxheW91dFN0
YXRlKTsKLSAgICByZXBhaW50RGlydHlGbG9hdHMobGF5b3V0U3RhdGUuZmxvYXRzKCkpOworICAg
IHJlcGFpbnREaXJ0eUZsb2F0cyhsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKSk7CiB9CiAKIC8vIEJl
Zm9yZSByZXN0YXJ0aW5nIHRoZSBsYXlvdXQgbG9vcCB3aXRoIGEgbmV3IGxvZ2ljYWxIZWlnaHQs
IHJlbW92ZSBhbGwgZmxvYXRzIHRoYXQgd2VyZSBhZGRlZCBhbmQgcmVzZXQgdGhlIHJlc29sdmVy
LgpAQCAtMTQ3OSwyMiArMTQ5MywyMSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVu
c0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSQogICAgICAg
ICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmJlZ2luKCk7CiAgICAgICAgICAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVu
ZCgpOwotICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8
RmxvYXRpbmdPYmplY3QmLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqbGF5b3V0U3Rh
dGUubGFzdEZsb2F0KCkpOworICAgICAgICAgICAgaWYgKGF1dG8qIGxhc3RGbG9hdCA9IGxheW91
dFN0YXRlLmZsb2F0TGlzdCgpLmxhc3RGbG9hdCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBs
YXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8RmxvYXRpbmdPYmplY3Qm
LCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqbGFzdEZsb2F0KTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQobGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5kKTsKICAgICAgICAgICAgICAgICAr
K2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAgICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0
b3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBpdC0+Z2V0KCk7Ci0gICAgICAg
ICAgICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKGYpOwotICAgICAgICAgICAg
ICAgIEFTU0VSVCgmZi0+cmVuZGVyZXIoKSA9PSAmbGF5b3V0U3RhdGUuZmxvYXRzKClbbGF5b3V0
U3RhdGUuZmxvYXRJbmRleCgpXS5vYmplY3QpOworICAgICAgICAgICAgICAgIGF1dG8mIGZsb2F0
aW5nT2JqZWN0ID0gKml0OworICAgICAgICAgICAgICAgIGFwcGVuZEZsb2F0aW5nT2JqZWN0VG9M
YXN0TGluZSgqZmxvYXRpbmdPYmplY3QpOwogICAgICAgICAgICAgICAgIC8vIElmIGEgZmxvYXQn
cyBnZW9tZXRyeSBoYXMgY2hhbmdlZCwgZ2l2ZSB1cCBvbiBzeW5jaW5nIHdpdGggY2xlYW4gbGlu
ZXMuCi0gICAgICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZsb2F0cygpW2xheW91dFN0YXRl
LmZsb2F0SW5kZXgoKV0ucmVjdCAhPSBmLT5mcmFtZVJlY3QoKSkKKyAgICAgICAgICAgICAgICBh
dXRvKiBmbG9hdFdpdGhSZWN0ID0gbGF5b3V0U3RhdGUuZmxvYXRMaXN0KCkuZmxvYXRXaXRoUmVj
dChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFmbG9h
dFdpdGhSZWN0IHx8IGZsb2F0V2l0aFJlY3QtPnJlY3QoKSAhPSBmbG9hdGluZ09iamVjdC0+ZnJh
bWVSZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUuc2V0RmxvYXRJbmRleChsYXlvdXRTdGF0
ZS5mbG9hdEluZGV4KCkgKyAxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxheW91dFN0
YXRlLnNldExhc3RGbG9hdCghZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdP
YmplY3RTZXQubGFzdCgpLmdldCgpIDogbnVsbHB0cik7CisgICAgICAgICAgICBsYXlvdXRTdGF0
ZS5mbG9hdExpc3QoKS5zZXRMYXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/
IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQoKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAK
ICAgICAgICAgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUucmVzZXQoKTsKQEAgLTE2NDEs
MzAgKzE2NTQsMTUgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxpbmtUb0VuZExpbmVJZk5lZWRl
ZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAgICBjb25zdCBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAg
ICAgICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOwogICAgICAgICBhdXRv
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICBpZiAobGF5b3V0U3RhdGUu
bGFzdEZsb2F0KCkpIHsKLSAgICAgICAgICAgIGF1dG8gbGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9h
dGluZ09iamVjdFNldC5maW5kPEZsb2F0aW5nT2JqZWN0JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJh
bnNsYXRvcj4oKmxheW91dFN0YXRlLmxhc3RGbG9hdCgpKTsKKyAgICAgICAgaWYgKGF1dG8qIGxh
c3RGbG9hdCA9IGxheW91dFN0YXRlLmZsb2F0TGlzdCgpLmxhc3RGbG9hdCgpKSB7CisgICAgICAg
ICAgICBhdXRvIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxGbG9h
dGluZ09iamVjdCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpsYXN0RmxvYXQpOwog
ICAgICAgICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0ZXJhdG9yICE9IGVuZCk7CiAgICAgICAgICAg
ICArK2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRv
cjsKICAgICAgICAgfQogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKGl0LT5nZXQoKSk7Ci0gICAgICAgIGxh
eW91dFN0YXRlLnNldExhc3RGbG9hdCghZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxv
YXRpbmdPYmplY3RTZXQubGFzdCgpLmdldCgpIDogbnVsbHB0cik7Ci0gICAgfQotfQotCi12b2lk
IFJlbmRlckJsb2NrRmxvdzo6cmVwYWludERpcnR5RmxvYXRzKFZlY3RvcjxGbG9hdFdpdGhSZWN0
PiYgZmxvYXRzKQotewotICAgIHNpemVfdCBmbG9hdENvdW50ID0gZmxvYXRzLnNpemUoKTsKLSAg
ICAvLyBGbG9hdHMgdGhhdCBkaWQgbm90IGhhdmUgbGF5b3V0IGRpZCBub3QgcmVwYWludCB3aGVu
IHdlIGxhaWQgdGhlbSBvdXQuIFRoZXkgd291bGQgaGF2ZQotICAgIC8vIHBhaW50ZWQgYnkgbm93
IGlmIHRoZXkgaGFkIG1vdmVkLCBidXQgaWYgdGhleSBzdGF5ZWQgYXQgKDAsIDApLCB0aGV5IHN0
aWxsIG5lZWQgdG8gYmUKLSAgICAvLyBwYWludGVkLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZmxvYXRDb3VudDsgKytpKSB7Ci0gICAgICAgIGlmICghZmxvYXRzW2ldLmV2ZXJIYWRMYXlv
dXQpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCYgYm94ID0gZmxvYXRzW2ldLm9iamVjdDsKLSAg
ICAgICAgICAgIGlmICghYm94LngoKSAmJiAhYm94LnkoKSAmJiBib3guY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgYm94LnJlcGFpbnQoKTsKLSAgICAgICAg
fQorICAgICAgICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKCoqaXQpOworICAg
ICAgICBsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKS5zZXRMYXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0
U2V0LmlzRW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQoKSA6IG51bGxwdHIp
OwogICAgIH0KIH0KIApAQCAtMTcyOSw3ICsxNzI3LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6
OmxheW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFp
bnQKICAgICAgICAgICAgICAgICBpZiAoYm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAg
ICAgICAgICAgICAgICAgICBib3guY29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRP
YmplY3QoYm94KTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChib3guaXNGbG9hdGluZygpKQot
ICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5mbG9hdHMoKS5hcHBlbmQoRmxvYXRXaXRo
UmVjdChib3gpKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUuZmxvYXRMaXN0KCku
YXBwZW5kKEZsb2F0V2l0aFJlY3Q6OmNyZWF0ZShib3gpKTsKICAgICAgICAgICAgICAgICBlbHNl
IGlmIChpc0Z1bGxMYXlvdXQgfHwgYm94Lm5lZWRzTGF5b3V0KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gUmVwbGFjZWQgZWxlbWVudC4KICAgICAgICAgICAgICAgICAgICAgYm94LmRpcnR5
TGluZUJveGVzKGlzRnVsbExheW91dCk7CkBAIC0xNzg1LDE0NSArMTc4MywxNDYgQEAgdm9pZCBS
ZW5kZXJCbG9ja0Zsb3c6OmxheW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExh
eW91dFVuaXQmIHJlcGFpbnQKICAgICAgICAgY2hlY2tMaW5lc0ZvclRleHRPdmVyZmxvdygpOwog
fQogCi12b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGbG9hdHNJbkNsZWFuTGluZShSb290SW5s
aW5lQm94KiBsaW5lLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgc2l6ZV90JiBmbG9h
dEluZGV4LCBib29sJiBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBib29sJiBkaXJ0aWVkQnlGbG9hdCkK
K3ZvaWQgUmVuZGVyQmxvY2tGbG93OjpjaGVja0Zsb2F0SW5DbGVhbkxpbmUoUm9vdElubGluZUJv
eCYgY2xlYW5MaW5lLCBSZW5kZXJCb3gmIGZsb2F0Qm94T25DbGVhbkxpbmUsIEZsb2F0V2l0aFJl
Y3QmIG1hdGNoaW5nRmxvYXRXaXRoUmVjdCwKKyAgICBib29sJiBlbmNvdW50ZXJlZE5ld0Zsb2F0
LCBib29sJiBkaXJ0aWVkQnlGbG9hdCkKIHsKLSAgICBWZWN0b3I8UmVuZGVyQm94Kj4qIGNsZWFu
TGluZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpOwotICAgIGlmICghY2xlYW5MaW5lRmxvYXRz
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFmbG9hdHMuc2l6ZSgpKSB7CisgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWZsb2F0Qm94T25DbGVhbkxpbmUuc3R5
bGUoKS5kZWxldGlvbkhhc0JlZ3VuKCkpOworICAgIGlmICgmbWF0Y2hpbmdGbG9hdFdpdGhSZWN0
LnJlbmRlcmVyKCkgIT0gJmZsb2F0Qm94T25DbGVhbkxpbmUpIHsKICAgICAgICAgZW5jb3VudGVy
ZWROZXdGbG9hdCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBmb3IgKGF1
dG8gaXQgPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCksIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJCb3gqIGZsb2F0aW5nQm94
ID0gKml0OwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighZmxvYXRp
bmdCb3gtPnN0eWxlKCkuZGVsZXRpb25IYXNCZWd1bigpKTsKLSAgICAgICAgZmxvYXRpbmdCb3gt
PmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIExheW91dFNpemUgbmV3U2l6ZShmbG9hdGluZ0Jv
eC0+d2lkdGgoKSArIGZsb2F0aW5nQm94LT5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCksIGZsb2F0
aW5nQm94LT5oZWlnaHQoKSArIGZsb2F0aW5nQm94LT52ZXJ0aWNhbE1hcmdpbkV4dGVudCgpKTsK
LSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZmxvYXRJbmRleCA8IGZs
b2F0cy5zaXplKCkpOwotICAgICAgICBpZiAoJmZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QgIT0g
ZmxvYXRpbmdCb3gpIHsKLSAgICAgICAgICAgIGVuY291bnRlcmVkTmV3RmxvYXQgPSB0cnVlOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgZmxvYXRCb3hPbkNsZWFuTGluZS5s
YXlvdXRJZk5lZWRlZCgpOworICAgIExheW91dFJlY3Qgb3JpZ2luYWxGbG9hdFJlY3QgPSBtYXRj
aGluZ0Zsb2F0V2l0aFJlY3QucmVjdCgpOworICAgIExheW91dFNpemUgbmV3U2l6ZSgKKyAgICAg
ICAgZmxvYXRCb3hPbkNsZWFuTGluZS53aWR0aCgpICsgZmxvYXRCb3hPbkNsZWFuTGluZS5ob3Jp
em9udGFsTWFyZ2luRXh0ZW50KCksCisgICAgICAgIGZsb2F0Qm94T25DbGVhbkxpbmUuaGVpZ2h0
KCkgKyBmbG9hdEJveE9uQ2xlYW5MaW5lLnZlcnRpY2FsTWFyZ2luRXh0ZW50KCkpOwogICAgIAot
ICAgICAgICAvLyBXZSBoYXZlIHRvIHJlc2V0IHRoZSBjYXAtaGVpZ2h0IGFsaWdubWVudCBkb25l
IGJ5IHRoZSBmaXJzdC1sZXR0ZXIgZmxvYXRzIHdoZW4gaW5pdGlhbC1sZXR0ZXIgaXMgc2V0LCBz
byBqdXN0IGFsd2F5cyB0cmVhdCBmaXJzdC1sZXR0ZXIgZmxvYXRzCi0gICAgICAgIC8vIGFzIGRp
cnR5LgotICAgICAgICBpZiAoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3Quc2l6ZSgpICE9IG5ld1Np
emUgfHwgKGZsb2F0aW5nQm94LT5zdHlsZSgpLnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUiAm
JiBmbG9hdGluZ0JveC0+c3R5bGUoKS5pbml0aWFsTGV0dGVyRHJvcCgpID4gMCkpIHsKLSAgICAg
ICAgICAgIExheW91dFVuaXQgZmxvYXRUb3AgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
ZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QueSgpIDogZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QueCgp
OwotICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdEhlaWdodCA9IGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBzdGQ6Om1heChmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC5oZWlnaHQoKSwgbmV3
U2l6ZS5oZWlnaHQoKSkgOiBzdGQ6Om1heChmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC53aWR0aCgp
LCBuZXdTaXplLndpZHRoKCkpOwotICAgICAgICAgICAgZmxvYXRIZWlnaHQgPSBzdGQ6Om1pbihm
bG9hdEhlaWdodCwgTGF5b3V0VW5pdDo6bWF4KCkgLSBmbG9hdFRvcCk7Ci0gICAgICAgICAgICBs
aW5lLT5tYXJrRGlydHkoKTsKLSAgICAgICAgICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1Jhbmdl
KGxpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpLCBmbG9hdFRvcCArIGZsb2F0SGVpZ2h0LCBs
aW5lKTsKLSAgICAgICAgICAgIGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LnNldFNpemUobmV3U2l6
ZSk7Ci0gICAgICAgICAgICBkaXJ0aWVkQnlGbG9hdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgZmxvYXRJbmRleCsrOwotICAgIH0KKyAgICAvLyBXZSBoYXZlIHRvIHJlc2V0IHRoZSBjYXAt
aGVpZ2h0IGFsaWdubWVudCBkb25lIGJ5IHRoZSBmaXJzdC1sZXR0ZXIgZmxvYXRzIHdoZW4gaW5p
dGlhbC1sZXR0ZXIgaXMgc2V0LCBzbyBqdXN0IGFsd2F5cyB0cmVhdCBmaXJzdC1sZXR0ZXIgZmxv
YXRzIGFzIGRpcnR5LgorICAgIGlmIChvcmlnaW5hbEZsb2F0UmVjdC5zaXplKCkgPT0gbmV3U2l6
ZSAmJiAoZmxvYXRCb3hPbkNsZWFuTGluZS5zdHlsZSgpLnN0eWxlVHlwZSgpICE9IEZJUlNUX0xF
VFRFUiB8fCAhZmxvYXRCb3hPbkNsZWFuTGluZS5zdHlsZSgpLmluaXRpYWxMZXR0ZXJEcm9wKCkp
KQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRVbml0IGZsb2F0VG9wID0gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IG9yaWdpbmFsRmxvYXRSZWN0LnkoKSA6IG9yaWdpbmFsRmxvYXRS
ZWN0LngoKTsKKyAgICBMYXlvdXRVbml0IGZsb2F0SGVpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IHN0ZDo6bWF4KG9yaWdpbmFsRmxvYXRSZWN0LmhlaWdodCgpLCBuZXdTaXplLmhl
aWdodCgpKQorICAgICAgICA6IHN0ZDo6bWF4KG9yaWdpbmFsRmxvYXRSZWN0LndpZHRoKCksIG5l
d1NpemUud2lkdGgoKSk7CisgICAgZmxvYXRIZWlnaHQgPSBzdGQ6Om1pbihmbG9hdEhlaWdodCwg
TGF5b3V0VW5pdDo6bWF4KCkgLSBmbG9hdFRvcCk7CisgICAgY2xlYW5MaW5lLm1hcmtEaXJ0eSgp
OworICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKGNsZWFuTGluZS5saW5lQm90dG9tV2l0
aExlYWRpbmcoKSwgZmxvYXRUb3AgKyBmbG9hdEhlaWdodCwgJmNsZWFuTGluZSk7CisgICAgTGF5
b3V0UmVjdCBuZXdGbG9hdFJlY3QgPSBvcmlnaW5hbEZsb2F0UmVjdDsKKyAgICBuZXdGbG9hdFJl
Y3Quc2V0U2l6ZShuZXdTaXplKTsKKyAgICBtYXRjaGluZ0Zsb2F0V2l0aFJlY3QuYWRqdXN0UmVj
dChuZXdGbG9hdFJlY3QpOworICAgIGRpcnRpZWRCeUZsb2F0ID0gdHJ1ZTsKIH0KIAogUm9vdElu
bGluZUJveCogUmVuZGVyQmxvY2tGbG93OjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCiB7Ci0g
ICAgUm9vdElubGluZUJveCogY3VyciA9IDA7Ci0gICAgUm9vdElubGluZUJveCogbGFzdCA9IDA7
CisgICAgUm9vdElubGluZUJveCogY3VycmVudExpbmUgPSBudWxscHRyOworICAgIFJvb3RJbmxp
bmVCb3gqIGxhc3RMaW5lID0gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGVudGlyZSBm
bG9hdC1jaGVja2luZyBibG9jayBuZWVkcyB0byBiZSBicm9rZW4gaW50byBhIG5ldyBmdW5jdGlv
bi4KKyAgICBhdXRvJiBmbG9hdHMgPSBsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKTsKICAgICBib29s
IGRpcnRpZWRCeUZsb2F0ID0gZmFsc2U7CiAgICAgaWYgKCFsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlv
dXQoKSkgewogICAgICAgICAvLyBQYWdpbmF0ZSBhbGwgb2YgdGhlIGNsZWFuIGxpbmVzLgogICAg
ICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS5sYXlv
dXRTdGF0ZSgpLT5pc1BhZ2luYXRlZCgpOwogICAgICAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25E
ZWx0YSA9IDA7Ci0gICAgICAgIHNpemVfdCBmbG9hdEluZGV4ID0gMDsKLSAgICAgICAgZm9yIChj
dXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGlydHkoKTsgY3VyciA9IGN1
cnItPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgYXV0byBmbG9hdHNJdGVyYXRvciA9IGZsb2F0
cy5iZWdpbigpOworICAgICAgICBhdXRvIGVuZCA9IGZsb2F0cy5lbmQoKTsKKyAgICAgICAgZm9y
IChjdXJyZW50TGluZSA9IGZpcnN0Um9vdEJveCgpOyBjdXJyZW50TGluZSAmJiAhY3VycmVudExp
bmUtPmlzRGlydHkoKTsgY3VycmVudExpbmUgPSBjdXJyZW50TGluZS0+bmV4dFJvb3RCb3goKSkg
ewogICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgewotICAgICAgICAgICAgICAgIGlmIChsaW5l
V2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChjdXJyLCAwLCBsYXlvdXRTdGF0ZS5mbG93VGhy
ZWFkKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnItPm1hcmtEaXJ0eSgpOworICAgICAg
ICAgICAgICAgIGlmIChsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChjdXJyZW50TGlu
ZSwgMCwgbGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBj
dXJyZW50TGluZS0+bWFya0RpcnR5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYWdpbmF0aW9uRGVsdGEgLT0gY3Vyci0+
cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkRlbHRhIC09IGN1
cnJlbnRMaW5lLT5wYWdpbmF0aW9uU3RydXQoKTsKICAgICAgICAgICAgICAgICBib29sIG92ZXJm
bG93c1JlZ2lvbjsKLSAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0
aW9uKGN1cnIsIHBhZ2luYXRpb25EZWx0YSwgb3ZlcmZsb3dzUmVnaW9uLCBsYXlvdXRTdGF0ZS5m
bG93VGhyZWFkKCkpOworICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2lu
YXRpb24oY3VycmVudExpbmUsIHBhZ2luYXRpb25EZWx0YSwgb3ZlcmZsb3dzUmVnaW9uLCBsYXlv
dXRTdGF0ZS5mbG93VGhyZWFkKCkpOwogICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uRGVs
dGEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwgIWxheW91
dFN0YXRlLmZsb2F0cygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29u
dGFpbnNGbG9hdHMoKSB8fCAhZmxvYXRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IERvIGJldHRlciBldmVudHVhbGx5LiAgRm9yIG5vdyBpZiB3ZSBldmVy
IHNoaWZ0IGJlY2F1c2Ugb2YgcGFnaW5hdGlvbiBhbmQgZmxvYXRzIGFyZSBwcmVzZW50IGp1c3Qg
Z28gdG8gYSBmdWxsIGxheW91dC4KICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRl
Lm1hcmtGb3JGdWxsTGF5b3V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLnVw
ZGF0ZVJlcGFpbnRSYW5nZUZyb21Cb3goY3VyciwgcGFnaW5hdGlvbkRlbHRhKTsKLSAgICAgICAg
ICAgICAgICAgICAgY3Vyci0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihwYWdpbmF0aW9u
RGVsdGEpOworICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS51cGRhdGVSZXBhaW50UmFu
Z2VGcm9tQm94KGN1cnJlbnRMaW5lLCBwYWdpbmF0aW9uRGVsdGEpOworICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50TGluZS0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihwYWdpbmF0aW9u
RGVsdGEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3Rh
dGUuZmxvd1RocmVhZCgpKQotICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWdpb25Gb3JMaW5l
KGN1cnIpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWdpb25Gb3JMaW5lKGN1cnJlbnRM
aW5lKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gSWYgYSBuZXcgZmxvYXQgaGFz
IGJlZW4gaW5zZXJ0ZWQgYmVmb3JlIHRoaXMgbGluZSBvciBiZWZvcmUgaXRzIGxhc3Qga25vd24g
ZmxvYXQsIGp1c3QgZG8gYSBmdWxsIGxheW91dC4KLSAgICAgICAgICAgIGJvb2wgZW5jb3VudGVy
ZWROZXdGbG9hdCA9IGZhbHNlOwotICAgICAgICAgICAgY2hlY2tGbG9hdHNJbkNsZWFuTGluZShj
dXJyLCBsYXlvdXRTdGF0ZS5mbG9hdHMoKSwgZmxvYXRJbmRleCwgZW5jb3VudGVyZWROZXdGbG9h
dCwgZGlydGllZEJ5RmxvYXQpOwotICAgICAgICAgICAgaWYgKGVuY291bnRlcmVkTmV3RmxvYXQp
Ci0gICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUubWFya0ZvckZ1bGxMYXlvdXQoKTsKLQotICAg
ICAgICAgICAgaWYgKGRpcnRpZWRCeUZsb2F0IHx8IGxheW91dFN0YXRlLmlzRnVsbExheW91dCgp
KQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGF1dG8qIGNsZWFuTGlu
ZUZsb2F0cyA9IGN1cnJlbnRMaW5lLT5mbG9hdHNQdHIoKSkgeworICAgICAgICAgICAgICAgIC8v
IElmIGEgbmV3IGZsb2F0IGhhcyBiZWVuIGluc2VydGVkIGJlZm9yZSB0aGlzIGxpbmUgb3IgYmVm
b3JlIGl0cyBsYXN0IGtub3duIGZsb2F0LCBqdXN0IGRvIGEgZnVsbCBsYXlvdXQuCisgICAgICAg
ICAgICAgICAgYm9vbCBlbmNvdW50ZXJlZE5ld0Zsb2F0ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgZm9yIChhdXRvKiBmbG9hdEJveE9uQ2xlYW5MaW5lIDogKmNsZWFuTGluZUZsb2F0cykgewor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRzSXRlcmF0b3IgIT0gZW5kKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2hlY2tGbG9hdEluQ2xlYW5MaW5lKCpjdXJyZW50TGluZSwgKmZsb2F0
Qm94T25DbGVhbkxpbmUsICpmbG9hdHNJdGVyYXRvciwgZW5jb3VudGVyZWROZXdGbG9hdCwgZGly
dGllZEJ5RmxvYXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb3VudGVyZWROZXdGbG9h
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUubWFya0ZvckZ1bGxMYXlv
dXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICsrZmxvYXRzSXRlcmF0b3I7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChkaXJ0aWVkQnlGbG9hdCB8fCBlbmNvdW50ZXJlZE5l
d0Zsb2F0KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAvLyBDaGVjayBpZiBhIG5ldyBmbG9hdCBoYXMgYmVlbiBpbnNlcnRlZCBh
ZnRlciB0aGUgbGFzdCBrbm93biBmbG9hdC4KLSAgICAgICAgaWYgKCFjdXJyICYmIGZsb2F0SW5k
ZXggPCBsYXlvdXRTdGF0ZS5mbG9hdHMoKS5zaXplKCkpCisgICAgICAgIGlmICghY3VycmVudExp
bmUgJiYgZmxvYXRzSXRlcmF0b3IgIT0gZW5kKQogICAgICAgICAgICAgbGF5b3V0U3RhdGUubWFy
a0ZvckZ1bGxMYXlvdXQoKTsKICAgICB9CiAKICAgICBpZiAobGF5b3V0U3RhdGUuaXNGdWxsTGF5
b3V0KCkpIHsKICAgICAgICAgbV9saW5lQm94ZXMuZGVsZXRlTGluZUJveFRyZWUoKTsKLSAgICAg
ICAgY3VyciA9IDA7Ci0KKyAgICAgICAgY3VycmVudExpbmUgPSBudWxscHRyOwogICAgICAgICBB
U1NFUlQoIWZpcnN0Um9vdEJveCgpICYmICFsYXN0Um9vdEJveCgpKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoY3VycikgeworICAgICAgICBpZiAoY3VycmVudExpbmUpIHsKICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgYSBkaXJ0eSBsaW5lLgotICAgICAgICAgICAgaWYgKFJvb3RJbmxpbmVC
b3gqIHByZXZSb290Qm94ID0gY3Vyci0+cHJldlJvb3RCb3goKSkgeworICAgICAgICAgICAgaWYg
KFJvb3RJbmxpbmVCb3gqIHByZXZSb290Qm94ID0gY3VycmVudExpbmUtPnByZXZSb290Qm94KCkp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgcHJldmlvdXMgbGluZS4KLSAgICAgICAg
ICAgICAgICBpZiAoIWRpcnRpZWRCeUZsb2F0ICYmICFjdXJyLT5oYXNBbm9ueW1vdXNJbmxpbmVC
bG9jaygpICYmICghcHJldlJvb3RCb3gtPmVuZHNXaXRoQnJlYWsoKSB8fCAhcHJldlJvb3RCb3gt
PmxpbmVCcmVha09iaigpIHx8IChpczxSZW5kZXJUZXh0PigqcHJldlJvb3RCb3gtPmxpbmVCcmVh
a09iaigpKSAmJiBwcmV2Um9vdEJveC0+bGluZUJyZWFrUG9zKCkgPj0gZG93bmNhc3Q8UmVuZGVy
VGV4dD4oKnByZXZSb290Qm94LT5saW5lQnJlYWtPYmooKSkudGV4dExlbmd0aCgpKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIWRpcnRpZWRCeUZsb2F0ICYmICFjdXJyZW50TGluZS0+aGFzQW5v
bnltb3VzSW5saW5lQmxvY2soKSAmJiAoIXByZXZSb290Qm94LT5lbmRzV2l0aEJyZWFrKCkKKyAg
ICAgICAgICAgICAgICAgICAgfHwgIXByZXZSb290Qm94LT5saW5lQnJlYWtPYmooKQorICAgICAg
ICAgICAgICAgICAgICB8fCAoaXM8UmVuZGVyVGV4dD4oKnByZXZSb290Qm94LT5saW5lQnJlYWtP
YmooKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgcHJldlJvb3RCb3gtPmxpbmVCcmVha1Bvcygp
ID49IGRvd25jYXN0PFJlbmRlclRleHQ+KCpwcmV2Um9vdEJveC0+bGluZUJyZWFrT2JqKCkpLnRl
eHRMZW5ndGgoKSkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBsaW5l
IGRpZG4ndCBicmVhayBjbGVhbmx5IG9yIGJyb2tlIGF0IGEgbmV3bGluZQogICAgICAgICAgICAg
ICAgICAgICAvLyB0aGF0IGhhcyBiZWVuIGRlbGV0ZWQsIHNvIHRyZWF0IGl0IGFzIGRpcnR5IHRv
by4KLSAgICAgICAgICAgICAgICAgICAgY3VyciA9IHByZXZSb290Qm94OworICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50TGluZSA9IHByZXZSb290Qm94OwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGRpcnR5IGxp
bmVzLCB0aGVuIGxhc3QgaXMganVzdCB0aGUgbGFzdCByb290IGJveC4KLSAgICAgICAgbGFzdCA9
IGN1cnIgPyBjdXJyLT5wcmV2Um9vdEJveCgpIDogbGFzdFJvb3RCb3goKTsKKyAgICAgICAgbGFz
dExpbmUgPSBjdXJyZW50TGluZSA/IGN1cnJlbnRMaW5lLT5wcmV2Um9vdEJveCgpIDogbGFzdFJv
b3RCb3goKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBudW1DbGVhbkZsb2F0cyA9IDA7Ci0gICAg
aWYgKCFsYXlvdXRTdGF0ZS5mbG9hdHMoKS5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIWZsb2F0cy5p
c0VtcHR5KCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCBzYXZlZExvZ2ljYWxIZWlnaHQgPSBsb2dp
Y2FsSGVpZ2h0KCk7CiAgICAgICAgIC8vIFJlc3RvcmUgZmxvYXRzIGZyb20gY2xlYW4gbGluZXMu
CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBmaXJzdFJvb3RCb3goKTsKLSAgICAgICAg
d2hpbGUgKGxpbmUgIT0gY3VycikgeworICAgICAgICB3aGlsZSAobGluZSAhPSBjdXJyZW50TGlu
ZSkgewogICAgICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJCb3gqPiogY2xlYW5MaW5lRmxvYXRz
ID0gbGluZS0+ZmxvYXRzUHRyKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBj
bGVhbkxpbmVGbG9hdHMtPmJlZ2luKCksIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+ZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGZsb2F0aW5n
Qm94ID0gKml0OwotICAgICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdP
YmplY3QgPSBpbnNlcnRGbG9hdGluZ09iamVjdCgqZmxvYXRpbmdCb3gpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvKiBmbG9hdGluZ0JveCA9ICppdDsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byogZmxvYXRpbmdPYmplY3QgPSBpbnNlcnRGbG9hdGluZ09iamVjdCgqZmxvYXRpbmdCb3gpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighZmxv
YXRpbmdPYmplY3QtPm9yaWdpbmF0aW5nTGluZSgpKTsKICAgICAgICAgICAgICAgICAgICAgZmxv
YXRpbmdPYmplY3QtPnNldE9yaWdpbmF0aW5nTGluZShsaW5lKTsKICAgICAgICAgICAgICAgICAg
ICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsVG9wRm9yQ2hpbGQoKmZsb2F0aW5nQm94KSAtIG1h
cmdpbkJlZm9yZUZvckNoaWxkKCpmbG9hdGluZ0JveCkpOwogICAgICAgICAgICAgICAgICAgICBw
b3NpdGlvbk5ld0Zsb2F0cygpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoJmxheW91dFN0
YXRlLmZsb2F0cygpW251bUNsZWFuRmxvYXRzXS5vYmplY3QgPT0gZmxvYXRpbmdCb3gpOwotICAg
ICAgICAgICAgICAgICAgICBudW1DbGVhbkZsb2F0cysrOworICAgICAgICAgICAgICAgICAgICBm
bG9hdHMuc2V0TGFzdENsZWFuRmxvYXQoKmZsb2F0aW5nQm94KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKTsK
ICAgICAgICAgfQogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KHNhdmVkTG9naWNhbEhlaWdodCk7
CiAgICAgfQotICAgIGxheW91dFN0YXRlLnNldEZsb2F0SW5kZXgobnVtQ2xlYW5GbG9hdHMpOwog
Ci0gICAgbGF5b3V0U3RhdGUubGluZUluZm8oKS5zZXRGaXJzdExpbmUoIWxhc3QpOwotICAgIGxh
eW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCFsYXN0IHx8
IGxhc3QtPmVuZHNXaXRoQnJlYWsoKSk7CisgICAgbGF5b3V0U3RhdGUubGluZUluZm8oKS5zZXRG
aXJzdExpbmUoIWxhc3RMaW5lKTsKKyAgICBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLnNldFByZXZp
b3VzTGluZUJyb2tlQ2xlYW5seSghbGFzdExpbmUgfHwgbGFzdExpbmUtPmVuZHNXaXRoQnJlYWso
KSk7CiAKLSAgICBpZiAobGFzdCkgewotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxhc3QtPmxp
bmVCb3R0b21XaXRoTGVhZGluZygpKTsKLSAgICAgICAgSW5saW5lSXRlcmF0b3IgaXRlciA9IElu
bGluZUl0ZXJhdG9yKHRoaXMsIGxhc3QtPmxpbmVCcmVha09iaigpLCBsYXN0LT5saW5lQnJlYWtQ
b3MoKSk7CisgICAgaWYgKGxhc3RMaW5lKSB7CisgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobGFz
dExpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpKTsKKyAgICAgICAgSW5saW5lSXRlcmF0b3Ig
aXRlciA9IElubGluZUl0ZXJhdG9yKHRoaXMsIGxhc3RMaW5lLT5saW5lQnJlYWtPYmooKSwgbGFz
dExpbmUtPmxpbmVCcmVha1BvcygpKTsKICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oaXRl
ciwgbnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKGl0ZXIpKTsKLSAgICAgICAgcmVzb2x2ZXIuc2V0
U3RhdHVzKGxhc3QtPmxpbmVCcmVha0JpZGlTdGF0dXMoKSk7CisgICAgICAgIHJlc29sdmVyLnNl
dFN0YXR1cyhsYXN0TGluZS0+bGluZUJyZWFrQmlkaVN0YXR1cygpKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlKCkuZGlyZWN0aW9uKCk7CiAg
ICAgICAgIGlmIChzdHlsZSgpLnVuaWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0KQpAQCAtMTkzMiw0
NCArMTkzMSw1OCBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9ja0Zsb3c6OmRldGVybWluZVN0
YXJ0UG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdAogICAgICAgICBJbmxpbmVJdGVy
YXRvciBpdGVyID0gSW5saW5lSXRlcmF0b3IodGhpcywgYmlkaUZpcnN0U2tpcHBpbmdFbXB0eUlu
bGluZXMoKnRoaXMsICZyZXNvbHZlciksIDApOwogICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlv
bihpdGVyLCBudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMoaXRlcikpOwogICAgIH0KLSAgICByZXR1
cm4gY3VycjsKKyAgICByZXR1cm4gY3VycmVudExpbmU7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjpkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBS
b290SW5saW5lQm94KiBzdGFydExpbmUsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwg
QmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykKIHsKKyAgICBhdXRvIGl0ZXJhdG9yRm9y
Rmlyc3REaXJ0eUZsb2F0ID0gW10oTGluZUxheW91dFN0YXRlOjpGbG9hdExpc3QmIGZsb2F0cykg
eworICAgICAgICBhdXRvIGxhc3RDbGVhbkZsb2F0ID0gZmxvYXRzLmxhc3RDbGVhbkZsb2F0KCk7
CisgICAgICAgIGlmICghbGFzdENsZWFuRmxvYXQpCisgICAgICAgICAgICByZXR1cm4gZmxvYXRz
LmJlZ2luKCk7CisgICAgICAgIGF1dG8qIGxhc3RDbGVhbkZsb2F0V2l0aFJlY3QgPSBmbG9hdHMu
ZmxvYXRXaXRoUmVjdCgqbGFzdENsZWFuRmxvYXQpOworICAgICAgICBBU1NFUlQobGFzdENsZWFu
RmxvYXRXaXRoUmVjdCk7CisgICAgICAgIHJldHVybiArK2Zsb2F0cy5maW5kKCpsYXN0Q2xlYW5G
bG9hdFdpdGhSZWN0KTsKKyAgICB9OworCiAgICAgQVNTRVJUKCFsYXlvdXRTdGF0ZS5lbmRMaW5l
KCkpOwotICAgIHNpemVfdCBmbG9hdEluZGV4ID0gbGF5b3V0U3RhdGUuZmxvYXRJbmRleCgpOwot
ICAgIFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwotICAgIGZvciAoUm9vdElubGluZUJveCogY3Vy
ciA9IHN0YXJ0TGluZS0+bmV4dFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290
Qm94KCkpIHsKLSAgICAgICAgaWYgKCFjdXJyLT5pc0RpcnR5KCkpIHsKLSAgICAgICAgICAgIGJv
b2wgZW5jb3VudGVyZWROZXdGbG9hdCA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBkaXJ0aWVk
QnlGbG9hdCA9IGZhbHNlOwotICAgICAgICAgICAgY2hlY2tGbG9hdHNJbkNsZWFuTGluZShjdXJy
LCBsYXlvdXRTdGF0ZS5mbG9hdHMoKSwgZmxvYXRJbmRleCwgZW5jb3VudGVyZWROZXdGbG9hdCwg
ZGlydGllZEJ5RmxvYXQpOwotICAgICAgICAgICAgaWYgKGVuY291bnRlcmVkTmV3RmxvYXQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZmxvYXRzSXRlcmF0b3IgPSBpdGVyYXRv
ckZvckZpcnN0RGlydHlGbG9hdChsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKSk7CisgICAgUm9vdElu
bGluZUJveCogbGFzdExpbmUgPSBudWxscHRyOworICAgIGZvciAoUm9vdElubGluZUJveCogY3Vy
cmVudExpbmUgPSBzdGFydExpbmUtPm5leHRSb290Qm94KCk7IGN1cnJlbnRMaW5lOyBjdXJyZW50
TGluZSA9IGN1cnJlbnRMaW5lLT5uZXh0Um9vdEJveCgpKSB7CisgICAgICAgIGlmICghY3VycmVu
dExpbmUtPmlzRGlydHkoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGNsZWFuTGluZUZsb2F0
cyA9IGN1cnJlbnRMaW5lLT5mbG9hdHNQdHIoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgZW5j
b3VudGVyZWROZXdGbG9hdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJvb2wgZGlydGllZEJ5
RmxvYXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGZsb2F0Qm94T25DbGVh
bkxpbmUgOiAqY2xlYW5MaW5lRmxvYXRzKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChm
bG9hdHNJdGVyYXRvciAhPSBsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKS5lbmQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNoZWNrRmxvYXRJbkNsZWFuTGluZSgqY3VycmVudExpbmUsICpmbG9hdEJv
eE9uQ2xlYW5MaW5lLCAqZmxvYXRzSXRlcmF0b3IsIGVuY291bnRlcmVkTmV3RmxvYXQsIGRpcnRp
ZWRCeUZsb2F0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuY291bnRlcmVkTmV3RmxvYXQp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICsr
ZmxvYXRzSXRlcmF0b3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmIChjdXJyLT5pc0RpcnR5KCkpCi0gICAgICAgICAgICBsYXN0ID0gMDsK
LSAgICAgICAgZWxzZSBpZiAoIWxhc3QpCi0gICAgICAgICAgICBsYXN0ID0gY3VycjsKKyAgICAg
ICAgaWYgKGN1cnJlbnRMaW5lLT5pc0RpcnR5KCkpCisgICAgICAgICAgICBsYXN0TGluZSA9IG51
bGxwdHI7CisgICAgICAgIGVsc2UgaWYgKCFsYXN0TGluZSkKKyAgICAgICAgICAgIGxhc3RMaW5l
ID0gY3VycmVudExpbmU7CiAgICAgfQogCi0gICAgaWYgKCFsYXN0KQorICAgIGlmICghbGFzdExp
bmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHxsYXN0fCBpcyB0
aGUgZmlyc3QgbGluZSBpbiBhIHJ1biBvZiBjbGVhbiBsaW5lcyB0aGF0IGVuZHMgd2l0aCB0aGUg
bGFzdCBsaW5lCiAgICAgLy8gaW4gdGhlIGJsb2NrLgorICAgIFJvb3RJbmxpbmVCb3gqIHByZXZp
b3VzTGluZSA9IGxhc3RMaW5lLT5wcmV2Um9vdEJveCgpOworICAgIGNsZWFuTGluZVN0YXJ0ID0g
SW5saW5lSXRlcmF0b3IodGhpcywgcHJldmlvdXNMaW5lLT5saW5lQnJlYWtPYmooKSwgcHJldmlv
dXNMaW5lLT5saW5lQnJlYWtQb3MoKSk7CisgICAgY2xlYW5MaW5lQmlkaVN0YXR1cyA9IHByZXZp
b3VzTGluZS0+bGluZUJyZWFrQmlkaVN0YXR1cygpOworICAgIGxheW91dFN0YXRlLnNldEVuZExp
bmVMb2dpY2FsVG9wKHByZXZpb3VzTGluZS0+bGluZUJvdHRvbVdpdGhMZWFkaW5nKCkpOwogCi0g
ICAgUm9vdElubGluZUJveCogcHJldiA9IGxhc3QtPnByZXZSb290Qm94KCk7Ci0gICAgY2xlYW5M
aW5lU3RhcnQgPSBJbmxpbmVJdGVyYXRvcih0aGlzLCBwcmV2LT5saW5lQnJlYWtPYmooKSwgcHJl
di0+bGluZUJyZWFrUG9zKCkpOwotICAgIGNsZWFuTGluZUJpZGlTdGF0dXMgPSBwcmV2LT5saW5l
QnJlYWtCaWRpU3RhdHVzKCk7Ci0gICAgbGF5b3V0U3RhdGUuc2V0RW5kTGluZUxvZ2ljYWxUb3Ao
cHJldi0+bGluZUJvdHRvbVdpdGhMZWFkaW5nKCkpOwotCi0gICAgZm9yIChSb290SW5saW5lQm94
KiBsaW5lID0gbGFzdDsgbGluZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpCi0gICAgICAg
IGxpbmUtPmV4dHJhY3RMaW5lKCk7IC8vIERpc2Nvbm5lY3QgYWxsIGxpbmUgYm94ZXMgZnJvbSB0
aGVpciByZW5kZXIgb2JqZWN0cyB3aGlsZSBwcmVzZXJ2aW5nCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZWlyIGNvbm5lY3Rpb25zIHRvIG9uZSBhbm90aGVyLgotCi0gICAgbGF5
b3V0U3RhdGUuc2V0RW5kTGluZShsYXN0KTsKKyAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUg
PSBsYXN0TGluZTsgbGluZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAg
Ly8gRGlzY29ubmVjdCBhbGwgbGluZSBib3hlcyBmcm9tIHRoZWlyIHJlbmRlciBvYmplY3RzIHdo
aWxlIHByZXNlcnZpbmcgdGhlaXIgY29ubmVjdGlvbnMgdG8gb25lIGFub3RoZXIuCisgICAgICAg
IGxpbmUtPmV4dHJhY3RMaW5lKCk7CisgICAgfQorICAgIGxheW91dFN0YXRlLnNldEVuZExpbmUo
bGFzdExpbmUpOwogfQogCiBib29sIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tQYWdpbmF0aW9uQW5k
RmxvYXRzQXRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0U3RhdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRTdGF0ZS5oCmluZGV4IDAyMjllM2E5
MDc1NzRkYzNiNTE3NTVhMjZhZGRiNzA2ZTgwNDkwZjUuLjhhMTFiNDQ3NGEyYWUwM2ZlY2Y3OTI0
YjRjN2Y3YTgxNDA2YWVkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9s
aW5lL0xpbmVMYXlvdXRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRTdGF0ZS5oCkBAIC0zNiwzMyArMzYsNzMgQEAKIAogI2luY2x1ZGUgIkxheW91
dFJlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBGbG9hdFdpdGhSZWN0
IHsKLSAgICBGbG9hdFdpdGhSZWN0KFJlbmRlckJveCYgZikKLSAgICAgICAgOiBvYmplY3QoZikK
LSAgICAgICAgLCByZWN0KExheW91dFJlY3QoZi54KCkgLSBmLm1hcmdpbkxlZnQoKSwgZi55KCkg
LSBmLm1hcmdpblRvcCgpLCBmLndpZHRoKCkgKyBmLmhvcml6b250YWxNYXJnaW5FeHRlbnQoKSwg
Zi5oZWlnaHQoKSArIGYudmVydGljYWxNYXJnaW5FeHRlbnQoKSkpCi0gICAgICAgICwgZXZlckhh
ZExheW91dChmLmV2ZXJIYWRMYXlvdXQoKSkKK2NsYXNzIEZsb2F0V2l0aFJlY3QgOiBwdWJsaWMg
UmVmQ291bnRlZDxGbG9hdFdpdGhSZWN0PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGbG9hdFdpdGhSZWN0PiBjcmVhdGUoUmVuZGVyQm94
JiByZW5kZXJlcikKICAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZsb2F0V2l0
aFJlY3QocmVuZGVyZXIpKTsKICAgICB9CisgICAgCisgICAgUmVuZGVyQm94JiByZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KKyAgICBMYXlvdXRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBib29sIGV2ZXJIYWRMYXlvdXQoKSBjb25zdCB7IHJl
dHVybiBtX2V2ZXJIYWRMYXlvdXQ7IH0KKworICAgIHZvaWQgYWRqdXN0UmVjdChjb25zdCBMYXlv
dXRSZWN0JiByZWN0KSB7IG1fcmVjdCA9IHJlY3Q7IH0KIAotICAgIFJlbmRlckJveCYgb2JqZWN0
OwotICAgIExheW91dFJlY3QgcmVjdDsKLSAgICBib29sIGV2ZXJIYWRMYXlvdXQ7Citwcml2YXRl
OgorICAgIEZsb2F0V2l0aFJlY3QoKSA9IGRlZmF1bHQ7CisgICAgCisgICAgRmxvYXRXaXRoUmVj
dChSZW5kZXJCb3gmIHJlbmRlcmVyKQorICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCisg
ICAgICAgICwgbV9yZWN0KExheW91dFJlY3QocmVuZGVyZXIueCgpIC0gcmVuZGVyZXIubWFyZ2lu
TGVmdCgpLCByZW5kZXJlci55KCkgLSByZW5kZXJlci5tYXJnaW5Ub3AoKSwgcmVuZGVyZXIud2lk
dGgoKSArIHJlbmRlcmVyLmhvcml6b250YWxNYXJnaW5FeHRlbnQoKSwgcmVuZGVyZXIuaGVpZ2h0
KCkgKyByZW5kZXJlci52ZXJ0aWNhbE1hcmdpbkV4dGVudCgpKSkKKyAgICAgICAgLCBtX2V2ZXJI
YWRMYXlvdXQocmVuZGVyZXIuZXZlckhhZExheW91dCgpKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgUmVuZGVyQm94JiBtX3JlbmRlcmVyOworICAgIExheW91dFJlY3QgbV9yZWN0OworICAgIGJv
b2wgbV9ldmVySGFkTGF5b3V0IHsgZmFsc2UgfTsKIH07CiAKIC8vIExpa2UgTGF5b3V0U3RhdGUg
Zm9yIGxheW91dCgpLCBMaW5lTGF5b3V0U3RhdGUga2VlcHMgdHJhY2sgb2YgZ2xvYmFsIGluZm9y
bWF0aW9uCiAvLyBkdXJpbmcgYW4gZW50aXJlIGxpbmVib3ggdHJlZSBsYXlvdXQgcGFzcyAoYWth
IGxheW91dElubGluZUNoaWxkcmVuKS4KIGNsYXNzIExpbmVMYXlvdXRTdGF0ZSB7CiBwdWJsaWM6
CisgICAgY2xhc3MgRmxvYXRMaXN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgYXBwZW5k
KFJlZjxGbG9hdFdpdGhSZWN0PiYmIGZsb2F0V2l0aFJlY3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fZmxvYXRzLmFkZChmbG9hdFdpdGhSZWN0LmNvcHlSZWYoKSk7CisgICAgICAgICAgICBt
X2Zsb2F0V2l0aFJlY3RNYXAuYWRkKCZmbG9hdFdpdGhSZWN0LT5yZW5kZXJlcigpLCBXVEZNb3Zl
KGZsb2F0V2l0aFJlY3QpKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldExhc3RGbG9hdChG
bG9hdGluZ09iamVjdCogbGFzdEZsb2F0KSB7IG1fbGFzdEZsb2F0ID0gbGFzdEZsb2F0OyB9Cisg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RG
bG9hdDsgfQorCisgICAgICAgIHZvaWQgc2V0TGFzdENsZWFuRmxvYXQoUmVuZGVyQm94JiBmbG9h
dEJveCkgeyBtX2xhc3RDbGVhbkZsb2F0ID0gJmZsb2F0Qm94OyB9CisgICAgICAgIFJlbmRlckJv
eCogbGFzdENsZWFuRmxvYXQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDbGVhbkZsb2F0OyB9CisK
KyAgICAgICAgRmxvYXRXaXRoUmVjdCogZmxvYXRXaXRoUmVjdChSZW5kZXJCb3gmIGZsb2F0Qm94
KSBjb25zdCB7IHJldHVybiBtX2Zsb2F0V2l0aFJlY3RNYXAuZ2V0KCZmbG9hdEJveCk7IH0KKwor
ICAgICAgICB1c2luZyBJdGVyYXRvciA9IExpc3RIYXNoU2V0PFJlZjxGbG9hdFdpdGhSZWN0Pj46
Oml0ZXJhdG9yOworICAgICAgICBJdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fZmxvYXRzLmJl
Z2luKCk7IH0KKyAgICAgICAgSXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9mbG9hdHMuZW5kKCk7
IH0KKyAgICAgICAgSXRlcmF0b3IgZmluZChGbG9hdFdpdGhSZWN0JiBmbG9hdEJveFdpdGhSZWN0
KSB7IHJldHVybiBtX2Zsb2F0cy5maW5kKGZsb2F0Qm94V2l0aFJlY3QpOyB9CisgICAgICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvYXRzLmlzRW1wdHkoKTsgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgTGlzdEhhc2hTZXQ8UmVmPEZsb2F0V2l0aFJlY3Q+PiBtX2Zsb2F0
czsKKyAgICAgICAgSGFzaE1hcDxSZW5kZXJCb3gqLCBSZWY8RmxvYXRXaXRoUmVjdD4+IG1fZmxv
YXRXaXRoUmVjdE1hcDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIG1fbGFzdEZsb2F0IHsgbnVs
bHB0ciB9OworICAgICAgICBSZW5kZXJCb3gqIG1fbGFzdENsZWFuRmxvYXQgeyBudWxscHRyIH07
CisgICAgfTsKKwogICAgIExpbmVMYXlvdXRTdGF0ZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJs
b2NrRmxvdywgYm9vbCBmdWxsTGF5b3V0LCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwg
TGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20sIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dU
aHJlYWQpCi0gICAgICAgIDogbV9lbmRMaW5lTG9naWNhbFRvcCgwKQotICAgICAgICAsIG1fZW5k
TGluZSgwKQotICAgICAgICAsIG1fbGFzdEZsb2F0KDApCi0gICAgICAgICwgbV9mbG9hdEluZGV4
KDApCi0gICAgICAgICwgbV9hZGp1c3RlZExvZ2ljYWxMaW5lVG9wKDApCi0gICAgICAgICwgbV9m
bG93VGhyZWFkKGZsb3dUaHJlYWQpCisgICAgICAgIDogbV9mbG93VGhyZWFkKGZsb3dUaHJlYWQp
CiAgICAgICAgICwgbV9yZXBhaW50TG9naWNhbFRvcChyZXBhaW50TG9naWNhbFRvcCkKICAgICAg
ICAgLCBtX3JlcGFpbnRMb2dpY2FsQm90dG9tKHJlcGFpbnRMb2dpY2FsQm90dG9tKQogICAgICAg
ICAsIG1fbWFyZ2luSW5mbyhibG9ja0Zsb3csIGJsb2NrRmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCksIGJsb2NrRmxvdy5ib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSArIGJsb2NrRmxvdy5zY3Jv
bGxiYXJMb2dpY2FsSGVpZ2h0KCkpCkBAIC04MiwxNCArMTIyLDYgQEAgcHVibGljOgogICAgIFJv
b3RJbmxpbmVCb3gqIGVuZExpbmUoKSBjb25zdCB7IHJldHVybiBtX2VuZExpbmU7IH0KICAgICB2
b2lkIHNldEVuZExpbmUoUm9vdElubGluZUJveCogbGluZSkgeyBtX2VuZExpbmUgPSBsaW5lOyB9
CiAKLSAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
RmxvYXQ7IH0KLSAgICB2b2lkIHNldExhc3RGbG9hdChGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0
KSB7IG1fbGFzdEZsb2F0ID0gbGFzdEZsb2F0OyB9Ci0KLSAgICBWZWN0b3I8RmxvYXRXaXRoUmVj
dD4mIGZsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRzOyB9Ci0KLSAgICB1bnNpZ25lZCBmbG9hdElu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9mbG9hdEluZGV4OyB9Ci0gICAgdm9pZCBzZXRGbG9hdElu
ZGV4KHVuc2lnbmVkIGZsb2F0SW5kZXgpIHsgbV9mbG9hdEluZGV4ID0gZmxvYXRJbmRleDsgfQot
CiAgICAgTGF5b3V0VW5pdCBhZGp1c3RlZExvZ2ljYWxMaW5lVG9wKCkgY29uc3QgeyByZXR1cm4g
bV9hZGp1c3RlZExvZ2ljYWxMaW5lVG9wOyB9CiAgICAgdm9pZCBzZXRBZGp1c3RlZExvZ2ljYWxM
aW5lVG9wKExheW91dFVuaXQgdmFsdWUpIHsgbV9hZGp1c3RlZExvZ2ljYWxMaW5lVG9wID0gdmFs
dWU7IH0KIApAQCAtMTI0LDE5ICsxNTYsMTggQEAgcHVibGljOgogICAgIExheW91dFVuaXQmIHBy
ZXZGbG9hdEJvdHRvbUZyb21Bbm9ueW1vdXNJbmxpbmVCbG9jaygpIHsgcmV0dXJuIG1fcHJldkZs
b2F0Qm90dG9tRnJvbUFub255bW91c0lubGluZUJsb2NrOyB9CiAgICAgTGF5b3V0VW5pdCYgbWF4
RmxvYXRCb3R0b21Gcm9tQW5vbnltb3VzSW5saW5lQmxvY2soKSB7IHJldHVybiBtX21heEZsb2F0
Qm90dG9tRnJvbUFub255bW91c0lubGluZUJsb2NrOyB9CiAKKyAgICBGbG9hdExpc3QmIGZsb2F0
TGlzdCgpIHsgcmV0dXJuIG1fZmxvYXRMaXN0OyB9CisKIHByaXZhdGU6CiAgICAgTGluZUluZm8g
bV9saW5lSW5mbzsKICAgICBMYXlvdXRVbml0IG1fZW5kTGluZUxvZ2ljYWxUb3A7Ci0gICAgUm9v
dElubGluZUJveCogbV9lbmRMaW5lOwotCi0gICAgRmxvYXRpbmdPYmplY3QqIG1fbGFzdEZsb2F0
OwotICAgIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiBtX2Zsb2F0czsKLSAgICB1bnNpZ25lZCBtX2Zs
b2F0SW5kZXg7CisgICAgUm9vdElubGluZUJveCogbV9lbmRMaW5lIHsgbnVsbHB0ciB9OwogCiAg
ICAgTGF5b3V0VW5pdCBtX2FkanVzdGVkTG9naWNhbExpbmVUb3A7CiAKLSAgICBSZW5kZXJGbG93
VGhyZWFkKiBtX2Zsb3dUaHJlYWQ7CisgICAgUmVuZGVyRmxvd1RocmVhZCogbV9mbG93VGhyZWFk
IHsgbnVsbHB0ciB9OwogCisgICAgRmxvYXRMaXN0IG1fZmxvYXRMaXN0OwogICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBiZSBhIHJhbmdlIG9iamVjdCBpbnN0ZWFkIG9mIHR3byBpbnRzPwogICAg
IExheW91dFVuaXQmIG1fcmVwYWludExvZ2ljYWxUb3A7CiAgICAgTGF5b3V0VW5pdCYgbV9yZXBh
aW50TG9naWNhbEJvdHRvbTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291278</attachid>
            <date>2016-10-11 11:02:35 -0700</date>
            <delta_ts>2016-10-12 09:48:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163286-20161011105916.patch</filename>
            <type>text/plain</type>
            <size>34970</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2ODY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFjNzI4ZjIwOWFlZGEy
NmRhNGMyZTczZjc4ZTViNjkyZDI0YTcxYi4uOWNjNGU3NGYwM2QwYWI4ZjRkNTk1ZDNiYTU3Njhh
ZGQ2NDM3NzMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE2LTEwLTExICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgTGluZUxheW91
dFN0YXRlJ3MgZmxvYXQgYm94IGhhbmRsaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMjg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXZSBrZWVwIHRyYWNrIG9mIGZsb2F0IGJveGVz
IGJvdGggcGVyIGxpbmUgKFJvb3RJbmxpbmVCb3g6Om1fZmxvYXRzKSBhbmQKKyAgICAgICAgcGVy
IGZsb3cgYmxvY2sgKExpbmVMYXlvdXRTdGF0ZTo6bV9mbG9hdHMpIGR1cmluZyBsYXlvdXQuCisg
ICAgICAgIEFzIHdlIGxheSBvdXQgdGhlIGxpbmVzIGFuZCBpdGVyYXRlIHRocm91Z2ggUm9vdElu
bGluZUJveDo6bV9mbG9hdHMsIHdlCisgICAgICAgIGluY3JlbWVudCBMaW5lTGF5b3V0U3RhdGU6
Om1fZmxvYXRJbmRleC4gVGhpcyBMaW5lTGF5b3V0U3RhdGU6Om1fZmxvYXRJbmRleCBpcworICAg
ICAgICBsYXRlciB1c2VkIHRvIGZpbmQgdGhlIG1hdGNoaW5nIGZsb2F0IGJveCBpbiB0aGUgcGVy
LWJsb2NrLWZsb3cgZmxvYXQgbGlzdC4KKyAgICAgICAgVGhpcyBsb2dpYyB3b3JrcyBmaW5lIGFz
IGxvbmcgYXMgdGhlIGxpc3RzIGFuZCB0aGUgaW5kZXggbWFuaXB1bGF0aW9uIGFyZSB0aWdodGx5
IGNvZGVkLgorICAgICAgICBIb3dldmVyIGR1ZSB0byB0aGUgY29tcGxleGl0eSBvZiB0aGUgbGlu
ZS9mbG9hdCBsYXlvdXQgY29kZSwgdGhpcyBpcyBubyBsb25nZXIgdGhlIGNhc2UuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyBmbG9hdCBib3ggaGFuZGxpbmcgbW9yZSBzZWN1cmUgYnkgY2hh
bmdpbmcgdGhpcyBpbmRleCBiYXNlZCBzZXR1cAorICAgICAgICB0byBhIGxpc3QgaXRlcmF0b3Iu
IEl0IGhlbHBzIHRvIGVsaW1pbmF0ZSBwb3RlbnRpYWwgdmVjdG9yIG92ZXJmbG93IGlzc3Vlcy4K
KworICAgICAgICBMaW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlzdCAobmV3IGNsYXNzKSBrZWVwcyB0
cmFjayBvZiBhbGwgdGhlIGZsb2F0cyBmb3IgdGhlIGJsb2NrIGZsb3cuCisgICAgICAgIEl0IGdy
b3VwcyB0aGUgZmxvYXQgYm94IHJlbGF0ZWQgZnVuY3Rpb25zL21lbWJlcnMgYW5kIHByb3ZpZGVz
IGFuIGl0ZXJhdG9yIGludGVyZmFjZSB0byBlbnN1cmUgc2FmZXIKKyAgICAgICAgc3luY2luZyBi
ZXR3ZWVuIHRoaXMgYW5kIHRoZSBsaW5lIGJhc2VkIGZsb2F0cy4KKworICAgICAgICBObyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YXBwZW5kRmxvYXRpbmdPYmplY3RUb0xh
c3RMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGFpbnREaXJ0eUZsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxpbmtUb0VuZExpbmVJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dExpbmVCb3hlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRmxvYXRJbkNsZWFuTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmRldGVybWluZVN0YXJ0UG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpkZXRlcm1pbmVFbmRQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnJlcGFpbnREaXJ0
eUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNo
ZWNrRmxvYXRzSW5DbGVhbkxpbmUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRXaXRoUmVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0V2l0aFJlY3Q6OnJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0V2l0aFJlY3Q6OnJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRXaXRoUmVjdDo6ZXZlckhhZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFdpdGhS
ZWN0OjphZGp1c3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0V2l0aFJlY3Q6OkZsb2F0
V2l0aFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRlOjpGbG9hdExpc3Q6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlzdDo6
c2V0TGFzdEZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6RmxvYXRM
aXN0OjpsYXN0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRlOjpGbG9h
dExpc3Q6OnNldExhc3RDbGVhbkZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRT
dGF0ZTo6RmxvYXRMaXN0OjpsYXN0Q2xlYW5GbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0U3RhdGU6OkZsb2F0TGlzdDo6ZmxvYXRXaXRoUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlzdDo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
TGluZUxheW91dFN0YXRlOjpGbG9hdExpc3Q6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0U3RhdGU6OkZsb2F0TGlzdDo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5
b3V0U3RhdGU6OkZsb2F0TGlzdDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5
b3V0U3RhdGU6OkxpbmVMYXlvdXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
U3RhdGU6OmZsb2F0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6Omxh
c3RGbG9hdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6OnNl
dExhc3RGbG9hdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6
OmZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3RhdGU6OmZs
b2F0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRlOjpz
ZXRGbG9hdEluZGV4KTogRGVsZXRlZC4KKwogMjAxNi0xMC0wNiAgSm9obiBXaWxhbmRlciAgPHdp
bGFuZGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgUmVzb3VyY2UgTG9hZCBTdGF0aXN0
aWNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXggODBl
ZDIwNDI4YTMxZTYzNzUzYjBmMTFhYTgxOGNmZDdlODI4ZjRlZS4uMDJkMjc3N2MwNGQ1ODIzYWQw
N2RkNjAyMmM3ZmZiNTQyMmUyNzliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuaApAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEZsb2F0V2l0aFJlY3Q7CiBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7CiBjbGFz
cyBMaW5lQnJlYWtlcjsKIGNsYXNzIExpbmVJbmZvOwpAQCAtNDEsNyArNDIsNiBAQCBjbGFzcyBS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ7CiBjbGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dDsKIGNsYXNzIFJlbmRlclJ1YnlSdW47CiAKLXN0cnVjdCBGbG9hdFdpdGhSZWN0Owogc3RydWN0
IFdvcmRNZWFzdXJlbWVudDsKIAogdGVtcGxhdGUgPGNsYXNzIFJ1bj4gY2xhc3MgQmlkaVJ1bkxp
c3Q7CkBAIC01NjYsNyArNTY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZmxvYXQmIGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VS
dW4sIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1hcCwgVmVy
dGljYWxQb3NpdGlvbkNhY2hlJiwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIHZvaWQgY29tcHV0
ZUJsb2NrRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiwgQmlkaVJ1bios
IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVydGljYWxQb3NpdGlvbkNhY2hl
Jik7CiAgICAgQmlkaVJ1biogaGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1bkxpc3Q8QmlkaVJ1
bj4mLCBCaWRpQ29udGV4dCopOwotICAgIHZvaWQgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RM
aW5lKEZsb2F0aW5nT2JqZWN0Kik7CisgICAgdm9pZCBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFz
dExpbmUoRmxvYXRpbmdPYmplY3QmKTsKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGxheW91
dElubGluZUNoaWxkcmVuKCkKICAgICBSb290SW5saW5lQm94KiBjcmVhdGVMaW5lQm94ZXNGcm9t
QmlkaVJ1bnModW5zaWduZWQgYmlkaUxldmVsLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGNvbnN0
IElubGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiwgVmVydGljYWxQb3NpdGlvbkNhY2hlJiwg
QmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgV29yZE1lYXN1cmVtZW50cyYpOwogICAgIHZvaWQg
bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmLCBib29sIGhhc0lubGluZUNoaWxk
KTsKQEAgLTU3NCw4ICs1NzQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbGF5b3V0UnVuc0FuZEZs
b2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3Qg
SW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBjbGVhbkxp
bmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcyk7CiAgICAg
dm9pZCByZWF0dGFjaENsZWFuTGluZUZsb2F0cyhSb290SW5saW5lQm94JiBjbGVhbkxpbmUsIExh
eW91dFVuaXQgZGVsdGEsIGJvb2wgaXNGaXJzdENsZWFuTGluZSk7CiAgICAgdm9pZCBsaW5rVG9F
bmRMaW5lSWZOZWVkZWQoTGluZUxheW91dFN0YXRlJik7Ci0gICAgc3RhdGljIHZvaWQgcmVwYWlu
dERpcnR5RmxvYXRzKFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzKTsKLSAgICB2b2lkIGNo
ZWNrRmxvYXRzSW5DbGVhbkxpbmUoUm9vdElubGluZUJveCosIFZlY3RvcjxGbG9hdFdpdGhSZWN0
PiYsIHNpemVfdCYgZmxvYXRJbmRleCwgYm9vbCYgZW5jb3VudGVyZWROZXdGbG9hdCwgYm9vbCYg
ZGlydGllZEJ5RmxvYXQpOworICAgIHZvaWQgY2hlY2tGbG9hdEluQ2xlYW5MaW5lKFJvb3RJbmxp
bmVCb3gmIGNsZWFuTGluZSwgUmVuZGVyQm94JiBmbG9hdEJveE9uQ2xlYW5MaW5lLCBGbG9hdFdp
dGhSZWN0JiBtYXRjaGluZ0Zsb2F0V2l0aFJlY3QsCisgICAgICAgIGJvb2wmIGVuY291bnRlcmVk
TmV3RmxvYXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0KTsKICAgICBSb290SW5saW5lQm94KiBkZXRl
cm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYp
OwogICAgIHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgUm9vdElu
bGluZUJveCogc3RhcnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgQmlkaVN0
YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CiAgICAgYm9vbCBjaGVja1BhZ2luYXRpb25BbmRG
bG9hdHNBdEVuZExpbmUoTGluZUxheW91dFN0YXRlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IGJhZjE3YTljZmI3NTY3
YjYwYmUyODExNDUxMTI0ODU0MGI4YTNiY2UuLjcyYTA3MWI1MzM0ODkxYWJkZTBiNTYyODYxNGJk
NGY1YzY2MzNhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCkBAIC0xMTAwLDExICsxMTAwLDExIEBAIGlubGluZSBCaWRpUnVu
KiBSZW5kZXJCbG9ja0Zsb3c6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKEJpZGlSdW5MaXN0PEJpZGlS
dW4+JiBiaWRpCiAgICAgcmV0dXJuIHRyYWlsaW5nU3BhY2VSdW47CiB9CiAKLXZvaWQgUmVuZGVy
QmxvY2tGbG93OjphcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoRmxvYXRpbmdPYmplY3Qq
IGZsb2F0aW5nT2JqZWN0KQordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZEZsb2F0aW5nT2Jq
ZWN0VG9MYXN0TGluZShGbG9hdGluZ09iamVjdCYgZmxvYXRpbmdPYmplY3QpCiB7Ci0gICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGlu
Z0xpbmUoKSk7Ci0gICAgZmxvYXRpbmdPYmplY3QtPnNldE9yaWdpbmF0aW5nTGluZShsYXN0Um9v
dEJveCgpKTsKLSAgICBsYXN0Um9vdEJveCgpLT5hcHBlbmRGbG9hdChmbG9hdGluZ09iamVjdC0+
cmVuZGVyZXIoKSk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWZsb2F0
aW5nT2JqZWN0Lm9yaWdpbmF0aW5nTGluZSgpKTsKKyAgICBmbG9hdGluZ09iamVjdC5zZXRPcmln
aW5hdGluZ0xpbmUobGFzdFJvb3RCb3goKSk7CisgICAgbGFzdFJvb3RCb3goKS0+YXBwZW5kRmxv
YXQoZmxvYXRpbmdPYmplY3QucmVuZGVyZXIoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBu
b3RpZnlSZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2
ZXIsIFJlbmRlck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBzdGFydE9iamVjdCkKQEAgLTEy
NDksNiArMTI0OSwyMCBAQCBzdGF0aWMgdm9pZCBkZWxldGVMaW5lUmFuZ2UoTGluZUxheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSwgUm9vdElubGluZUJveCogc3RhcnRMaQogICAgIH0KIH0KIAorc3Rh
dGljIHZvaWQgcmVwYWludERpcnR5RmxvYXRzKExpbmVMYXlvdXRTdGF0ZTo6RmxvYXRMaXN0JiBm
bG9hdHMpCit7CisgICAgLy8gRmxvYXRzIHRoYXQgZGlkIG5vdCBoYXZlIGxheW91dCBkaWQgbm90
IHJlcGFpbnQgd2hlbiB3ZSBsYWlkIHRoZW0gb3V0LiBUaGV5IHdvdWxkIGhhdmUKKyAgICAvLyBw
YWludGVkIGJ5IG5vdyBpZiB0aGV5IGhhZCBtb3ZlZCwgYnV0IGlmIHRoZXkgc3RheWVkIGF0ICgw
LCAwKSwgdGhleSBzdGlsbCBuZWVkIHRvIGJlCisgICAgLy8gcGFpbnRlZC4KKyAgICBmb3IgKGF1
dG8mIGZsb2F0Qm94IDogZmxvYXRzKSB7CisgICAgICAgIGlmIChmbG9hdEJveC0+ZXZlckhhZExh
eW91dCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8mIGJveCA9IGZsb2F0
Qm94LT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIWJveC54KCkgJiYgIWJveC55KCkgJiYgYm94
LmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQorICAgICAgICAgICAgYm94LnJlcGFpbnQo
KTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRz
KExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saW5lQ2hpbGQpCiB7CiAg
ICAgLy8gV2Ugd2FudCB0byBza2lwIGFoZWFkIHRvIHRoZSBmaXJzdCBkaXJ0eSBsaW5lCkBAIC0x
Mjc5LDcgKzEyOTMsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVuc0FuZEZsb2F0
cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhcwogICAgIH0KIAogICAgIGlm
IChjb250YWluc0Zsb2F0cygpKQotICAgICAgICBsYXlvdXRTdGF0ZS5zZXRMYXN0RmxvYXQobV9m
bG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKS5nZXQoKSk7CisgICAgICAgIGxheW91dFN0YXRl
LmZsb2F0TGlzdCgpLnNldExhc3RGbG9hdChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgp
LmdldCgpKTsKIAogICAgIC8vIFdlIGFsc28gZmluZCB0aGUgZmlyc3QgY2xlYW4gbGluZSBhbmQg
ZXh0cmFjdCB0aGVzZSBsaW5lcy4gIFdlIHdpbGwgYWRkIHRoZW0gYmFjawogICAgIC8vIGlmIHdl
IGRldGVybWluZSB0aGF0IHdlJ3JlIGFibGUgdG8gc3luY2hyb25pemUgYWZ0ZXIgaGFuZGxpbmcg
YWxsIG91ciBkaXJ0eSBsaW5lcy4KQEAgLTEzMTIsNyArMTMyNiw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUs
IGJvb2wgaGFzCiAKICAgICBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShsYXlvdXRTdGF0ZSwg
cmVzb2x2ZXIsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBjb25zZWN1dGl2
ZUh5cGhlbmF0ZWRMaW5lcyk7CiAgICAgbGlua1RvRW5kTGluZUlmTmVlZGVkKGxheW91dFN0YXRl
KTsKLSAgICByZXBhaW50RGlydHlGbG9hdHMobGF5b3V0U3RhdGUuZmxvYXRzKCkpOworICAgIHJl
cGFpbnREaXJ0eUZsb2F0cyhsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKSk7CiB9CiAKIC8vIEJlZm9y
ZSByZXN0YXJ0aW5nIHRoZSBsYXlvdXQgbG9vcCB3aXRoIGEgbmV3IGxvZ2ljYWxIZWlnaHQsIHJl
bW92ZSBhbGwgZmxvYXRzIHRoYXQgd2VyZSBhZGRlZCBhbmQgcmVzZXQgdGhlIHJlc29sdmVyLgpA
QCAtMTQ3OSwyMiArMTQ5MywyMSBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVuc0Fu
ZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSQogICAgICAgICAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LmJlZ2luKCk7CiAgICAgICAgICAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
OwotICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8Rmxv
YXRpbmdPYmplY3QmLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqbGF5b3V0U3RhdGUu
bGFzdEZsb2F0KCkpOworICAgICAgICAgICAgaWYgKGF1dG8qIGxhc3RGbG9hdCA9IGxheW91dFN0
YXRlLmZsb2F0TGlzdCgpLmxhc3RGbG9hdCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBsYXN0
RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8RmxvYXRpbmdPYmplY3QmLCBG
bG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPigqbGFzdEZsb2F0KTsKICAgICAgICAgICAgICAg
ICBBU1NFUlQobGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5kKTsKICAgICAgICAgICAgICAgICArK2xh
c3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAgICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0b3I7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBpdC0+Z2V0KCk7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKGYpOwotICAgICAgICAgICAgICAg
IEFTU0VSVCgmZi0+cmVuZGVyZXIoKSA9PSAmbGF5b3V0U3RhdGUuZmxvYXRzKClbbGF5b3V0U3Rh
dGUuZmxvYXRJbmRleCgpXS5vYmplY3QpOworICAgICAgICAgICAgICAgIGF1dG8mIGZsb2F0aW5n
T2JqZWN0ID0gKml0OworICAgICAgICAgICAgICAgIGFwcGVuZEZsb2F0aW5nT2JqZWN0VG9MYXN0
TGluZSgqZmxvYXRpbmdPYmplY3QpOwogICAgICAgICAgICAgICAgIC8vIElmIGEgZmxvYXQncyBn
ZW9tZXRyeSBoYXMgY2hhbmdlZCwgZ2l2ZSB1cCBvbiBzeW5jaW5nIHdpdGggY2xlYW4gbGluZXMu
Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZsb2F0cygpW2xheW91dFN0YXRlLmZs
b2F0SW5kZXgoKV0ucmVjdCAhPSBmLT5mcmFtZVJlY3QoKSkKKyAgICAgICAgICAgICAgICBhdXRv
KiBmbG9hdFdpdGhSZWN0ID0gbGF5b3V0U3RhdGUuZmxvYXRMaXN0KCkuZmxvYXRXaXRoUmVjdChm
bG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFmbG9hdFdp
dGhSZWN0IHx8IGZsb2F0V2l0aFJlY3QtPnJlY3QoKSAhPSBmbG9hdGluZ09iamVjdC0+ZnJhbWVS
ZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUuc2V0RmxvYXRJbmRleChsYXlvdXRTdGF0ZS5m
bG9hdEluZGV4KCkgKyAxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxheW91dFN0YXRl
LnNldExhc3RGbG9hdCghZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmpl
Y3RTZXQubGFzdCgpLmdldCgpIDogbnVsbHB0cik7CisgICAgICAgICAgICBsYXlvdXRTdGF0ZS5m
bG9hdExpc3QoKS5zZXRMYXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZs
b2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQoKSA6IG51bGxwdHIpOwogICAgICAgICB9CiAKICAg
ICAgICAgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUucmVzZXQoKTsKQEAgLTE2NDEsMzAg
KzE2NTQsMTUgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxpbmtUb0VuZExpbmVJZk5lZWRlZChM
aW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQogICAgICAgICBjb25zdCBGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAg
ICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOwogICAgICAgICBhdXRvIGVu
ZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFz
dEZsb2F0KCkpIHsKLSAgICAgICAgICAgIGF1dG8gbGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9hdGlu
Z09iamVjdFNldC5maW5kPEZsb2F0aW5nT2JqZWN0JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNs
YXRvcj4oKmxheW91dFN0YXRlLmxhc3RGbG9hdCgpKTsKKyAgICAgICAgaWYgKGF1dG8qIGxhc3RG
bG9hdCA9IGxheW91dFN0YXRlLmZsb2F0TGlzdCgpLmxhc3RGbG9hdCgpKSB7CisgICAgICAgICAg
ICBhdXRvIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxGbG9hdGlu
Z09iamVjdCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpsYXN0RmxvYXQpOwogICAg
ICAgICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0ZXJhdG9yICE9IGVuZCk7CiAgICAgICAgICAgICAr
K2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsK
ICAgICAgICAgfQogICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
YXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKGl0LT5nZXQoKSk7Ci0gICAgICAgIGxheW91
dFN0YXRlLnNldExhc3RGbG9hdCghZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxvYXRp
bmdPYmplY3RTZXQubGFzdCgpLmdldCgpIDogbnVsbHB0cik7Ci0gICAgfQotfQotCi12b2lkIFJl
bmRlckJsb2NrRmxvdzo6cmVwYWludERpcnR5RmxvYXRzKFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYg
ZmxvYXRzKQotewotICAgIHNpemVfdCBmbG9hdENvdW50ID0gZmxvYXRzLnNpemUoKTsKLSAgICAv
LyBGbG9hdHMgdGhhdCBkaWQgbm90IGhhdmUgbGF5b3V0IGRpZCBub3QgcmVwYWludCB3aGVuIHdl
IGxhaWQgdGhlbSBvdXQuIFRoZXkgd291bGQgaGF2ZQotICAgIC8vIHBhaW50ZWQgYnkgbm93IGlm
IHRoZXkgaGFkIG1vdmVkLCBidXQgaWYgdGhleSBzdGF5ZWQgYXQgKDAsIDApLCB0aGV5IHN0aWxs
IG5lZWQgdG8gYmUKLSAgICAvLyBwYWludGVkLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZmxvYXRDb3VudDsgKytpKSB7Ci0gICAgICAgIGlmICghZmxvYXRzW2ldLmV2ZXJIYWRMYXlvdXQp
IHsKLSAgICAgICAgICAgIFJlbmRlckJveCYgYm94ID0gZmxvYXRzW2ldLm9iamVjdDsKLSAgICAg
ICAgICAgIGlmICghYm94LngoKSAmJiAhYm94LnkoKSAmJiBib3guY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgYm94LnJlcGFpbnQoKTsKLSAgICAgICAgfQor
ICAgICAgICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKCoqaXQpOworICAgICAg
ICBsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKS5zZXRMYXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0U2V0
LmlzRW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQoKSA6IG51bGxwdHIpOwog
ICAgIH0KIH0KIApAQCAtMTcyOSw3ICsxNzI3LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6Omxh
eW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnQK
ICAgICAgICAgICAgICAgICBpZiAoYm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAg
ICAgICAgICAgICAgICBib3guY29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRPYmpl
Y3QoYm94KTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChib3guaXNGbG9hdGluZygpKQotICAg
ICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5mbG9hdHMoKS5hcHBlbmQoRmxvYXRXaXRoUmVj
dChib3gpKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUuZmxvYXRMaXN0KCkuYXBw
ZW5kKEZsb2F0V2l0aFJlY3Q6OmNyZWF0ZShib3gpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlm
IChpc0Z1bGxMYXlvdXQgfHwgYm94Lm5lZWRzTGF5b3V0KCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gUmVwbGFjZWQgZWxlbWVudC4KICAgICAgICAgICAgICAgICAgICAgYm94LmRpcnR5TGlu
ZUJveGVzKGlzRnVsbExheW91dCk7CkBAIC0xNzg1LDE0NSArMTc4MywxNDYgQEAgdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OmxheW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91
dFVuaXQmIHJlcGFpbnQKICAgICAgICAgY2hlY2tMaW5lc0ZvclRleHRPdmVyZmxvdygpOwogfQog
Ci12b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGbG9hdHNJbkNsZWFuTGluZShSb290SW5saW5l
Qm94KiBsaW5lLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgc2l6ZV90JiBmbG9hdElu
ZGV4LCBib29sJiBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBib29sJiBkaXJ0aWVkQnlGbG9hdCkKK3Zv
aWQgUmVuZGVyQmxvY2tGbG93OjpjaGVja0Zsb2F0SW5DbGVhbkxpbmUoUm9vdElubGluZUJveCYg
Y2xlYW5MaW5lLCBSZW5kZXJCb3gmIGZsb2F0Qm94T25DbGVhbkxpbmUsIEZsb2F0V2l0aFJlY3Qm
IG1hdGNoaW5nRmxvYXRXaXRoUmVjdCwKKyAgICBib29sJiBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBi
b29sJiBkaXJ0aWVkQnlGbG9hdCkKIHsKLSAgICBWZWN0b3I8UmVuZGVyQm94Kj4qIGNsZWFuTGlu
ZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpOwotICAgIGlmICghY2xlYW5MaW5lRmxvYXRzKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFmbG9hdHMuc2l6ZSgpKSB7CisgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWZsb2F0Qm94T25DbGVhbkxpbmUuc3R5bGUo
KS5kZWxldGlvbkhhc0JlZ3VuKCkpOworICAgIGlmICgmbWF0Y2hpbmdGbG9hdFdpdGhSZWN0LnJl
bmRlcmVyKCkgIT0gJmZsb2F0Qm94T25DbGVhbkxpbmUpIHsKICAgICAgICAgZW5jb3VudGVyZWRO
ZXdGbG9hdCA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBmb3IgKGF1dG8g
aXQgPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCksIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+ZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZW5kZXJCb3gqIGZsb2F0aW5nQm94ID0g
Kml0OwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighZmxvYXRpbmdC
b3gtPnN0eWxlKCkuZGVsZXRpb25IYXNCZWd1bigpKTsKLSAgICAgICAgZmxvYXRpbmdCb3gtPmxh
eW91dElmTmVlZGVkKCk7Ci0gICAgICAgIExheW91dFNpemUgbmV3U2l6ZShmbG9hdGluZ0JveC0+
d2lkdGgoKSArIGZsb2F0aW5nQm94LT5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCksIGZsb2F0aW5n
Qm94LT5oZWlnaHQoKSArIGZsb2F0aW5nQm94LT52ZXJ0aWNhbE1hcmdpbkV4dGVudCgpKTsKLSAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZmxvYXRJbmRleCA8IGZsb2F0
cy5zaXplKCkpOwotICAgICAgICBpZiAoJmZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QgIT0gZmxv
YXRpbmdCb3gpIHsKLSAgICAgICAgICAgIGVuY291bnRlcmVkTmV3RmxvYXQgPSB0cnVlOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgZmxvYXRCb3hPbkNsZWFuTGluZS5sYXlv
dXRJZk5lZWRlZCgpOworICAgIExheW91dFJlY3Qgb3JpZ2luYWxGbG9hdFJlY3QgPSBtYXRjaGlu
Z0Zsb2F0V2l0aFJlY3QucmVjdCgpOworICAgIExheW91dFNpemUgbmV3U2l6ZSgKKyAgICAgICAg
ZmxvYXRCb3hPbkNsZWFuTGluZS53aWR0aCgpICsgZmxvYXRCb3hPbkNsZWFuTGluZS5ob3Jpem9u
dGFsTWFyZ2luRXh0ZW50KCksCisgICAgICAgIGZsb2F0Qm94T25DbGVhbkxpbmUuaGVpZ2h0KCkg
KyBmbG9hdEJveE9uQ2xlYW5MaW5lLnZlcnRpY2FsTWFyZ2luRXh0ZW50KCkpOwogICAgIAotICAg
ICAgICAvLyBXZSBoYXZlIHRvIHJlc2V0IHRoZSBjYXAtaGVpZ2h0IGFsaWdubWVudCBkb25lIGJ5
IHRoZSBmaXJzdC1sZXR0ZXIgZmxvYXRzIHdoZW4gaW5pdGlhbC1sZXR0ZXIgaXMgc2V0LCBzbyBq
dXN0IGFsd2F5cyB0cmVhdCBmaXJzdC1sZXR0ZXIgZmxvYXRzCi0gICAgICAgIC8vIGFzIGRpcnR5
LgotICAgICAgICBpZiAoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3Quc2l6ZSgpICE9IG5ld1NpemUg
fHwgKGZsb2F0aW5nQm94LT5zdHlsZSgpLnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUiAmJiBm
bG9hdGluZ0JveC0+c3R5bGUoKS5pbml0aWFsTGV0dGVyRHJvcCgpID4gMCkpIHsKLSAgICAgICAg
ICAgIExheW91dFVuaXQgZmxvYXRUb3AgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmxv
YXRzW2Zsb2F0SW5kZXhdLnJlY3QueSgpIDogZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QueCgpOwot
ICAgICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdEhlaWdodCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBzdGQ6Om1heChmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC5oZWlnaHQoKSwgbmV3U2l6
ZS5oZWlnaHQoKSkgOiBzdGQ6Om1heChmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC53aWR0aCgpLCBu
ZXdTaXplLndpZHRoKCkpOwotICAgICAgICAgICAgZmxvYXRIZWlnaHQgPSBzdGQ6Om1pbihmbG9h
dEhlaWdodCwgTGF5b3V0VW5pdDo6bWF4KCkgLSBmbG9hdFRvcCk7Ci0gICAgICAgICAgICBsaW5l
LT5tYXJrRGlydHkoKTsKLSAgICAgICAgICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKGxp
bmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpLCBmbG9hdFRvcCArIGZsb2F0SGVpZ2h0LCBsaW5l
KTsKLSAgICAgICAgICAgIGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LnNldFNpemUobmV3U2l6ZSk7
Ci0gICAgICAgICAgICBkaXJ0aWVkQnlGbG9hdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
ZmxvYXRJbmRleCsrOwotICAgIH0KKyAgICAvLyBXZSBoYXZlIHRvIHJlc2V0IHRoZSBjYXAtaGVp
Z2h0IGFsaWdubWVudCBkb25lIGJ5IHRoZSBmaXJzdC1sZXR0ZXIgZmxvYXRzIHdoZW4gaW5pdGlh
bC1sZXR0ZXIgaXMgc2V0LCBzbyBqdXN0IGFsd2F5cyB0cmVhdCBmaXJzdC1sZXR0ZXIgZmxvYXRz
IGFzIGRpcnR5LgorICAgIGlmIChvcmlnaW5hbEZsb2F0UmVjdC5zaXplKCkgPT0gbmV3U2l6ZSAm
JiAoZmxvYXRCb3hPbkNsZWFuTGluZS5zdHlsZSgpLnN0eWxlVHlwZSgpICE9IEZJUlNUX0xFVFRF
UiB8fCAhZmxvYXRCb3hPbkNsZWFuTGluZS5zdHlsZSgpLmluaXRpYWxMZXR0ZXJEcm9wKCkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRVbml0IGZsb2F0VG9wID0gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IG9yaWdpbmFsRmxvYXRSZWN0LnkoKSA6IG9yaWdpbmFsRmxvYXRSZWN0
LngoKTsKKyAgICBMYXlvdXRVbml0IGZsb2F0SGVpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IHN0ZDo6bWF4KG9yaWdpbmFsRmxvYXRSZWN0LmhlaWdodCgpLCBuZXdTaXplLmhlaWdo
dCgpKQorICAgICAgICA6IHN0ZDo6bWF4KG9yaWdpbmFsRmxvYXRSZWN0LndpZHRoKCksIG5ld1Np
emUud2lkdGgoKSk7CisgICAgZmxvYXRIZWlnaHQgPSBzdGQ6Om1pbihmbG9hdEhlaWdodCwgTGF5
b3V0VW5pdDo6bWF4KCkgLSBmbG9hdFRvcCk7CisgICAgY2xlYW5MaW5lLm1hcmtEaXJ0eSgpOwor
ICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKGNsZWFuTGluZS5saW5lQm90dG9tV2l0aExl
YWRpbmcoKSwgZmxvYXRUb3AgKyBmbG9hdEhlaWdodCwgJmNsZWFuTGluZSk7CisgICAgTGF5b3V0
UmVjdCBuZXdGbG9hdFJlY3QgPSBvcmlnaW5hbEZsb2F0UmVjdDsKKyAgICBuZXdGbG9hdFJlY3Qu
c2V0U2l6ZShuZXdTaXplKTsKKyAgICBtYXRjaGluZ0Zsb2F0V2l0aFJlY3QuYWRqdXN0UmVjdChu
ZXdGbG9hdFJlY3QpOworICAgIGRpcnRpZWRCeUZsb2F0ID0gdHJ1ZTsKIH0KIAogUm9vdElubGlu
ZUJveCogUmVuZGVyQmxvY2tGbG93OjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCiB7Ci0gICAg
Um9vdElubGluZUJveCogY3VyciA9IDA7Ci0gICAgUm9vdElubGluZUJveCogbGFzdCA9IDA7Cisg
ICAgUm9vdElubGluZUJveCogY3VycmVudExpbmUgPSBudWxscHRyOworICAgIFJvb3RJbmxpbmVC
b3gqIGxhc3RMaW5lID0gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGVudGlyZSBmbG9h
dC1jaGVja2luZyBibG9jayBuZWVkcyB0byBiZSBicm9rZW4gaW50byBhIG5ldyBmdW5jdGlvbi4K
KyAgICBhdXRvJiBmbG9hdHMgPSBsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKTsKICAgICBib29sIGRp
cnRpZWRCeUZsb2F0ID0gZmFsc2U7CiAgICAgaWYgKCFsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlvdXQo
KSkgewogICAgICAgICAvLyBQYWdpbmF0ZSBhbGwgb2YgdGhlIGNsZWFuIGxpbmVzLgogICAgICAg
ICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS5sYXlvdXRT
dGF0ZSgpLT5pc1BhZ2luYXRlZCgpOwogICAgICAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25EZWx0
YSA9IDA7Ci0gICAgICAgIHNpemVfdCBmbG9hdEluZGV4ID0gMDsKLSAgICAgICAgZm9yIChjdXJy
ID0gZmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGlydHkoKTsgY3VyciA9IGN1cnIt
Pm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgYXV0byBmbG9hdHNJdGVyYXRvciA9IGZsb2F0cy5i
ZWdpbigpOworICAgICAgICBhdXRvIGVuZCA9IGZsb2F0cy5lbmQoKTsKKyAgICAgICAgZm9yIChj
dXJyZW50TGluZSA9IGZpcnN0Um9vdEJveCgpOyBjdXJyZW50TGluZSAmJiAhY3VycmVudExpbmUt
PmlzRGlydHkoKTsgY3VycmVudExpbmUgPSBjdXJyZW50TGluZS0+bmV4dFJvb3RCb3goKSkgewog
ICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgewotICAgICAgICAgICAgICAgIGlmIChsaW5lV2lk
dGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChjdXJyLCAwLCBsYXlvdXRTdGF0ZS5mbG93VGhyZWFk
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnItPm1hcmtEaXJ0eSgpOworICAgICAgICAg
ICAgICAgIGlmIChsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChjdXJyZW50TGluZSwg
MCwgbGF5b3V0U3RhdGUuZmxvd1RocmVhZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50TGluZS0+bWFya0RpcnR5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYWdpbmF0aW9uRGVsdGEgLT0gY3Vyci0+cGFn
aW5hdGlvblN0cnV0KCk7CisgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkRlbHRhIC09IGN1cnJl
bnRMaW5lLT5wYWdpbmF0aW9uU3RydXQoKTsKICAgICAgICAgICAgICAgICBib29sIG92ZXJmbG93
c1JlZ2lvbjsKLSAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9u
KGN1cnIsIHBhZ2luYXRpb25EZWx0YSwgb3ZlcmZsb3dzUmVnaW9uLCBsYXlvdXRTdGF0ZS5mbG93
VGhyZWFkKCkpOworICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRp
b24oY3VycmVudExpbmUsIHBhZ2luYXRpb25EZWx0YSwgb3ZlcmZsb3dzUmVnaW9uLCBsYXlvdXRT
dGF0ZS5mbG93VGhyZWFkKCkpOwogICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uRGVsdGEp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwgIWxheW91dFN0
YXRlLmZsb2F0cygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFp
bnNGbG9hdHMoKSB8fCAhZmxvYXRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IERvIGJldHRlciBldmVudHVhbGx5LiAgRm9yIG5vdyBpZiB3ZSBldmVyIHNo
aWZ0IGJlY2F1c2Ugb2YgcGFnaW5hdGlvbiBhbmQgZmxvYXRzIGFyZSBwcmVzZW50IGp1c3QgZ28g
dG8gYSBmdWxsIGxheW91dC4KICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLm1h
cmtGb3JGdWxsTGF5b3V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLnVwZGF0
ZVJlcGFpbnRSYW5nZUZyb21Cb3goY3VyciwgcGFnaW5hdGlvbkRlbHRhKTsKLSAgICAgICAgICAg
ICAgICAgICAgY3Vyci0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihwYWdpbmF0aW9uRGVs
dGEpOworICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS51cGRhdGVSZXBhaW50UmFuZ2VG
cm9tQm94KGN1cnJlbnRMaW5lLCBwYWdpbmF0aW9uRGVsdGEpOworICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50TGluZS0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihwYWdpbmF0aW9uRGVs
dGEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUu
Zmxvd1RocmVhZCgpKQotICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWdpb25Gb3JMaW5lKGN1
cnIpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWdpb25Gb3JMaW5lKGN1cnJlbnRMaW5l
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gSWYgYSBuZXcgZmxvYXQgaGFzIGJl
ZW4gaW5zZXJ0ZWQgYmVmb3JlIHRoaXMgbGluZSBvciBiZWZvcmUgaXRzIGxhc3Qga25vd24gZmxv
YXQsIGp1c3QgZG8gYSBmdWxsIGxheW91dC4KLSAgICAgICAgICAgIGJvb2wgZW5jb3VudGVyZWRO
ZXdGbG9hdCA9IGZhbHNlOwotICAgICAgICAgICAgY2hlY2tGbG9hdHNJbkNsZWFuTGluZShjdXJy
LCBsYXlvdXRTdGF0ZS5mbG9hdHMoKSwgZmxvYXRJbmRleCwgZW5jb3VudGVyZWROZXdGbG9hdCwg
ZGlydGllZEJ5RmxvYXQpOwotICAgICAgICAgICAgaWYgKGVuY291bnRlcmVkTmV3RmxvYXQpCi0g
ICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUubWFya0ZvckZ1bGxMYXlvdXQoKTsKLQotICAgICAg
ICAgICAgaWYgKGRpcnRpZWRCeUZsb2F0IHx8IGxheW91dFN0YXRlLmlzRnVsbExheW91dCgpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGF1dG8qIGNsZWFuTGluZUZs
b2F0cyA9IGN1cnJlbnRMaW5lLT5mbG9hdHNQdHIoKSkgeworICAgICAgICAgICAgICAgIC8vIElm
IGEgbmV3IGZsb2F0IGhhcyBiZWVuIGluc2VydGVkIGJlZm9yZSB0aGlzIGxpbmUgb3IgYmVmb3Jl
IGl0cyBsYXN0IGtub3duIGZsb2F0LCBqdXN0IGRvIGEgZnVsbCBsYXlvdXQuCisgICAgICAgICAg
ICAgICAgYm9vbCBlbmNvdW50ZXJlZE5ld0Zsb2F0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
Zm9yIChhdXRvKiBmbG9hdEJveE9uQ2xlYW5MaW5lIDogKmNsZWFuTGluZUZsb2F0cykgeworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRzSXRlcmF0b3IgIT0gZW5kKTsKKyAgICAgICAg
ICAgICAgICAgICAgY2hlY2tGbG9hdEluQ2xlYW5MaW5lKCpjdXJyZW50TGluZSwgKmZsb2F0Qm94
T25DbGVhbkxpbmUsICpmbG9hdHNJdGVyYXRvciwgZW5jb3VudGVyZWROZXdGbG9hdCwgZGlydGll
ZEJ5RmxvYXQpOworICAgICAgICAgICAgICAgICAgICArK2Zsb2F0c0l0ZXJhdG9yOworICAgICAg
ICAgICAgICAgICAgICBpZiAoZmxvYXRzSXRlcmF0b3IgPT0gZW5kIHx8IGVuY291bnRlcmVkTmV3
RmxvYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLm1hcmtGb3JGdWxs
TGF5b3V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGlydGllZEJ5
RmxvYXQgfHwgZW5jb3VudGVyZWROZXdGbG9hdCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8gQ2hlY2sgaWYgYSBuZXcgZmxv
YXQgaGFzIGJlZW4gaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGxhc3Qga25vd24gZmxvYXQuCi0gICAgICAg
IGlmICghY3VyciAmJiBmbG9hdEluZGV4IDwgbGF5b3V0U3RhdGUuZmxvYXRzKCkuc2l6ZSgpKQor
ICAgICAgICBpZiAoIWN1cnJlbnRMaW5lICYmIGZsb2F0c0l0ZXJhdG9yICE9IGVuZCkKICAgICAg
ICAgICAgIGxheW91dFN0YXRlLm1hcmtGb3JGdWxsTGF5b3V0KCk7CiAgICAgfQogCiAgICAgaWYg
KGxheW91dFN0YXRlLmlzRnVsbExheW91dCgpKSB7CiAgICAgICAgIG1fbGluZUJveGVzLmRlbGV0
ZUxpbmVCb3hUcmVlKCk7Ci0gICAgICAgIGN1cnIgPSAwOwotCisgICAgICAgIGN1cnJlbnRMaW5l
ID0gbnVsbHB0cjsKICAgICAgICAgQVNTRVJUKCFmaXJzdFJvb3RCb3goKSAmJiAhbGFzdFJvb3RC
b3goKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGN1cnIpIHsKKyAgICAgICAgaWYgKGN1
cnJlbnRMaW5lKSB7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgZGlydHkgbGluZS4KLSAgICAg
ICAgICAgIGlmIChSb290SW5saW5lQm94KiBwcmV2Um9vdEJveCA9IGN1cnItPnByZXZSb290Qm94
KCkpIHsKKyAgICAgICAgICAgIGlmIChSb290SW5saW5lQm94KiBwcmV2Um9vdEJveCA9IGN1cnJl
bnRMaW5lLT5wcmV2Um9vdEJveCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHBy
ZXZpb3VzIGxpbmUuCi0gICAgICAgICAgICAgICAgaWYgKCFkaXJ0aWVkQnlGbG9hdCAmJiAhY3Vy
ci0+aGFzQW5vbnltb3VzSW5saW5lQmxvY2soKSAmJiAoIXByZXZSb290Qm94LT5lbmRzV2l0aEJy
ZWFrKCkgfHwgIXByZXZSb290Qm94LT5saW5lQnJlYWtPYmooKSB8fCAoaXM8UmVuZGVyVGV4dD4o
KnByZXZSb290Qm94LT5saW5lQnJlYWtPYmooKSkgJiYgcHJldlJvb3RCb3gtPmxpbmVCcmVha1Bv
cygpID49IGRvd25jYXN0PFJlbmRlclRleHQ+KCpwcmV2Um9vdEJveC0+bGluZUJyZWFrT2JqKCkp
LnRleHRMZW5ndGgoKSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFkaXJ0aWVkQnlGbG9hdCAm
JiAhY3VycmVudExpbmUtPmhhc0Fub255bW91c0lubGluZUJsb2NrKCkgJiYgKCFwcmV2Um9vdEJv
eC0+ZW5kc1dpdGhCcmVhaygpCisgICAgICAgICAgICAgICAgICAgIHx8ICFwcmV2Um9vdEJveC0+
bGluZUJyZWFrT2JqKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKGlzPFJlbmRlclRleHQ+KCpw
cmV2Um9vdEJveC0+bGluZUJyZWFrT2JqKCkpCisgICAgICAgICAgICAgICAgICAgICYmIHByZXZS
b290Qm94LT5saW5lQnJlYWtQb3MoKSA+PSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcHJldlJvb3RC
b3gtPmxpbmVCcmVha09iaigpKS50ZXh0TGVuZ3RoKCkpKSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBUaGUgcHJldmlvdXMgbGluZSBkaWRuJ3QgYnJlYWsgY2xlYW5seSBvciBicm9rZSBhdCBh
IG5ld2xpbmUKICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBoYXMgYmVlbiBkZWxldGVkLCBz
byB0cmVhdCBpdCBhcyBkaXJ0eSB0b28uCi0gICAgICAgICAgICAgICAgICAgIGN1cnIgPSBwcmV2
Um9vdEJveDsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudExpbmUgPSBwcmV2Um9vdEJveDsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBubyBkaXJ0eSBsaW5lcywgdGhlbiBsYXN0IGlzIGp1c3QgdGhlIGxhc3Qgcm9v
dCBib3guCi0gICAgICAgIGxhc3QgPSBjdXJyID8gY3Vyci0+cHJldlJvb3RCb3goKSA6IGxhc3RS
b290Qm94KCk7CisgICAgICAgIGxhc3RMaW5lID0gY3VycmVudExpbmUgPyBjdXJyZW50TGluZS0+
cHJldlJvb3RCb3goKSA6IGxhc3RSb290Qm94KCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbnVt
Q2xlYW5GbG9hdHMgPSAwOwotICAgIGlmICghbGF5b3V0U3RhdGUuZmxvYXRzKCkuaXNFbXB0eSgp
KSB7CisgICAgaWYgKCFmbG9hdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIExheW91dFVuaXQgc2F2
ZWRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAgICAgICAvLyBSZXN0b3JlIGZs
b2F0cyBmcm9tIGNsZWFuIGxpbmVzLgogICAgICAgICBSb290SW5saW5lQm94KiBsaW5lID0gZmly
c3RSb290Qm94KCk7Ci0gICAgICAgIHdoaWxlIChsaW5lICE9IGN1cnIpIHsKKyAgICAgICAgd2hp
bGUgKGxpbmUgIT0gY3VycmVudExpbmUpIHsKICAgICAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVy
Qm94Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpKSB7CiAgICAgICAgICAg
ICAgICAgZm9yIChhdXRvIGl0ID0gY2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpLCBlbmQgPSBjbGVh
bkxpbmVGbG9hdHMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyQm94KiBmbG9hdGluZ0JveCA9ICppdDsKLSAgICAgICAgICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gaW5zZXJ0RmxvYXRpbmdPYmplY3QoKmZsb2F0
aW5nQm94KTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byogZmxvYXRpbmdCb3ggPSAqaXQ7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8qIGZsb2F0aW5nT2JqZWN0ID0gaW5zZXJ0RmxvYXRpbmdP
YmplY3QoKmZsb2F0aW5nQm94KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIWZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRPcmlnaW5hdGluZ0xpbmUobGlu
ZSk7CiAgICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbFRvcEZvckNo
aWxkKCpmbG9hdGluZ0JveCkgLSBtYXJnaW5CZWZvcmVGb3JDaGlsZCgqZmxvYXRpbmdCb3gpKTsK
ICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKLSAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCZsYXlvdXRTdGF0ZS5mbG9hdHMoKVtudW1DbGVhbkZsb2F0c10ub2JqZWN0
ID09IGZsb2F0aW5nQm94KTsKLSAgICAgICAgICAgICAgICAgICAgbnVtQ2xlYW5GbG9hdHMrKzsK
KyAgICAgICAgICAgICAgICAgICAgZmxvYXRzLnNldExhc3RDbGVhbkZsb2F0KCpmbG9hdGluZ0Jv
eCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGluZSA9
IGxpbmUtPm5leHRSb290Qm94KCk7CiAgICAgICAgIH0KICAgICAgICAgc2V0TG9naWNhbEhlaWdo
dChzYXZlZExvZ2ljYWxIZWlnaHQpOwogICAgIH0KLSAgICBsYXlvdXRTdGF0ZS5zZXRGbG9hdElu
ZGV4KG51bUNsZWFuRmxvYXRzKTsKIAotICAgIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0Rmly
c3RMaW5lKCFsYXN0KTsKLSAgICBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLnNldFByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSghbGFzdCB8fCBsYXN0LT5lbmRzV2l0aEJyZWFrKCkpOworICAgIGxheW91
dFN0YXRlLmxpbmVJbmZvKCkuc2V0Rmlyc3RMaW5lKCFsYXN0TGluZSk7CisgICAgbGF5b3V0U3Rh
dGUubGluZUluZm8oKS5zZXRQcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoIWxhc3RMaW5lIHx8IGxh
c3RMaW5lLT5lbmRzV2l0aEJyZWFrKCkpOwogCi0gICAgaWYgKGxhc3QpIHsKLSAgICAgICAgc2V0
TG9naWNhbEhlaWdodChsYXN0LT5saW5lQm90dG9tV2l0aExlYWRpbmcoKSk7Ci0gICAgICAgIElu
bGluZUl0ZXJhdG9yIGl0ZXIgPSBJbmxpbmVJdGVyYXRvcih0aGlzLCBsYXN0LT5saW5lQnJlYWtP
YmooKSwgbGFzdC0+bGluZUJyZWFrUG9zKCkpOworICAgIGlmIChsYXN0TGluZSkgeworICAgICAg
ICBzZXRMb2dpY2FsSGVpZ2h0KGxhc3RMaW5lLT5saW5lQm90dG9tV2l0aExlYWRpbmcoKSk7Cisg
ICAgICAgIElubGluZUl0ZXJhdG9yIGl0ZXIgPSBJbmxpbmVJdGVyYXRvcih0aGlzLCBsYXN0TGlu
ZS0+bGluZUJyZWFrT2JqKCksIGxhc3RMaW5lLT5saW5lQnJlYWtQb3MoKSk7CiAgICAgICAgIHJl
c29sdmVyLnNldFBvc2l0aW9uKGl0ZXIsIG51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7
Ci0gICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhsYXN0LT5saW5lQnJlYWtCaWRpU3RhdHVzKCkp
OworICAgICAgICByZXNvbHZlci5zZXRTdGF0dXMobGFzdExpbmUtPmxpbmVCcmVha0JpZGlTdGF0
dXMoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBz
dHlsZSgpLmRpcmVjdGlvbigpOwogICAgICAgICBpZiAoc3R5bGUoKS51bmljb2RlQmlkaSgpID09
IFBsYWludGV4dCkKQEAgLTE5MzIsNDQgKzE5MzEsNTkgQEAgUm9vdElubGluZUJveCogUmVuZGVy
QmxvY2tGbG93OjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0
U3QKICAgICAgICAgSW5saW5lSXRlcmF0b3IgaXRlciA9IElubGluZUl0ZXJhdG9yKHRoaXMsIGJp
ZGlGaXJzdFNraXBwaW5nRW1wdHlJbmxpbmVzKCp0aGlzLCAmcmVzb2x2ZXIpLCAwKTsKICAgICAg
ICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oaXRlciwgbnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKGl0
ZXIpKTsKICAgICB9Ci0gICAgcmV0dXJuIGN1cnI7CisgICAgcmV0dXJuIGN1cnJlbnRMaW5lOwog
fQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSwgUm9vdElubGluZUJveCogc3RhcnRMaW5lLCBJbmxpbmVJdGVy
YXRvciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMpCiB7
CisgICAgYXV0byBpdGVyYXRvckZvckZpcnN0RGlydHlGbG9hdCA9IFtdKExpbmVMYXlvdXRTdGF0
ZTo6RmxvYXRMaXN0JiBmbG9hdHMpIHsKKyAgICAgICAgYXV0byBsYXN0Q2xlYW5GbG9hdCA9IGZs
b2F0cy5sYXN0Q2xlYW5GbG9hdCgpOworICAgICAgICBpZiAoIWxhc3RDbGVhbkZsb2F0KQorICAg
ICAgICAgICAgcmV0dXJuIGZsb2F0cy5iZWdpbigpOworICAgICAgICBhdXRvKiBsYXN0Q2xlYW5G
bG9hdFdpdGhSZWN0ID0gZmxvYXRzLmZsb2F0V2l0aFJlY3QoKmxhc3RDbGVhbkZsb2F0KTsKKyAg
ICAgICAgQVNTRVJUKGxhc3RDbGVhbkZsb2F0V2l0aFJlY3QpOworICAgICAgICByZXR1cm4gKytm
bG9hdHMuZmluZCgqbGFzdENsZWFuRmxvYXRXaXRoUmVjdCk7CisgICAgfTsKKwogICAgIEFTU0VS
VCghbGF5b3V0U3RhdGUuZW5kTGluZSgpKTsKLSAgICBzaXplX3QgZmxvYXRJbmRleCA9IGxheW91
dFN0YXRlLmZsb2F0SW5kZXgoKTsKLSAgICBSb290SW5saW5lQm94KiBsYXN0ID0gMDsKLSAgICBm
b3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIgPSBzdGFydExpbmUtPm5leHRSb290Qm94KCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7Ci0gICAgICAgIGlmICghY3Vyci0+aXNEaXJ0
eSgpKSB7Ci0gICAgICAgICAgICBib29sIGVuY291bnRlcmVkTmV3RmxvYXQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGJvb2wgZGlydGllZEJ5RmxvYXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGNoZWNr
RmxvYXRzSW5DbGVhbkxpbmUoY3VyciwgbGF5b3V0U3RhdGUuZmxvYXRzKCksIGZsb2F0SW5kZXgs
IGVuY291bnRlcmVkTmV3RmxvYXQsIGRpcnRpZWRCeUZsb2F0KTsKLSAgICAgICAgICAgIGlmIChl
bmNvdW50ZXJlZE5ld0Zsb2F0KQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGZs
b2F0c0l0ZXJhdG9yID0gaXRlcmF0b3JGb3JGaXJzdERpcnR5RmxvYXQobGF5b3V0U3RhdGUuZmxv
YXRMaXN0KCkpOworICAgIGF1dG8gZW5kID0gbGF5b3V0U3RhdGUuZmxvYXRMaXN0KCkuZW5kKCk7
CisgICAgUm9vdElubGluZUJveCogbGFzdExpbmUgPSBudWxscHRyOworICAgIGZvciAoUm9vdElu
bGluZUJveCogY3VycmVudExpbmUgPSBzdGFydExpbmUtPm5leHRSb290Qm94KCk7IGN1cnJlbnRM
aW5lOyBjdXJyZW50TGluZSA9IGN1cnJlbnRMaW5lLT5uZXh0Um9vdEJveCgpKSB7CisgICAgICAg
IGlmICghY3VycmVudExpbmUtPmlzRGlydHkoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGNs
ZWFuTGluZUZsb2F0cyA9IGN1cnJlbnRMaW5lLT5mbG9hdHNQdHIoKSkgeworICAgICAgICAgICAg
ICAgIGJvb2wgZW5jb3VudGVyZWROZXdGbG9hdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJv
b2wgZGlydGllZEJ5RmxvYXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGZs
b2F0Qm94T25DbGVhbkxpbmUgOiAqY2xlYW5MaW5lRmxvYXRzKSB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChmbG9hdHNJdGVyYXRvciAhPSBlbmQpOworICAgICAgICAgICAgICAgICAgICBj
aGVja0Zsb2F0SW5DbGVhbkxpbmUoKmN1cnJlbnRMaW5lLCAqZmxvYXRCb3hPbkNsZWFuTGluZSwg
KmZsb2F0c0l0ZXJhdG9yLCBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBkaXJ0aWVkQnlGbG9hdCk7Cisg
ICAgICAgICAgICAgICAgICAgICsrZmxvYXRzSXRlcmF0b3I7CisgICAgICAgICAgICAgICAgICAg
IGlmIChmbG9hdHNJdGVyYXRvciA9PSBlbmQgfHwgZW5jb3VudGVyZWROZXdGbG9hdCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnItPmlzRGlydHkoKSkKLSAgICAgICAgICAg
IGxhc3QgPSAwOwotICAgICAgICBlbHNlIGlmICghbGFzdCkKLSAgICAgICAgICAgIGxhc3QgPSBj
dXJyOworICAgICAgICBpZiAoY3VycmVudExpbmUtPmlzRGlydHkoKSkKKyAgICAgICAgICAgIGxh
c3RMaW5lID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZSBpZiAoIWxhc3RMaW5lKQorICAgICAgICAg
ICAgbGFzdExpbmUgPSBjdXJyZW50TGluZTsKICAgICB9CiAKLSAgICBpZiAoIWxhc3QpCisgICAg
aWYgKCFsYXN0TGluZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQXQgdGhpcyBwb2ludCwg
fGxhc3R8IGlzIHRoZSBmaXJzdCBsaW5lIGluIGEgcnVuIG9mIGNsZWFuIGxpbmVzIHRoYXQgZW5k
cyB3aXRoIHRoZSBsYXN0IGxpbmUKICAgICAvLyBpbiB0aGUgYmxvY2suCisgICAgUm9vdElubGlu
ZUJveCogcHJldmlvdXNMaW5lID0gbGFzdExpbmUtPnByZXZSb290Qm94KCk7CisgICAgY2xlYW5M
aW5lU3RhcnQgPSBJbmxpbmVJdGVyYXRvcih0aGlzLCBwcmV2aW91c0xpbmUtPmxpbmVCcmVha09i
aigpLCBwcmV2aW91c0xpbmUtPmxpbmVCcmVha1BvcygpKTsKKyAgICBjbGVhbkxpbmVCaWRpU3Rh
dHVzID0gcHJldmlvdXNMaW5lLT5saW5lQnJlYWtCaWRpU3RhdHVzKCk7CisgICAgbGF5b3V0U3Rh
dGUuc2V0RW5kTGluZUxvZ2ljYWxUb3AocHJldmlvdXNMaW5lLT5saW5lQm90dG9tV2l0aExlYWRp
bmcoKSk7CiAKLSAgICBSb290SW5saW5lQm94KiBwcmV2ID0gbGFzdC0+cHJldlJvb3RCb3goKTsK
LSAgICBjbGVhbkxpbmVTdGFydCA9IElubGluZUl0ZXJhdG9yKHRoaXMsIHByZXYtPmxpbmVCcmVh
a09iaigpLCBwcmV2LT5saW5lQnJlYWtQb3MoKSk7Ci0gICAgY2xlYW5MaW5lQmlkaVN0YXR1cyA9
IHByZXYtPmxpbmVCcmVha0JpZGlTdGF0dXMoKTsKLSAgICBsYXlvdXRTdGF0ZS5zZXRFbmRMaW5l
TG9naWNhbFRvcChwcmV2LT5saW5lQm90dG9tV2l0aExlYWRpbmcoKSk7Ci0KLSAgICBmb3IgKFJv
b3RJbmxpbmVCb3gqIGxpbmUgPSBsYXN0OyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3go
KSkKLSAgICAgICAgbGluZS0+ZXh0cmFjdExpbmUoKTsgLy8gRGlzY29ubmVjdCBhbGwgbGluZSBi
b3hlcyBmcm9tIHRoZWlyIHJlbmRlciBvYmplY3RzIHdoaWxlIHByZXNlcnZpbmcKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlaXIgY29ubmVjdGlvbnMgdG8gb25lIGFub3RoZXIu
Ci0KLSAgICBsYXlvdXRTdGF0ZS5zZXRFbmRMaW5lKGxhc3QpOworICAgIGZvciAoUm9vdElubGlu
ZUJveCogbGluZSA9IGxhc3RMaW5lOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkg
eworICAgICAgICAvLyBEaXNjb25uZWN0IGFsbCBsaW5lIGJveGVzIGZyb20gdGhlaXIgcmVuZGVy
IG9iamVjdHMgd2hpbGUgcHJlc2VydmluZyB0aGVpciBjb25uZWN0aW9ucyB0byBvbmUgYW5vdGhl
ci4KKyAgICAgICAgbGluZS0+ZXh0cmFjdExpbmUoKTsKKyAgICB9CisgICAgbGF5b3V0U3RhdGUu
c2V0RW5kTGluZShsYXN0TGluZSk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpjaGVja1Bh
Z2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRTdGF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFN0YXRlLmgKaW5k
ZXggMDIyOWUzYTkwNzU3NGRjM2I1MTc1NWEyNmFkZGI3MDZlODA0OTBmNS4uOGExMWI0NDc0YTJh
ZTAzZmVjZjc5MjRiNGM3ZjdhODE0MDZhZWQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvTGluZUxheW91dFN0YXRlLmgKQEAgLTM2LDMzICszNiw3MyBAQAogCiAjaW5j
bHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZs
b2F0V2l0aFJlY3QgewotICAgIEZsb2F0V2l0aFJlY3QoUmVuZGVyQm94JiBmKQotICAgICAgICA6
IG9iamVjdChmKQotICAgICAgICAsIHJlY3QoTGF5b3V0UmVjdChmLngoKSAtIGYubWFyZ2luTGVm
dCgpLCBmLnkoKSAtIGYubWFyZ2luVG9wKCksIGYud2lkdGgoKSArIGYuaG9yaXpvbnRhbE1hcmdp
bkV4dGVudCgpLCBmLmhlaWdodCgpICsgZi52ZXJ0aWNhbE1hcmdpbkV4dGVudCgpKSkKLSAgICAg
ICAgLCBldmVySGFkTGF5b3V0KGYuZXZlckhhZExheW91dCgpKQorY2xhc3MgRmxvYXRXaXRoUmVj
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZsb2F0V2l0aFJlY3Q+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZsb2F0V2l0aFJlY3Q+IGNyZWF0
ZShSZW5kZXJCb3gmIHJlbmRlcmVyKQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRmxvYXRXaXRoUmVjdChyZW5kZXJlcikpOwogICAgIH0KKyAgICAKKyAgICBSZW5kZXJCb3gm
IHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQorICAgIExheW91dFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIGJvb2wgZXZlckhhZExheW91dCgp
IGNvbnN0IHsgcmV0dXJuIG1fZXZlckhhZExheW91dDsgfQorCisgICAgdm9pZCBhZGp1c3RSZWN0
KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIHsgbV9yZWN0ID0gcmVjdDsgfQogCi0gICAgUmVuZGVy
Qm94JiBvYmplY3Q7Ci0gICAgTGF5b3V0UmVjdCByZWN0OwotICAgIGJvb2wgZXZlckhhZExheW91
dDsKK3ByaXZhdGU6CisgICAgRmxvYXRXaXRoUmVjdCgpID0gZGVmYXVsdDsKKyAgICAKKyAgICBG
bG9hdFdpdGhSZWN0KFJlbmRlckJveCYgcmVuZGVyZXIpCisgICAgICAgIDogbV9yZW5kZXJlcihy
ZW5kZXJlcikKKyAgICAgICAgLCBtX3JlY3QoTGF5b3V0UmVjdChyZW5kZXJlci54KCkgLSByZW5k
ZXJlci5tYXJnaW5MZWZ0KCksIHJlbmRlcmVyLnkoKSAtIHJlbmRlcmVyLm1hcmdpblRvcCgpLCBy
ZW5kZXJlci53aWR0aCgpICsgcmVuZGVyZXIuaG9yaXpvbnRhbE1hcmdpbkV4dGVudCgpLCByZW5k
ZXJlci5oZWlnaHQoKSArIHJlbmRlcmVyLnZlcnRpY2FsTWFyZ2luRXh0ZW50KCkpKQorICAgICAg
ICAsIG1fZXZlckhhZExheW91dChyZW5kZXJlci5ldmVySGFkTGF5b3V0KCkpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBSZW5kZXJCb3gmIG1fcmVuZGVyZXI7CisgICAgTGF5b3V0UmVjdCBtX3Jl
Y3Q7CisgICAgYm9vbCBtX2V2ZXJIYWRMYXlvdXQgeyBmYWxzZSB9OwogfTsKIAogLy8gTGlrZSBM
YXlvdXRTdGF0ZSBmb3IgbGF5b3V0KCksIExpbmVMYXlvdXRTdGF0ZSBrZWVwcyB0cmFjayBvZiBn
bG9iYWwgaW5mb3JtYXRpb24KIC8vIGR1cmluZyBhbiBlbnRpcmUgbGluZWJveCB0cmVlIGxheW91
dCBwYXNzIChha2EgbGF5b3V0SW5saW5lQ2hpbGRyZW4pLgogY2xhc3MgTGluZUxheW91dFN0YXRl
IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBGbG9hdExpc3QgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dm9pZCBhcHBlbmQoUmVmPEZsb2F0V2l0aFJlY3Q+JiYgZmxvYXRXaXRoUmVjdCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9mbG9hdHMuYWRkKGZsb2F0V2l0aFJlY3QuY29weVJlZigpKTsKKyAg
ICAgICAgICAgIG1fZmxvYXRXaXRoUmVjdE1hcC5hZGQoJmZsb2F0V2l0aFJlY3QtPnJlbmRlcmVy
KCksIFdURk1vdmUoZmxvYXRXaXRoUmVjdCkpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0
TGFzdEZsb2F0KEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQpIHsgbV9sYXN0RmxvYXQgPSBsYXN0
RmxvYXQ7IH0KKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdEZsb2F0OyB9CisKKyAgICAgICAgdm9pZCBzZXRMYXN0Q2xlYW5GbG9hdChSZW5k
ZXJCb3gmIGZsb2F0Qm94KSB7IG1fbGFzdENsZWFuRmxvYXQgPSAmZmxvYXRCb3g7IH0KKyAgICAg
ICAgUmVuZGVyQm94KiBsYXN0Q2xlYW5GbG9hdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENsZWFu
RmxvYXQ7IH0KKworICAgICAgICBGbG9hdFdpdGhSZWN0KiBmbG9hdFdpdGhSZWN0KFJlbmRlckJv
eCYgZmxvYXRCb3gpIGNvbnN0IHsgcmV0dXJuIG1fZmxvYXRXaXRoUmVjdE1hcC5nZXQoJmZsb2F0
Qm94KTsgfQorCisgICAgICAgIHVzaW5nIEl0ZXJhdG9yID0gTGlzdEhhc2hTZXQ8UmVmPEZsb2F0
V2l0aFJlY3Q+Pjo6aXRlcmF0b3I7CisgICAgICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
bV9mbG9hdHMuYmVnaW4oKTsgfQorICAgICAgICBJdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2Zs
b2F0cy5lbmQoKTsgfQorICAgICAgICBJdGVyYXRvciBmaW5kKEZsb2F0V2l0aFJlY3QmIGZsb2F0
Qm94V2l0aFJlY3QpIHsgcmV0dXJuIG1fZmxvYXRzLmZpbmQoZmxvYXRCb3hXaXRoUmVjdCk7IH0K
KyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mbG9hdHMuaXNFbXB0eSgp
OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBMaXN0SGFzaFNldDxSZWY8RmxvYXRXaXRoUmVj
dD4+IG1fZmxvYXRzOworICAgICAgICBIYXNoTWFwPFJlbmRlckJveCosIFJlZjxGbG9hdFdpdGhS
ZWN0Pj4gbV9mbG9hdFdpdGhSZWN0TWFwOworICAgICAgICBGbG9hdGluZ09iamVjdCogbV9sYXN0
RmxvYXQgeyBudWxscHRyIH07CisgICAgICAgIFJlbmRlckJveCogbV9sYXN0Q2xlYW5GbG9hdCB7
IG51bGxwdHIgfTsKKyAgICB9OworCiAgICAgTGluZUxheW91dFN0YXRlKGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYgYmxvY2tGbG93LCBib29sIGZ1bGxMYXlvdXQsIExheW91dFVuaXQmIHJlcGFpbnRM
b2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSwgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCkKLSAgICAgICAgOiBtX2VuZExpbmVMb2dpY2FsVG9wKDApCi0gICAg
ICAgICwgbV9lbmRMaW5lKDApCi0gICAgICAgICwgbV9sYXN0RmxvYXQoMCkKLSAgICAgICAgLCBt
X2Zsb2F0SW5kZXgoMCkKLSAgICAgICAgLCBtX2FkanVzdGVkTG9naWNhbExpbmVUb3AoMCkKLSAg
ICAgICAgLCBtX2Zsb3dUaHJlYWQoZmxvd1RocmVhZCkKKyAgICAgICAgOiBtX2Zsb3dUaHJlYWQo
Zmxvd1RocmVhZCkKICAgICAgICAgLCBtX3JlcGFpbnRMb2dpY2FsVG9wKHJlcGFpbnRMb2dpY2Fs
VG9wKQogICAgICAgICAsIG1fcmVwYWludExvZ2ljYWxCb3R0b20ocmVwYWludExvZ2ljYWxCb3R0
b20pCiAgICAgICAgICwgbV9tYXJnaW5JbmZvKGJsb2NrRmxvdywgYmxvY2tGbG93LmJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUoKSwgYmxvY2tGbG93LmJvcmRlckFuZFBhZGRpbmdBZnRlcigpICsgYmxv
Y2tGbG93LnNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSkKQEAgLTgyLDE0ICsxMjIsNiBAQCBwdWJs
aWM6CiAgICAgUm9vdElubGluZUJveCogZW5kTGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGlu
ZTsgfQogICAgIHZvaWQgc2V0RW5kTGluZShSb290SW5saW5lQm94KiBsaW5lKSB7IG1fZW5kTGlu
ZSA9IGxpbmU7IH0KIAotICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3RGbG9hdDsgfQotICAgIHZvaWQgc2V0TGFzdEZsb2F0KEZsb2F0aW5nT2JqZWN0
KiBsYXN0RmxvYXQpIHsgbV9sYXN0RmxvYXQgPSBsYXN0RmxvYXQ7IH0KLQotICAgIFZlY3RvcjxG
bG9hdFdpdGhSZWN0PiYgZmxvYXRzKCkgeyByZXR1cm4gbV9mbG9hdHM7IH0KLQotICAgIHVuc2ln
bmVkIGZsb2F0SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Zsb2F0SW5kZXg7IH0KLSAgICB2b2lk
IHNldEZsb2F0SW5kZXgodW5zaWduZWQgZmxvYXRJbmRleCkgeyBtX2Zsb2F0SW5kZXggPSBmbG9h
dEluZGV4OyB9Ci0KICAgICBMYXlvdXRVbml0IGFkanVzdGVkTG9naWNhbExpbmVUb3AoKSBjb25z
dCB7IHJldHVybiBtX2FkanVzdGVkTG9naWNhbExpbmVUb3A7IH0KICAgICB2b2lkIHNldEFkanVz
dGVkTG9naWNhbExpbmVUb3AoTGF5b3V0VW5pdCB2YWx1ZSkgeyBtX2FkanVzdGVkTG9naWNhbExp
bmVUb3AgPSB2YWx1ZTsgfQogCkBAIC0xMjQsMTkgKzE1NiwxOCBAQCBwdWJsaWM6CiAgICAgTGF5
b3V0VW5pdCYgcHJldkZsb2F0Qm90dG9tRnJvbUFub255bW91c0lubGluZUJsb2NrKCkgeyByZXR1
cm4gbV9wcmV2RmxvYXRCb3R0b21Gcm9tQW5vbnltb3VzSW5saW5lQmxvY2s7IH0KICAgICBMYXlv
dXRVbml0JiBtYXhGbG9hdEJvdHRvbUZyb21Bbm9ueW1vdXNJbmxpbmVCbG9jaygpIHsgcmV0dXJu
IG1fbWF4RmxvYXRCb3R0b21Gcm9tQW5vbnltb3VzSW5saW5lQmxvY2s7IH0KIAorICAgIEZsb2F0
TGlzdCYgZmxvYXRMaXN0KCkgeyByZXR1cm4gbV9mbG9hdExpc3Q7IH0KKwogcHJpdmF0ZToKICAg
ICBMaW5lSW5mbyBtX2xpbmVJbmZvOwogICAgIExheW91dFVuaXQgbV9lbmRMaW5lTG9naWNhbFRv
cDsKLSAgICBSb290SW5saW5lQm94KiBtX2VuZExpbmU7Ci0KLSAgICBGbG9hdGluZ09iamVjdCog
bV9sYXN0RmxvYXQ7Ci0gICAgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+IG1fZmxvYXRzOwotICAgIHVu
c2lnbmVkIG1fZmxvYXRJbmRleDsKKyAgICBSb290SW5saW5lQm94KiBtX2VuZExpbmUgeyBudWxs
cHRyIH07CiAKICAgICBMYXlvdXRVbml0IG1fYWRqdXN0ZWRMb2dpY2FsTGluZVRvcDsKIAotICAg
IFJlbmRlckZsb3dUaHJlYWQqIG1fZmxvd1RocmVhZDsKKyAgICBSZW5kZXJGbG93VGhyZWFkKiBt
X2Zsb3dUaHJlYWQgeyBudWxscHRyIH07CiAKKyAgICBGbG9hdExpc3QgbV9mbG9hdExpc3Q7CiAg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIGEgcmFuZ2Ugb2JqZWN0IGluc3RlYWQgb2YgdHdv
IGludHM/CiAgICAgTGF5b3V0VW5pdCYgbV9yZXBhaW50TG9naWNhbFRvcDsKICAgICBMYXlvdXRV
bml0JiBtX3JlcGFpbnRMb2dpY2FsQm90dG9tOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>