<?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>197045</bug_id>
          
          <creation_ts>2019-04-17 17:54:36 -0700</creation_ts>
          <short_desc>String should pack ascii strings with 8 or fewer characters inline.</short_desc>
          <delta_ts>2019-06-16 21:51:49 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>jonlee</cc>
    
    <cc>koivisto</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1528358</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-04-17 17:54:36 -0700</bug_when>
    <thetext>String should pack ascii strings with less than 9 characters inline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528363</commentid>
    <comment_count>1</comment_count>
      <attachid>367707</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-04-17 18:04:41 -0700</bug_when>
    <thetext>Created attachment 367707
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528451</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-04-18 07:45:19 -0700</bug_when>
    <thetext>Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528505</commentid>
    <comment_count>3</comment_count>
      <attachid>367707</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2019-04-18 10:52:15 -0700</bug_when>
    <thetext>Comment on attachment 367707
WIP

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

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        String should pack ascii strings with less than 9 characters inline.

fewer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545204</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-06-16 21:51:49 -0700</bug_when>
    <thetext>This sounds worth doing!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367707</attachid>
            <date>2019-04-17 18:04:41 -0700</date>
            <delta_ts>2019-04-17 18:04:41 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-197045-20190417180427.patch</filename>
            <type>text/plain</type>
            <size>261597</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzNzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmUyMmRhMmY5YTYyNzQ1NWQ2MTM1ODA3ZTQ0ZmQxM2YwYmJjNjEyLi5iYWE2NDJjZjQ3MzdhNDll
YTVlMmQ3OTNlNTM0NDgyZjczNjZiNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxOS0wNC0xNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBTdHJpbmcgc2hvdWxkIHBhY2sgYXNjaWkgc3RyaW5ncyB3aXRoIGxl
c3MgdGhhbiA5IGNoYXJhY3RlcnMgaW5saW5lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MDQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpK
U1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWw4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsOE5vU3Vic3RyaW5nIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsMTYgY29uc3QpOgor
ICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3Ry
aW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dD
YXNlOCBjb25zdCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93
Q2FzZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OnN0cmluZ0Zyb21DaGFyQ29kZSk6CisgICAgICAgICogcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3MpOgorICAg
ICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyk6CisKIDIwMTktMDQt
MDIgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2gg
aW4gT3B0aW9uczo6c2V0T3B0aW9ucygpIHVzaW5nIC0tY29uZmlnRmlsZSBvcHRpb24gYW5kIGxp
YmdtYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKaW5kZXggMjEwYjcwY2ZmOWE3OWU5YTI0MWQxZDQ1MTdlNzk0Zjg3ODlhM2U3MS4u
YWMxZDA3ZmQwMzM0MmFmZmNhNDBjMWRmOWMxODM3MTU4MGUxOWY0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
NjYgQEAKKzIwMTktMDQtMTcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CisKKyAgICAgICAgU3RyaW5nIHNob3VsZCBwYWNrIGFzY2lpIHN0cmluZ3Mgd2l0aCBsZXNzIHRo
YW4gOSBjaGFyYWN0ZXJzIGlubGluZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NzA0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgc28gdGhhdCBXVEY6OlN0cmluZyBj
YW4gaG9sZCBhbnkgOCBvciBmZXdlciBjaGFyYWN0ZXIgYXNjaWkgc3RyaW5ncyBpbmxpbmUuIFNp
bmNlIGFzY2lpIGNoYXJhY3RlcnMgbmV2ZXIgaGF2ZSB0aGVpciBoaWdoZXN0IGJpdCB3ZSB1c2Ug
dGhlIGhpZ2ggYml0IHRvIHJlcHJlc2VudCBhIHJlZmVyZW5jZSBjb3VudGVkIHBvaW50ZXIgdG8g
YSBTdHJpbmdJbXBsLiBUaGlzIHJlcHJlc2VudGF0aW9uIG1lYW5zIHRoYXQgd2UgY2FuIHJlaW50
ZXJwcmV0X2Nhc3QgYW55IHBhY2tlZCBTdHJpbmcqIGludG8gaXRzIGNvbnN0IExDaGFyKiByZXBy
ZXNlbnRhdGlvbi4KKworICAgICAgICBTaW5jZSBub3QgYWxsIHN0cmluZ3MgaGF2ZSBhIFN0cmlu
Z0ltcGwsIG1hbnkgb2YgdGhlIHN0cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlZCB0byBiZSBkZWZp
bmVkIG9uIGEgU3RyaW5nIGhhdmUgYmVlbiBtb3ZlZCB0byBTdHJpbmdWaWV3LgorCisgICAgICAg
ICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGVhZGVyLmg6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi9IZXhOdW1iZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8SGV4
TnVtYmVyQnVmZmVyPjo6d3JpdGVUbyBjb25zdCk6CisgICAgICAgICogd3RmL0xvZ2dlci5oOgor
ICAgICAgICAoV1RGOjpMb2dBcmd1bWVudDo6dG9TdHJpbmcpOgorICAgICAgICAqIHd0Zi9UaHJl
YWRpbmcuY3BwOgorICAgICAgICAqIHd0Zi9VUkwuY3BwOgorICAgICAgICAoV1RGOjpVUkw6OnNl
dEhvc3RBbmRQb3J0KToKKyAgICAgICAgKiB3dGYvVVJMSGVscGVycy5jcHA6CisgICAgICAgIChX
VEY6OlVSTEhlbHBlcnM6OmVzY2FwZVVuc2FmZUNoYXJhY3RlcnMpOgorICAgICAgICAqIHd0Zi9V
UkxQYXJzZXIuaDoKKyAgICAgICAgKiB3dGYvVmVjdG9yVHJhaXRzLmg6CisgICAgICAgICogd3Rm
L2NvY29hL05TVVJMRXh0cmFzLm1tOgorICAgICAgICAqIHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0
ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPEF0b21pY1N0
cmluZz46OmVuY29kZSk6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxBdG9taWNT
dHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6ZGVjb2RlU3RyaW5n
VGV4dCk6CisgICAgICAgICogd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6CisgICAgICAg
ICogd3RmL3RleHQvQVNDSUlMaXRlcmFsLmg6CisgICAgICAgIChXVEY6OkFTQ0lJTGl0ZXJhbDo6
ZnJvbUxpdGVyYWxVbnNhZmUpOgorICAgICAgICAoV1RGOjpBU0NJSUxpdGVyYWw6Om51bGwpOgor
ICAgICAgICAoV1RGOjpBU0NJSUxpdGVyYWw6OmNoYXJhY3RlcnM4IGNvbnN0KToKKyAgICAgICAg
KFdURjo6QVNDSUlMaXRlcmFsOjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV1RGOjpBU0NJSUxp
dGVyYWw6OkFTQ0lJTGl0ZXJhbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0xpdGVyYWxzOjpvcGVy
YXRvciBfcyk6CisgICAgICAgICogd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcDoKKyAgICAgICAg
KFdURjo6QXRvbWljU3RyaW5nOjpjb252ZXJ0QVNDSUlDYXNlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6Y29udmVydFRvQVNDSUlVcHBl
cmNhc2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6Om51bWJl
cik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6ZnJvbVVURjhJbnRlcm5h
bCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6c2hvdyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6aW5pdCk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL3RleHQvQXRvbWljU3RyaW5nLmg6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmlu
Zzo6QXRvbWljU3RyaW5nKToKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpudWxsQXRvbSk6
CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6ZW1wdHlBdG9tKToKKyAgICAgICAgKFdURjo6
QXRvbWljU3RyaW5nOjp2aWV3IGNvbnN0KToKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpz
dHJpbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpudWxsQXRvbSk6CisgICAgICAgIChXVEY6OmVt
cHR5QXRvbSk6CisgICAgICAgIChXVEY6OlN0cmluZzo6dG9BdG9taWNTdHJpbmcgY29uc3QpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b0F0b21pY1N0cmluZyBjb25zdCk6CisgICAgICAg
IChXVEY6OlN0cmluZ1ZpZXc6OnRvRXhpc3RpbmdBdG9taWNTdHJpbmcgY29uc3QpOgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpvcGVyYXRvcj0pOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpleGlzdGlu
Z0hhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6Om9wZXJh
dG9yIGNvbnN0IFN0cmluZyYgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpBdG9taWNT
dHJpbmc6OmltcGwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6
OmlzOEJpdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6Y2hh
cmFjdGVyczggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmNo
YXJhY3RlcnMxNiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6
bGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpvcGVy
YXRvcltdIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpjb250
YWlucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6Y29udGFp
bnNJZ25vcmluZ0FTQ0lJQ2FzZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21p
Y1N0cmluZzo6ZmluZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21pY1N0cmlu
Zzo6ZmluZElnbm9yaW5nQVNDSUlDYXNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
QXRvbWljU3RyaW5nOjpzdGFydHNXaXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
QXRvbWljU3RyaW5nOjpzdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmVuZHNXaXRoIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjplbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjp0b0ludCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6dG9Eb3VibGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OnRvRmxvYXQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OnBlcmNlbnRhZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmlzTnVsbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6b3BlcmF0b3IgTlNTdHJpbmcqIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpzdGFyQXRvbSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OnhtbEF0b20pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp4bWxuc0F0
b20pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmZyb21VVEY4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjplcXVhbElnbm9yaW5nQVNDSUlDYXNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PEF0b21pY1N0cmluZz46
OmZsdXNoKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmg6
CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZ0ltcGw6OmNyZWF0ZSk6CisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjp0b0F0
b21pY1N0cmluZyBjb25zdCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQ29tbW9uLmg6Cisg
ICAgICAgIChXVEY6OmZpbmQpOgorICAgICAgICAoV1RGOjpyZXZlcnNlRmluZExpbmVUZXJtaW5h
dG9yKToKKyAgICAgICAgKFdURjo6cmV2ZXJzZUZpbmQpOgorICAgICAgICAoV1RGOjpjb2RlUG9p
bnRDb21wYXJlKToKKyAgICAgICAgKFdURjo6Y29weUNoYXJhY3RlcnMpOgorICAgICAgICAoV1RG
Ojppc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5o
OgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxGb3JtYXR0ZWROdW1iZXI+Ojp3cml0
ZVRvIGNvbnN0KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdDb250YWluZXIuaDogQWRkZWQu
CisgICAgICAgIChXVEY6OlN0cmluZ0NvbnRhaW5lcjo6dG9QYWNrZWRTdHJpbmcpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdDb250YWluZXI6OnNob3VsZEJlU21hbGxTdHJpbmcpOgorICAgICAgICAo
V1RGOjpTdHJpbmdDb250YWluZXI6OmlzU21hbGxTdHJpbmcgY29uc3QpOgorICAgICAgICAoV1RG
OjpTdHJpbmdDb250YWluZXI6OmltcGwgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdDb250
YWluZXI6OnJlbGVhc2VJbXBsKToKKyAgICAgICAgKFdURjo6U3RyaW5nQ29udGFpbmVyOjppc051
bGwgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdDb250YWluZXI6OmlzRW1wdHkgY29uc3Qp
OgorICAgICAgICAoV1RGOjpTdHJpbmdDb250YWluZXI6Omhhc0ltcGwgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdDb250YWluZXI6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0
cmluZ0NvbnRhaW5lcjo6c2l6ZUluQnl0ZXMgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdD
b250YWluZXI6OmlzOEJpdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0NvbnRhaW5lcjo6
aGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0NvbnRhaW5lcjo6ZXhpc3RpbmdIYXNo
IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nQ29udGFpbmVyOjp+U3RyaW5nQ29udGFpbmVy
KToKKyAgICAgICAgKFdURjo6U3RyaW5nQ29udGFpbmVyOjpvcGVyYXRvciBjb25zdCBTdHJpbmdD
b250YWluZXI8U3VwZXJUeXBlPiYgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdDb250YWlu
ZXI6Om9wZXJhdG9yIFN0cmluZ0NvbnRhaW5lcjxTdXBlclR5cGU+Jik6CisgICAgICAgIChXVEY6
OlN0cmluZ0NvbnRhaW5lcjo6U3RyaW5nQ29udGFpbmVyKToKKyAgICAgICAgKFdURjo6b3BlcmF0
b3I9KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoLmg6CisgICAgICAgIChXVEY6OlN0
cmluZ0hhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoOjplcXVhbCk6CisgICAg
ICAgIChXVEY6OkFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFzaCk6CisgICAgICAgIChXVEY6
OkFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0
cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0VG9Mb3dlcmNh
c2VXaXRob3V0TG9jYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29u
dmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5nSW5kZXg4Qml0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvVXBwZXJjYXNlV2l0
aG91dExvY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om5lZWRzVHVya2lzaENhc2luZ1J1
bGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJj
YXNlV2l0aExvY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZl
cnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjpmb2xkQ2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnZl
cnRBU0NJSUNhc2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNv
bnZlcnRUb0FTQ0lJVXBwZXJjYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6c3RyaXBNYXRjaGVkQ2hhcmFjdGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OnN0cmlwV2hpdGVTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nQ2hhcmFjdGVycyk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnNpbXBsaWZ5V2hpdGVTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50U3RyaWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9VSW50U3RyaWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6dG9JbnQ2NFN0cmljdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6OnRvVUludDY0U3RyaWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6dG9JbnRQdHJTdHJpY3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjp0b0ludCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvVUludCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50NjQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQ2NCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlN0cmluZ0ltcGw6OnRvSW50UHRyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6dG9Eb3VibGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0Zs
b2F0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6cmV2ZXJzZUZpbmRJbm5lcik6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OmVxdWFsSW5uZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjpoYXNJbmZpeFN0YXJ0aW5nQXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpoYXNJbmZpeEVuZGluZ0F0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnZpZXcg
Y29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFN0cmljdCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvVUludFN0cmljdCBjb25zdCk6CisgICAgICAgIChX
VEY6OlN0cmluZ0ltcGw6OnRvSW50NjRTdHJpY3QgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjp0b1VJbnQ2NFN0cmljdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
OnRvSW50UHRyU3RyaWN0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9JbnQg
Y29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludDY0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6dG9VSW50NjQgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFB0
ciBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvRG91YmxlIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9GbG9hdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0
cmluZ0ltcGw6OmlzU3BlY2lhbENoYXJhY3RlciBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z1ZpZXc6OlN0cmluZ1ZpZXcpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzdGFydHNXaXRo
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZW5kc1dpdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpmaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6cmV2ZXJzZUZpbmRMaW5lVGVybWluYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnJl
dmVyc2VGaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Y29kZVBvaW50Q29tcGFyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnMpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjppc1NwZWNpYWxDaGFyYWN0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nT3BlcmF0b3JzLmg6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmll
dy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OnN0YXJ0c1dpdGggY29uc3QpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdWaWV3OjpzdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UgY29uc3Qp
OgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjplbmRzV2l0aCBjb25zdCk6CisgICAgICAgIChX
VEY6OlN0cmluZ1ZpZXc6OmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdWaWV3OjpzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6U3RyaW5nVmlldzo6c3RyaXBXaGl0ZVNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nVmlldzo6c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdDaGFyYWN0ZXJzIGNvbnN0KToK
KyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6cmVtb3ZlQ2hhcmFjdGVycyBjb25zdCk6CisgICAg
ICAgIChXVEY6OlN0cmluZ1ZpZXc6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlIGNv
bnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6c2ltcGxpZnlXaGl0ZVNwYWNlIGNvbnN0
KToKKyAgICAgICAgKFdURjo6Y29udmVydEFTQ0lJQ2FzZSk6CisgICAgICAgIChXVEY6OlN0cmlu
Z1ZpZXc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUgY29uc3QpOgorICAgICAgICAo
V1RGOjpTdHJpbmdWaWV3Ojpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdB
dEZhaWxpbmdJbmRleDhCaXQgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb252
ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlIGNvbnN0KToKKyAgICAgICAgKFdURjo6bmVlZHNU
dXJraXNoQ2FzaW5nUnVsZXMpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojpjb252ZXJ0VG9M
b3dlcmNhc2VXaXRoTG9jYWxlIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6Y29u
dmVydFRvVXBwZXJjYXNlV2l0aExvY2FsZSBjb25zdCk6CisgICAgICAgIChXVEY6OmVxdWFsSW5u
ZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpmaW5kKToKKyAgICAgICAgKFdURjo6cmV2
ZXJzZUZpbmRJbm5lcik6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OnJldmVyc2VGaW5kIGNv
bnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6aGFzSW5maXhTdGFydGluZ0F0IGNvbnN0
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6aGFzSW5maXhFbmRpbmdBdCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OmZvbGRDYXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6
bm9ybWFsaXplZE5GQyk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5oOgorICAgICAg
ICAoV1RGOjpTdHJpbmdWaWV3OjpzdGFydHNXaXRoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlldzo6ZW5kc1dpdGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3OjpjaGFy
YWN0ZXJzPExDaGFyPiBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OmNoYXJhY3Rl
cnM8VUNoYXI+IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6Z2V0Q2hhcmFjdGVy
c1dpdGhVcGNvbnZlcnQgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b0Zsb2F0
IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dG9Eb3VibGUgY29uc3QpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b0ludCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z1ZpZXc6OnRvVUludCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OnRvSW50NjQg
Y29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b1VJbnQ2NCBjb25zdCk6CisgICAg
ICAgIChXVEY6OlN0cmluZ1ZpZXc6OnRvSW50UHRyIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3Ry
aW5nVmlldzo6dG9JbnRTdHJpY3QgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0
b1VJbnRTdHJpY3QgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b0ludDY0U3Ry
aWN0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dG9VSW50NjRTdHJpY3QgY29u
c3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b0ludFB0clN0cmljdCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OmlzU3BlY2lhbENoYXJhY3RlciBjb25zdCk6CisgICAgICAgIChXVEY6OmNv
ZGVQb2ludENvbXBhcmUpOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b1N0cmluZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OnRvQXRvbWljU3RyaW5nIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dG9FeGlzdGluZ0F0b21p
Y1N0cmluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OnRvU3Ry
aW5nV2l0aG91dENvcHlpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1Rl
eHRCcmVha0l0ZXJhdG9yLmg6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNoYXJh
Y3RlclN0YXJ0aW5nQXQgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnRydW5jYXRlKToK
KyAgICAgICAgKFdURjo6U3RyaW5nOjpyZW1vdmVJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OlN0
cmluZzo6c3Vic3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpzdWJzdHJpbmdT
aGFyaW5nSW1wbCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6Y29udmVydFRvQVNDSUlM
b3dlcmNhc2UgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb0FTQ0lJVXBw
ZXJjYXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VX
aXRob3V0TG9jYWxlIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpjb252ZXJ0VG9Mb3dl
cmNhc2VXaXRob3V0TG9jYWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQgY29uc3QpOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUgY29uc3Qp
OgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhMb2NhbGUgY29u
c3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUg
Y29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnN0cmlwV2hpdGVTcGFjZSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZzo6c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdDaGFyYWN0ZXJzIGNv
bnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpzaW1wbGlmeVdoaXRlU3BhY2UgY29uc3QpOgor
ICAgICAgICAoV1RGOjpTdHJpbmc6OnJlbW92ZUNoYXJhY3RlcnMgY29uc3QpOgorICAgICAgICAo
V1RGOjpTdHJpbmc6OmZvbGRDYXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpwZXJj
ZW50YWdlIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbiBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6dG9JbnRTdHJpY3QgY29u
c3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnRvVUludFN0cmljdCBjb25zdCk6CisgICAgICAg
IChXVEY6OlN0cmluZzo6dG9JbnQ2NFN0cmljdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmlu
Zzo6dG9VSW50NjRTdHJpY3QgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnRvSW50UHRy
U3RyaWN0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjp0b0ludCBjb25zdCk6CisgICAg
ICAgIChXVEY6OlN0cmluZzo6dG9VSW50IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjp0
b0ludDY0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjp0b1VJbnQ2NCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZzo6dG9JbnRQdHIgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJp
bmc6OnRvRG91YmxlIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjp0b0Zsb2F0IGNvbnN0
KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjppc29sYXRlZENvcHkgY29uc3QpOgorICAgICAgICAo
V1RGOjpTdHJpbmc6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXVEY6OlN0cmluZzo6aXNTYWZl
VG9TZW5kVG9Bbm90aGVyVGhyZWFkIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjp0cnlH
ZXRVdGY4IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNv
dXJjZSk6CisgICAgICAgIChXVEY6OlN0cmluZzo6bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UpOgor
ICAgICAgICAoV1RGOjpTdHJpbmc6OmFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmNv
ZGVQb2ludENvbXBhcmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmc6Omluc2VydCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmVtcHR5U3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6bnVsbFN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5n
Lmg6CisgICAgICAgIChXVEY6OlN0cmluZzo6dG9QYWNrZWRTdHJpbmdDb25zdGV4cHIpOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OnRvUGFja2VkU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5n
OjpzaG91bGRCZVNtYWxsU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nOjppc1NtYWxsU3Ry
aW5nIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjppbXBsIGNvbnN0KToKKyAgICAgICAg
KFdURjo6U3RyaW5nOjpyZWxlYXNlSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6aXNOdWxs
IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAg
KFdURjo6U3RyaW5nOjpoYXNJbXBsIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpsZW5n
dGggY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmlzOEJpdCBjb25zdCk6CisgICAgICAg
IChXVEY6OlN0cmluZzo6c2l6ZUluQnl0ZXMgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6
OlN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZzo6bnVsbFN0cmluZyk6CisgICAgICAgIChX
VEY6OlN0cmluZzo6ZW1wdHlTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnN3YXApOgor
ICAgICAgICAoV1RGOjpTdHJpbmc6OmNoYXJhY3RlcnM4IGNvbnN0KToKKyAgICAgICAgKFdURjo6
U3RyaW5nOjpjaGFyYWN0ZXJzMTYgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNoYXJh
Y3RlcnMgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnZpZXcgY29uc3QpOgorICAgICAg
ICAoV1RGOjpTdHJpbmc6OmZpbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6cmV2ZXJzZUZp
bmQgY29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnN0YXJ0c1dpdGggY29uc3QpOgorICAg
ICAgICAoV1RGOjpTdHJpbmc6OnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZzo6aGFzSW5maXhTdGFydGluZ0F0IGNvbnN0KToKKyAgICAgICAg
KFdURjo6U3RyaW5nOjplbmRzV2l0aCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6ZW5k
c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6aGFz
SW5maXhFbmRpbmdBdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6YXBwZW5kKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nOjpsZWZ0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpp
c0FsbEFTQ0lJIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjppc0FsbExhdGluMSBjb25z
dCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6aXNTcGVjaWFsQ2hhcmFjdGVyIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6U3RyaW5nOjpoYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RG
OjpTdHJpbmc6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdURjo6
U3RyaW5nOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpleGlzdGluZ0hhc2gg
Y29uc3QpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnRlbnRzIGNvbnN0KToKKyAgICAgICAg
KFdURjo6U3RyaW5nOjpTdHJpbmdQdHJUcmFpdHM6OlN0b3JhZ2VUeXBlOjpTdG9yYWdlVHlwZSk6
CisgICAgICAgIChXVEY6OlN0cmluZzo6U3RyaW5nUHRyVHJhaXRzOjpTdG9yYWdlVHlwZTo6Z2V0
IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmdQdHJUcmFpdHM6OmV4Y2hhbmdl
KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmdQdHJUcmFpdHM6OnN3YXApOgorICAgICAg
ICAoV1RGOjpTdHJpbmc6OlN0cmluZ1B0clRyYWl0czo6dW53cmFwKToKKyAgICAgICAgKFdURjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OmVtcHR5U3RyaW5nKToKKyAgICAgICAgKFdURjo6
bnVsbFN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZzo6Y2hhcmFjdGVyQXQgY29uc3QpOgor
ICAgICAgICAoV1RGOjpTdHJpbmc6OmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6U3RyaW5nOjpjbGVhckltcGxJZk5vdFNoYXJlZCk6CisgICAgICAgIChXVEY6
OlN0cmluZzo6b3BlcmF0b3IgTlNTdHJpbmcgKiBjb25zdCk6CisgICAgICAgIChXVEY6Om5zU3Ry
aW5nTmlsSWZFbXB0eSk6CisgICAgICAgIChXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik6
CisgICAgICAgIChXVEY6OlN0cmluZzo6ZnJvbVVURjgpOgorICAgICAgICAoV1RGOjplcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSk6CisgICAgICAgIChXVEY6OmVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UpOgorICAgICAgICAoV1RGOjpzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpudW1iZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmc6
Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0xpdGVyYWxz
OjpvcGVyYXRvciBfc3RyKToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6U3RyaW5nVmlldyk6
CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OnRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nVmlldzo6dG9TdHJpbmdXaXRob3V0Q29weWluZyBjb25zdCk6CisgICAgICAgIChX
VEY6OlN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlN0cmluZzo6Y2hhcmFjdGVyczxMQ2hhcj4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpTdHJpbmc6OmNoYXJhY3RlcnM8VUNoYXI+IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6U3RyaW5nOjpyZXBsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nOjpyZXBs
YWNlV2l0aExpdGVyYWwpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L2NmL1N0cmluZ0NG
LmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJp
bmc6OmNyZWF0ZUNGU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKiB3dGYvdGV4dC9jb2NvYS9TdHJp
bmdDb2NvYS5tbToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAqIHd0
Zi90ZXh0L2NvY29hL1N0cmluZ0ltcGxDb2NvYS5tbToKKyAgICAgICAgKiB3dGYvdGV4dC9pY3Uv
VVRleHRQcm92aWRlckxhdGluMS5jcHA6CisgICAgICAgIChXVEY6OnVUZXh0TGF0aW4xQWNjZXNz
KToKKyAgICAgICAgKFdURjo6dVRleHRMYXRpbjFFeHRyYWN0KToKKyAgICAgICAgKFdURjo6dGV4
dExhdGluMUNvbnRleHRBd2FyZU1vdmVJblByaW1hcnlDb250ZXh0KToKKwogMjAxOS0wNC0wMiAg
S2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW5oaWJpdCBDRk5l
dHdvcmsgbG9nZ2luZyBpbiBwcml2YXRlIHNlc3Npb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGVhNWFiNDA4MzU2ODc1OTAwYTcxNjFhZjZiMjJhZDhiNDVmYmMyOTkuLmQ5M2Vk
ZWI1ZmFlYzI1YzVmMGE4YjM2M2MzMWI3MWE2MDIwNzNiNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMDgzLDYgKzEwODMsMTAgQEAKIAkJNTNFQUZFMkYyMDhERkFCNDAwN0Q1
MjRCIC8qIHRlc3RhcGkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovOyB9Owog
CQk1M0VFMDFCNjIxOEY2OTE2MDBBRDFGOEQgLyogSlNTY3JpcHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAv
KiBKU1NjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUzRUUwMUI4MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VFMDFCNzIxOEY3
RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oICovOyB9OworCQk1M0VGNkNDMTIyNjdG
MzVFMDA1OEIzNEMgLyogbGliV1RGLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDk4Q0FEMzIxNDY1NkM0MDA3MTA4NzkgLyogbGliV1RGLmEgKi87
IH07CisJCTUzRUY2Q0M0MjI2N0YzQjcwMDU4QjM0QyAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VG
NkNDMjIyNjdGM0I2MDA1OEIzNEMgLyogQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9Owor
CQk1M0VGNkNDNTIyNjdGM0I3MDA1OEIzNEMgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VGNkNDMzIyNjdG
M0I2MDA1OEIzNEMgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTUzRUY2Q0M3MjI2
N0Y0QkYwMDU4QjM0QyAvKiBsaWJpY3Vjb3JlLnRiZCBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUY2Q0M2MjI2N0Y0QkUwMDU4QjM0QyAvKiBsaWJp
Y3Vjb3JlLnRiZCAqLzsgfTsKIAkJNTNGMTFGNDEyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRh
YmxlQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0Y0MEU4
NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2Fz
bVNlY3Rpb25zLmggKi87IH07CiAJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVu
Y3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLzsg
fTsKQEAgLTM2MTcsNiArMzYyMSw5IEBACiAJCTUzRUUwMUI0MjE4RjY5MEUwMEFEMUY4RCAvKiBK
U1NjcmlwdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTU2Ny
aXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VFMDFCNTIxOEY2OTBGMDBB
RDFGOEQgLyogSlNTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNT
Y3JpcHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRTAxQjcyMThGN0VGRjAw
QUQxRjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTY3JpcHRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
M0VGNkNDMjIyNjdGM0I2MDA1OEIzNEMgLyogQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFt
ZXdvcms7IG5hbWUgPSBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSBQbGF0Zm9ybXMv
TWFjT1NYLnBsYXRmb3JtL0RldmVsb3Blci9TREtzL01hY09TWDEwLjE0LnNkay9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9IERF
VkVMT1BFUl9ESVI7IH07CisJCTUzRUY2Q0MzMjI2N0YzQjYwMDU4QjM0QyAvKiBGb3VuZGF0aW9u
LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGgg
PSBQbGF0Zm9ybXMvTWFjT1NYLnBsYXRmb3JtL0RldmVsb3Blci9TREtzL01hY09TWDEwLjE0LnNk
ay9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VU
cmVlID0gREVWRUxPUEVSX0RJUjsgfTsKKwkJNTNFRjZDQzYyMjY3RjRCRTAwNThCMzRDIC8qIGxp
YmljdWNvcmUudGJkICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gInNvdXJjZWNvZGUudGV4dC1iYXNlZC1keWxpYi1kZWZpbml0aW9uIjsgbmFtZSA9IGxp
YmljdWNvcmUudGJkOyBwYXRoID0gUGxhdGZvcm1zL01hY09TWC5wbGF0Zm9ybS9EZXZlbG9wZXIv
U0RLcy9NYWNPU1gxMC4xNC5zZGsvdXNyL2xpYi9saWJpY3Vjb3JlLnRiZDsgc291cmNlVHJlZSA9
IERFVkVMT1BFUl9ESVI7IH07CiAJCTUzRjExRjQwMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0
YWJsZUJ1dHRlcmZseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YxMUY0MjIwOTE3NDk4MDBFNDExQTcgLyog
SlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbW11dGFibGVC
dXR0ZXJmbHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YyNTZFMTFCODdF
MjgwMDBCNEI3NjggLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5OTAsNiArNDk5NywxMCBAQAogCQkJaXNh
ID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJNTNFRjZDQzQyMjY3RjNCNzAwNThCMzRDIC8qIENvcmVG
b3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTUzRUY2Q0M1MjI2N0Yz
QjcwMDU4QjM0QyAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJ
CTUzRUY2Q0M3MjI2N0Y0QkYwMDU4QjM0QyAvKiBsaWJpY3Vjb3JlLnRiZCBpbiBGcmFtZXdvcmtz
ICovLAorCQkJCTUzRUY2Q0MxMjI2N0YzNUUwMDU4QjM0QyAvKiBsaWJXVEYuYSBpbiBGcmFtZXdv
cmtzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtNTE1OSw5ICs1MTcwLDEyIEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAogCQkJCTY1NjBBNENGMDRCM0IzRTcwMDhBRTk1MiAvKiBDb3JlRm91bmRhdGlv
bi5mcmFtZXdvcmsgKi8sCisJCQkJNTNFRjZDQzIyMjY3RjNCNjAwNThCMzRDIC8qIENvcmVGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLywKIAkJCQk1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91
bmRhdGlvbi5mcmFtZXdvcmsgKi8sCisJCQkJNTNFRjZDQzMyMjY3RjNCNjAwNThCMzRDIC8qIEZv
dW5kYXRpb24uZnJhbWV3b3JrICovLAogCQkJCTVENUQ4QUQwMEUwRDBFQkUwMEY5QzY5MiAvKiBs
aWJlZGl0LmR5bGliICovLAogCQkJCTkzMjJBMDAzMDZDMzQxRDMwMDkwNjdCQiAvKiBsaWJpY3Vj
b3JlLmR5bGliICovLAorCQkJCTUzRUY2Q0M2MjI2N0Y0QkUwMDU4QjM0QyAvKiBsaWJpY3Vjb3Jl
LnRiZCAqLywKIAkJCQk1MUYwRUMwNzA1Qzg2QzlBMDBFNkRGMUIgLyogbGlib2JqYy5keWxpYiAq
LywKIAkJCQkxNDk4Q0FEMzIxNDY1NkM0MDA3MTA4NzkgLyogbGliV1RGLmEgKi8sCiAJCQkJQThB
NDc0OEQxNTFBODMwNjAwNDEyM0ZGIC8qIGxpYldURi5hICovLApAQCAtODk1OCw2ICs4OTcyLDcg
QEAKIAkJCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdW
YWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8q
IERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ4
MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYwMTIzMzMxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGguaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTI1NEY3MUFCREREMjIwMEE3QzZEMiAvKiBERkdWYXJhcmdzRm9yd2FyZGlu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTkzODQsNyArOTM5OSw2IEBACiAJCQkJRDk3MjI3
NTJEQzU0NDU5QjkxMjVCNTM5IC8qIEpTTW9kdWxlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5OTZCNzMyMDFCREEwOEVGMDAzMzFCODQgLyogSlNNb2R1bGVMb2FkZXIubHV0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTUyQzU1NTY2MjI0QzJBRUEwMDk5RjVDQyAv
KiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzlEQTRB
NzFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzM0U4RDFEMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05hdGl2ZVN0ZEZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzhEOTk5QzIyMUI3OEJCMDBENTA0NzQgLyogSlNOb25EZXN0cnVjdGli
bGVQcm94eS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAKaW5kZXggZGNhZWFkOTdhZDA1NGE3MDhjYTRhM2FkOTg1YzAxNWY5NDMxYzk4
MS4uMDhjZDAxMDA5M2Y2ZDlkZDU4OGU2NGE2ZmM5OTQzOTY3MDk2ZjhlOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhMZW5ndGhGb3JPblN0YWNrUmVzb2x2ZSA9IDIwNDg7CiB2
b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIqIGJ1ZmZlcikgY29u
c3QKIHsKICAgICBpZiAoaXNTdWJzdHJpbmcoKSkgewotICAgICAgICBTdHJpbmdJbXBsOjpjb3B5
Q2hhcmFjdGVycyhidWZmZXIsIHN1YnN0cmluZ0Jhc2UoKS0+dmFsdWVJbnRlcm5hbCgpLmNoYXJh
Y3RlcnM4KCkgKyBzdWJzdHJpbmdPZmZzZXQoKSwgbGVuZ3RoKCkpOworICAgICAgICBXVEY6OmNv
cHlDaGFyYWN0ZXJzKGJ1ZmZlciwgc3Vic3RyaW5nQmFzZSgpLT52YWx1ZUludGVybmFsKCkuY2hh
cmFjdGVyczgoKSArIHN1YnN0cmluZ09mZnNldCgpLCBsZW5ndGgoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBKU1JvcGVTdHJpbmc6OnJl
c29sdmVSb3BlSW50ZXJuYWw4Tm9TdWJzdHJpbmcoTENoYXIqIGJ1ZmZlcikgY29uc3QKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoICYmIGZpYmVyKGkp
OyArK2kpIHsKICAgICAgICAgY29uc3QgU3RyaW5nSW1wbCYgZmliZXJTdHJpbmcgPSAqZmliZXIo
aSktPnZhbHVlSW50ZXJuYWwoKS5pbXBsKCk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGZp
YmVyU3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhw
b3NpdGlvbiwgZmliZXJTdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKKyAgICAgICAgV1RG
Ojpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgZmliZXJTdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVu
Z3RoKTsKICAgICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwogICAgIH0KICAgICBBU1NFUlQoKGJ1
ZmZlciArIGxlbmd0aCgpKSA9PSBwb3NpdGlvbik7CkBAIC0xODEsNyArMTgxLDcgQEAgdm9pZCBK
U1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWw4Tm9TdWJzdHJpbmcoTENoYXIqIGJ1ZmZl
cikgY29uc3QKIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZUludGVybmFsMTYoVUNoYXIq
IGJ1ZmZlcikgY29uc3QKIHsKICAgICBpZiAoaXNTdWJzdHJpbmcoKSkgewotICAgICAgICBTdHJp
bmdJbXBsOjpjb3B5Q2hhcmFjdGVycygKKyAgICAgICAgV1RGOjpjb3B5Q2hhcmFjdGVycygKICAg
ICAgICAgICAgIGJ1ZmZlciwgc3Vic3RyaW5nQmFzZSgpLT52YWx1ZUludGVybmFsKCkuY2hhcmFj
dGVyczE2KCkgKyBzdWJzdHJpbmdPZmZzZXQoKSwgbGVuZ3RoKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMjAzLDkgKzIwMyw5IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9w
ZUludGVybmFsMTZOb1N1YnN0cmluZyhVQ2hhciogYnVmZmVyKSBjb25zdAogICAgICAgICBjb25z
dCBTdHJpbmdJbXBsJiBmaWJlclN0cmluZyA9ICpmaWJlcihpKS0+dmFsdWVJbnRlcm5hbCgpLmlt
cGwoKTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZmliZXJTdHJpbmcubGVuZ3RoKCk7CiAg
ICAgICAgIGlmIChmaWJlclN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAgIFN0cmluZ0ltcGw6
OmNvcHlDaGFyYWN0ZXJzKHBvc2l0aW9uLCBmaWJlclN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgpOworICAgICAgICAgICAgV1RGOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgZmliZXJTdHJp
bmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgU3Ry
aW5nSW1wbDo6Y29weUNoYXJhY3RlcnMocG9zaXRpb24sIGZpYmVyU3RyaW5nLmNoYXJhY3RlcnMx
NigpLCBsZW5ndGgpOworICAgICAgICAgICAgV1RGOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwg
ZmliZXJTdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7CiAgICAgICAgIHBvc2l0aW9uICs9
IGxlbmd0aDsKICAgICB9CiAgICAgQVNTRVJUKChidWZmZXIgKyBsZW5ndGgoKSkgPT0gcG9zaXRp
b24pOwpAQCAtMzc0LDcgKzM3NCw3IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNs
b3dDYXNlOChMQ2hhciogYnVmZmVyKSBjb25zdAogICAgICAgICAKICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gY3VycmVudEZpYmVyLT5sZW5ndGgoKTsKICAgICAgICAgcG9zaXRpb24gLT0gbGVu
Z3RoOwotICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgY2hhcmFj
dGVycywgbGVuZ3RoKTsKKyAgICAgICAgV1RGOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQoYnVmZmVyID09IHBvc2l0aW9u
KTsKQEAgLTQwMiw5ICs0MDIsOSBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93
Q2FzZShVQ2hhciogYnVmZmVyKSBjb25zdAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGN1cnJlbnRGaWJlckFzUm9wZS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgcG9zaXRp
b24gLT0gbGVuZ3RoOwogICAgICAgICAgICAgICAgIGlmIChzdHJpbmctPmlzOEJpdCgpKQotICAg
ICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgc3Ry
aW5nLT5jaGFyYWN0ZXJzOCgpICsgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAgICAgICAg
ICBXVEY6OmNvcHlDaGFyYWN0ZXJzKHBvc2l0aW9uLCBzdHJpbmctPmNoYXJhY3RlcnM4KCkgKyBv
ZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJz
MTYoKSArIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgV1RGOjpjb3B5Q2hh
cmFjdGVycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldCwgbGVuZ3Ro
KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgY3VycmVu
dEZpYmVyQXNSb3BlLT5maWJlcihpKTsgKytpKQpAQCAtNDE2LDkgKzQxNiw5IEBAIHZvaWQgSlNS
b3BlU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKFVDaGFyKiBidWZmZXIpIGNvbnN0CiAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy0+bGVuZ3RoKCk7CiAgICAgICAgIHBvc2l0aW9u
IC09IGxlbmd0aDsKICAgICAgICAgaWYgKHN0cmluZy0+aXM4Qml0KCkpCi0gICAgICAgICAgICBT
dHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJzOCgp
LCBsZW5ndGgpOworICAgICAgICAgICAgV1RGOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgc3Ry
aW5nLT5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBT
dHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJzMTYo
KSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIFdURjo6Y29weUNoYXJhY3RlcnMocG9zaXRpb24sIHN0
cmluZy0+Y2hhcmFjdGVyczE2KCksIGxlbmd0aCk7CiAgICAgfQogCiAgICAgQVNTRVJUKGJ1ZmZl
ciA9PSBwb3NpdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNTU1NzM3NDQ4N2Y3MmJlY2RhNzcxZGYzZWYyNzlk
MmZhY2I5MGJmMi4uOWZlOWYzNjA4ZTIyNjdiNzFjZGIxYWZiZDViZTYyM2I5MDcwYWQ5OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9y
LmNwcApAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBpZiAoVU5MSUtF
TFkoIWlzTGF0aW4xKGNoYXJhY3RlcikpKSB7CiAgICAgICAgICAgICBVQ2hhciogYnVmMTZCaXQ7
CiAgICAgICAgICAgICBhdXRvIGltcGwxNkJpdCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBidWYxNkJpdCk7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hh
cmFjdGVycyhidWYxNkJpdCwgYnVmOEJpdCwgaSk7CisgICAgICAgICAgICBXVEY6OmNvcHlDaGFy
YWN0ZXJzKGJ1ZjE2Qml0LCBidWY4Qml0LCBpKTsKICAgICAgICAgICAgIGJ1ZjE2Qml0W2ldID0g
Y2hhcmFjdGVyOwogICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgZm9yICg7IGkgPCBsZW5n
dGg7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAKaW5kZXggMzQ4YmYwZGFmNWQwZDhkMTAzMjljZmI5MGZkMDQ4YzIxOGEyYjNl
OS4uYzRmMzM1MTI4YTg4ZThjZjQ3NjgxZTY2ZDY3ZmU3MmQ3MDFiYTRiMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCkBAIC0zNDks
NyArMzQ5LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlU3Vic3Ry
aW5ncyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzb3UKICAgICAgICAgQ2hlY2tlZDxpbnQs
IEFzc2VydE5vT3ZlcmZsb3c+IGJ1ZmZlclBvcyA9IDA7CiAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcmFuZ2VDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoaW50IHNyY0xlbiA9IHN1
YnN0cmluZ1Jhbmdlc1tpXS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpj
b3B5Q2hhcmFjdGVycyhidWZmZXIgKyBidWZmZXJQb3MudW5zYWZlR2V0KCksIHNvdXJjZURhdGEg
KyBzdWJzdHJpbmdSYW5nZXNbaV0ucG9zaXRpb24sIHNyY0xlbik7CisgICAgICAgICAgICAgICAg
V1RGOjpjb3B5Q2hhcmFjdGVycyhidWZmZXIgKyBidWZmZXJQb3MudW5zYWZlR2V0KCksIHNvdXJj
ZURhdGEgKyBzdWJzdHJpbmdSYW5nZXNbaV0ucG9zaXRpb24sIHNyY0xlbik7CiAgICAgICAgICAg
ICAgICAgYnVmZmVyUG9zICs9IHNyY0xlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MzY5LDcgKzM2OSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKiBqc1NwbGljZVN1
YnN0cmluZ3MoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc291CiAgICAgQ2hlY2tlZDxpbnQs
IEFzc2VydE5vT3ZlcmZsb3c+IGJ1ZmZlclBvcyA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByYW5nZUNvdW50OyBpKyspIHsKICAgICAgICAgaWYgKGludCBzcmNMZW4gPSBzdWJzdHJpbmdS
YW5nZXNbaV0ubGVuZ3RoKSB7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVy
cyhidWZmZXIgKyBidWZmZXJQb3MudW5zYWZlR2V0KCksIHNvdXJjZURhdGEgKyBzdWJzdHJpbmdS
YW5nZXNbaV0ucG9zaXRpb24sIHNyY0xlbik7CisgICAgICAgICAgICBXVEY6OmNvcHlDaGFyYWN0
ZXJzKGJ1ZmZlciArIGJ1ZmZlclBvcy51bnNhZmVHZXQoKSwgc291cmNlRGF0YSArIHN1YnN0cmlu
Z1Jhbmdlc1tpXS5wb3NpdGlvbiwgc3JjTGVuKTsKICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBz
cmNMZW47CiAgICAgICAgIH0KICAgICB9CkBAIC00MjQsMTMgKzQyNCwxMyBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBKU1N0cmluZyoganNTcGxpY2VTdWJzdHJpbmdzV2l0aFNlcGFyYXRvcnMoRXhl
Y1N0YXRlKiBleGVjLAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heENvdW50OyBpKysp
IHsKICAgICAgICAgICAgIGlmIChpIDwgcmFuZ2VDb3VudCkgewogICAgICAgICAgICAgICAgIGlm
IChpbnQgc3JjTGVuID0gc3Vic3RyaW5nUmFuZ2VzW2ldLmxlbmd0aCkgewotICAgICAgICAgICAg
ICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhidWZmZXIgKyBidWZmZXJQb3MudW5z
YWZlR2V0KCksIHNvdXJjZURhdGEgKyBzdWJzdHJpbmdSYW5nZXNbaV0ucG9zaXRpb24sIHNyY0xl
bik7CisgICAgICAgICAgICAgICAgICAgIFdURjo6Y29weUNoYXJhY3RlcnMoYnVmZmVyICsgYnVm
ZmVyUG9zLnVuc2FmZUdldCgpLCBzb3VyY2VEYXRhICsgc3Vic3RyaW5nUmFuZ2VzW2ldLnBvc2l0
aW9uLCBzcmNMZW4pOwogICAgICAgICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gc3JjTGVuOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpIDwgc2Vw
YXJhdG9yQ291bnQpIHsKICAgICAgICAgICAgICAgICBpZiAoaW50IHNlcExlbiA9IHNlcGFyYXRv
cnNbaV0ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNo
YXJhY3RlcnMoYnVmZmVyICsgYnVmZmVyUG9zLnVuc2FmZUdldCgpLCBzZXBhcmF0b3JzW2ldLmNo
YXJhY3RlcnM4KCksIHNlcExlbik7CisgICAgICAgICAgICAgICAgICAgIFdURjo6Y29weUNoYXJh
Y3RlcnMoYnVmZmVyICsgYnVmZmVyUG9zLnVuc2FmZUdldCgpLCBzZXBhcmF0b3JzW2ldLmNoYXJh
Y3RlcnM4KCksIHNlcExlbik7CiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBzZXBM
ZW47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDUyLDE4ICs0NTIsMTgg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcqIGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhT
ZXBhcmF0b3JzKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgaWYgKGkgPCByYW5nZUNvdW50KSB7
CiAgICAgICAgICAgICBpZiAoaW50IHNyY0xlbiA9IHN1YnN0cmluZ1Jhbmdlc1tpXS5sZW5ndGgp
IHsKICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmlzOEJpdCgpKQotICAgICAgICAgICAgICAg
ICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhidWZmZXIgKyBidWZmZXJQb3MudW5zYWZl
R2V0KCksIHNvdXJjZS5jaGFyYWN0ZXJzOCgpICsgc3Vic3RyaW5nUmFuZ2VzW2ldLnBvc2l0aW9u
LCBzcmNMZW4pOworICAgICAgICAgICAgICAgICAgICBXVEY6OmNvcHlDaGFyYWN0ZXJzKGJ1ZmZl
ciArIGJ1ZmZlclBvcy51bnNhZmVHZXQoKSwgc291cmNlLmNoYXJhY3RlcnM4KCkgKyBzdWJzdHJp
bmdSYW5nZXNbaV0ucG9zaXRpb24sIHNyY0xlbik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhidWZmZXIgKyBidWZm
ZXJQb3MudW5zYWZlR2V0KCksIHNvdXJjZS5jaGFyYWN0ZXJzMTYoKSArIHN1YnN0cmluZ1Jhbmdl
c1tpXS5wb3NpdGlvbiwgc3JjTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgV1RGOjpjb3B5Q2hh
cmFjdGVycyhidWZmZXIgKyBidWZmZXJQb3MudW5zYWZlR2V0KCksIHNvdXJjZS5jaGFyYWN0ZXJz
MTYoKSArIHN1YnN0cmluZ1Jhbmdlc1tpXS5wb3NpdGlvbiwgc3JjTGVuKTsKICAgICAgICAgICAg
ICAgICBidWZmZXJQb3MgKz0gc3JjTGVuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGlmIChpIDwgc2VwYXJhdG9yQ291bnQpIHsKICAgICAgICAgICAgIGlmIChpbnQgc2VwTGVu
ID0gc2VwYXJhdG9yc1tpXS5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIGlmIChzZXBhcmF0
b3JzW2ldLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hh
cmFjdGVycyhidWZmZXIgKyBidWZmZXJQb3MudW5zYWZlR2V0KCksIHNlcGFyYXRvcnNbaV0uY2hh
cmFjdGVyczgoKSwgc2VwTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgV1RGOjpjb3B5Q2hhcmFj
dGVycyhidWZmZXIgKyBidWZmZXJQb3MudW5zYWZlR2V0KCksIHNlcGFyYXRvcnNbaV0uY2hhcmFj
dGVyczgoKSwgc2VwTGVuKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGJ1ZmZlciArIGJ1ZmZlclBvcy51bnNhZmVH
ZXQoKSwgc2VwYXJhdG9yc1tpXS5jaGFyYWN0ZXJzMTYoKSwgc2VwTGVuKTsKKyAgICAgICAgICAg
ICAgICAgICAgV1RGOjpjb3B5Q2hhcmFjdGVycyhidWZmZXIgKyBidWZmZXJQb3MudW5zYWZlR2V0
KCksIHNlcGFyYXRvcnNbaV0uY2hhcmFjdGVyczE2KCksIHNlcExlbik7CiAgICAgICAgICAgICAg
ICAgYnVmZmVyUG9zICs9IHNlcExlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5o
CmluZGV4IGY2YTBjMGU1ODI5OTUxYTIxZDY5ZjRhNjUzNjM2MDBkMzM2ZGQ0YjIuLmMxYmFmMjJm
ZTg3YmNlYTAyY2RhYWU3OWYwMjliN2ZhNjhlZTg4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTM2LDcgKzM2
LDYgQEAgY2xhc3MgT3JkaW5hbE51bWJlcjsKIGNsYXNzIFByaW50U3RyZWFtOwogY2xhc3MgU0hB
MTsKIGNsYXNzIFNlY29uZHM7Ci1jbGFzcyBTdHJpbmc7CiBjbGFzcyBTdHJpbmdCdWlsZGVyOwog
Y2xhc3MgU3RyaW5nSW1wbDsKIGNsYXNzIFN0cmluZ1ZpZXc7CkBAIC00Niw2ICs0NSw4IEBAIGNs
YXNzIFVuaXF1ZWRTdHJpbmdJbXBsOwogY2xhc3MgVVJMOwogY2xhc3MgV2FsbFRpbWU7CiAKK2Ns
YXNzIFN0cmluZzsKKwogc3RydWN0IEZhc3RNYWxsb2M7CiAKIHRlbXBsYXRlPHR5cGVuYW1lPiBj
bGFzcyBDb21wbGV0aW9uSGFuZGxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hlYWRl
ci5oIGIvU291cmNlL1dURi93dGYvSGVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmU0MTdmNjRkNDljYThh
NjQ2YzliZmZjNGEwNzRmYmZkYzViZDhkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0hlYWRlci5oCkBAIC0wLDAgKzEsMTIgQEAKKy8vCisvLyAgSGVhZGVyLmgKKy8vICBXVEYK
Ky8vCisvLyAgQ3JlYXRlZCBieSBLZWl0aCBNaWxsZXIgb24gMy8yMS8xOS4KKy8vCisKKyNpZm5k
ZWYgSGVhZGVyX2gKKyNkZWZpbmUgSGVhZGVyX2gKKworCisjZW5kaWYgLyogSGVhZGVyX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hleE51bWJlci5oIGIvU291cmNlL1dURi93dGYv
SGV4TnVtYmVyLmgKaW5kZXggMjAxMmI4ZmU0YzZlMDAyOTJkMjdhNTczMzgyNmYzYTgyZDU1Yzk2
NC4uZjA5ZDEwYmIzZjU0MzMzNDczY2M5ZmQ5MGM4NmZmZjBlYzhkZTllYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvSGV4TnVtYmVyLmgKKysrIGIvU291cmNlL1dURi93dGYvSGV4TnVtYmVy
LmgKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2J1ZmZlci5sZW5ndGg7IH0KICAgICBib29sIGlzOEJpdCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2
b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pIGNvbnN0IHsgU3RyaW5nSW1w
bDo6Y29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJh
Y3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdCB7IGNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9u
LCBjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsgfQogCiBwcml2YXRlOgogICAgIGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gJioobV9idWZmZXIuY2hhcmFjdGVycy5lbmQo
KSAtIGxlbmd0aCgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTG9nZ2VyLmggYi9T
b3VyY2UvV1RGL3d0Zi9Mb2dnZXIuaAppbmRleCA1NTJmOWI2M2JmNzU4NzA4OWExZWVkNmU2MWIz
NzdjNTY4MjBhODVhLi40NzIyYzQ3NjQ4YzE0MGJhM2I2NTAyMjkxNWQ4ZmE4OTVlMDk3MzMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Mb2dnZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9M
b2dnZXIuaApAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3QgTG9nQXJndW1lbnQgewogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19lbnVtPFU+Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhVIGFyZ3VtZW50KSB7IHJl
dHVybiBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdf
dHlwZTxVPjo6dHlwZT4oYXJndW1lbnQpKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBU
PiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFUsIGZsb2F0Pjo6
dmFsdWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoZmxvYXQgYXJndW1lbnQpIHsgcmV0dXJuIFN0
cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lvbihhcmd1bWVudCk7IH0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxVLCBkb3VibGU+Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhkb3VibGUg
YXJndW1lbnQpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFByZWNpc2lvbihh
cmd1bWVudCk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVu
Y2U8VT46OnR5cGUsIEF0b21pY1N0cmluZz46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRvU3RyaW5n
KGNvbnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50LnN0cmluZygp
OyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQ+IHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPFU+Ojp0
eXBlLCBBdG9taWNTdHJpbmc+Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhjb25zdCBB
dG9taWNTdHJpbmcmIGFyZ3VtZW50KSB7IHJldHVybiBhcmd1bWVudDsgfQogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxVPjo6dHlwZSwgU3RyaW5nPjo6dmFs
dWUsIFN0cmluZz46OnR5cGUgdG9TdHJpbmcoU3RyaW5nIGFyZ3VtZW50KSB7IHJldHVybiBhcmd1
bWVudDsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPiBzdGF0aWMgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxV
Pjo6dHlwZSwgU3RyaW5nQnVpbGRlcio+Ojp2YWx1ZSwgU3RyaW5nPjo6dHlwZSB0b1N0cmluZyhT
dHJpbmdCdWlsZGVyKiBhcmd1bWVudCkgeyByZXR1cm4gYXJndW1lbnQtPnRvU3RyaW5nKCk7IH0K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4gc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxVLCBjb25zdCBjaGFyKj46OnZhbHVlLCBTdHJpbmc+Ojp0eXBlIHRv
U3RyaW5nKGNvbnN0IGNoYXIqIGFyZ3VtZW50KSB7IHJldHVybiBTdHJpbmcoYXJndW1lbnQpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmNwcAppbmRleCBiZjExYjAzZWEyYzBkMTIyNTc4YTUxZjQ1MTViOWM5YmEy
MDM0YTI2Li42ODJiM2JjZmE2NWNlNzJhMjgyNjUzNzhiNjFkYjAwOGFkODVhOTY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1
ZGUgPHRocmVhZD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3
dGYvUmFuZG9tTnVtYmVyU2VlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRHcm91cC5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVJMLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1VSTC5jcHAK
aW5kZXggNjdkNjFjMDk3MjQ1Yjg3YjZiNDc3ODE4ZDhmZDc0ZmNkODFhOGI2ZC4uMWI5NTdkZmQ5
ZTYxZjVmYzdhOGFiYThhMGVmOWFjMDlmMWI2NDc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVVJMLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VUkwuY3BwCkBAIC00ODAsNyArNDgwLDcg
QEAgdm9pZCBVUkw6OnNldEhvc3RBbmRQb3J0KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQpCiAg
ICAgaWYgKGNvbG9uSW5kZXggIT0gbm90Rm91bmQpIHsKICAgICAgICAgcG9ydCA9IGhvc3ROYW1l
LnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSk7CiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIGlu
dCBwb3J0SW50ID0gcG9ydC50b0ludFN0cmljdChvayk7CisgICAgICAgIGludCBwb3J0SW50ID0g
cG9ydC50b0ludFN0cmljdCgmb2spOwogICAgICAgICBpZiAoIW9rIHx8IHBvcnRJbnQgPCAwKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBob3N0TmFtZSA9IGhvc3ROYW1lLnN1YnN0cmlu
ZygwLCBjb2xvbkluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VSTEhlbHBlcnMu
Y3BwIGIvU291cmNlL1dURi93dGYvVVJMSGVscGVycy5jcHAKaW5kZXggY2EzODZmZGE1YWNlZWUz
OWYwYzc2YWM3YTQxYzM4ZDViYTA5ODg2MS4uMzkxMmNlZjUyY2RlMWU5ZDU5MTQyZDEzNDY4MzY4
NWMyODVhZGI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVVJMSGVscGVycy5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvVVJMSGVscGVycy5jcHAKQEAgLTc1OCw5ICs3NTgsOSBAQCBzdGF0
aWMgU3RyaW5nIGVzY2FwZVVuc2FmZUNoYXJhY3RlcnMoY29uc3QgU3RyaW5nJiBzb3VyY2VCdWZm
ZXIpCiAKICAgICBvdXRCdWZmZXIuZ3JvdyhpKTsKICAgICBpZiAoc291cmNlQnVmZmVyLmlzOEJp
dCgpKQotICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhvdXRCdWZmZXIuZGF0YSgp
LCBzb3VyY2VCdWZmZXIuY2hhcmFjdGVyczgoKSwgaSk7CisgICAgICAgIGNvcHlDaGFyYWN0ZXJz
KG91dEJ1ZmZlci5kYXRhKCksIHNvdXJjZUJ1ZmZlci5jaGFyYWN0ZXJzOCgpLCBpKTsKICAgICBl
bHNlCi0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKG91dEJ1ZmZlci5kYXRhKCks
IHNvdXJjZUJ1ZmZlci5jaGFyYWN0ZXJzMTYoKSwgaSk7CisgICAgICAgIGNvcHlDaGFyYWN0ZXJz
KG91dEJ1ZmZlci5kYXRhKCksIHNvdXJjZUJ1ZmZlci5jaGFyYWN0ZXJzMTYoKSwgaSk7CiAKICAg
ICBmb3IgKDsgaSA8IGxlbmd0aDsgKSB7CiAgICAgICAgIFVDaGFyMzIgYyA9IHNvdXJjZUJ1ZmZl
ci5jaGFyYWN0ZXJTdGFydGluZ0F0KGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVVJM
UGFyc2VyLmggYi9Tb3VyY2UvV1RGL3d0Zi9VUkxQYXJzZXIuaAppbmRleCAzZTM3NDFhNTQ3MDVk
YWJhZTU5M2JkYzg4YTM2MmU2NDQ1MzFkY2VlLi4wMDBlMjBlYTQ2NTA0YmJiOWVkMzMwMDhmOGZi
MGQxZjUyZjVmZmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9VUkxQYXJzZXIuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9VUkxQYXJzZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKIHN0cnVj
dCBVSUROQTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yVHJhaXRzLmggYi9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3JUcmFpdHMuaAppbmRleCAyYmY1ZWVlMWQyYTY2MTkwMWQ5NDg4
MjAwZmYxYTQ3ZjdmNDExOTQ4Li4xMTQzZjI5MzQ3ZDUzNTVkMDAxMTg4NTdlYzhjMDRiNTExOTk3
M2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3JUcmFpdHMuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3JUcmFpdHMuaApAQCAtMjgsOCArMjgsNiBAQAogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotICAgIGNsYXNzIEF0b21pY1N0cmluZzsKLQogICAgIHRlbXBsYXRlPGJvb2wgaXNQ
b2QsIHR5cGVuYW1lIFQ+CiAgICAgc3RydWN0IFZlY3RvclRyYWl0c0Jhc2U7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL05TVVJMRXh0cmFzLm1tIGIvU291cmNlL1dURi93dGYv
Y29jb2EvTlNVUkxFeHRyYXMubW0KaW5kZXggM2E0ZmNhOTkxZjQ2YmZmYmE3NDJkNmI1OTEzY2Rk
ZDg1YjFkZTUwNS4uNzNhZWFhZjc2ZTc3MTkwZDA2NzZjNWM4ZGM4NWY2YjIyZGI1YTQ5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvTlNVUkxFeHRyYXMubW0KKysrIGIvU291cmNl
L1dURi93dGYvY29jb2EvTlNVUkxFeHRyYXMubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQg
PHd0Zi9GdW5jdGlvbi5oPgogI2ltcG9ydCA8d3RmL09iakNSdW50aW1lRXh0cmFzLmg+CiAjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNp
bXBvcnQgPHd0Zi9VUkxIZWxwZXJzLmg+CiAjaW1wb3J0IDx3dGYvVVJMUGFyc2VyLmg+CiAjaW1w
b3J0IDx3dGYvVmVjdG9yLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5j
ZS9QZXJzaXN0ZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRDb2RlcnMuY3BwCmluZGV4IDk5YjJiZWVhY2JhYTcwNjk4OTUwYjY2Y2Y0YTAxZTc5YzJi
MTI1OTAuLmMyNGU0YjI4ODgyZGE4ZTFlZDQ4NDVjOTNlNWYyMDllNzM2MzY5ZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuY3BwCkBAIC0yNywx
NCArMjcsMTQgQEAKICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5o
PgogCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIHZvaWQgQ29kZXI8QXRvbWljU3Ry
aW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgYXRvbWlj
U3RyaW5nKQogewotICAgIGVuY29kZXIgPDwgYXRvbWljU3RyaW5nLnN0cmluZygpOworICAgIGVu
Y29kZXIgPDwgYXRvbWljU3RyaW5nOwogfQogCiBib29sIENvZGVyPEF0b21pY1N0cmluZz46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBBdG9taWNTdHJpbmcmIGF0b21pY1N0cmluZykKQEAgLTQz
LDcgKzQzLDcgQEAgYm9vbCBDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdHJpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdG9taWNTdHJpbmcgPSBz
dHJpbmc7CisgICAgYXRvbWljU3RyaW5nID0gc3RyaW5nLnRvQXRvbWljU3RyaW5nKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMywxMSArMTEzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBkZWNvZGVTdHJpbmdUZXh0KERlY29kZXImIGRlY29kZXIsIHVpbnQzMl90IGxlbmd0aCwgU3Ry
aW5nJiByCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZl
cjsKLSAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0
aCwgYnVmZmVyKTsKKyAgICBSZWY8U3RyaW5nSW1wbD4gc3RyaW5nID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5n
dGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ci0gICAgcmVzdWx0ID0gc3RyaW5nOworICAgIHJlc3VsdCA9IFdURk1vdmUoc3RyaW5nKTsKICAg
ICByZXR1cm4gdHJ1ZTsgICAgCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Bvc2l4
L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wb3NpeC9GaWxlU3lzdGVtUE9T
SVguY3BwCmluZGV4IDcwZDJmOThlNGQ3MmMyY2QxNTk5NGU5ZmE3ZjdhOWJjNGJmMGFmNTYuLjBk
NTYwZGYwOTBjZTEwODE2ZmU3YTAzNDBjMWMzZWUwMjZhYjA5Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPHd0
Zi9GaWxlTWV0YWRhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BU0NJSUxpdGVyYWwuaCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlMaXRlcmFsLmgKaW5kZXggNTM2NDRmYTkwMjI4OWQz
M2I5NjlkMjI3Y2RiZTVmMjIxNDNhNzA1MC4uMDQxMjJkOTFlNTVjNjUyNTlmODUwY2MzYTE5NWM4
YmMwZTI1OWM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BU0NJSUxpdGVyYWwu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJTGl0ZXJhbC5oCkBAIC0yNSw2ICsyNSw4
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KKwogbmFt
ZXNwYWNlIFdURiB7CiAKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzMsMzEgKzM1LDM3IEBAIGNs
YXNzIEFTQ0lJTGl0ZXJhbCB7CiBwdWJsaWM6CiAgICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBj
b25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgQVND
SUlMaXRlcmFsIGZyb21MaXRlcmFsVW5zYWZlKGNvbnN0IGNoYXIqIHN0cmluZykKKyAgICBzdGF0
aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBmcm9tTGl0ZXJhbFVuc2FmZShjb25zdCBjaGFyKiBz
dHJpbmcsIHNpemVfdCBsZW5ndGgpCiAgICAgewotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
IHsgc3RyaW5nIH07CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwgeyBzdHJpbmcsIGxlbmd0
aCB9OwogICAgIH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7CiAKICAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBudWxs
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwgeyBudWxscHRyIH07CisgICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwgeyBudWxscHRyLCAwIH07CiAgICAgfQogCiAgICAgY29u
c3QgY2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQorICAg
IGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPihtX2NoYXJhY3RlcnMpOyB9CisgICAgc2l6ZV90IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKIHByaXZhdGU6Ci0gICAgY29uc3RleHByIGV4cGxp
Y2l0IEFTQ0lJTGl0ZXJhbChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKSA6IG1fY2hhcmFjdGVycyhj
aGFyYWN0ZXJzKSB7IH0KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgQVNDSUlMaXRlcmFsKGNvbnN0
IGNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCisgICAgICAgIDogbV9jaGFyYWN0ZXJz
KGNoYXJhY3RlcnMpCisgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgIHsgfQogCiAgICAg
Y29uc3QgY2hhciogbV9jaGFyYWN0ZXJzOworICAgIHNpemVfdCBtX2xlbmd0aDsKIH07CiAKIGlu
bGluZSBuYW1lc3BhY2UgU3RyaW5nTGl0ZXJhbHMgewogCi1jb25zdGV4cHIgQVNDSUlMaXRlcmFs
IG9wZXJhdG9yIiIgX3MoY29uc3QgY2hhciogY2hhcmFjdGVycywgc2l6ZV90KQorY29uc3RleHBy
IEFTQ0lJTGl0ZXJhbCBvcGVyYXRvciIiIF9zKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbDo6ZnJvbUxpdGVyYWxVbnNhZmUo
Y2hhcmFjdGVycyk7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbDo6ZnJvbUxpdGVyYWxVbnNhZmUo
Y2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAogfSAvLyBpbmxpbmUgU3RyaW5nTGl0ZXJhbHMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAppbmRleCBmYmE3YzlhNzc0MDcyODY5ZjU4NTQ5
ZDNhNTExN2FlYTg5NmQ3YmY3Li5kMDI0N2Q0ZTY4MmVhZGJkNTAzM2U4YWFkYjkyY2ZmYWZkYmYy
NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCkBAIC0zMSwxMjIgKzMxLDEy
MiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotdGVtcGxhdGU8QXRvbWljU3RyaW5nOjpDYXNlQ29u
dmVydFR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6
Y29udmVydEFTQ0lJQ2FzZSgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nSW1wbCogaW1wbCA9IHRoaXMt
PmltcGwoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQotICAgICAgICByZXR1cm4gbnVsbEF0
b20oKTsKLQotICAgIC8vIENvbnZlcnQgc2hvcnQgc3RyaW5ncyB3aXRob3V0IGFsbG9jYXRpbmcg
YSBuZXcgU3RyaW5nSW1wbCwgc2luY2UKLSAgICAvLyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhl
c2Ugc3RyaW5ncyBhcmUgYWxyZWFkeSBpbiB0aGUgYXRvbWljCi0gICAgLy8gc3RyaW5nIHRhYmxl
IGFuZCBzbyBubyBtZW1vcnkgYWxsb2NhdGlvbiB3aWxsIGJlIHJlcXVpcmVkLgotICAgIHVuc2ln
bmVkIGxlbmd0aDsKLSAgICBjb25zdCB1bnNpZ25lZCBsb2NhbEJ1ZmZlclNpemUgPSAxMDA7Ci0g
ICAgaWYgKGltcGwtPmlzOEJpdCgpICYmIChsZW5ndGggPSBpbXBsLT5sZW5ndGgoKSkgPD0gbG9j
YWxCdWZmZXJTaXplKSB7Ci0gICAgICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzID0gaW1wbC0+
Y2hhcmFjdGVyczgoKTsKLSAgICAgICAgdW5zaWduZWQgZmFpbGluZ0luZGV4OwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0
eXBlID09IENhc2VDb252ZXJ0VHlwZTo6TG93ZXIgPyBVTkxJS0VMWShpc0FTQ0lJVXBwZXIoY2hh
cmFjdGVyc1tpXSkpIDogTElLRUxZKGlzQVNDSUlMb3dlcihjaGFyYWN0ZXJzW2ldKSkpIHsKLSAg
ICAgICAgICAgICAgICBmYWlsaW5nSW5kZXggPSBpOwotICAgICAgICAgICAgICAgIGdvdG8gU2xv
d1BhdGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICp0aGlzOwot
U2xvd1BhdGg6Ci0gICAgICAgIExDaGFyIGxvY2FsQnVmZmVyW2xvY2FsQnVmZmVyU2l6ZV07Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYWlsaW5nSW5kZXg7ICsraSkKLSAgICAg
ICAgICAgIGxvY2FsQnVmZmVyW2ldID0gY2hhcmFjdGVyc1tpXTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZmFpbGluZ0luZGV4OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBsb2Nh
bEJ1ZmZlcltpXSA9IHR5cGUgPT0gQ2FzZUNvbnZlcnRUeXBlOjpMb3dlciA/IHRvQVNDSUlMb3dl
cihjaGFyYWN0ZXJzW2ldKSA6IHRvQVNDSUlVcHBlcihjaGFyYWN0ZXJzW2ldKTsKLSAgICAgICAg
cmV0dXJuIEF0b21pY1N0cmluZyhsb2NhbEJ1ZmZlciwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBS
ZWY8U3RyaW5nSW1wbD4gY29udmVydGVkU3RyaW5nID0gdHlwZSA9PSBDYXNlQ29udmVydFR5cGU6
Okxvd2VyID8gaW1wbC0+Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IGltcGwtPmNvbnZlcnRU
b0FTQ0lJVXBwZXJjYXNlKCk7Ci0gICAgaWYgKExJS0VMWShjb252ZXJ0ZWRTdHJpbmcucHRyKCkg
PT0gaW1wbCkpCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIEF0b21pY1N0cmluZyByZXN1
bHQ7Ci0gICAgcmVzdWx0Lm1fc3RyaW5nID0gQXRvbWljU3RyaW5nSW1wbDo6YWRkKGNvbnZlcnRl
ZFN0cmluZy5wdHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQXRvbWljU3RyaW5nIEF0
b21pY1N0cmluZzo6Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSBjb25zdAotewotICAgIHJldHVy
biBjb252ZXJ0QVNDSUlDYXNlPENhc2VDb252ZXJ0VHlwZTo6TG93ZXI+KCk7Ci19Ci0KLUF0b21p
Y1N0cmluZyBBdG9taWNTdHJpbmc6OmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gY29udmVydEFTQ0lJQ2FzZTxDYXNlQ29udmVydFR5cGU6OlVwcGVyPigpOwot
fQotCi1BdG9taWNTdHJpbmcgQXRvbWljU3RyaW5nOjpudW1iZXIoaW50IG51bWJlcikKLXsKLSAg
ICByZXR1cm4gbnVtYmVyVG9TdHJpbmdTaWduZWQ8QXRvbWljU3RyaW5nPihudW1iZXIpOwotfQot
Ci1BdG9taWNTdHJpbmcgQXRvbWljU3RyaW5nOjpudW1iZXIodW5zaWduZWQgbnVtYmVyKQotewot
ICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1Vuc2lnbmVkPEF0b21pY1N0cmluZz4obnVtYmVyKTsK
LX0KLQotQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6bnVtYmVyKHVuc2lnbmVkIGxvbmcgbnVt
YmVyKQotewotICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1Vuc2lnbmVkPEF0b21pY1N0cmluZz4o
bnVtYmVyKTsKLX0KLQotQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6bnVtYmVyKHVuc2lnbmVk
IGxvbmcgbG9uZyBudW1iZXIpCi17Ci0gICAgcmV0dXJuIG51bWJlclRvU3RyaW5nVW5zaWduZWQ8
QXRvbWljU3RyaW5nPihudW1iZXIpOwotfQotCi1BdG9taWNTdHJpbmcgQXRvbWljU3RyaW5nOjpu
dW1iZXIoZmxvYXQgbnVtYmVyKQotewotICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsK
LSAgICByZXR1cm4gbnVtYmVyVG9TdHJpbmcobnVtYmVyLCBidWZmZXIpOwotfQotCi1BdG9taWNT
dHJpbmcgQXRvbWljU3RyaW5nOjpudW1iZXIoZG91YmxlIG51bWJlcikKLXsKLSAgICBOdW1iZXJU
b1N0cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAgcmV0dXJuIG51bWJlclRvU3RyaW5nKG51bWJlciwg
YnVmZmVyKTsKLX0KLQotQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6ZnJvbVVURjhJbnRlcm5h
bChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzU3RhcnQsIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnNFbmQp
Ci17Ci0gICAgYXV0byBpbXBsID0gQXRvbWljU3RyaW5nSW1wbDo6YWRkVVRGOChjaGFyYWN0ZXJz
U3RhcnQsIGNoYXJhY3RlcnNFbmQpOwotICAgIGlmICghaW1wbCkKLSAgICAgICAgcmV0dXJuIG51
bGxBdG9tKCk7Ci0gICAgcmV0dXJuIGltcGwuZ2V0KCk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi12
b2lkIEF0b21pY1N0cmluZzo6c2hvdygpIGNvbnN0Ci17Ci0gICAgbV9zdHJpbmcuc2hvdygpOwot
fQotI2VuZGlmCi0KLVdURl9FWFBPUlRfUFJJVkFURSBMYXp5TmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBudWxsQXRvbURhdGE7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgTGF6eU5ldmVyRGVzdHJv
eWVkPEF0b21pY1N0cmluZz4gZW1wdHlBdG9tRGF0YTsKLVdURl9FWFBPUlRfUFJJVkFURSBMYXp5
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzdGFyQXRvbURhdGE7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgTGF6eU5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4geG1sQXRvbURhdGE7Ci1XVEZf
RVhQT1JUX1BSSVZBVEUgTGF6eU5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4geG1sbnNBdG9t
RGF0YTsKLQotdm9pZCBBdG9taWNTdHJpbmc6OmluaXQoKQotewotICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBpbml0aWFsaXplS2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVLZXks
IFtdIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6YXRpb24gaXMgbm90IHRocmVhZCBzYWZlLCBzbyB0
aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkIGZpcnN0Lgot
ICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKLQotICAgICAgICBudWxsQXRvbURhdGEuY29u
c3RydWN0KCk7Ci0gICAgICAgIGVtcHR5QXRvbURhdGEuY29uc3RydWN0KCIiKTsKLSAgICAgICAg
c3RhckF0b21EYXRhLmNvbnN0cnVjdCgiKiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgICAgICB4bWxBdG9tRGF0YS5jb25zdHJ1Y3QoInhtbCIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICB4bWxuc0F0b21EYXRhLmNvbnN0cnVj
dCgieG1sbnMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICB9KTsK
LX0KKy8vdGVtcGxhdGU8QXRvbWljU3RyaW5nOjpDYXNlQ29udmVydFR5cGUgdHlwZT4KKy8vQUxX
QVlTX0lOTElORSBBdG9taWNTdHJpbmcgQXRvbWljU3RyaW5nOjpjb252ZXJ0QVNDSUlDYXNlKCkg
Y29uc3QKKy8veworLy8gICAgU3RyaW5nSW1wbCogaW1wbCA9IHRoaXMtPmltcGwoKTsKKy8vICAg
IGlmIChVTkxJS0VMWSghaW1wbCkpCisvLyAgICAgICAgcmV0dXJuIG51bGxBdG9tKCk7CisvLwor
Ly8gICAgLy8gQ29udmVydCBzaG9ydCBzdHJpbmdzIHdpdGhvdXQgYWxsb2NhdGluZyBhIG5ldyBT
dHJpbmdJbXBsLCBzaW5jZQorLy8gICAgLy8gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoZXNlIHN0
cmluZ3MgYXJlIGFscmVhZHkgaW4gdGhlIGF0b21pYworLy8gICAgLy8gc3RyaW5nIHRhYmxlIGFu
ZCBzbyBubyBtZW1vcnkgYWxsb2NhdGlvbiB3aWxsIGJlIHJlcXVpcmVkLgorLy8gICAgdW5zaWdu
ZWQgbGVuZ3RoOworLy8gICAgY29uc3QgdW5zaWduZWQgbG9jYWxCdWZmZXJTaXplID0gMTAwOwor
Ly8gICAgaWYgKGltcGwtPmlzOEJpdCgpICYmIChsZW5ndGggPSBpbXBsLT5sZW5ndGgoKSkgPD0g
bG9jYWxCdWZmZXJTaXplKSB7CisvLyAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMgPSBp
bXBsLT5jaGFyYWN0ZXJzOCgpOworLy8gICAgICAgIHVuc2lnbmVkIGZhaWxpbmdJbmRleDsKKy8v
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKy8vICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gQ2FzZUNvbnZlcnRUeXBlOjpMb3dlciA/IFVOTElLRUxZKGlzQVND
SUlVcHBlcihjaGFyYWN0ZXJzW2ldKSkgOiBMSUtFTFkoaXNBU0NJSUxvd2VyKGNoYXJhY3RlcnNb
aV0pKSkgeworLy8gICAgICAgICAgICAgICAgZmFpbGluZ0luZGV4ID0gaTsKKy8vICAgICAgICAg
ICAgICAgIGdvdG8gU2xvd1BhdGg7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICB9CisvLyAg
ICAgICAgcmV0dXJuICp0aGlzOworLy9TbG93UGF0aDoKKy8vICAgICAgICBMQ2hhciBsb2NhbEJ1
ZmZlcltsb2NhbEJ1ZmZlclNpemVdOworLy8gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmYWlsaW5nSW5kZXg7ICsraSkKKy8vICAgICAgICAgICAgbG9jYWxCdWZmZXJbaV0gPSBjaGFy
YWN0ZXJzW2ldOworLy8gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8
IGxlbmd0aDsgKytpKQorLy8gICAgICAgICAgICBsb2NhbEJ1ZmZlcltpXSA9IHR5cGUgPT0gQ2Fz
ZUNvbnZlcnRUeXBlOjpMb3dlciA/IHRvQVNDSUlMb3dlcihjaGFyYWN0ZXJzW2ldKSA6IHRvQVND
SUlVcHBlcihjaGFyYWN0ZXJzW2ldKTsKKy8vICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKGxv
Y2FsQnVmZmVyLCBsZW5ndGgpOworLy8gICAgfQorLy8KKy8vICAgIFJlZjxTdHJpbmdJbXBsPiBj
b252ZXJ0ZWRTdHJpbmcgPSB0eXBlID09IENhc2VDb252ZXJ0VHlwZTo6TG93ZXIgPyBpbXBsLT5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIDogaW1wbC0+Y29udmVydFRvQVNDSUlVcHBlcmNhc2Uo
KTsKKy8vICAgIGlmIChMSUtFTFkoY29udmVydGVkU3RyaW5nLnB0cigpID09IGltcGwpKQorLy8g
ICAgICAgIHJldHVybiAqdGhpczsKKy8vCisvLyAgICBBdG9taWNTdHJpbmcgcmVzdWx0OworLy8g
ICAgcmVzdWx0Lm1fc3RyaW5nID0gQXRvbWljU3RyaW5nSW1wbDo6YWRkKGNvbnZlcnRlZFN0cmlu
Zy5wdHIoKSk7CisvLyAgICByZXR1cm4gcmVzdWx0OworLy99CisvLworLy9BdG9taWNTdHJpbmcg
QXRvbWljU3RyaW5nOjpjb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpIGNvbnN0CisvL3sKKy8vICAg
IHJldHVybiBjb252ZXJ0QVNDSUlDYXNlPENhc2VDb252ZXJ0VHlwZTo6TG93ZXI+KCk7CisvL30K
Ky8vCisvL0F0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6OmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNl
KCkgY29uc3QKKy8veworLy8gICAgcmV0dXJuIGNvbnZlcnRBU0NJSUNhc2U8Q2FzZUNvbnZlcnRU
eXBlOjpVcHBlcj4oKTsKKy8vfQorLy8KKy8vQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6bnVt
YmVyKGludCBudW1iZXIpCisvL3sKKy8vICAgIHJldHVybiBudW1iZXJUb1N0cmluZ1NpZ25lZDxB
dG9taWNTdHJpbmc+KG51bWJlcik7CisvL30KKy8vCisvL0F0b21pY1N0cmluZyBBdG9taWNTdHJp
bmc6Om51bWJlcih1bnNpZ25lZCBudW1iZXIpCisvL3sKKy8vICAgIHJldHVybiBudW1iZXJUb1N0
cmluZ1Vuc2lnbmVkPEF0b21pY1N0cmluZz4obnVtYmVyKTsKKy8vfQorLy8KKy8vQXRvbWljU3Ry
aW5nIEF0b21pY1N0cmluZzo6bnVtYmVyKHVuc2lnbmVkIGxvbmcgbnVtYmVyKQorLy97CisvLyAg
ICByZXR1cm4gbnVtYmVyVG9TdHJpbmdVbnNpZ25lZDxBdG9taWNTdHJpbmc+KG51bWJlcik7Cisv
L30KKy8vCisvL0F0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6Om51bWJlcih1bnNpZ25lZCBsb25n
IGxvbmcgbnVtYmVyKQorLy97CisvLyAgICByZXR1cm4gbnVtYmVyVG9TdHJpbmdVbnNpZ25lZDxB
dG9taWNTdHJpbmc+KG51bWJlcik7CisvL30KKy8vCisvL0F0b21pY1N0cmluZyBBdG9taWNTdHJp
bmc6Om51bWJlcihmbG9hdCBudW1iZXIpCisvL3sKKy8vICAgIE51bWJlclRvU3RyaW5nQnVmZmVy
IGJ1ZmZlcjsKKy8vICAgIHJldHVybiBudW1iZXJUb1N0cmluZyhudW1iZXIsIGJ1ZmZlcik7Cisv
L30KKy8vCisvL0F0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6Om51bWJlcihkb3VibGUgbnVtYmVy
KQorLy97CisvLyAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7CisvLyAgICByZXR1cm4g
bnVtYmVyVG9TdHJpbmcobnVtYmVyLCBidWZmZXIpOworLy99CisvLworLy9BdG9taWNTdHJpbmcg
QXRvbWljU3RyaW5nOjpmcm9tVVRGOEludGVybmFsKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnNTdGFy
dCwgY29uc3QgY2hhciogY2hhcmFjdGVyc0VuZCkKKy8veworLy8gICAgYXV0byBpbXBsID0gQXRv
bWljU3RyaW5nSW1wbDo6YWRkVVRGOChjaGFyYWN0ZXJzU3RhcnQsIGNoYXJhY3RlcnNFbmQpOwor
Ly8gICAgaWYgKCFpbXBsKQorLy8gICAgICAgIHJldHVybiBudWxsQXRvbSgpOworLy8gICAgcmV0
dXJuIGltcGwuZ2V0KCk7CisvL30KKy8vCisvLyNpZm5kZWYgTkRFQlVHCisvL3ZvaWQgQXRvbWlj
U3RyaW5nOjpzaG93KCkgY29uc3QKKy8veworLy8gICAgbV9zdHJpbmcuc2hvdygpOworLy99Cisv
LyNlbmRpZgorLy8KKy8vV1RGX0VYUE9SVF9QUklWQVRFIExhenlOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IG51bGxBdG9tRGF0YTsKKy8vV1RGX0VYUE9SVF9QUklWQVRFIExhenlOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGVtcHR5QXRvbURhdGE7CisvL1dURl9FWFBPUlRfUFJJVkFU
RSBMYXp5TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBzdGFyQXRvbURhdGE7CisvL1dURl9F
WFBPUlRfUFJJVkFURSBMYXp5TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB4bWxBdG9tRGF0
YTsKKy8vV1RGX0VYUE9SVF9QUklWQVRFIExhenlOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IHhtbG5zQXRvbURhdGE7CisvLworLy92b2lkIEF0b21pY1N0cmluZzo6aW5pdCgpCisvL3sKKy8v
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplS2V5OworLy8gICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZUtleSwgW10geworLy8gICAgICAgIC8vIEluaXRpYWxpemF0aW9uIGlz
IG5vdCB0aHJlYWQgc2FmZSwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRo
ZSBtYWluIHRocmVhZCBmaXJzdC4KKy8vICAgICAgICBBU1NFUlQoaXNVSVRocmVhZCgpKTsKKy8v
CisvLyAgICAgICAgbnVsbEF0b21EYXRhLmNvbnN0cnVjdCgpOworLy8gICAgICAgIGVtcHR5QXRv
bURhdGEuY29uc3RydWN0KCIiKTsKKy8vICAgICAgICBzdGFyQXRvbURhdGEuY29uc3RydWN0KCIq
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisvLyAgICAgICAgeG1sQXRv
bURhdGEuY29uc3RydWN0KCJ4bWwiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKy8vICAgICAgICB4bWxuc0F0b21EYXRhLmNvbnN0cnVjdCgieG1sbnMiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKy8vICAgIH0pOworLy99CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgKaW5kZXggMTJkMGY2ZjgxYzEzYTdl
MGQ0ODJjZDgyMDYyYTZjZjc5NzRlNWRhYi4uNjUxZGE5MzVhOWFjOTM5ZTA4YWQ1YTc4ZmEyNjk3
NGU4ZTNjZGE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oCkBAIC0zMCw2ICszMCw4
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvd2luL1dDaGFyU3RyaW5nRXh0cmFzLmg+CiAjZW5kaWYK
IAorbmFtZXNwYWNlIFdURiB7CisKIC8vIERlZmluZSAnTk9fSU1QTElDSVRfQVRPTUlDU1RSSU5H
JyBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyLAogLy8gdG8gZGlzYWxsb3cgKGV4cGVuc2l2
ZSkgaW1wbGljaXQgU3RyaW5nLS0+QXRvbWljU3RyaW5nIGNvbnZlcnNpb25zLgogI2lmZGVmIE5P
X0lNUExJQ0lUX0FUT01JQ1NUUklORwpAQCAtMzgsMTUgKzQwLDEyIEBACiAjZGVmaW5lIEFUT01J
Q1NUUklOR19DT05WRVJTSU9OCiAjZW5kaWYKIAotbmFtZXNwYWNlIFdURiB7Ci0KLXN0cnVjdCBB
dG9taWNTdHJpbmdIYXNoOwotCi1jbGFzcyBBdG9taWNTdHJpbmcgeworY2xhc3MgQXRvbWljU3Ry
aW5nIDogcHVibGljIFN0cmluZyB7CisgICAgdXNpbmcgQmFzZSA9IFN0cmluZzsKIHB1YmxpYzoK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaW5pdCgpOwogCi0gICAgQXRvbWlj
U3RyaW5nKCk7CisgICAgQXRvbWljU3RyaW5nKCkgPSBkZWZhdWx0OwogICAgIEF0b21pY1N0cmlu
Zyhjb25zdCBMQ2hhciopOwogICAgIEF0b21pY1N0cmluZyhjb25zdCBjaGFyKik7CiAgICAgQXRv
bWljU3RyaW5nKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKQEAgLTU1LDMyMyArNTQs
MzcyIEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAg
ICBleHBsaWNpdCBBdG9taWNTdHJpbmcoY29uc3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0
eT4mIGNoYXJhY3RlcnMpCi0gICAgICAgIDogbV9zdHJpbmcoQXRvbWljU3RyaW5nSW1wbDo6YWRk
KGNoYXJhY3RlcnMuZGF0YSgpLCBjaGFyYWN0ZXJzLnNpemUoKSkpCiAgICAgeworICAgICAgICBp
ZiAoY2hhcmFjdGVycy5zaXplKCkgPD0gbWF4U21hbGxTdHJpbmdMZW5ndGgpCisgICAgICAgICAg
ICB1Lm1fZGF0YSA9IGNoYXJhY3RlcnMuZGF0YSgpLCBjaGFyYWN0ZXJzLnNpemUoKS5jb250ZW50
cygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1Lm1faW1wbCA9IEF0b21pY1N0cmluZ0lt
cGw6OmFkZChjaGFyYWN0ZXJzKTsKICAgICB9CiAKLSAgICBBdG9taWNTdHJpbmcoQXRvbWljU3Ry
aW5nSW1wbCopOwotICAgIEF0b21pY1N0cmluZyhSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4mJik7
Ci0gICAgQXRvbWljU3RyaW5nKGNvbnN0IFN0YXRpY1N0cmluZ0ltcGwqKTsKLSAgICBBVE9NSUNT
VFJJTkdfQ09OVkVSU0lPTiBBdG9taWNTdHJpbmcoU3RyaW5nSW1wbCopOwotICAgIEFUT01JQ1NU
UklOR19DT05WRVJTSU9OIEF0b21pY1N0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICBBdG9taWNT
dHJpbmcoU3RyaW5nSW1wbCogYmFzZVN0cmluZywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0KLSAgICAvLyBGSVhNRTogQXRvbWljU3RyaW5nIGRvZXNu4oCZdCBhbHdheXMgaGF2
ZSBBdG9taWNTdHJpbmdJbXBsLCBzbyBvbmUgb2YgdGhvc2UgdHdvIG5hbWVzIG5lZWRzIHRvIGNo
YW5nZS4uCi0gICAgQXRvbWljU3RyaW5nKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotCi0gICAg
ZW51bSBDb25zdHJ1Y3RGcm9tTGl0ZXJhbFRhZyB7IENvbnN0cnVjdEZyb21MaXRlcmFsIH07Ci0g
ICAgQXRvbWljU3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwg
Q29uc3RydWN0RnJvbUxpdGVyYWxUYWcpCi0gICAgICAgIDogbV9zdHJpbmcoQXRvbWljU3RyaW5n
SW1wbDo6YWRkTGl0ZXJhbChjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgIEFUT01JQ1NUUklOR19D
T05WRVJTSU9OIEF0b21pY1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7CisgICAg
ICAgIGlmICghc3RyaW5nLmhhc0ltcGwoKSkKKyAgICAgICAgICAgIHUubV9kYXRhID0gc3RyaW5n
LmNvbnRlbnRzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHUubV9pbXBsID0gQXRvbWlj
U3RyaW5nSW1wbDo6YWRkKHN0cmluZy5pbXBsKCksIDAsIHN0cmluZy5sZW5ndGgoKSk7CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+IEFMV0FZU19JTkxJTkUg
QXRvbWljU3RyaW5nKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIENv
bnN0cnVjdEZyb21MaXRlcmFsVGFnKQotICAgICAgICA6IG1fc3RyaW5nKEF0b21pY1N0cmluZ0lt
cGw6OmFkZExpdGVyYWwoY2hhcmFjdGVycywgY2hhcmFjdGVyQ291bnQgLSAxKSkKKyAgICBleHBs
aWNpdCBBdG9taWNTdHJpbmcoS25vd25TbWFsbFN0cmluZ1RhZ1R5cGUgdGFnLCB1aW50NjRfdCBj
b250ZW50cykKKyAgICAgICAgOiBCYXNlKHRhZywgY29udGVudHMpIHsgfQorCisgICAgQUxXQVlT
X0lOTElORSBzdGF0aWMgQXRvbWljU3RyaW5nIG51bGxBdG9tKCkgeyByZXR1cm4gQXRvbWljU3Ry
aW5nKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBBdG9taWNTdHJpbmcgZW1wdHlBdG9t
KCkKICAgICB7Ci0gICAgICAgIENPTVBJTEVfQVNTRVJUKGNoYXJhY3RlckNvdW50ID4gMSwgQXRv
bWljU3RyaW5nRnJvbUxpdGVyYWxOb3RFbXB0eSk7Ci0gICAgICAgIENPTVBJTEVfQVNTRVJUKChj
aGFyYWN0ZXJDb3VudCAtIDEgPD0gKCh1bnNpZ25lZCh+MCkgLSBzaXplb2YoU3RyaW5nSW1wbCkp
IC8gc2l6ZW9mKExDaGFyKSkpLCBBdG9taWNTdHJpbmdGcm9tTGl0ZXJhbENhbm5vdE92ZXJmbG93
KTsKKyAgICAgICAgY29uc3RleHByIHVpbnQ2NF90IGNvbnRlbnRzID0gdG9QYWNrZWRTdHJpbmdD
b25zdGV4cHIoIiIsIDApOworICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKEJhc2U6Oktub3du
U21hbGxTdHJpbmcsIGNvbnRlbnRzKTsKICAgICB9CiAKLSAgICAvLyBXZSBoYXZlIHRvIGRlY2xh
cmUgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGNvcHkgYXNzaWdubWVudCBvcGVyYXRvciBhcyB3
ZWxsLCBvdGhlcndpc2UKLSAgICAvLyB0aGV5J2xsIGJlIGltcGxpY2l0bHkgZGVsZXRlZCBieSBh
ZGRpbmcgdGhlIG1vdmUgY29uc3RydWN0b3IgYW5kIG1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4K
LSAgICBBdG9taWNTdHJpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBvdGhlcikgOiBtX3N0cmluZyhv
dGhlci5tX3N0cmluZykgeyB9Ci0gICAgQXRvbWljU3RyaW5nKEF0b21pY1N0cmluZyYmIG90aGVy
KSA6IG1fc3RyaW5nKFdURk1vdmUob3RoZXIubV9zdHJpbmcpKSB7IH0KLSAgICBBdG9taWNTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBBdG9taWNTdHJpbmcmIG90aGVyKSB7IG1fc3RyaW5nID0gb3Ro
ZXIubV9zdHJpbmc7IHJldHVybiAqdGhpczsgfQotICAgIEF0b21pY1N0cmluZyYgb3BlcmF0b3I9
KEF0b21pY1N0cmluZyYmIG90aGVyKSB7IG1fc3RyaW5nID0gV1RGTW92ZShvdGhlci5tX3N0cmlu
Zyk7IHJldHVybiAqdGhpczsgfQotCi0gICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywg
d2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQu
Ci0gICAgQXRvbWljU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3N0
cmluZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCk7IH0KLQotICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IGlzTnVsbCgpID8gMCA6IGltcGwoKS0+ZXhpc3RpbmdIYXNoKCk7IH0KLQotICAgIG9wZXJhdG9y
IGNvbnN0IFN0cmluZyYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQotICAgIGNvbnN0IFN0
cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH07Ci0KLSAgICBBdG9taWNT
dHJpbmdJbXBsKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5n
SW1wbCAqPihtX3N0cmluZy5pbXBsKCkpOyB9Ci0KLSAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nLmlzOEJpdCgpOyB9Ci0gICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVyczgoKTsgfQotICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzMTYo
KTsgfQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0
aCgpOyB9Ci0KLSAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGludCBpKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZ1tpXTsgfQotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBBdG9t
aWNTdHJpbmcgbnVtYmVyKGludCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBBdG9t
aWNTdHJpbmcgbnVtYmVyKHVuc2lnbmVkKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEF0b21pY1N0cmluZyBudW1iZXIodW5zaWduZWQgbG9uZyk7Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKHVuc2lnbmVkIGxvbmcgbG9uZyk7Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKGZsb2F0KTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEF0b21pY1N0cmluZyBudW1iZXIoZG91YmxlKTsK
LSAgICAvLyBJZiB3ZSBuZWVkIG1vcmUgb3ZlcmxvYWRzIG9mIHRoZSBudW1iZXIgZnVuY3Rpb24s
IHdlIGNhbiBhZGQgYWxsIHRoZSBvdGhlcnMgdGhhdCBTdHJpbmcgaGFzLCBidXQgdGhlc2Ugc2Vl
bSB0byBkbyBmb3Igbm93LgotCi0gICAgYm9vbCBjb250YWlucyhVQ2hhciBjaGFyYWN0ZXIpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLmNvbnRhaW5zKGNoYXJhY3Rlcik7IH0KLSAgICBib29sIGNv
bnRhaW5zKGNvbnN0IExDaGFyKiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmNvbnRh
aW5zKHN0cmluZyk7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhzdHJpbmcpOyB9Ci0gICAgYm9vbCBjb250
YWluc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy5jb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZyk7IH0KLQotICAgIHNp
emVfdCBmaW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZy5maW5kKGNoYXJhY3Rlciwgc3RhcnQpOyB9Ci0gICAgc2l6ZV90IGZpbmQo
Y29uc3QgTENoYXIqIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZy5maW5kKHN0cmluZywgc3RhcnQpOyB9Ci0gICAgc2l6ZV90IGZpbmQoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcu
ZmluZChzdHJpbmcsIHN0YXJ0KTsgfQotICAgIHNpemVfdCBmaW5kSWdub3JpbmdBU0NJSUNhc2Uo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmZpbmRJZ25vcmlu
Z0FTQ0lJQ2FzZShzdHJpbmcpOyB9Ci0gICAgc2l6ZV90IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnRPZmZzZXQpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nLmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcsIHN0YXJ0T2Zmc2V0KTsgfQot
ICAgIHNpemVfdCBmaW5kKENvZGVVbml0TWF0Y2hGdW5jdGlvbiBtYXRjaEZ1bmN0aW9uLCB1bnNp
Z25lZCBzdGFydCA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmZpbmQobWF0Y2hGdW5jdGlv
biwgc3RhcnQpOyB9Ci0KLSAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3RyaW5nJiBzdHJpbmcp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnN0YXJ0c1dpdGgoc3RyaW5nKTsgfQotICAgIGJvb2wg
c3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZy5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nKTsgfQot
ICAgIGJvb2wgc3RhcnRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nLnN0YXJ0c1dpdGgoY2hhcmFjdGVyKTsgfQotICAgIHRlbXBsYXRlPHVuc2lnbmVkIG1hdGNo
TGVuZ3RoPiBib29sIHN0YXJ0c1dpdGgoY29uc3QgY2hhciAoJnByZWZpeClbbWF0Y2hMZW5ndGhd
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5zdGFydHNXaXRoPG1hdGNoTGVuZ3RoPihwcmVmaXgp
OyB9Ci0KLSAgICBib29sIGVuZHNXaXRoKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZy5lbmRzV2l0aChzdHJpbmcpOyB9Ci0gICAgYm9vbCBlbmRzV2l0aElnbm9y
aW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Zy5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZyk7IH0KLSAgICBib29sIGVuZHNXaXRo
KFVDaGFyIGNoYXJhY3RlcikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuZW5kc1dpdGgoY2hhcmFj
dGVyKTsgfQotICAgIHRlbXBsYXRlPHVuc2lnbmVkIG1hdGNoTGVuZ3RoPiBib29sIGVuZHNXaXRo
KGNvbnN0IGNoYXIgKCZwcmVmaXgpW21hdGNoTGVuZ3RoXSkgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmcuZW5kc1dpdGg8bWF0Y2hMZW5ndGg+KHByZWZpeCk7IH0KLQotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBBdG9taWNTdHJpbmcgY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSBjb25zdDsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgQXRvbWljU3RyaW5nIGNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkg
Y29uc3Q7Ci0KLSAgICBpbnQgdG9JbnQoYm9vbCogb2sgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZy50b0ludChvayk7IH0KLSAgICBkb3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSAwKSBjb25z
dCB7IHJldHVybiBtX3N0cmluZy50b0RvdWJsZShvayk7IH0KLSAgICBmbG9hdCB0b0Zsb2F0KGJv
b2wqIG9rID0gMCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9GbG9hdChvayk7IH0KLSAgICBi
b29sIHBlcmNlbnRhZ2UoaW50JiBwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5wZXJjZW50YWdl
KHApOyB9Ci0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVs
bCgpOyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0
eSgpOyB9Ci0KLSNpZiBVU0UoQ0YpCi0gICAgQXRvbWljU3RyaW5nKENGU3RyaW5nUmVmKTsKLSNl
bmRpZgotCi0jaWZkZWYgX19PQkpDX18KLSAgICBBdG9taWNTdHJpbmcoTlNTdHJpbmcqKTsKLSAg
ICBvcGVyYXRvciBOU1N0cmluZyooKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQotI2VuZGlm
Ci0KLSNpZiBPUyhXSU5ET1dTKSAmJiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+PSA1OQotICAg
IEF0b21pY1N0cmluZyhjb25zdCB3Y2hhcl90KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
Ci0gICAgICAgIDogQXRvbWljU3RyaW5nKHVjaGFyRnJvbShjaGFyYWN0ZXJzKSwgbGVuZ3RoKSB7
IH0KLQotICAgIEF0b21pY1N0cmluZyhjb25zdCB3Y2hhcl90KiBjaGFyYWN0ZXJzKQotICAgICAg
ICA6IEF0b21pY1N0cmluZyh1Y2hhckZyb20oY2hhcmFjdGVycykpIHsgfQotI2VuZGlmCi0KLSAg
ICAvLyBBdG9taWNTdHJpbmc6OmZyb21VVEY4IHdpbGwgcmV0dXJuIGEgbnVsbCBzdHJpbmcgaWYg
dGhlIGlucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMuCi0gICAgc3Rh
dGljIEF0b21pY1N0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiwgc2l6ZV90KTsKLSAgICBzdGF0
aWMgQXRvbWljU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqKTsKLQotI2lmbmRlZiBOREVCVUcK
LSAgICB2b2lkIHNob3coKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIC8vIFRoZSBl
eHBsaWNpdCBjb25zdHJ1Y3RvcnMgd2l0aCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsIG11c3QgYmUgdXNlZCBmb3IgbGl0ZXJhbHMuCi0gICAgQXRvbWljU3RyaW5nKEFTQ0lJTGl0
ZXJhbCk7CisgICAgQUxXQVlTX0lOTElORSBTdHJpbmdWaWV3IHZpZXcoKSBjb25zdCB7IHJldHVy
biBCYXNlOjp2aWV3KCk7IH0KIAotICAgIGVudW0gY2xhc3MgQ2FzZUNvbnZlcnRUeXBlIHsgVXBw
ZXIsIExvd2VyIH07Ci0gICAgdGVtcGxhdGU8Q2FzZUNvbnZlcnRUeXBlPiBBdG9taWNTdHJpbmcg
Y29udmVydEFTQ0lJQ2FzZSgpIGNvbnN0OwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBBdG9taWNTdHJpbmcgZnJvbVVURjhJbnRlcm5hbChjb25zdCBjaGFyKiwgY29uc3QgY2hhciop
OworICAgIEF0b21pY1N0cmluZyhBdG9taWNTdHJpbmdJbXBsKik7CisgICAgQXRvbWljU3RyaW5n
KFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiYmKTsKKyAgICBBdG9taWNTdHJpbmcoY29uc3QgU3Rh
dGljU3RyaW5nSW1wbCopOworICAgIEFUT01JQ1NUUklOR19DT05WRVJTSU9OIEF0b21pY1N0cmlu
ZyhTdHJpbmdJbXBsKik7CisgICAgQXRvbWljU3RyaW5nKFN0cmluZ0ltcGwqIGJhc2VTdHJpbmcs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgU3RyaW5nIG1fc3RyaW5n
OworICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCisvLworLy8g
ICAgLy8gRklYTUU6IEF0b21pY1N0cmluZyBkb2VzbuKAmXQgYWx3YXlzIGhhdmUgQXRvbWljU3Ry
aW5nSW1wbCwgc28gb25lIG9mIHRob3NlIHR3byBuYW1lcyBuZWVkcyB0byBjaGFuZ2UuLgorLy8g
ICAgQXRvbWljU3RyaW5nKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworLy8KKy8vICAgIGVudW0g
Q29uc3RydWN0RnJvbUxpdGVyYWxUYWcgeyBDb25zdHJ1Y3RGcm9tTGl0ZXJhbCB9OworLy8gICAg
QXRvbWljU3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ29u
c3RydWN0RnJvbUxpdGVyYWxUYWcpCisvLyAgICAgICAgOiBtX3N0cmluZyhBdG9taWNTdHJpbmdJ
bXBsOjphZGRMaXRlcmFsKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisvLyAgICB7CisvLyAgICB9Cisv
LworLy8gICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyQ291bnQ+IEFMV0FZU19JTkxJTkUg
QXRvbWljU3RyaW5nKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0sIENv
bnN0cnVjdEZyb21MaXRlcmFsVGFnKQorLy8gICAgICAgIDogbV9zdHJpbmcoQXRvbWljU3RyaW5n
SW1wbDo6YWRkTGl0ZXJhbChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEpKQorLy8gICAg
eworLy8gICAgICAgIENPTVBJTEVfQVNTRVJUKGNoYXJhY3RlckNvdW50ID4gMSwgQXRvbWljU3Ry
aW5nRnJvbUxpdGVyYWxOb3RFbXB0eSk7CisvLyAgICAgICAgQ09NUElMRV9BU1NFUlQoKGNoYXJh
Y3RlckNvdW50IC0gMSA8PSAoKHVuc2lnbmVkKH4wKSAtIHNpemVvZihTdHJpbmdJbXBsKSkgLyBz
aXplb2YoTENoYXIpKSksIEF0b21pY1N0cmluZ0Zyb21MaXRlcmFsQ2Fubm90T3ZlcmZsb3cpOwor
Ly8gICAgfQorLy8KKy8vICAgIC8vIFdlIGhhdmUgdG8gZGVjbGFyZSB0aGUgY29weSBjb25zdHJ1
Y3RvciBhbmQgY29weSBhc3NpZ25tZW50IG9wZXJhdG9yIGFzIHdlbGwsIG90aGVyd2lzZQorLy8g
ICAgLy8gdGhleSdsbCBiZSBpbXBsaWNpdGx5IGRlbGV0ZWQgYnkgYWRkaW5nIHRoZSBtb3ZlIGNv
bnN0cnVjdG9yIGFuZCBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisvLyAgICBBdG9taWNTdHJp
bmcoY29uc3QgQXRvbWljU3RyaW5nJiBvdGhlcikgOiBtX3N0cmluZyhvdGhlci5tX3N0cmluZykg
eyB9CisvLyAgICBBdG9taWNTdHJpbmcoQXRvbWljU3RyaW5nJiYgb3RoZXIpIDogbV9zdHJpbmco
V1RGTW92ZShvdGhlci5tX3N0cmluZykpIHsgfQorLy8gICAgQXRvbWljU3RyaW5nJiBvcGVyYXRv
cj0oY29uc3QgQXRvbWljU3RyaW5nJiBvdGhlcikgeyBtX3N0cmluZyA9IG90aGVyLm1fc3RyaW5n
OyByZXR1cm4gKnRoaXM7IH0KKy8vICAgIEF0b21pY1N0cmluZyYgb3BlcmF0b3I9KEF0b21pY1N0
cmluZyYmIG90aGVyKSB7IG1fc3RyaW5nID0gV1RGTW92ZShvdGhlci5tX3N0cmluZyk7IHJldHVy
biAqdGhpczsgfQorLy8KKy8vICAgIC8vIEhhc2ggdGFibGUgZGVsZXRlZCB2YWx1ZXMsIHdoaWNo
IGFyZSBvbmx5IGNvbnN0cnVjdGVkIGFuZCBuZXZlciBjb3BpZWQgb3IgZGVzdHJveWVkLgorLy8g
ICAgQXRvbWljU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3N0cmlu
ZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9CisvLyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKTsgfQorLy8KKy8vICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0IHsgcmV0
dXJuIGlzTnVsbCgpID8gMCA6IGltcGwoKS0+ZXhpc3RpbmdIYXNoKCk7IH0KKy8vCisvLyAgICBv
cGVyYXRvciBjb25zdCBTdHJpbmcmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KKy8vICAg
IGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH07CisvLwor
Ly8gICAgQXRvbWljU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PEF0b21pY1N0cmluZ0ltcGwgKj4obV9zdHJpbmcuaW1wbCgpKTsgfQorLy8KKy8vICAgIGJvb2wg
aXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXM4Qml0KCk7IH0KKy8vICAgIGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnM4
KCk7IH0KKy8vICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZy5jaGFyYWN0ZXJzMTYoKTsgfQorLy8gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KKy8vCisvLyAgICBVQ2hhciBvcGVyYXRvcltd
KHVuc2lnbmVkIGludCBpKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ1tpXTsgfQorLy8KKy8vICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgQXRvbWljU3RyaW5nIG51bWJlcihpbnQpOworLy8g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKHVuc2lnbmVk
KTsKKy8vICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgQXRvbWljU3RyaW5nIG51bWJlcih1
bnNpZ25lZCBsb25nKTsKKy8vICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgQXRvbWljU3Ry
aW5nIG51bWJlcih1bnNpZ25lZCBsb25nIGxvbmcpOworLy8gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBBdG9taWNTdHJpbmcgbnVtYmVyKGZsb2F0KTsKKy8vICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgQXRvbWljU3RyaW5nIG51bWJlcihkb3VibGUpOworLy8gICAgLy8gSWYgd2Ug
bmVlZCBtb3JlIG92ZXJsb2FkcyBvZiB0aGUgbnVtYmVyIGZ1bmN0aW9uLCB3ZSBjYW4gYWRkIGFs
bCB0aGUgb3RoZXJzIHRoYXQgU3RyaW5nIGhhcywgYnV0IHRoZXNlIHNlZW0gdG8gZG8gZm9yIG5v
dy4KKy8vCisvLyAgICBib29sIGNvbnRhaW5zKFVDaGFyIGNoYXJhY3RlcikgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmcuY29udGFpbnMoY2hhcmFjdGVyKTsgfQorLy8gICAgYm9vbCBjb250YWlucyhj
b25zdCBMQ2hhciogc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhzdHJp
bmcpOyB9CisvLyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZy5jb250YWlucyhzdHJpbmcpOyB9CisvLyAgICBib29sIGNvbnRhaW5z
SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nLmNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nKTsgfQorLy8KKy8vICAgIHNp
emVfdCBmaW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZy5maW5kKGNoYXJhY3Rlciwgc3RhcnQpOyB9CisvLyAgICBzaXplX3QgZmlu
ZChjb25zdCBMQ2hhciogc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nLmZpbmQoc3RyaW5nLCBzdGFydCk7IH0KKy8vICAgIHNpemVfdCBmaW5kKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nLmZpbmQoc3RyaW5nLCBzdGFydCk7IH0KKy8vICAgIHNpemVfdCBmaW5kSWdub3JpbmdBU0NJ
SUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmZpbmRJ
Z25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcpOyB9CisvLyAgICBzaXplX3QgZmluZElnbm9yaW5nQVND
SUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmcuZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgc3RhcnRPZmZz
ZXQpOyB9CisvLyAgICBzaXplX3QgZmluZChDb2RlVW5pdE1hdGNoRnVuY3Rpb24gbWF0Y2hGdW5j
dGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5maW5kKG1h
dGNoRnVuY3Rpb24sIHN0YXJ0KTsgfQorLy8KKy8vICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBT
dHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuc3RhcnRzV2l0aChzdHJpbmcp
OyB9CisvLyAgICBib29sIHN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcm
IHN0cmluZykgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZyk7IH0KKy8vICAgIGJvb2wgc3RhcnRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLnN0YXJ0c1dpdGgoY2hhcmFjdGVyKTsgfQorLy8gICAgdGVt
cGxhdGU8dW5zaWduZWQgbWF0Y2hMZW5ndGg+IGJvb2wgc3RhcnRzV2l0aChjb25zdCBjaGFyICgm
cHJlZml4KVttYXRjaExlbmd0aF0pIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnN0YXJ0c1dpdGg8
bWF0Y2hMZW5ndGg+KHByZWZpeCk7IH0KKy8vCisvLyAgICBib29sIGVuZHNXaXRoKGNvbnN0IFN0
cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5lbmRzV2l0aChzdHJpbmcpOyB9
CisvLyAgICBib29sIGVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJp
bmcpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uoc3Ry
aW5nKTsgfQorLy8gICAgYm9vbCBlbmRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nLmVuZHNXaXRoKGNoYXJhY3Rlcik7IH0KKy8vICAgIHRlbXBsYXRlPHVuc2ln
bmVkIG1hdGNoTGVuZ3RoPiBib29sIGVuZHNXaXRoKGNvbnN0IGNoYXIgKCZwcmVmaXgpW21hdGNo
TGVuZ3RoXSkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuZW5kc1dpdGg8bWF0Y2hMZW5ndGg+KHBy
ZWZpeCk7IH0KKy8vCisvLyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXRvbWljU3RyaW5nIGNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3Q7CisvLyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXRv
bWljU3RyaW5nIGNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkgY29uc3Q7CisvLworLy8gICAgaW50
IHRvSW50KGJvb2wqIG9rID0gMCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9JbnQob2spOyB9
CisvLyAgICBkb3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZy50b0RvdWJsZShvayk7IH0KKy8vICAgIGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZy50b0Zsb2F0KG9rKTsgfQorLy8gICAgYm9vbCBwZXJjZW50
YWdlKGludCYgcCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcucGVyY2VudGFnZShwKTsgfQorLy8K
Ky8vICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0K
Ky8vICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzRW1wdHkoKTsg
fQorLy8KKy8vI2lmIFVTRShDRikKKy8vICAgIEF0b21pY1N0cmluZyhDRlN0cmluZ1JlZik7Cisv
LyNlbmRpZgorLy8KKy8vI2lmZGVmIF9fT0JKQ19fCisvLyAgICBBdG9taWNTdHJpbmcoTlNTdHJp
bmcqKTsKKy8vICAgIG9wZXJhdG9yIE5TU3RyaW5nKigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
OyB9CisvLyNlbmRpZgorLy8KKy8vI2lmIE9TKFdJTkRPV1MpICYmIFVfSUNVX1ZFUlNJT05fTUFK
T1JfTlVNID49IDU5CisvLyAgICBBdG9taWNTdHJpbmcoY29uc3Qgd2NoYXJfdCogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQorLy8gICAgICAgIDogQXRvbWljU3RyaW5nKHVjaGFyRnJvbShj
aGFyYWN0ZXJzKSwgbGVuZ3RoKSB7IH0KKy8vCisvLyAgICBBdG9taWNTdHJpbmcoY29uc3Qgd2No
YXJfdCogY2hhcmFjdGVycykKKy8vICAgICAgICA6IEF0b21pY1N0cmluZyh1Y2hhckZyb20oY2hh
cmFjdGVycykpIHsgfQorLy8jZW5kaWYKKy8vCisvLyAgICAvLyBBdG9taWNTdHJpbmc6OmZyb21V
VEY4IHdpbGwgcmV0dXJuIGEgbnVsbCBzdHJpbmcgaWYgdGhlIGlucHV0IGRhdGEgY29udGFpbnMg
aW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMuCisvLyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGZyb21V
VEY4KGNvbnN0IGNoYXIqLCBzaXplX3QpOworLy8gICAgc3RhdGljIEF0b21pY1N0cmluZyBmcm9t
VVRGOChjb25zdCBjaGFyKik7CisvLworLy8jaWZuZGVmIE5ERUJVRworLy8gICAgdm9pZCBzaG93
KCkgY29uc3Q7CisvLyNlbmRpZgorLy8KKy8vcHJpdmF0ZToKKy8vICAgIC8vIFRoZSBleHBsaWNp
dCBjb25zdHJ1Y3RvcnMgd2l0aCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsIG11
c3QgYmUgdXNlZCBmb3IgbGl0ZXJhbHMuCisvLyAgICBBdG9taWNTdHJpbmcoQVNDSUlMaXRlcmFs
KTsKKy8vCisvLyAgICBlbnVtIGNsYXNzIENhc2VDb252ZXJ0VHlwZSB7IFVwcGVyLCBMb3dlciB9
OworLy8gICAgdGVtcGxhdGU8Q2FzZUNvbnZlcnRUeXBlPiBBdG9taWNTdHJpbmcgY29udmVydEFT
Q0lJQ2FzZSgpIGNvbnN0OworLy8KKy8vICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgQXRv
bWljU3RyaW5nIGZyb21VVEY4SW50ZXJuYWwoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKKy8v
CisvLyAgICBTdHJpbmcgbV9zdHJpbmc7CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihBdG9t
aWNTdHJpbmcpID09IHNpemVvZihTdHJpbmcpLCAiQXRvbWljU3RyaW5nIGFuZCBTdHJpbmcgbXVz
dCBiZSBzYW1lIHNpemUhIik7Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWlj
U3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGEuaW1wbCgpID09IGIu
aW1wbCgpOyB9Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgTENo
YXIqKTsKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25z
dCBjaGFyKiBiKSB7IHJldHVybiBXVEY6OmVxdWFsKGEuaW1wbCgpLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oYikpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21p
Y1N0cmluZyYgYSwgY29uc3QgVmVjdG9yPFVDaGFyPiYgYikgeyByZXR1cm4gYS5pbXBsKCkgJiYg
ZXF1YWwoYS5pbXBsKCksIGIuZGF0YSgpLCBiLnNpemUoKSk7IH0gICAgCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVy
biBlcXVhbChhLmltcGwoKSwgYi5pbXBsKCkpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IExDaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGIgPT0gYTsgfQot
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBWZWN0b3I8VUNoYXI+JiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIp
IHsgcmV0dXJuIGIgPT0gYTsgfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21p
Y1N0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBhLmltcGwoKSAhPSBi
LmltcGwoKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEs
IGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KLWlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiAhKGEg
PT0gYik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBj
b25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgYi5pbXBsKCkpOyB9Ci1p
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgVmVjdG9y
PFVDaGFyPiYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IExDaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuICEoYiA9PSBh
KTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYikgeyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KLWlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVjdG9yPFVDaGFyPiYgYSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KLQotYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEF0b21pY1N0cmluZyYpOwotYm9vbCBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IFN0cmluZyYpOwot
Ym9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IEF0b21pY1N0
cmluZyYpOwotYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYs
IGNvbnN0IGNoYXIqKTsKLQotdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBib29sIGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IGNoYXIgKCZs
b3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKLQotaW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWlj
U3RyaW5nKCkKLXsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKGNvbnN0
IExDaGFyKiBzdHJpbmcpCi0gICAgOiBtX3N0cmluZyhBdG9taWNTdHJpbmdJbXBsOjphZGQoc3Ry
aW5nKSkKLXsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKGNvbnN0IGNo
YXIqIHN0cmluZykKLSAgICA6IG1fc3RyaW5nKEF0b21pY1N0cmluZ0ltcGw6OmFkZChzdHJpbmcp
KQotewotfQotCi1pbmxpbmUgQXRvbWljU3RyaW5nOjpBdG9taWNTdHJpbmcoY29uc3QgTENoYXIq
IHN0cmluZywgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogbV9zdHJpbmcoQXRvbWljU3RyaW5nSW1w
bDo6YWRkKHN0cmluZywgbGVuZ3RoKSkKLXsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZzo6QXRv
bWljU3RyaW5nKGNvbnN0IFVDaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IG1f
c3RyaW5nKEF0b21pY1N0cmluZ0ltcGw6OmFkZChzdHJpbmcsIGxlbmd0aCkpCi17Ci19Ci0KLWlu
bGluZSBBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyhjb25zdCBVQ2hhciogc3RyaW5nKQotICAg
IDogbV9zdHJpbmcoQXRvbWljU3RyaW5nSW1wbDo6YWRkKHN0cmluZykpCi17Ci19Ci0KLWlubGlu
ZSBBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyhBdG9taWNTdHJpbmdJbXBsKiBzdHJpbmcpCi0g
ICAgOiBtX3N0cmluZyhzdHJpbmcpCi17Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmc6OkF0b21p
Y1N0cmluZyhSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4mJiBzdHJpbmcpCi0gICAgOiBtX3N0cmlu
ZyhXVEZNb3ZlKHN0cmluZykpCi17Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmc6OkF0b21pY1N0
cmluZyhTdHJpbmdJbXBsKiBzdHJpbmcpCi0gICAgOiBtX3N0cmluZyhBdG9taWNTdHJpbmdJbXBs
OjphZGQoc3RyaW5nKSkKLXsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5n
KGNvbnN0IFN0YXRpY1N0cmluZ0ltcGwqIHN0cmluZykKLSAgICA6IG1fc3RyaW5nKEF0b21pY1N0
cmluZ0ltcGw6OmFkZChzdHJpbmcpKQotewotfQotCi1pbmxpbmUgQXRvbWljU3RyaW5nOjpBdG9t
aWNTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgOiBtX3N0cmluZyhBdG9taWNTdHJp
bmdJbXBsOjphZGQoc3RyaW5nLmltcGwoKSkpCi17Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmc6
OkF0b21pY1N0cmluZyhTdHJpbmdJbXBsKiBiYXNlU3RyaW5nLCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoKQotICAgIDogbV9zdHJpbmcoQXRvbWljU3RyaW5nSW1wbDo6YWRkKGJhc2VT
dHJpbmcsIHN0YXJ0LCBsZW5ndGgpKQotewotfQotCi1pbmxpbmUgQXRvbWljU3RyaW5nOjpBdG9t
aWNTdHJpbmcoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLSAgICA6IG1fc3RyaW5nKHVpZCkKLXsK
LX0KLQotI2lmIFVTRShDRikKLQotaW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKENG
U3RyaW5nUmVmIHN0cmluZykKLSAgICA6ICBtX3N0cmluZyhBdG9taWNTdHJpbmdJbXBsOjphZGQo
c3RyaW5nKSkKLXsKLX0KLQotI2VuZGlmCi0KLSNpZmRlZiBfX09CSkNfXwotCi1pbmxpbmUgQXRv
bWljU3RyaW5nOjpBdG9taWNTdHJpbmcoTlNTdHJpbmcqIHN0cmluZykKLSAgICA6IG1fc3RyaW5n
KEF0b21pY1N0cmluZ0ltcGw6OmFkZCgoX19icmlkZ2UgQ0ZTdHJpbmdSZWYpc3RyaW5nKSkKLXsK
LX0KLQotI2VuZGlmCi0KLS8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGVzIGZvciB0
aGUgY29tbW9ubHkgdXNlZCBhdG9taWMgc3RyaW5ncy4KLS8vIFRoZXNlIGFyZSBvbmx5IHVzYWJs
ZSBmcm9tIHRoZSBtYWluIHRocmVhZC4KLWV4dGVybiBXVEZfRVhQT1JUX1BSSVZBVEUgTGF6eU5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbnVsbEF0b21EYXRhOwotZXh0ZXJuIFdURl9FWFBP
UlRfUFJJVkFURSBMYXp5TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBlbXB0eUF0b21EYXRh
OwotZXh0ZXJuIFdURl9FWFBPUlRfUFJJVkFURSBMYXp5TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3Ry
aW5nPiBzdGFyQXRvbURhdGE7Ci1leHRlcm4gV1RGX0VYUE9SVF9QUklWQVRFIExhenlOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IHhtbEF0b21EYXRhOwotZXh0ZXJuIFdURl9FWFBPUlRfUFJJ
VkFURSBMYXp5TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiB4bWxuc0F0b21EYXRhOwotCi1p
bmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBudWxsQXRvbSgpIHsgcmV0dXJuIG51bGxBdG9tRGF0
YS5nZXQoKTsgfQotaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZW1wdHlBdG9tKCkgeyByZXR1
cm4gZW1wdHlBdG9tRGF0YS5nZXQoKTsgfQotaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgc3Rh
ckF0b20oKSB7IHJldHVybiBzdGFyQXRvbURhdGEuZ2V0KCk7IH0KLWlubGluZSBjb25zdCBBdG9t
aWNTdHJpbmcmIHhtbEF0b20oKSB7IHJldHVybiB4bWxBdG9tRGF0YS5nZXQoKTsgfQotaW5saW5l
IGNvbnN0IEF0b21pY1N0cmluZyYgeG1sbnNBdG9tKCkgeyByZXR1cm4geG1sbnNBdG9tRGF0YS5n
ZXQoKTsgfQotCi1pbmxpbmUgQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6ZnJvbVVURjgoY29u
c3QgY2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBpZiAoIWNoYXJhY3Rl
cnMpCi0gICAgICAgIHJldHVybiBudWxsQXRvbSgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAg
ICByZXR1cm4gZW1wdHlBdG9tKCk7Ci0gICAgcmV0dXJuIGZyb21VVEY4SW50ZXJuYWwoY2hhcmFj
dGVycywgY2hhcmFjdGVycyArIGxlbmd0aCk7Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmcgQXRv
bWljU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorLy8KKy8vaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYikgeyByZXR1cm4gYS5pbXBsKCkgPT0gYi5pbXBsKCk7IH0KKy8vYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IExDaGFyKik7CisvL2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiBXVEY6
OmVxdWFsKGEuaW1wbCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9Cisv
L2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBWZWN0
b3I8VUNoYXI+JiBiKSB7IHJldHVybiBhLmltcGwoKSAmJiBlcXVhbChhLmltcGwoKSwgYi5kYXRh
KCksIGIuc2l6ZSgpKTsgfQorLy9pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0
cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgYi5pbXBs
KCkpOyB9CisvL2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTENoYXIqIGEsIGNvbnN0IEF0
b21pY1N0cmluZyYgYikgeyByZXR1cm4gYiA9PSBhOyB9CisvL2lubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFs
KGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KKy8vaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBW
ZWN0b3I8VUNoYXI+JiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGIgPT0gYTsg
fQorLy8KKy8vaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNv
bnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gYS5pbXBsKCkgIT0gYi5pbXBsKCk7IH0KKy8v
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IExDaGFy
KiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KKy8vaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQor
Ly9pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgU3Ry
aW5nJiBiKSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQorLy9pbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgVmVjdG9yPFVDaGFy
PiYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CisvL2lubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgTENoYXIqIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gIShiID09IGEpOyB9
CisvL2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBBdG9taWNT
dHJpbmcmIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgYi5pbXBsKCkpOyB9CisvL2lubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVjdG9yPFVDaGFyPiYgYSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KKy8vCisvL2Jvb2wgZXF1YWxJZ25vcmluZ0FT
Q0lJQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKKy8vYm9v
bCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpOworLy9ib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiwgY29uc3Qg
QXRvbWljU3RyaW5nJik7CisvL2Jvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBBdG9t
aWNTdHJpbmcmLCBjb25zdCBjaGFyKik7CisvLworLy90ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+
IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQXRvbWljU3RyaW5nJiwg
Y29uc3QgY2hhciAoJmxvd2VyY2FzZUxldHRlcnMpW2xlbmd0aF0pOworLy8KKy8vaW5saW5lIEF0
b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKCkKKy8veworLy99CisvLworLy9pbmxpbmUgQXRvbWlj
U3RyaW5nOjpBdG9taWNTdHJpbmcoY29uc3QgTENoYXIqIHN0cmluZykKKy8vICAgIDogbV9zdHJp
bmcoQXRvbWljU3RyaW5nSW1wbDo6YWRkKHN0cmluZykpCisvL3sKKy8vfQorLy8KKy8vaW5saW5l
IEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKKy8vICAgIDog
bV9zdHJpbmcoQXRvbWljU3RyaW5nSW1wbDo6YWRkKHN0cmluZykpCisvL3sKKy8vfQorLy8KKy8v
aW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKGNvbnN0IExDaGFyKiBzdHJpbmcsIHVu
c2lnbmVkIGxlbmd0aCkKKy8vICAgIDogbV9zdHJpbmcoQXRvbWljU3RyaW5nSW1wbDo6YWRkKHN0
cmluZywgbGVuZ3RoKSkKKy8veworLy99CisvLworLy9pbmxpbmUgQXRvbWljU3RyaW5nOjpBdG9t
aWNTdHJpbmcoY29uc3QgVUNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoKQorLy8gICAgOiBt
X3N0cmluZyhBdG9taWNTdHJpbmdJbXBsOjphZGQoc3RyaW5nLCBsZW5ndGgpKQorLy97CisvL30K
Ky8vCisvL2lubGluZSBBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyhjb25zdCBVQ2hhciogc3Ry
aW5nKQorLy8gICAgOiBtX3N0cmluZyhBdG9taWNTdHJpbmdJbXBsOjphZGQoc3RyaW5nKSkKKy8v
eworLy99CisvLworLy9pbmxpbmUgQXRvbWljU3RyaW5nOjpBdG9taWNTdHJpbmcoQXRvbWljU3Ry
aW5nSW1wbCogc3RyaW5nKQorLy8gICAgOiBtX3N0cmluZyhzdHJpbmcpCisvL3sKKy8vfQorLy8K
Ky8vaW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKFJlZlB0cjxBdG9taWNTdHJpbmdJ
bXBsPiYmIHN0cmluZykKKy8vICAgIDogbV9zdHJpbmcoV1RGTW92ZShzdHJpbmcpKQorLy97Cisv
L30KKy8vCisvL2lubGluZSBBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyhTdHJpbmdJbXBsKiBz
dHJpbmcpCisvLyAgICA6IG1fc3RyaW5nKEF0b21pY1N0cmluZ0ltcGw6OmFkZChzdHJpbmcpKQor
Ly97CisvL30KKy8vCisvL2lubGluZSBBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyhjb25zdCBT
dGF0aWNTdHJpbmdJbXBsKiBzdHJpbmcpCisvLyAgICA6IG1fc3RyaW5nKEF0b21pY1N0cmluZ0lt
cGw6OmFkZChzdHJpbmcpKQorLy97CisvL30KKy8vCisvL2lubGluZSBBdG9taWNTdHJpbmc6OkF0
b21pY1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKy8vICAgIDogbV9zdHJpbmcoQXRvbWlj
U3RyaW5nSW1wbDo6YWRkKHN0cmluZy5pbXBsKCkpKQorLy97CisvL30KKy8vCisvL2lubGluZSBB
dG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyhTdHJpbmdJbXBsKiBiYXNlU3RyaW5nLCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQorLy8gICAgOiBtX3N0cmluZyhBdG9taWNTdHJpbmdJ
bXBsOjphZGQoYmFzZVN0cmluZywgc3RhcnQsIGxlbmd0aCkpCisvL3sKKy8vfQorLy8KKy8vaW5s
aW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisv
LyAgICA6IG1fc3RyaW5nKHVpZCkKKy8veworLy99CisvLworLy8jaWYgVVNFKENGKQorLy8KKy8v
aW5saW5lIEF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKENGU3RyaW5nUmVmIHN0cmluZykKKy8v
ICAgIDogIG1fc3RyaW5nKEF0b21pY1N0cmluZ0ltcGw6OmFkZChzdHJpbmcpKQorLy97CisvL30K
Ky8vCisvLyNlbmRpZgorLy8KKy8vI2lmZGVmIF9fT0JKQ19fCisvLworLy9pbmxpbmUgQXRvbWlj
U3RyaW5nOjpBdG9taWNTdHJpbmcoTlNTdHJpbmcqIHN0cmluZykKKy8vICAgIDogbV9zdHJpbmco
QXRvbWljU3RyaW5nSW1wbDo6YWRkKChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHJpbmcpKQorLy97
CisvL30KKy8vCisvLyNlbmRpZgorLy8KKy8vLy8gRGVmaW5lIGV4dGVybmFsIGdsb2JhbCB2YXJp
YWJsZXMgZm9yIHRoZSBjb21tb25seSB1c2VkIGF0b21pYyBzdHJpbmdzLgorLy8vLyBUaGVzZSBh
cmUgb25seSB1c2FibGUgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisvL2V4dGVybiBXVEZfRVhQT1JU
X1BSSVZBVEUgTGF6eU5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbnVsbEF0b21EYXRhOwor
Ly9leHRlcm4gV1RGX0VYUE9SVF9QUklWQVRFIExhenlOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IGVtcHR5QXRvbURhdGE7CisvL2V4dGVybiBXVEZfRVhQT1JUX1BSSVZBVEUgTGF6eU5ldmVy
RGVzdHJveWVkPEF0b21pY1N0cmluZz4gc3RhckF0b21EYXRhOworLy9leHRlcm4gV1RGX0VYUE9S
VF9QUklWQVRFIExhenlOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHhtbEF0b21EYXRhOwor
Ly9leHRlcm4gV1RGX0VYUE9SVF9QUklWQVRFIExhenlOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IHhtbG5zQXRvbURhdGE7CisvLworaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRv
bSgpIHsgcmV0dXJuIEF0b21pY1N0cmluZzo6bnVsbEF0b20oKTsgfQoraW5saW5lIGNvbnN0IEF0
b21pY1N0cmluZyBlbXB0eUF0b20oKSB7IHJldHVybiBBdG9taWNTdHJpbmc6OmVtcHR5QXRvbSgp
OyB9CisvL2lubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIHN0YXJBdG9tKCkgeyByZXR1cm4gc3Rh
ckF0b21EYXRhLmdldCgpOyB9CisvL2lubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIHhtbEF0b20o
KSB7IHJldHVybiB4bWxBdG9tRGF0YS5nZXQoKTsgfQorLy9pbmxpbmUgY29uc3QgQXRvbWljU3Ry
aW5nJiB4bWxuc0F0b20oKSB7IHJldHVybiB4bWxuc0F0b21EYXRhLmdldCgpOyB9CisvLworLy9p
bmxpbmUgQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKy8veworLy8gICAgaWYgKCFjaGFyYWN0ZXJzKQorLy8g
ICAgICAgIHJldHVybiBudWxsQXRvbSgpOworLy8gICAgaWYgKCFsZW5ndGgpCisvLyAgICAgICAg
cmV0dXJuIGVtcHR5QXRvbSgpOworLy8gICAgcmV0dXJuIGZyb21VVEY4SW50ZXJuYWwoY2hhcmFj
dGVycywgY2hhcmFjdGVycyArIGxlbmd0aCk7CisvL30KKy8vCisvL2lubGluZSBBdG9taWNTdHJp
bmcgQXRvbWljU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorLy97Cisv
LyAgICBpZiAoIWNoYXJhY3RlcnMpCisvLyAgICAgICAgcmV0dXJuIG51bGxBdG9tKCk7CisvLyAg
ICBpZiAoISpjaGFyYWN0ZXJzKQorLy8gICAgICAgIHJldHVybiBlbXB0eUF0b20oKTsKKy8vICAg
IHJldHVybiBmcm9tVVRGOEludGVybmFsKGNoYXJhY3RlcnMsIG51bGxwdHIpOworLy99CisvLwor
Ly8vLyBBdG9taWNTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9yIEF0b21pY1N0cmlu
ZworLy90ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisvL3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPEF0b21pY1N0cmluZz4geworLy8gICAgdHlwZWRlZiBBdG9t
aWNTdHJpbmdIYXNoIEhhc2g7CisvL307CisvLworLy90ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+
IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IEF0b21pY1N0
cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKKy8v
eworLy8gICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZy5zdHJp
bmcoKSwgbG93ZXJjYXNlTGV0dGVycyk7CisvL30KKy8vCisvL2lubGluZSBib29sIGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcm
IGIpCisvL3sKKy8vICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuc3RyaW5nKCks
IGIuc3RyaW5nKCkpOworLy99CisvLworLy9pbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKQorLy97CisvLyAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLnN0cmluZygpLCBiKTsKKy8vfQorLy8KKy8v
aW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0
IEF0b21pY1N0cmluZyYgYikKKy8veworLy8gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoYSwgYi5zdHJpbmcoKSk7CisvL30KKy8vCisvL2lubGluZSBib29sIGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKQorLy97CisvLyAg
ICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLnN0cmluZygpLCBiKTsKKy8vfQorLy8K
Ky8vdGVtcGxhdGU8PiBzdHJ1Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvblRyYWl0PEF0b21p
Y1N0cmluZz4geworLy8gICAgdXNpbmcgUmV0dXJuVHlwZSA9IEF0b21pY1N0cmluZzsKKy8vICAg
IHVzaW5nIEFkZGl0aW9uYWxBcmd1bWVudFR5cGUgPSB2b2lkOworLy8gICAgc3RhdGljIEF0b21p
Y1N0cmluZyBmbHVzaChMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB2b2lkKikg
eyByZXR1cm4geyBjaGFyYWN0ZXJzLCBsZW5ndGggfTsgfQorLy99OworLy8KKy8vfSAvLyBuYW1l
c3BhY2UgV1RGCisvLworLy8jaWZuZGVmIEFUT01JQ1NUUklOR19ISURFX0dMT0JBTFMKKy8vdXNp
bmcgV1RGOjpBdG9taWNTdHJpbmc7CisvL3VzaW5nIFdURjo6bnVsbEF0b207CisvL3VzaW5nIFdU
Rjo6ZW1wdHlBdG9tOworLy91c2luZyBXVEY6OnN0YXJBdG9tOworLy91c2luZyBXVEY6OnhtbEF0
b207CisvL3VzaW5nIFdURjo6eG1sbnNBdG9tOworLy8jZW5kaWYKKy8vCisvLyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorLy8KKworaW5saW5lIEF0b21pY1N0cmluZyBT
dHJpbmc6OnRvQXRvbWljU3RyaW5nKCkgY29uc3QKIHsKLSAgICBpZiAoIWNoYXJhY3RlcnMpCi0g
ICAgICAgIHJldHVybiBudWxsQXRvbSgpOwotICAgIGlmICghKmNoYXJhY3RlcnMpCi0gICAgICAg
IHJldHVybiBlbXB0eUF0b20oKTsKLSAgICByZXR1cm4gZnJvbVVURjhJbnRlcm5hbChjaGFyYWN0
ZXJzLCBudWxscHRyKTsKKyAgICBpZiAoIWhhc0ltcGwoKSkKKyAgICAgICAgcmV0dXJuIEF0b21p
Y1N0cmluZyhBdG9taWNTdHJpbmc6Oktub3duU21hbGxTdHJpbmcsIGNvbnRlbnRzKCkpOworICAg
IHJldHVybiBBdG9taWNTdHJpbmcoaW1wbCgpKTsKIH0KIAotLy8gQXRvbWljU3RyaW5nSGFzaCBp
cyB0aGUgZGVmYXVsdCBoYXNoIGZvciBBdG9taWNTdHJpbmcKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEF0b21p
Y1N0cmluZz4gewotICAgIHR5cGVkZWYgQXRvbWljU3RyaW5nSGFzaCBIYXNoOwotfTsKLQotdGVt
cGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZywgY29uc3QgY2hhciAoJmxvd2VyY2Fz
ZUxldHRlcnMpW2xlbmd0aF0pCi17Ci0gICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHN0cmluZy5zdHJpbmcoKSwgbG93ZXJjYXNlTGV0dGVycyk7Ci19Ci0KLWlubGluZSBi
b29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBB
dG9taWNTdHJpbmcmIGIpCitpbmxpbmUgQXRvbWljU3RyaW5nIFN0cmluZ1ZpZXc6OnRvQXRvbWlj
U3RyaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhLnN0
cmluZygpLCBiLnN0cmluZygpKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBB
dG9taWNTdHJpbmcoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgpOworICAgIHJldHVybiBBdG9taWNT
dHJpbmcoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoKTsKIH0KIAotaW5saW5lIGJvb2wgZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikK
K2lubGluZSBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gU3RyaW5nVmlldzo6dG9FeGlzdGluZ0F0
b21pY1N0cmluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
YS5zdHJpbmcoKSwgYik7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gQXRvbWlj
U3RyaW5nSW1wbDo6bG9va1VwKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoKTsKKyAgICByZXR1cm4g
QXRvbWljU3RyaW5nSW1wbDo6bG9va1VwKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCk7CiB9CiAK
LWlubGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBhLCBjb25z
dCBBdG9taWNTdHJpbmcmIGIpCi17Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
YSwgYi5zdHJpbmcoKSk7CiB9Ci0KLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
Y29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKQotewotICAgIHJldHVybiBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGEuc3RyaW5nKCksIGIpOwotfQotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uVHJhaXQ8QXRvbWljU3RyaW5nPiB7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IEF0b21pY1N0cmluZzsKLSAgICB1c2luZyBBZGRpdGlvbmFsQXJndW1l
bnRUeXBlID0gdm9pZDsKLSAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGZsdXNoKExDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqKSB7IHJldHVybiB7IGNoYXJhY3RlcnMsIGxl
bmd0aCB9OyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2lmbmRlZiBBVE9NSUNTVFJJ
TkdfSElERV9HTE9CQUxTCi11c2luZyBXVEY6OkF0b21pY1N0cmluZzsKLXVzaW5nIFdURjo6bnVs
bEF0b207Ci11c2luZyBXVEY6OmVtcHR5QXRvbTsKLXVzaW5nIFdURjo6c3RhckF0b207Ci11c2lu
ZyBXVEY6OnhtbEF0b207Ci11c2luZyBXVEY6OnhtbG5zQXRvbTsKLSNlbmRpZgotCi0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNT
dHJpbmdJbXBsLmgKaW5kZXggZDg0NjIzYzljOGZmYmI1NWMyNTQxYTlkYWJiODNiZGUyNDAyYjA1
NS4uZWQ4NTM1ZmI4NjQ2YWRhNGZlNmYxZWQ1ZTI1NjNkMjRlOTUwYzI4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmgKQEAgLTczLDYgKzczLDEwIEBAIHB1YmxpYzoKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaXNJbkF0b21pY1N0cmluZ1RhYmxlKFN0
cmluZ0ltcGwqKTsKICNlbmRpZgogCisgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZv
ciBTdHJpbmcgSW1wbFR5cGUgb3ZlcmxvYWRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IGNy
ZWF0ZShBcmdzLi4uIGFyZ3MpIHsgcmV0dXJuIGFkZChhcmdzLi4uKTsgfQorCiBwcml2YXRlOgog
ICAgIEF0b21pY1N0cmluZ0ltcGwoKSA9IGRlbGV0ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaAppbmRleCBkYThhZDI2NTdlODNhMTgxYTFhYTQyNDk2NzQ0MGU2OTlkMTdjMTc3Li5h
MDFmM2M3Nzk2NjI1NDZiMjM5Mzk3OGJiMWJjYjRlMDMwMTFkYzhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaApAQCAtNzIsMTEgKzcyLDYgQEAgcHVibGljOgogCiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSwg
bGVuZ3RoKTsgfQogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQXRvbWljU3RyaW5nJiBhdG9taWNT
dHJpbmcpCi0gICAgewotICAgICAgICBhcHBlbmQoYXRvbWljU3RyaW5nLnN0cmluZygpKTsKLSAg
ICB9Ci0KICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7CiAgICAg
ICAgIGlmIChoYXNPdmVyZmxvd2VkKCkpCkBAIC0yNzIsNyArMjY3LDcgQEAgcHVibGljOgogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBBdG9taWNTdHJpbmcobV9zdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5n
LnRvQXRvbWljU3RyaW5nKCk7CiAKICAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKICAgICAgICAg
cmV0dXJuIEF0b21pY1N0cmluZyhtX2J1ZmZlci5nZXQoKSwgMCwgbV9sZW5ndGgudW5zYWZlR2V0
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29tbW9uLmgKaW5kZXggZjc1NmExNDk1YTFjNTA1OGQ1
ZWIzMTc5NTkxM2I0ZGJhYThmMjI4My4uM2YyODE2NDBkMWY4MjIxNDY1ZjA3MjFiNDAwNzk0ZDkw
MzU1MjVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb21tb24uaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbW1vbi5oCkBAIC0zNCw2ICszNCw3IEBA
CiBuYW1lc3BhY2UgV1RGIHsKIAogdXNpbmcgQ29kZVVuaXRNYXRjaEZ1bmN0aW9uID0gYm9vbCAo
KikoVUNoYXIpOworY29uc3RleHByIHVuc2lnbmVkIE1heFN0cmluZ0xlbmd0aCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlQSwgdHlwZW5hbWUgQ2hhcmFjdGVyVHlwZUI+IGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShjb25zdCBDaGFyYWN0ZXJUeXBlQSosIGNvbnN0IENoYXJhY3RlclR5cGVCKiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGVBLCB0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlQj4gYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IENoYXJhY3Rl
clR5cGVBKiwgdW5zaWduZWQgbGVuZ3RoQSwgY29uc3QgQ2hhcmFjdGVyVHlwZUIqLCB1bnNpZ25l
ZCBsZW5ndGhCKTsKQEAgLTU3Nyw2ICs1NzgsNjcgQEAgc2l6ZV90IGZpbmRDb21tb24oY29uc3Qg
U3RyaW5nQ2xhc3MmIGhheXN0YWNrLCBjb25zdCBTdHJpbmdDbGFzcyYgbmVlZGxlLCB1bnNpZ24K
ICAgICByZXR1cm4gZmluZElubmVyKGhheXN0YWNrLmNoYXJhY3RlcnMxNigpICsgc3RhcnQsIG5l
ZWRsZS5jaGFyYWN0ZXJzMTYoKSwgc3RhcnQsIHNlYXJjaExlbmd0aCwgbmVlZGxlTGVuZ3RoKTsK
IH0KIAoraW5saW5lIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIENvZGVVbml0TWF0Y2hGdW5jdGlvbiBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBp
bmRleCA9IDApCit7CisgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgIGlmICht
YXRjaEZ1bmN0aW9uKGNoYXJhY3RlcnNbaW5kZXhdKSkKKyAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKKyAgICAgICAgKytpbmRleDsKKyAgICB9CisgICAgcmV0dXJuIG5vdEZvdW5kOworfQorCitp
bmxpbmUgc2l6ZV90IGZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCwgQ29kZVVuaXRNYXRjaEZ1bmN0aW9uIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIGluZGV4ID0g
MCkKK3sKKyAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgaWYgKG1hdGNoRnVu
Y3Rpb24oY2hhcmFjdGVyc1tpbmRleF0pKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICArK2luZGV4OworICAgIH0KKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBzaXplX3QgcmV2ZXJzZUZpbmRMaW5lVGVy
bWluYXRvcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkIGluZGV4ID0gTWF4U3RyaW5nTGVuZ3RoKQoreworICAgIGlmICghbGVuZ3RoKQor
ICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgaWYgKGluZGV4ID49IGxlbmd0aCkKKyAgICAg
ICAgaW5kZXggPSBsZW5ndGggLSAxOworICAgIGF1dG8gY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tp
bmRleF07CisgICAgd2hpbGUgKGNoYXJhY3RlciAhPSAnXG4nICYmIGNoYXJhY3RlciAhPSAnXHIn
KSB7CisgICAgICAgIGlmICghaW5kZXgtLSkKKyAgICAgICAgICAgIHJldHVybiBub3RGb3VuZDsK
KyAgICAgICAgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpbmRleF07CisgICAgfQorICAgIHJldHVy
biBpbmRleDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIHNp
emVfdCByZXZlcnNlRmluZChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIENoYXJhY3RlclR5cGUgbWF0Y2hDaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4ID0g
TWF4U3RyaW5nTGVuZ3RoKQoreworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gbm90
Rm91bmQ7CisgICAgaWYgKGluZGV4ID49IGxlbmd0aCkKKyAgICAgICAgaW5kZXggPSBsZW5ndGgg
LSAxOworICAgIHdoaWxlIChjaGFyYWN0ZXJzW2luZGV4XSAhPSBtYXRjaENoYXJhY3Rlcikgewor
ICAgICAgICBpZiAoIWluZGV4LS0pCisgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAg
fQorICAgIHJldHVybiBpbmRleDsKK30KKworQUxXQVlTX0lOTElORSBzaXplX3QgcmV2ZXJzZUZp
bmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgTENoYXIgbWF0Y2hD
aGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4ID0gTWF4U3RyaW5nTGVuZ3RoKQoreworICAgIHJldHVy
biByZXZlcnNlRmluZChjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0YXRpY19jYXN0PFVDaGFyPihtYXRj
aENoYXJhY3RlciksIGluZGV4KTsKK30KKworaW5saW5lIHNpemVfdCByZXZlcnNlRmluZChjb25z
dCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciBtYXRjaENoYXJhY3Rl
ciwgdW5zaWduZWQgaW5kZXggPSBNYXhTdHJpbmdMZW5ndGgpCit7CisgICAgaWYgKG1hdGNoQ2hh
cmFjdGVyICYgfjB4RkYpCisgICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICByZXR1cm4gcmV2
ZXJzZUZpbmQoY2hhcmFjdGVycywgbGVuZ3RoLCBzdGF0aWNfY2FzdDxMQ2hhcj4obWF0Y2hDaGFy
YWN0ZXIpLCBpbmRleCk7Cit9CisKKwogLy8gVGhpcyBpcyBtYXJrZWQgaW5saW5lIHNpbmNlIGl0
J3MgbW9zdGx5IHVzZWQgaW4gbm9uLWlubGluZSBmdW5jdGlvbnMgZm9yIGVhY2ggc3RyaW5nIHR5
cGUuCiAvLyBXaGVuIHVzZWQgZGlyZWN0bHkgaW4gY29kZSBpdCdzIHByb2JhYmx5IE9LIHRvIGJl
IGlubGluZTsgbWF5YmUgdGhlIGxvb3Agd2lsbCBiZSB1bnJvbGxlZC4KIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIGNvbnN0IGNoYXIqIGxvd2VyY2Fz
ZUxldHRlcnMsIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTY1NCw2ICs3MTYsODMgQEAgdGVtcGxhdGU8
dW5zaWduZWQgbG93ZXJjYXNlTGV0dGVyc0xlbmd0aD4gaW5saW5lIGJvb2wgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUMKICAgICByZXR1cm4gc3RybGVuKHN0cmluZykgPT0gbGVuZ3RoICYmIGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgbG93ZXJjYXNlTGV0dGVycywgbGVu
Z3RoKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZTEsIHR5cGVuYW1lIENo
YXJhY3RlclR5cGUyPiBpbmxpbmUgaW50IGNvZGVQb2ludENvbXBhcmUoY29uc3QgQ2hhcmFjdGVy
VHlwZTEqIGNoYXJhY3RlcnMxLCB1bnNpZ25lZCBsZW5ndGgxLCBjb25zdCBDaGFyYWN0ZXJUeXBl
MiogY2hhcmFjdGVyczIsIHVuc2lnbmVkIGxlbmd0aDIpCit7CisgICAgdW5zaWduZWQgY29tbW9u
TGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoMSwgbGVuZ3RoMik7CisKKyAgICB1bnNpZ25lZCBwb3Np
dGlvbiA9IDA7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgY29tbW9uTGVuZ3RoICYmICpjaGFyYWN0
ZXJzMSA9PSAqY2hhcmFjdGVyczIpIHsKKyAgICAgICAgKytjaGFyYWN0ZXJzMTsKKyAgICAgICAg
KytjaGFyYWN0ZXJzMjsKKyAgICAgICAgKytwb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAocG9z
aXRpb24gPCBjb21tb25MZW5ndGgpCisgICAgICAgIHJldHVybiAoY2hhcmFjdGVyczFbMF0gPiBj
aGFyYWN0ZXJzMlswXSkgPyAxIDogLTE7CisKKyAgICBpZiAobGVuZ3RoMSA9PSBsZW5ndGgyKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKGxlbmd0aDEgPiBsZW5ndGgyKSA/IDEgOiAt
MTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2lubGluZSB2b2lkIGNv
cHlDaGFyYWN0ZXJzKENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzb3VyY2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCit7CisgICAgaWYgKG51bUNoYXJh
Y3RlcnMgPT0gMSkgeworICAgICAgICAqZGVzdGluYXRpb24gPSAqc291cmNlOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBudW1DaGFyYWN0
ZXJzICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIGNv
cHlDaGFyYWN0ZXJzKFVDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgTENoYXIqIHNvdXJjZSwgdW5z
aWduZWQgbnVtQ2hhcmFjdGVycykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
Q2hhcmFjdGVyczsgKytpKQorICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKK30K
KworLy8gSW1wbGVtZW50ZWQgaW4gV1RGU3RyaW5nIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuCitX
VEZfRVhQT1JUX1BSSVZBVEUgaW50IGNoYXJhY3RlcnNUb0ludFN0cmljdChjb25zdCBMQ2hhcios
IHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKK1dURl9FWFBPUlRf
UFJJVkFURSBpbnQgY2hhcmFjdGVyc1RvSW50U3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBi
b29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApOworV1RGX0VYUE9SVF9QUklWQVRFIHVu
c2lnbmVkIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wq
IG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdW5zaWdu
ZWQgY2hhcmFjdGVyc1RvVUludFN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sg
PSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKK2ludDY0X3QgY2hhcmFjdGVyc1RvSW50NjRTdHJp
Y3QoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAx
MCk7CitpbnQ2NF90IGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90
LCBib29sKiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApOworV1RGX0VYUE9SVF9QUklWQVRF
IHVpbnQ2NF90IGNoYXJhY3RlcnNUb1VJbnQ2NFN0cmljdChjb25zdCBMQ2hhciosIHNpemVfdCwg
Ym9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEwKTsKK1dURl9FWFBPUlRfUFJJVkFURSB1
aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjRTdHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJv
b2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7CitpbnRwdHJfdCBjaGFyYWN0ZXJzVG9J
bnRQdHJTdHJpY3QoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0ciwgaW50
IGJhc2UgPSAxMCk7CitpbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3QoY29uc3QgVUNo
YXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7CisKK1dURl9F
WFBPUlRfUFJJVkFURSBpbnQgY2hhcmFjdGVyc1RvSW50KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBi
b29sKiBvayA9IG51bGxwdHIpOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKK1dURl9FWFBP
UlRfUFJJVkFURSBpbnQgY2hhcmFjdGVyc1RvSW50KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29s
KiBvayA9IG51bGxwdHIpOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKK3Vuc2lnbmVkIGNo
YXJhY3RlcnNUb1VJbnQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7
IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQordW5zaWduZWQgY2hhcmFjdGVyc1RvVUludChj
b25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsgLy8gaWdub3JlcyB0cmFp
bGluZyBnYXJiYWdlCitpbnQ2NF90IGNoYXJhY3RlcnNUb0ludDY0KGNvbnN0IExDaGFyKiwgc2l6
ZV90LCBib29sKiBvayA9IG51bGxwdHIpOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKK2lu
dDY0X3QgY2hhcmFjdGVyc1RvSW50NjQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0g
bnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQordWludDY0X3QgY2hhcmFjdGVy
c1RvVUludDY0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIpOyAvLyBp
Z25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKK1dURl9FWFBPUlRfUFJJVkFURSB1aW50NjRfdCBjaGFy
YWN0ZXJzVG9VSW50NjQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7
IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQoraW50cHRyX3QgY2hhcmFjdGVyc1RvSW50UHRy
KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIpOyAvLyBpZ25vcmVzIHRy
YWlsaW5nIGdhcmJhZ2UKK2ludHB0cl90IGNoYXJhY3RlcnNUb0ludFB0cihjb25zdCBVQ2hhcios
IHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdl
CisKKy8vIEZJWE1FOiBMaWtlIHRoZSBzdHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVzZSBnaXZl
IGZhbHNlIGZvciAib2siIHdoZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KKy8vIExpa2Ug
dGhlIG5vbi1zdHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVzZSByZXR1cm4gdGhlIHZhbHVlIHdo
ZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KKy8vIEl0IHdvdWxkIGJlIGJldHRlciBpZiB0
aGVzZSB3ZXJlIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSBhYm92ZSBmdW5jdGlvbnMgaW5zdGVh
ZC4KK1dURl9FWFBPUlRfUFJJVkFURSBkb3VibGUgY2hhcmFjdGVyc1RvRG91YmxlKGNvbnN0IExD
aGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIpOworV1RGX0VYUE9SVF9QUklWQVRFIGRv
dWJsZSBjaGFyYWN0ZXJzVG9Eb3VibGUoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0g
bnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29u
c3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZB
VEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9r
ID0gbnVsbHB0cik7CitXVEZfRVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQo
Y29uc3QgTENoYXIqLCBzaXplX3QsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKK1dURl9FWFBPUlRf
UFJJVkFURSBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciosIHNpemVfdCwgc2l6
ZV90JiBwYXJzZWRMZW5ndGgpOworCit0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihV
Q2hhciksIHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGlzQWxsU3BlY2lhbENo
YXJhY3RlcnMoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGlm
ICghaXNTcGVjaWFsQ2hhcmFjdGVyKGNoYXJhY3RlcnNbaV0pKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfQogCiB1c2luZyBXVEY6OmVx
dWFsSWdub3JpbmdBU0NJSUNhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
LmgKaW5kZXggYzVkMDIwMTgxODQyYzI2MDEzYmQ0ODc5ZTc3NGEzYmYxYzhkMTcyYy4uMDNjNmNh
NDA0NmY0ODViMmUxNWI4OWMyMjY3YmIxZTk1NTY5NTI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaApAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogICAgIGJvb2wgaXM4Qml0
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QgeyBT
dHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgbV9jaGFyYWN0ZXJzLCBtX2xl
bmd0aCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRl
VG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pIGNvbnN0IHsgY29weUNoYXJhY3RlcnMoZGVz
dGluYXRpb24sIG1fY2hhcmFjdGVycywgbV9sZW5ndGgpOyB9CiAKIHByaXZhdGU6CiAgICAgc3Rh
dGljIHVuc2lnbmVkIGNvbXB1dGVMZW5ndGgoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMpCkBAIC0x
MTAsNyArMTEwLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9sZW5n
dGg7IH0KICAgICB2b2lkIHdyaXRlVG8oTENoYXIqKSBjb25zdCB7IEFTU0VSVCghbV9sZW5ndGgp
OyB9Ci0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QgeyBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgbV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCk7
IH0KKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdCB7IGNvcHlDaGFy
YWN0ZXJzKGRlc3RpbmF0aW9uLCBtX2NoYXJhY3RlcnMsIG1fbGVuZ3RoKTsgfQogCiBwcml2YXRl
OgogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTGVuZ3RoKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzKQpAQCAtMTU5LDcgKzE1OSw3IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KICAgICBib29sIGlzOEJpdCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2
b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24pIGNvbnN0IHsgU3RyaW5nSW1w
bDo6Y29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJh
Y3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdCB7IGNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9u
LCBjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsgfQogCiBwcml2YXRlOgogICAgIGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlTnVtYmVycy5oCmluZGV4IGE4MGZhM2M1MTAzNmFkOGE4YWRhNTg5MDk1YWE0MzdkZmI0
ODY2OTYuLmE5OTAzNzg2ZWY3MDNkYTQ2NmM0MTc5ZjMyMmE2NzQwOTNmZGYxNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmgKKysrIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaApAQCAtNzQsNyAr
NzQsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQogICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJU
eXBlKiBkZXN0aW5hdGlvbikgY29uc3QgeyBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0
aW5hdGlvbiwgYnVmZmVyKCksIG1fbGVuZ3RoKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29u
c3QgeyBjb3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgYnVmZmVyKCksIG1fbGVuZ3RoKTsgfQog
CiBwcml2YXRlOgogICAgIGNvbnN0IExDaGFyKiBidWZmZXIoKSBjb25zdCB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oJm1fYnVmZmVyWzBdKTsgfQpAQCAtMTE4LDcgKzEx
OCw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtYmVyLmxlbmd0aCgpOyB9CiAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENo
YXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdCB7IFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0
ZXJzKGRlc3RpbmF0aW9uLCBtX251bWJlci5idWZmZXIoKSwgbV9udW1iZXIubGVuZ3RoKCkpOyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCB3cml0ZVRvKENoYXJh
Y3RlclR5cGUqIGRlc3RpbmF0aW9uKSBjb25zdCB7IGNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9u
LCBtX251bWJlci5idWZmZXIoKSwgbV9udW1iZXIubGVuZ3RoKCkpOyB9CiAKIHByaXZhdGU6CiAg
ICAgY29uc3QgRm9ybWF0dGVkTnVtYmVyJiBtX251bWJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nQ29udGFpbmVyLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0NvbnRhaW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViMGRiMWQwZWZiMTQ1NzVjYTY0YzJkOTQ4M2VkOWJm
ZGE3M2NmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0Nv
bnRhaW5lci5oCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvQVND
SUlGYXN0UGF0aC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKKy8vIFdlIHBhY2thZ2UgYXNjaWkgc3RyaW5ncyB3aXRoIGxlc3MgdGhhbiA4
IGNoYXJhY3RlcnMgaW50byB0aGUgcG9pbnRlciBmb3IgdGhlIHN0cmluZyBpbXBsLgorLy8gU2lu
Y2Ugd2UgcmVxdWlyZSB0aGF0IHRoZSBzbWFsbCBzdHJpbmcgYmUgYXNjaWkgdGhlIHRvcG1vc3Qg
Yml0IG9mIGVhY2ggYnl0ZSB3aWxsIGJlIDAuIFdlIHVzZSB0aGUgdG9wLW1vc3Qgb2YgdGhlc2Ug
Yml0cyB0byBtYXJrIHRoYXQKKy8vIGEgc3RyaW5nIGlzIGFjdHVhbGx5IGEgcG9pbnRlciB0byBh
biBpbXBsLiBPbiAzMi1iaXQgcGxhdGZvcm1zIHRoaXMgaXMgZmluZSBiZWNhdXNlIHRoZSBwb2lu
dGVyIHdpbGwgYmUgaW4gdGhlIGJvdHRvbSBiaXRzLiBPbiA2NC1iaXQgcGxhdGZvcm1zCisvLwor
Ly8gSW4gb3JkZXIgdG8gc3VwcG9ydCBnZXR0aW5nIGEgY29uc3QgY2hhciogd2l0aCB0aGUgY29u
dGVudHMgb2YgdGhlIHN0cmluZyB3ZSBuZWVkIHRvIHByb3ZpZGUgYSB3YXkgdG8KK3RlbXBsYXRl
PHR5cGVuYW1lIEltcGxUeXBlPgorY2xhc3MgU3RyaW5nQ29udGFpbmVyIHsKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihJbXBsVHlwZSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkltcGxUeXBlIHNo
b3VsZCBiZSB0aGUgc2FtZSBzaXplIGFzIGEgcG9pbnRlciIpOworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19iYXNlX29mPFN0cmluZ0ltcGwsIEltcGxUeXBlPjo6dmFsdWUsICJJbXBsVHlwZSBz
aG91bGQgYmUgYSBzdWJjbGFzcyBvZiBTdHJpbmdJbXBsIik7CitwdWJsaWM6CisgICAgY29uc3Rl
eHByIHVpbnQ2NF90IHBvaW50ZXJGbGFnID0gc3RhdGljX2Nhc3Q8dWludHB0cj4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnRwdHJfdD46Om1pbigpKTsKKyAgICBjb25zdGV4cHIgdWludDY0X3QgcG9p
bnRlck1hc2sgPSBwb2ludGVyRmxhZyAtIDE7CisKKyAgICBzdGF0aWMgdWludDY0X3QgdG9QYWNr
ZWRTdHJpbmcoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCisgICAgewor
ICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IHNpemVvZih1aW50NjRfdCkpOworICAgICAgICB1aW50
NjRfdCByZXN1bHQgeyAwIH07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kCKSB7CisgICAgICAgICAgICByZXN1bHQgPDwgQ0hBUl9CSVQ7CisgICAgICAgICAgICByZXN1
bHQgKz0gKihjaGFyYWN0ZXJzKyspOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJv
b2wgc2hvdWxkQmVTbWFsbFN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCkKKyAgICB7CisgICAgICAgIGlmIChsZW5ndGggPD0gc2l6ZW9mKHVpbnQ2NF90KSkKKyAg
ICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoY2hhcmFjdGVycywgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1NtYWxsU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIShtX2NvbnRlbnRzICYgcG9pbnRlck1h
c2spOyB9CisgICAgQUxXQVlTX0lOTElORSBJbXBsVHlwZSogaW1wbCgpIGNvbnN0IHsgQVNTRVJU
KCFpc1NtYWxsU3RyaW5nKCkpOyByZXR1cm4gYml0d2lzZV9jYXN0PEltcGxUeXBlKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihtX2NvbnRlbnRzKSAmIH5wb2ludGVyTWFzayk7IH0KKyAgICBSZWZQ
dHI8SW1wbFR5cGU+IHJlbGVhc2VJbXBsKCkKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
V1RGTW92ZShiaXR3aXNlX2Nhc3Q8UmVmUHRyPEltcGxUeXBlPj4oaW1wbCgpKSk7CisgICAgICAg
IEFTU0VSVChpc051bGwoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
Ym9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhaXNTbWFsbFN0cmluZygpICYmICFpbXBsKCk7
IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9jb250ZW50czsgfQorICAg
IGJvb2wgaGFzSW1wbCgpIGNvbnN0IHsgcmV0dXJuICFpc1NtYWxsU3RyaW5nICYmICFpbXBsKCk7
IH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNT
bWFsbFN0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIGRpdmlkZVJvdW5kZWRVcChjbHoobV9j
b250ZW50cyksIENIQVJfQklUKTsKKyAgICAgICAgcmV0dXJuIGltcGwoKSA/IGltcGwoKS0+bGVu
Z3RoKCkgOiAwOworICAgIH0KKyAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0IHsgcmV0
dXJuIGxlbmd0aCgpICogKGlzOEJpdCgpID8gc2l6ZW9mKExDaGFyKSA6IHNpemVvZihVQ2hhcikp
OyB9CisKKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIGlzU21hbGxTdHJpbmcoKSB8
fCAhaW1wbCgpIHx8IGltcGwoKS0+aXM4Qml0KCk7IH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdCB7IHJldHVybiBpc051bGwoKSB8fCBpc1NtYWxsU3RyaW5nKCkgPyBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oKG1fY29udGVudHMgPj4gMzIpIF4gbV9jb250ZW50cykgOiBpbXBsKCktPmhhc2go
KTsgfQorICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0IHsgcmV0dXJuIGlzTnVsbCgp
IHx8IGlzU21hbGxTdHJpbmcoKSA/IGhhc2goKSA6IGltcGwoKS0+ZXhpc3RpbmdIYXNoKCk7IH0K
KworICAgIEFMV0FZU19JTkxJTkUgflN0cmluZ0NvbnRhaW5lcigpIHsgIWlzU21hbGxTdHJpbmco
KSB8fCBpbXBsKCktPmRlcmVmKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN1cGVyVHlw
ZSwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8SW1wbFR5cGUsIFN1
cGVyVHlwZT46OnZhbHVlPjo6dHlwZT4KKyAgICBvcGVyYXRvciBjb25zdCBTdHJpbmdDb250YWlu
ZXI8U3VwZXJUeXBlPiYoKSBjb25zdCB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxTdHJpbmdD
b250YWluZXI8U3VwZXJUeXBlPio+KHRoaXMpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBT
dXBlclR5cGUsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWY8c3RkOjppc19iYXNlX29mPEltcGxU
eXBlLCBTdXBlclR5cGU+Ojp2YWx1ZT46OnR5cGU+CisgICAgb3BlcmF0b3IgU3RyaW5nQ29udGFp
bmVyPFN1cGVyVHlwZT4mKCkgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RyaW5nQ29udGFp
bmVyPFN1cGVyVHlwZT4qPih0aGlzKTsgfQorCisgICAgU3RyaW5nQ29udGFpbmVyKGNvbnN0IFN0
cmluZ0NvbnRhaW5lcjxUPiYpOworICAgIFN0cmluZ0NvbnRhaW5lcihTdHJpbmdDb250YWluZXI8
VD4mJik7CisgICAgU3RyaW5nQ29udGFpbmVyJiBvcGVyYXRvcj0oY29uc3QgU3RyaW5nQ29udGFp
bmVyPFQ+Jik7CisgICAgU3RyaW5nQ29udGFpbmVyJiBvcGVyYXRvcj0oU3RyaW5nQ29udGFpbmVy
PFQ+JiYpOworCisgICAgU3RyaW5nQ29udGFpbmVyKCkgPSBkZWZhdWx0OworICAgIFN0cmluZ0Nv
bnRhaW5lcihSZWZQdHI8SW1wbFR5cGU+JiYgaW1wbCkKKyAgICAgICAgOiBtX2NvbnRlbnRzKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpbXBsKSkgfCBwb2lu
dGVyTWFzaykKKyAgICB7CisgICAgICAgIEFTU0VSVCghaW1wbC0+aXM4Qml0KCkgfHwgIXNob3Vs
ZEJlU21hbGxTdHJpbmcoaW1wbC0+Y2hhcmFjdGVyczgoKSwgaW1wbC0+bGVuZ3RoKCkpKTsKKyAg
ICB9CisKKyAgICBTdHJpbmdDb250YWluZXIoU3RhdGljU3RyaW5nSW1wbCYgc3RhdGljSW1wbCkK
KyAgICB7CisgICAgICAgIFN0cmluZ0ltcGwmIGltcGwgPSBzdGF0aWNJbXBsOworICAgICAgICBp
ZiAoaW1wbC0+aXM4Qml0KCkgJiYgc2hvdWxkQmVTbWFsbFN0cmluZyhpbXBsLT5jaGFyYWN0ZXJz
OCgpLCBpbXBsLT5sZW5ndGgoKSkpCisgICAgICAgICAgICBtX2NvbnRlbnRzID0gdG9QYWNrZWRT
dHJpbmcoaW1wbC0+Y2hhcmFjdGVyczgoKSwgaW1wbC0+bGVuZ3RoKCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2NvbnRlbnRzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KGltcGwpKSB8IHBvaW50ZXJNYXNrOworICAgIH0KKworICAgIFN0cmlu
Z0NvbnRhaW5lcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKyAgICAg
ICAgOiBtX2NvbnRlbnRzKHRvUGFja2VkU3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisgICAg
eworICAgICAgICBBU1NFUlQoc2hvdWxkQmVTbWFsbFN0cmluZyhpbXBsLT5jaGFyYWN0ZXJzOCgp
LCBpbXBsLT5sZW5ndGgoKSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBKdXN0IHRoZSBw
b2ludGVyIG1hc2sgaXMgdGhlIHNhbWUgYXMgYSBudWxsIHN0cmluZy4KKyAgICB1aW50NjRfdCBt
X2NvbnRlbnRzIHsgcG9pbnRlck1hc2sgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitT
dHJpbmdDb250YWluZXI6OlN0cmluZ0NvbnRhaW5lcihjb25zdCBTdHJpbmdDb250YWluZXI8VD4m
IG90aGVyKQoreworICAgIGlmIChvdGhlci5oYXNJbXBsKCkpCisgICAgICAgIG90aGVyLT5pbXBs
KCktPnJlZigpOworICAgIG1fY29udGVudHMgPSBvdGhlci5tX2NvbnRlbnRzOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorU3RyaW5nQ29udGFpbmVyOjpTdHJpbmdDb250YWluZXIoU3RyaW5n
Q29udGFpbmVyPFQ+JiYgb3RoZXIpCit7CisgICAgc3RkOjpleGNoYW5nZShtX2NvbnRlbnRzLCBv
dGhlci5tX2NvbnRlbnRzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1N0cmluZ0NvbnRh
aW5lcjo6U3RyaW5nQ29udGFpbmVyJiBvcGVyYXRvcj0oY29uc3QgU3RyaW5nQ29udGFpbmVyPFQ+
JiBvdGhlcikKK3sKKyAgICBTdHJpbmdDb250YWluZXIgc3RyaW5nID0gb3RoZXI7CisgICAgc3Rk
OjpleGNoYW5nZSgqdGhpcywgc3RyaW5nKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitTdHJpbmdDb250YWluZXI6OlN0cmluZ0NvbnRhaW5lciYgb3BlcmF0
b3I9KFN0cmluZ0NvbnRhaW5lcjxUPiYmKQoreworICAgIFN0cmluZ0NvbnRhaW5lciBzdHJpbmcg
PSBvdGhlcjsKKyAgICBzdGQ6OmV4Y2hhbmdlKCp0aGlzLCBzdHJpbmcpOworICAgIHJldHVybiAq
dGhpczsKK30KKworCisKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2guaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aC5oCmluZGV4IDllZTY4MzhkNTVmYTBlYTU1M2Y0NzEwZTI0OTc2NzBhYzUyNGJjOGUuLjk0YzYw
YTYyNzI4OTUzYmU0OWQwYzIwMzIzNjJiMDQzYTg1YWNiNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SGFzaC5oCkBAIC02OSwxMCArNjksMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBy
ZXR1cm4gZXF1YWwoYSwgYi5nZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBTdHJpbmcmIGtleSkgeyByZXR1cm4ga2V5LmltcGwoKS0+aGFzaCgp
OyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0cmluZyYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmlu
ZyYgYSwgY29uc3QgU3RyaW5nJiBiKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXF1
YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsKKyAgICAgICAgICAgIHJldHVybiBhID09IGI7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IGZhbHNlOwpAQCAtOTIsMTIgKzkyLDE4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHM8
VUNoYXIsIEZvbGRDYXNlPFVDaGFyPj4oZGF0YSwgbGVuZ3RoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFN0cmluZ0ltcGwmIHN0cmluZykKKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goU3RyaW5nVmlldyBzdHJpbmcpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2goc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgICAgICByZXR1cm4g
aGFzaChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHN0cmluZy52aWV3KCkpOworICAg
ICAgICB9CisKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goU3RyaW5nSW1wbCogc3RyaW5n
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoc3RyaW5nKTsKQEAgLTExMywxMSArMTE5
LDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaGFz
aChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSksIGxlbmd0aCk7CiAgICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBTdHJp
bmdJbXBsJiBhLCBjb25zdCBTdHJpbmdJbXBsJiBiKQorCisgICAgICAgIHN0YXRpYyBpbmxpbmUg
Ym9vbCBlcXVhbChTdHJpbmdWaWV3IGEsIFN0cmluZ1ZpZXcgYikKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYSwgYik7CiAgICAgICAgIH0KKwor
ICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCYgYSwgY29u
c3QgU3RyaW5nSW1wbCYgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVxdWFsKGEu
dmlldygpLCBiLnZpZXcoKSk7CisgICAgICAgIH0KICAgICAgICAgc3RhdGljIGlubGluZSBib29s
IGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEFTU0VSVChhKTsKQEAgLTEzNywyMSArMTQ4LDIxIEBAIG5hbWVzcGFj
ZSBXVEYgewogCiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0cmluZyYga2V5
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaGFzaChrZXkuaW1wbCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBoYXNoKGtleS52aWV3KCkpOwogICAgICAgICB9CiAgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEF0b21pY1N0cmluZyYga2V5KQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gaGFzaChrZXkuaW1wbCgpKTsKKyAgICAgICAgICAgIHJldHVybiBoYXNo
KGtleS52aWV3KCkpOwogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsKKyAgICAgICAgICAgIHJldHVybiBlcXVhbChh
LnZpZXcoKSwgYi52aWV3KCkpOwogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKQogICAgICAgICB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlICJhID09IGIiIGhlcmUgYSBoZWxwZnVsIG9w
dGltaXphdGlvbj8KICAgICAgICAgICAgIC8vIEl0IG1ha2VzIGFsbCBjYXNlcyB3aGVyZSB0aGUg
c3RyaW5ncyBhcmUgbm90IGlkZW50aWNhbCBzbGlnaHRseSBzbG93ZXIuCi0gICAgICAgICAgICBy
ZXR1cm4gYSA9PSBiIHx8IGVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZXF1YWwoYS52aWV3KCksIGIudmlldygpKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCBkZDMyNWNhMGIzMzc1ZmFhYzA2NTc0OGFm
YzRjNmU1YWNmZTA3MGVjLi5kZGRiNzViMzhhZWVkNzZkZDQ1N2E5MmRjOTEzNTc4MjRlNGUyZTFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTMzOSw1ODkgKzMzOSw2IEBAIFVD
aGFyMzIgU3RyaW5nSW1wbDo6Y2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCBpKQogICAgIHJl
dHVybiAwOwogfQogCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRvTG93ZXJj
YXNlV2l0aG91dExvY2FsZSgpCi17Ci0gICAgLy8gTm90ZTogQXQgb25lIHRpbWUgdGhpcyB3YXMg
YSBob3QgZnVuY3Rpb24gaW4gdGhlIERyb21hZW8gYmVuY2htYXJrLCBzcGVjaWZpY2FsbHkgdGhl
Ci0gICAgLy8gbm8tb3AgY29kZSBwYXRoIHRoYXQgbWF5IHJldHVybiBvdXJzZWxmIGlmIHdlIGZp
bmQgbm8gdXBwZXIgY2FzZSBsZXR0ZXJzIGFuZCBubyBpbnZhbGlkCi0gICAgLy8gQVNDSUkgbGV0
dGVycy4KLQotICAgIC8vIEZpcnN0IHNjYW4gdGhlIHN0cmluZyBmb3IgdXBwZXJjYXNlIGFuZCBu
b24tQVNDSUkgY2hhcmFjdGVyczoKLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIExDaGFyIGNo
YXJhY3RlciA9IG1fZGF0YThbaV07Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoKGNoYXJhY3Rl
ciAmIH4weDdGKSB8fCBpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0lu
ZGV4OEJpdChpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0K
LSAgICBib29sIG5vVXBwZXIgPSB0cnVlOwotICAgIHVuc2lnbmVkIG9yZWQgPSAwOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIg
Y2hhcmFjdGVyID0gbV9kYXRhMTZbaV07Ci0gICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBw
ZXIoY2hhcmFjdGVyKSkpCi0gICAgICAgICAgICBub1VwcGVyID0gZmFsc2U7Ci0gICAgICAgIG9y
ZWQgfD0gY2hhcmFjdGVyOwotICAgIH0KLSAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHRoZSBzdHJp
bmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8gdXBwZXJjYXNlLgotICAgIGlmIChub1VwcGVyICYmICEo
b3JlZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgaWYgKCEob3JlZCAm
IH4weDdGKSkgewotICAgICAgICBVQ2hhciogZGF0YTE2OwotICAgICAgICBhdXRvIG5ld0ltcGwg
PSBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwgZGF0YTE2KTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJTG93ZXIobV9kYXRhMTZbaV0pOwotICAgICAgICByZXR1
cm4gbmV3SW1wbDsKLSAgICB9Ci0KLSAgICBpZiAobV9sZW5ndGggPiBNYXhMZW5ndGgpCi0gICAg
ICAgIENSQVNIKCk7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKLQotICAgIC8vIERv
IGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMuCi0gICAgVUNoYXIqIGRhdGExNjsKLSAgICBhdXRvIG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwgZGF0YTE2KTsKLQotICAg
IFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgIGludDMyX3QgcmVhbExlbmd0
aCA9IHVfc3RyVG9Mb3dlcihkYXRhMTYsIGxlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAiIiwg
JnN0YXR1cyk7Ci0gICAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpICYmIHJlYWxMZW5ndGggPT0gbGVu
Z3RoKQotICAgICAgICByZXR1cm4gbmV3SW1wbDsKLQotICAgIG5ld0ltcGwgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7Ci0gICAgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OwotICAgIHVfc3RyVG9Mb3dlcihkYXRhMTYsIHJlYWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0
aCwgIiIsICZzdGF0dXMpOwotICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIHJldHVybiBuZXdJbXBsOwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6Y29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZVN0YXJ0aW5nQXRGYWlsaW5n
SW5kZXg4Qml0KHVuc2lnbmVkIGZhaWxpbmdJbmRleCkKLXsKLSAgICBBU1NFUlQoaXM4Qml0KCkp
OwotICAgIExDaGFyKiBkYXRhODsKLSAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxp
emVkSW50ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwgZGF0YTgpOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGZhaWxpbmdJbmRleDsgKytpKSB7Ci0gICAgICAgIEFTU0VSVCghKG1fZGF0
YThbaV0gJiB+MHg3RikgJiYgIWlzQVNDSUlVcHBlcihtX2RhdGE4W2ldKSk7Ci0gICAgICAgIGRh
dGE4W2ldID0gbV9kYXRhOFtpXTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBmYWls
aW5nSW5kZXg7IGkgPCBtX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIExDaGFyIGNoYXJhY3RlciA9
IG1fZGF0YThbaV07Ci0gICAgICAgIGlmICghKGNoYXJhY3RlciAmIH4weDdGKSkKLSAgICAgICAg
ICAgIGRhdGE4W2ldID0gdG9BU0NJSUxvd2VyKGNoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKGlzTGF0aW4xKHVfdG9sb3dlcihjaGFyYWN0ZXIpKSk7Ci0gICAg
ICAgICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPih1X3RvbG93ZXIoY2hhcmFjdGVy
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3SW1wbDsKLX0KLQotUmVmPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoKQot
ewotICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0aW1pemVkIGZvciBuby1vcCBjYXNl
cyB0aGUgd2F5Ci0gICAgLy8gY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpIGlzLCBi
dXQgaW4gZW1waXJpY2FsIHRlc3RpbmcsCi0gICAgLy8gZmV3IGFjdHVhbCBjYWxscyB0byB1cHBl
cigpIGFyZSBuby1vcHMsIHNvIGl0IHdvdWxkbid0IGJlIHdvcnRoCi0gICAgLy8gdGhlIGV4dHJh
IHRpbWUgZm9yIHByZS1zY2FubmluZy4KLQotICAgIGlmIChtX2xlbmd0aCA+IE1heExlbmd0aCkK
LSAgICAgICAgQ1JBU0goKTsKLSAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwotCi0gICAg
aWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBkYXRhODsKLSAgICAgICAgYXV0byBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTgpOwotICAgICAgICAKLSAg
ICAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFy
YWN0ZXJzIGFyZSBBU0NJSS4KLSAgICAgICAgdW5zaWduZWQgb3JlZCA9IDA7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIExDaGFyIGNoYXJh
Y3RlciA9IG1fZGF0YThbaV07Ci0gICAgICAgICAgICBvcmVkIHw9IGNoYXJhY3RlcjsKLSAgICAg
ICAgICAgIGRhdGE4W2ldID0gdG9BU0NJSVVwcGVyKGNoYXJhY3Rlcik7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgICAgIHJldHVybiBuZXdJbXBsOwot
Ci0gICAgICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGlu
Y2x1ZGUgbm9uLUFTQ0lJIExhdGluLTEgY2hhcmFjdGVycy4KLSAgICAgICAgaW50IG51bWJlclNo
YXJwU0NoYXJhY3RlcnMgPSAwOwotCi0gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gc3BlY2lhbCBj
YXNlcy4KLSAgICAgICAgLy8gIDEuIFNvbWUgTGF0aW4tMSBjaGFyYWN0ZXJzIHdoZW4gY29udmVy
dGVkIHRvIHVwcGVyIGNhc2UgYXJlIDE2IGJpdCBjaGFyYWN0ZXJzLgotICAgICAgICAvLyAgMi4g
TG93ZXIgY2FzZSBzaGFycC1TIGNvbnZlcnRzIHRvICJTUyIgKHR3byBjaGFyYWN0ZXJzKQotICAg
ICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
TENoYXIgY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShj
aGFyYWN0ZXIgPT0gc21hbGxMZXR0ZXJTaGFycFMpKQotICAgICAgICAgICAgICAgICsrbnVtYmVy
U2hhcnBTQ2hhcmFjdGVyczsKLSAgICAgICAgICAgIEFTU0VSVCh1X3RvdXBwZXIoY2hhcmFjdGVy
KSA8PSAweEZGRkYpOwotICAgICAgICAgICAgVUNoYXIgdXBwZXIgPSB1X3RvdXBwZXIoY2hhcmFj
dGVyKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghaXNMYXRpbjEodXBwZXIpKSkgewotICAg
ICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgdXBwZXItY2FzZWQgY2hhcmFjdGVyIGRvZXMgbm90
IGZpdCBpbiBhbiA4LWJpdCBzdHJpbmcsIHdlIG5lZWQgdG8gdGFrZSB0aGUgMTYtYml0IHBhdGgu
Ci0gICAgICAgICAgICAgICAgZ290byB1cGNvbnZlcnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPih1cHBlcik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIW51bWJlclNoYXJwU0NoYXJhY3RlcnMpCi0gICAgICAgICAgICByZXR1cm4g
bmV3SW1wbDsKLQotICAgICAgICAvLyBXZSBoYXZlIG51bWJlclNTQ2hhcmFjdGVycyBzaGFycC1z
IGNoYXJhY3RlcnMsIGJ1dCBub25lIG9mIHRoZSBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMuCi0g
ICAgICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoICsgbnVtYmVyU2hh
cnBTQ2hhcmFjdGVycywgZGF0YTgpOwotCi0gICAgICAgIExDaGFyKiBkZXN0ID0gZGF0YTg7Ci0K
LSAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIExDaGFyIGNoYXJhY3RlciA9IG1fZGF0YThbaV07Ci0gICAgICAgICAgICBpZiAoY2hhcmFj
dGVyID09IHNtYWxsTGV0dGVyU2hhcnBTKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3QrKyA9ICdT
JzsKLSAgICAgICAgICAgICAgICAqZGVzdCsrID0gJ1MnOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoaXNMYXRpbjEodV90b3VwcGVyKGNoYXJhY3RlcikpKTsK
LSAgICAgICAgICAgICAgICAqZGVzdCsrID0gc3RhdGljX2Nhc3Q8TENoYXI+KHVfdG91cHBlcihj
aGFyYWN0ZXIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBu
ZXdJbXBsOwotICAgIH0KLQotdXBjb252ZXJ0OgotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldygqdGhpcykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29u
c3QgVUNoYXIqIHNvdXJjZTE2ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotCi0gICAgVUNoYXIq
IGRhdGExNjsKLSAgICBhdXRvIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3Ro
LCBkYXRhMTYpOwotICAgIAotICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdo
ZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCi0gICAgdW5zaWduZWQgb3JlZCA9IDA7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBj
aGFyYWN0ZXIgPSBzb3VyY2UxNltpXTsKLSAgICAgICAgb3JlZCB8PSBjaGFyYWN0ZXI7Ci0gICAg
ICAgIGRhdGExNltpXSA9IHRvQVNDSUlVcHBlcihjaGFyYWN0ZXIpOwotICAgIH0KLSAgICBpZiAo
IShvcmVkICYgfjB4N0YpKQotICAgICAgICByZXR1cm4gbmV3SW1wbDsKLQotICAgIC8vIERvIGEg
c2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNo
YXJhY3RlcnMuCi0gICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgaW50
MzJfdCByZWFsTGVuZ3RoID0gdV9zdHJUb1VwcGVyKGRhdGExNiwgbGVuZ3RoLCBzb3VyY2UxNiwg
bV9sZW5ndGgsICIiLCAmc3RhdHVzKTsKLSAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYgcmVh
bExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBuZXdJbXBsOwotICAgIG5ld0ltcGwg
PSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7Ci0gICAgc3RhdHVzID0g
VV9aRVJPX0VSUk9SOwotICAgIHVfc3RyVG9VcHBlcihkYXRhMTYsIHJlYWxMZW5ndGgsIHNvdXJj
ZTE2LCBtX2xlbmd0aCwgIiIsICZzdGF0dXMpOwotICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkK
LSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIHJldHVybiBuZXdJbXBsOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgbmVlZHNUdXJraXNoQ2FzaW5nUnVsZXMoY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbGVJZGVudGlmaWVyKQotewotICAgIC8vIEVpdGhlciAidHIiIG9yICJheiIgbG9jYWxlLCB3
aXRoIGNhc2Ugc2Vuc2l0aXZlIGNvbXBhcmlzb24gYW5kIGFsbG93aW5nIGZvciBhbiBpZ25vcmVk
IHN1YnRhZy4KLSAgICBVQ2hhciBmaXJzdCA9IGxvY2FsZUlkZW50aWZpZXJbMF07Ci0gICAgVUNo
YXIgc2Vjb25kID0gbG9jYWxlSWRlbnRpZmllclsxXTsKLSAgICByZXR1cm4gKChpc0FTQ0lJQWxw
aGFDYXNlbGVzc0VxdWFsKGZpcnN0LCAndCcpICYmIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwo
c2Vjb25kLCAncicpKQotICAgICAgICB8fCAoaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChmaXJz
dCwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKHNlY29uZCwgJ3onKSkpCi0gICAg
ICAgICYmIChsb2NhbGVJZGVudGlmaWVyLmxlbmd0aCgpID09IDIgfHwgbG9jYWxlSWRlbnRpZmll
clsyXSA9PSAnLScpOwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29udmVydFRv
TG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIp
Ci17Ci0gICAgLy8gVXNlIHRoZSBtb3JlLW9wdGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUg
dGltZS4KLSAgICAvLyBBc3N1bWluZyBoZXJlIHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmlj
IGxvd2VyY2FzaW5nIGlzIHRoZSBUdXJraXNoIGNhc2luZyBydWxlcy4KLSAgICAvLyBGSVhNRTog
Q291bGQgcG9zc2libHkgb3B0aW1pemUgZnVydGhlciBieSBsb29raW5nIGZvciB0aGUgc3BlY2lm
aWMgc2VxdWVuY2VzCi0gICAgLy8gdGhhdCBoYXZlIGxvY2FsZS1zcGVjaWZpYyBsb3dlcmNhc2lu
Zy4gVGhlcmUgYXJlIG9ubHkgdGhyZWUgb2YgdGhlbS4KLSAgICBpZiAoIW5lZWRzVHVya2lzaENh
c2luZ1J1bGVzKGxvY2FsZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gY29udmVydFRvTG93
ZXJjYXNlV2l0aG91dExvY2FsZSgpOwotCi0gICAgLy8gRklYTUU6IENvdWxkIHNoYXJlIG1vcmUg
Y29kZSB3aXRoIHRoZSBtYWluIFN0cmluZ0ltcGw6Omxvd2VyIGJ5IGZhY3RvcmluZyBvdXQKLSAg
ICAvLyB0aGlzIGxhc3QgcGFydCBpbnRvIGEgc2hhcmVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBs
b2NhbGUgc3RyaW5nLCBzaW5jZSB0aGlzIGlzCi0gICAgLy8ganVzdCBsaWtlIHRoZSBlbmQgb2Yg
dGhhdCBmdW5jdGlvbi4KLQotICAgIGlmIChtX2xlbmd0aCA+IE1heExlbmd0aCkKLSAgICAgICAg
Q1JBU0goKTsKLSAgICBpbnQgbGVuZ3RoID0gbV9sZW5ndGg7Ci0KLSAgICAvLyBCZWxvdywgd2Ug
cGFzcyBpbiB0aGUgaGFyZGNvZGVkIGxvY2FsZSAidHIiLiBQYXNzaW5nIHRoYXQgaXMgbW9yZSBl
ZmZpY2llbnQgdGhhbgotICAgIC8vIGFsbG9jYXRpbmcgbWVtb3J5IGp1c3QgdG8gdHVybiBsb2Nh
bGVJZGVudGlmaWVyIGludG8gYSBDIHN0cmluZywgYW5kIHdlIGFzc3VtZQotICAgIC8vIHRoZXJl
IGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdXBwZXJjYXNpbmcgZm9yICJ0ciIgYW5kICJh
eiIgbG9jYWxlcy4KLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXco
KnRoaXMpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBzb3VyY2Ux
NiA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBVQ2hhciogZGF0YTE2OwotICAgIGF1dG8g
bmV3U3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRhdGExNik7Ci0gICAgVUVy
cm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgaW50IHJlYWxMZW5ndGggPSB1X3N0
clRvTG93ZXIoZGF0YTE2LCBsZW5ndGgsIHNvdXJjZTE2LCBsZW5ndGgsICJ0ciIsICZzdGF0dXMp
OwotICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIG5ld1N0cmluZzsKLSAgICBuZXdTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxp
emVkKHJlYWxMZW5ndGgsIGRhdGExNik7Ci0gICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAg
IHVfc3RyVG9Mb3dlcihkYXRhMTYsIHJlYWxMZW5ndGgsIHNvdXJjZTE2LCBsZW5ndGgsICJ0ciIs
ICZzdGF0dXMpOwotICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgIHJldHVybiBuZXdTdHJpbmc7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxlSWRlbnRpZmllcikKLXsKLSAgICAvLyBVc2UgdGhlIG1vcmUtb3B0aW1pemVkIGNvZGUgcGF0
aCBtb3N0IG9mIHRoZSB0aW1lLgotICAgIC8vIEFzc3VtaW5nIGhlcmUgdGhhdCB0aGUgb25seSBs
b2NhbGUtc3BlY2lmaWMgbG93ZXJjYXNpbmcgaXMgdGhlIFR1cmtpc2ggY2FzaW5nIHJ1bGVzLAot
ICAgIC8vIGFuZCB0aGF0IHRoZSBvbmx5IGFmZmVjdGVkIGNoYXJhY3RlciBpcyBsb3dlcmNhc2Ug
ImkiLgotICAgIGlmICghbmVlZHNUdXJraXNoQ2FzaW5nUnVsZXMobG9jYWxlSWRlbnRpZmllcikg
fHwgZmluZCgnaScpID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gY29udmVydFRvVXBwZXJj
YXNlV2l0aG91dExvY2FsZSgpOwotCi0gICAgaWYgKG1fbGVuZ3RoID4gTWF4TGVuZ3RoKQotICAg
ICAgICBDUkFTSCgpOwotICAgIGludCBsZW5ndGggPSBtX2xlbmd0aDsKLQotICAgIC8vIEJlbG93
LCB3ZSBwYXNzIGluIHRoZSBoYXJkY29kZWQgbG9jYWxlICJ0ciIuIFBhc3NpbmcgdGhhdCBpcyBt
b3JlIGVmZmljaWVudCB0aGFuCi0gICAgLy8gYWxsb2NhdGluZyBtZW1vcnkganVzdCB0byB0dXJu
IGxvY2FsZUlkZW50aWZpZXIgaW50byBhIEMgc3RyaW5nLCBhbmQgd2UgYXNzdW1lCi0gICAgLy8g
dGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1cHBlcmNhc2luZyBmb3IgInRyIiBh
bmQgImF6IiBsb2NhbGVzLgotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5n
VmlldygqdGhpcykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHNv
dXJjZTE2ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIFVDaGFyKiBkYXRhMTY7Ci0gICAg
YXV0byBuZXdTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YTE2KTsKLSAg
ICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICBpbnQgcmVhbExlbmd0aCA9
IHVfc3RyVG9VcHBlcihkYXRhMTYsIGxlbmd0aCwgc291cmNlMTYsIGxlbmd0aCwgInRyIiwgJnN0
YXR1cyk7Ci0gICAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpICYmIHJlYWxMZW5ndGggPT0gbGVuZ3Ro
KQotICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwotICAgIG5ld1N0cmluZyA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKLSAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7
Ci0gICAgdV9zdHJUb1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwgc291cmNlMTYsIGxlbmd0aCwg
InRyIiwgJnN0YXR1cyk7Ci0gICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgcmV0dXJuIG5ld1N0cmluZzsKLX0KLQotUmVmPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmZvbGRDYXNlKCkKLXsKLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgdW5z
aWduZWQgZmFpbGluZ0luZGV4OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9s
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBtX2RhdGE4W2ldOwot
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFpc0FTQ0lJKGNoYXJhY3RlcikgfHwgaXNBU0NJSVVw
cGVyKGNoYXJhY3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgZmFpbGluZ0luZGV4ID0gaTsKLSAg
ICAgICAgICAgICAgICBnb3RvIFNsb3dQYXRoOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIC8vIFN0cmluZyB3YXMgYWxsIEFTQ0lJIGFuZCBubyB1cHBlcmNhc2UsIHNvIGp1c3Qg
cmV0dXJuIGFzLWlzLgotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLVNsb3dQYXRoOgotICAgICAg
ICBib29sIG5lZWQxNkJpdENoYXJhY3RlcnMgPSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZmFpbGluZ0luZGV4OyBpIDwgbV9sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgYXV0
byBjaGFyYWN0ZXIgPSBtX2RhdGE4W2ldOwotICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAw
eEI1IHx8IGNoYXJhY3RlciA9PSAweERGKSB7Ci0gICAgICAgICAgICAgICAgbmVlZDE2Qml0Q2hh
cmFjdGVycyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIW5lZWQxNkJpdENoYXJhY3RlcnMpIHsKLSAgICAgICAg
ICAgIExDaGFyKiBkYXRhODsKLSAgICAgICAgICAgIGF1dG8gZm9sZGVkID0gY3JlYXRlVW5pbml0
aWFsaXplZEludGVybmFsTm9uRW1wdHkobV9sZW5ndGgsIGRhdGE4KTsKLSAgICAgICAgICAgIGNv
cHlDaGFyYWN0ZXJzKGRhdGE4LCBtX2RhdGE4LCBmYWlsaW5nSW5kZXgpOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZmFpbGluZ0luZGV4OyBpIDwgbV9sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gbV9kYXRhOFtpXTsKLSAgICAgICAgICAgICAg
ICBpZiAoaXNBU0NJSShjaGFyYWN0ZXIpKQotICAgICAgICAgICAgICAgICAgICBkYXRhOFtpXSA9
IHRvQVNDSUlMb3dlcihjaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoaXNMYXRpbjEodV9mb2xkQ2FzZShjaGFyYWN0ZXIsIFVfRk9M
RF9DQVNFX0RFRkFVTFQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGE4W2ldID0gc3RhdGlj
X2Nhc3Q8TENoYXI+KHVfZm9sZENhc2UoY2hhcmFjdGVyLCBVX0ZPTERfQ0FTRV9ERUZBVUxUKSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZv
bGRlZDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVbmNsZWFy
IHdoeSB3ZSB1c2UgZ290byBpbiB0aGUgOC1iaXQgY2FzZSwgYW5kIGEgZGlmZmVyZW50IGFwcHJv
YWNoIGluIHRoZSAxNi1iaXQgY2FzZS4KLSAgICAgICAgYm9vbCBub1VwcGVyID0gdHJ1ZTsKLSAg
ICAgICAgdW5zaWduZWQgb3JlZCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBtX2RhdGEx
NltpXTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkp
Ci0gICAgICAgICAgICAgICAgbm9VcHBlciA9IGZhbHNlOwotICAgICAgICAgICAgb3JlZCB8PSBj
aGFyYWN0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkgewotICAg
ICAgICAgICAgaWYgKG5vVXBwZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBTdHJpbmcgd2FzIGFs
bCBBU0NJSSBhbmQgbm8gdXBwZXJjYXNlLCBzbyBqdXN0IHJldHVybiBhcy1pcy4KLSAgICAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBVQ2hhciog
ZGF0YTE2OwotICAgICAgICAgICAgYXV0byBmb2xkZWQgPSBjcmVhdGVVbmluaXRpYWxpemVkSW50
ZXJuYWxOb25FbXB0eShtX2xlbmd0aCwgZGF0YTE2KTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIGRhdGExNltpXSA9
IHRvQVNDSUlMb3dlcihtX2RhdGExNltpXSk7Ci0gICAgICAgICAgICByZXR1cm4gZm9sZGVkOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fbGVuZ3RoID4gTWF4TGVuZ3RoKQotICAgICAg
ICBDUkFTSCgpOwotCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3
KCp0aGlzKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLQotICAgIFVDaGFyKiBkYXRhOwotICAg
IGF1dG8gZm9sZGVkID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkobV9sZW5n
dGgsIGRhdGEpOwotICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7Ci0gICAgVUVycm9yQ29k
ZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3RoID0gdV9zdHJG
b2xkQ2FzZShkYXRhLCBsZW5ndGgsIHVwY29udmVydGVkQ2hhcmFjdGVycywgbGVuZ3RoLCBVX0ZP
TERfQ0FTRV9ERUZBVUxULCAmc3RhdHVzKTsKLSAgICBpZiAoVV9TVUNDRVNTKHN0YXR1cykgJiYg
cmVhbExlbmd0aCA9PSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmb2xkZWQ7Ci0gICAgQVNTRVJU
KHJlYWxMZW5ndGggPiBsZW5ndGgpOwotICAgIGZvbGRlZCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJ
bnRlcm5hbE5vbkVtcHR5KHJlYWxMZW5ndGgsIGRhdGEpOwotICAgIHN0YXR1cyA9IFVfWkVST19F
UlJPUjsKLSAgICB1X3N0ckZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIHVwY29udmVydGVkQ2hh
cmFjdGVycywgbGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVzKTsKLSAgICBpZiAo
VV9GQUlMVVJFKHN0YXR1cykpCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICByZXR1cm4gZm9s
ZGVkOwotfQotCi10ZW1wbGF0ZTxTdHJpbmdJbXBsOjpDYXNlQ29udmVydFR5cGUgdHlwZSwgdHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLUFMV0FZU19JTkxJTkUgUmVmPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OmNvbnZlcnRBU0NJSUNhc2UoU3RyaW5nSW1wbCYgaW1wbCwgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHVuc2lnbmVkIGZhaWxpbmdJbmRl
eDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
Q2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIgPSBkYXRhW2ldOwotICAgICAgICBpZiAodHlwZSA9PSBD
YXNlQ29udmVydFR5cGU6Okxvd2VyID8gVU5MSUtFTFkoaXNBU0NJSVVwcGVyKGNoYXJhY3Rlcikp
IDogTElLRUxZKGlzQVNDSUlMb3dlcihjaGFyYWN0ZXIpKSkgewotICAgICAgICAgICAgZmFpbGlu
Z0luZGV4ID0gaTsKLSAgICAgICAgICAgIGdvdG8gU2xvd1BhdGg7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGltcGw7Ci0KLVNsb3dQYXRoOgotICAgIENoYXJhY3RlclR5cGUqIG5ld0Rh
dGE7Ci0gICAgYXV0byBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1w
dHkobGVuZ3RoLCBuZXdEYXRhKTsKLSAgICBjb3B5Q2hhcmFjdGVycyhuZXdEYXRhLCBkYXRhLCBm
YWlsaW5nSW5kZXgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IGZhaWxpbmdJbmRleDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICBuZXdEYXRhW2ldID0gdHlwZSA9PSBDYXNlQ29udmVydFR5cGU6
Okxvd2VyID8gdG9BU0NJSUxvd2VyKGRhdGFbaV0pIDogdG9BU0NJSVVwcGVyKGRhdGFbaV0pOwot
ICAgIHJldHVybiBuZXdJbXBsOwotfQotCi1SZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnRBU0NJSUNhc2U8Q2FzZUNvbnZlcnRUeXBlOjpMb3dlcj4oKnRoaXMsIG1fZGF0
YTgsIG1fbGVuZ3RoKTsKLSAgICByZXR1cm4gY29udmVydEFTQ0lJQ2FzZTxDYXNlQ29udmVydFR5
cGU6Okxvd2VyPigqdGhpcywgbV9kYXRhMTYsIG1fbGVuZ3RoKTsKLX0KLQotUmVmPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OmNvbnZlcnRUb0FTQ0lJVXBwZXJjYXNlKCkKLXsKLSAgICBpZiAoaXM4
Qml0KCkpCi0gICAgICAgIHJldHVybiBjb252ZXJ0QVNDSUlDYXNlPENhc2VDb252ZXJ0VHlwZTo6
VXBwZXI+KCp0aGlzLCBtX2RhdGE4LCBtX2xlbmd0aCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRBU0NJ
SUNhc2U8Q2FzZUNvbnZlcnRUeXBlOjpVcHBlcj4oKnRoaXMsIG1fZGF0YTE2LCBtX2xlbmd0aCk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvZGVVbml0UHJlZGljYXRlPiBpbmxpbmUgUmVmPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN0cmlwTWF0Y2hlZENoYXJhY3RlcnMoQ29kZVVuaXRQcmVk
aWNhdGUgcHJlZGljYXRlKQotewotICAgIGlmICghbV9sZW5ndGgpCi0gICAgICAgIHJldHVybiAq
dGhpczsKLQotICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKLSAgICB1bnNpZ25lZCBlbmQgPSBtX2xl
bmd0aCAtIDE7Ci0gICAgCi0gICAgLy8gc2tpcCB3aGl0ZSBzcGFjZSBmcm9tIHN0YXJ0Ci0gICAg
d2hpbGUgKHN0YXJ0IDw9IGVuZCAmJiBwcmVkaWNhdGUoaXM4Qml0KCkgPyBtX2RhdGE4W3N0YXJ0
XSA6IG1fZGF0YTE2W3N0YXJ0XSkpCi0gICAgICAgICsrc3RhcnQ7Ci0gICAgCi0gICAgLy8gb25s
eSB3aGl0ZSBzcGFjZQotICAgIGlmIChzdGFydCA+IGVuZCkgCi0gICAgICAgIHJldHVybiAqZW1w
dHkoKTsKLQotICAgIC8vIHNraXAgd2hpdGUgc3BhY2UgZnJvbSBlbmQKLSAgICB3aGlsZSAoZW5k
ICYmIHByZWRpY2F0ZShpczhCaXQoKSA/IG1fZGF0YThbZW5kXSA6IG1fZGF0YTE2W2VuZF0pKQot
ICAgICAgICAtLWVuZDsKLQotICAgIGlmICghc3RhcnQgJiYgZW5kID09IG1fbGVuZ3RoIC0gMSkK
LSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZShtX2RhdGE4ICsgc3RhcnQsIGVuZCArIDEgLSBzdGFydCk7Ci0gICAgcmV0dXJuIGNy
ZWF0ZShtX2RhdGExNiArIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOwotfQotCi1SZWY8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6c3RyaXBXaGl0ZVNwYWNlKCkKLXsKLSAgICByZXR1cm4gc3RyaXBN
YXRjaGVkQ2hhcmFjdGVycyhpc1NwYWNlT3JOZXdsaW5lKTsKLX0KLQotUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nQ2hhcmFjdGVycyhDb2RlVW5pdE1h
dGNoRnVuY3Rpb24gcHJlZGljYXRlKQotewotICAgIHJldHVybiBzdHJpcE1hdGNoZWRDaGFyYWN0
ZXJzKHByZWRpY2F0ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IEFM
V0FZU19JTkxJTkUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgQ29kZVVuaXRNYXRjaEZ1bmN0aW9uIGZp
bmRNYXRjaCkKLXsKLSAgICBhdXRvKiBmcm9tID0gY2hhcmFjdGVyczsKLSAgICBhdXRvKiBmcm9t
RW5kID0gZnJvbSArIG1fbGVuZ3RoOwotCi0gICAgLy8gQXNzdW1lIHRoZSBjb21tb24gY2FzZSB3
aWxsIG5vdCByZW1vdmUgYW55IGNoYXJhY3RlcnMKLSAgICB3aGlsZSAoZnJvbSAhPSBmcm9tRW5k
ICYmICFmaW5kTWF0Y2goKmZyb20pKQotICAgICAgICArK2Zyb207Ci0gICAgaWYgKGZyb20gPT0g
ZnJvbUVuZCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgU3RyaW5nQnVmZmVyPENoYXJh
Y3RlclR5cGU+IGRhdGEobV9sZW5ndGgpOwotICAgIGF1dG8qIHRvID0gZGF0YS5jaGFyYWN0ZXJz
KCk7Ci0gICAgdW5zaWduZWQgb3V0YyA9IGZyb20gLSBjaGFyYWN0ZXJzOwotCi0gICAgaWYgKG91
dGMpCi0gICAgICAgIGNvcHlDaGFyYWN0ZXJzKHRvLCBjaGFyYWN0ZXJzLCBvdXRjKTsKLQotICAg
IGRvIHsKLSAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbUVuZCAmJiBmaW5kTWF0Y2goKmZyb20p
KQotICAgICAgICAgICAgKytmcm9tOwotICAgICAgICB3aGlsZSAoZnJvbSAhPSBmcm9tRW5kICYm
ICFmaW5kTWF0Y2goKmZyb20pKQotICAgICAgICAgICAgdG9bb3V0YysrXSA9ICpmcm9tKys7Ci0g
ICAgfSB3aGlsZSAoZnJvbSAhPSBmcm9tRW5kKTsKLQotICAgIGRhdGEuc2hyaW5rKG91dGMpOwot
Ci0gICAgcmV0dXJuIGFkb3B0KFdURk1vdmUoZGF0YSkpOwotfQotCi1SZWY8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6cmVtb3ZlQ2hhcmFjdGVycyhDb2RlVW5pdE1hdGNoRnVuY3Rpb24gZmluZE1h
dGNoKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIHJlbW92ZUNoYXJhY3Rl
cnMoY2hhcmFjdGVyczgoKSwgZmluZE1hdGNoKTsKLSAgICByZXR1cm4gcmVtb3ZlQ2hhcmFjdGVy
cyhjaGFyYWN0ZXJzMTYoKSwgZmluZE1hdGNoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgY2xhc3MgVUNoYXJQcmVkaWNhdGU+IGlubGluZSBSZWY8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UoVUNoYXJQcmVkaWNh
dGUgcHJlZGljYXRlKQotewotICAgIFN0cmluZ0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBkYXRhKG1f
bGVuZ3RoKTsKLQotICAgIGF1dG8qIGZyb20gPSBjaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7
Ci0gICAgYXV0byogZnJvbUVuZCA9IGZyb20gKyBtX2xlbmd0aDsKLSAgICB1bnNpZ25lZCBvdXRj
ID0gMDsKLSAgICBib29sIGNoYW5nZWRUb1NwYWNlID0gZmFsc2U7Ci0gICAgCi0gICAgYXV0byog
dG8gPSBkYXRhLmNoYXJhY3RlcnMoKTsKLSAgICAKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICB3aGlsZSAoZnJvbSAhPSBmcm9tRW5kICYmIHByZWRpY2F0ZSgqZnJvbSkpIHsKLSAgICAgICAg
ICAgIGlmICgqZnJvbSAhPSAnICcpCi0gICAgICAgICAgICAgICAgY2hhbmdlZFRvU3BhY2UgPSB0
cnVlOwotICAgICAgICAgICAgKytmcm9tOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChmcm9t
ICE9IGZyb21FbmQgJiYgIXByZWRpY2F0ZSgqZnJvbSkpCi0gICAgICAgICAgICB0b1tvdXRjKytd
ID0gKmZyb20rKzsKLSAgICAgICAgaWYgKGZyb20gIT0gZnJvbUVuZCkKLSAgICAgICAgICAgIHRv
W291dGMrK10gPSAnICc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGlmIChvdXRjICYmIHRvW291dGMgLSAxXSA9PSAnICcpCi0gICAgICAgIC0tb3V0YzsK
LQotICAgIGlmIChvdXRjID09IG1fbGVuZ3RoICYmICFjaGFuZ2VkVG9TcGFjZSkKLSAgICAgICAg
cmV0dXJuICp0aGlzOwotCi0gICAgZGF0YS5zaHJpbmsob3V0Yyk7Ci0KLSAgICByZXR1cm4gYWRv
cHQoV1RGTW92ZShkYXRhKSk7Ci19Ci0KLVJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1w
bGlmeVdoaXRlU3BhY2UoKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlPExDaGFyPihpc1NwYWNl
T3JOZXdsaW5lKTsKLSAgICByZXR1cm4gU3RyaW5nSW1wbDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFj
dGVyc1RvU3BhY2U8VUNoYXI+KGlzU3BhY2VPck5ld2xpbmUpOwotfQotCi1SZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6c2ltcGxpZnlXaGl0ZVNwYWNlKENvZGVVbml0TWF0Y2hGdW5jdGlvbiBp
c1doaXRlU3BhY2UpCi17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gU3RyaW5n
SW1wbDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2U8TENoYXI+KGlzV2hpdGVTcGFj
ZSk7Ci0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1Nw
YWNlPFVDaGFyPihpc1doaXRlU3BhY2UpOwotfQotCi1pbnQgU3RyaW5nSW1wbDo6dG9JbnRTdHJp
Y3QoYm9vbCogb2ssIGludCBiYXNlKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGNoYXJhY3RlcnNUb0ludFN0cmljdChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgb2ssIGJh
c2UpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoY2hhcmFjdGVyczE2KCksIG1f
bGVuZ3RoLCBvaywgYmFzZSk7Ci19Ci0KLXVuc2lnbmVkIFN0cmluZ0ltcGw6OnRvVUludFN0cmlj
dChib29sKiBvaywgaW50IGJhc2UpCi17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1
cm4gY2hhcmFjdGVyc1RvVUludFN0cmljdChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgb2ssIGJh
c2UpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGNoYXJhY3RlcnMxNigpLCBt
X2xlbmd0aCwgb2ssIGJhc2UpOwotfQotCi1pbnQ2NF90IFN0cmluZ0ltcGw6OnRvSW50NjRTdHJp
Y3QoYm9vbCogb2ssIGludCBiYXNlKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0
dXJuIGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBvaywg
YmFzZSk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KGNoYXJhY3RlcnMxNigp
LCBtX2xlbmd0aCwgb2ssIGJhc2UpOwotfQotCi11aW50NjRfdCBTdHJpbmdJbXBsOjp0b1VJbnQ2
NFN0cmljdChib29sKiBvaywgaW50IGJhc2UpCi17Ci0gICAgaWYgKGlzOEJpdCgpKQotICAgICAg
ICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3Ro
LCBvaywgYmFzZSk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NFN0cmljdChjaGFyYWN0
ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKLX0KLQotaW50cHRyX3QgU3RyaW5nSW1wbDo6
dG9JbnRQdHJTdHJpY3QoYm9vbCogb2ssIGludCBiYXNlKQotewotICAgIGlmIChpczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0clN0cmljdChjaGFyYWN0ZXJzOCgpLCBt
X2xlbmd0aCwgb2ssIGJhc2UpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3Qo
Y2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7Ci19Ci0KLWludCBTdHJpbmdJbXBs
Ojp0b0ludChib29sKiBvaykKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBj
aGFyYWN0ZXJzVG9JbnQoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIG9rKTsKLSAgICByZXR1cm4g
Y2hhcmFjdGVyc1RvSW50KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwotfQotCi11bnNp
Z25lZCBTdHJpbmdJbXBsOjp0b1VJbnQoYm9vbCogb2spCi17Ci0gICAgaWYgKGlzOEJpdCgpKQot
ICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwg
b2spOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0
aCwgb2spOwotfQotCi1pbnQ2NF90IFN0cmluZ0ltcGw6OnRvSW50NjQoYm9vbCogb2spCi17Ci0g
ICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjQoY2hhcmFj
dGVyczgoKSwgbV9sZW5ndGgsIG9rKTsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjQoY2hh
cmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7Ci19Ci0KLXVpbnQ2NF90IFN0cmluZ0ltcGw6OnRv
VUludDY0KGJvb2wqIG9rKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNo
YXJhY3RlcnNUb1VJbnQ2NChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgb2spOwotICAgIHJldHVy
biBjaGFyYWN0ZXJzVG9VSW50NjQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7Ci19Ci0K
LWludHB0cl90IFN0cmluZ0ltcGw6OnRvSW50UHRyKGJvb2wqIG9rKQotewotICAgIGlmIChpczhC
aXQoKSkKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0cihjaGFyYWN0ZXJzOCgpLCBt
X2xlbmd0aCwgb2spOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRQdHIoY2hhcmFjdGVyczE2
KCksIG1fbGVuZ3RoLCBvayk7Ci19Ci0KLWRvdWJsZSBTdHJpbmdJbXBsOjp0b0RvdWJsZShib29s
KiBvaykKLXsKLSAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9E
b3VibGUoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIG9rKTsKLSAgICByZXR1cm4gY2hhcmFjdGVy
c1RvRG91YmxlKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwotfQotCi1mbG9hdCBTdHJp
bmdJbXBsOjp0b0Zsb2F0KGJvb2wqIG9rKQotewotICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAg
cmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBvayk7Ci0g
ICAgcmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2sp
OwotfQotCiBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChDb2RlVW5pdE1hdGNoRnVuY3Rpb24gbWF0
Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQpCiB7CiAgICAgaWYgKGlzOEJpdCgpKQpAQCAtOTI5
LDc4ICszNDYsNiBAQCBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChDb2RlVW5pdE1hdGNoRnVuY3Rp
b24gbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQpCiAgICAgcmV0dXJuIFdURjo6ZmluZChj
aGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG1hdGNoRnVuY3Rpb24sIHN0YXJ0KTsKIH0KIAotc2l6
ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgTENoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBp
bmRleCkKLXsKLSAgICAvLyBDaGVjayBmb3IgbnVsbCBvciBlbXB0eSBzdHJpbmcgdG8gbWF0Y2gg
YWdhaW5zdAotICAgIGlmICghbWF0Y2hTdHJpbmcpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsK
LSAgICBzaXplX3QgbWF0Y2hTdHJpbmdMZW5ndGggPSBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4obWF0Y2hTdHJpbmcpKTsKLSAgICBpZiAobWF0Y2hTdHJpbmdMZW5ndGggPiBN
YXhMZW5ndGgpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgdW5zaWduZWQgbWF0Y2hMZW5ndGggPSBt
YXRjaFN0cmluZ0xlbmd0aDsKLSAgICBpZiAoIW1hdGNoTGVuZ3RoKQotICAgICAgICByZXR1cm4g
c3RkOjptaW4oaW5kZXgsIGxlbmd0aCgpKTsKLQotICAgIC8vIE9wdGltaXphdGlvbiAxOiBmYXN0
IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3RoIDEuCi0gICAgaWYgKG1hdGNoTGVuZ3RoID09IDEp
IHsKLSAgICAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6ZmluZChj
aGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmdbMF0sIGluZGV4KTsKLSAgICAgICAg
cmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksICptYXRjaFN0cmluZywg
aW5kZXgpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGluZGV4ICYgbWF0Y2hMZW5ndGggYXJlIGlu
IHJhbmdlLgotICAgIGlmIChpbmRleCA+IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gbm90Rm91
bmQ7Ci0gICAgdW5zaWduZWQgc2VhcmNoTGVuZ3RoID0gbGVuZ3RoKCkgLSBpbmRleDsKLSAgICBp
ZiAobWF0Y2hMZW5ndGggPiBzZWFyY2hMZW5ndGgpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsK
LSAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgdGltZXMgdG8gdGVzdDsg
ZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KLSAgICB1bnNpZ25lZCBkZWx0YSA9IHNl
YXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOwotCi0gICAgLy8gT3B0aW1pemF0aW9uIDI6IGtlZXAg
YSBydW5uaW5nIGhhc2ggb2YgdGhlIHN0cmluZ3MsCi0gICAgLy8gb25seSBjYWxsIGVxdWFsIGlm
IHRoZSBoYXNoZXMgbWF0Y2guCi0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgY29uc3Qg
TENoYXIqIHNlYXJjaENoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzOCgpICsgaW5kZXg7Ci0KLSAgICAg
ICAgdW5zaWduZWQgc2VhcmNoSGFzaCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIG1hdGNoSGFzaCA9
IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaExlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBzZWFyY2hIYXNoICs9IHNlYXJjaENoYXJhY3RlcnNbaV07Ci0gICAgICAg
ICAgICBtYXRjaEhhc2ggKz0gbWF0Y2hTdHJpbmdbaV07Ci0gICAgICAgIH0KLQotICAgICAgICB1
bnNpZ25lZCBpID0gMDsKLSAgICAgICAgd2hpbGUgKHNlYXJjaEhhc2ggIT0gbWF0Y2hIYXNoIHx8
ICFlcXVhbChzZWFyY2hDaGFyYWN0ZXJzICsgaSwgbWF0Y2hTdHJpbmcsIG1hdGNoTGVuZ3RoKSkg
ewotICAgICAgICAgICAgaWYgKGkgPT0gZGVsdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5v
dEZvdW5kOwotICAgICAgICAgICAgc2VhcmNoSGFzaCArPSBzZWFyY2hDaGFyYWN0ZXJzW2kgKyBt
YXRjaExlbmd0aF07Ci0gICAgICAgICAgICBzZWFyY2hIYXNoIC09IHNlYXJjaENoYXJhY3RlcnNb
aV07Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGluZGV4ICsg
aTsKLSAgICB9Ci0KLSAgICBjb25zdCBVQ2hhciogc2VhcmNoQ2hhcmFjdGVycyA9IGNoYXJhY3Rl
cnMxNigpICsgaW5kZXg7Ci0KLSAgICB1bnNpZ25lZCBzZWFyY2hIYXNoID0gMDsKLSAgICB1bnNp
Z25lZCBtYXRjaEhhc2ggPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaExl
bmd0aDsgKytpKSB7Ci0gICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tpXTsK
LSAgICAgICAgbWF0Y2hIYXNoICs9IG1hdGNoU3RyaW5nW2ldOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGkgPSAwOwotICAgIHdoaWxlIChzZWFyY2hIYXNoICE9IG1hdGNoSGFzaCB8fCAhZXF1YWwo
c2VhcmNoQ2hhcmFjdGVycyArIGksIG1hdGNoU3RyaW5nLCBtYXRjaExlbmd0aCkpIHsKLSAgICAg
ICAgaWYgKGkgPT0gZGVsdGEpCi0gICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAg
IHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tpICsgbWF0Y2hMZW5ndGhdOwotICAgICAg
ICBzZWFyY2hIYXNoIC09IHNlYXJjaENoYXJhY3RlcnNbaV07Ci0gICAgICAgICsraTsKLSAgICB9
Ci0gICAgcmV0dXJuIGluZGV4ICsgaTsKLX0KLQogc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoU3Ry
aW5nSW1wbCogbWF0Y2hTdHJpbmcpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIG51bGwgc3RyaW5nIHRv
IG1hdGNoIGFnYWluc3QKQEAgLTEwODAsOTUgKzQyNSw2IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpy
ZXZlcnNlRmluZChVQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4KQogICAgIHJldHVybiBX
VEY6OnJldmVyc2VGaW5kKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgY2hhcmFjdGVyLCBpbmRl
eCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBTZWFyY2hDaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBNYXRjaENoYXJhY3RlclR5cGU+Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyBzaXplX3QgcmV2ZXJz
ZUZpbmRJbm5lcihjb25zdCBTZWFyY2hDaGFyYWN0ZXJUeXBlKiBzZWFyY2hDaGFyYWN0ZXJzLCBj
b25zdCBNYXRjaENoYXJhY3RlclR5cGUqIG1hdGNoQ2hhcmFjdGVycywgdW5zaWduZWQgaW5kZXgs
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbWF0Y2hMZW5ndGgpCi17Ci0gICAgLy8gT3B0aW1p
emF0aW9uOiBrZWVwIGEgcnVubmluZyBoYXNoIG9mIHRoZSBzdHJpbmdzLAotICAgIC8vIG9ubHkg
Y2FsbCBlcXVhbCBpZiB0aGUgaGFzaGVzIG1hdGNoLgotCi0gICAgLy8gZGVsdGEgaXMgdGhlIG51
bWJlciBvZiBhZGRpdGlvbmFsIHRpbWVzIHRvIHRlc3Q7IGRlbHRhID09IDAgbWVhbnMgdGVzdCBv
bmx5IG9uY2UuCi0gICAgdW5zaWduZWQgZGVsdGEgPSBzdGQ6Om1pbihpbmRleCwgbGVuZ3RoIC0g
bWF0Y2hMZW5ndGgpOwotICAgIAotICAgIHVuc2lnbmVkIHNlYXJjaEhhc2ggPSAwOwotICAgIHVu
c2lnbmVkIG1hdGNoSGFzaCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNo
TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgc2VhcmNoSGFzaCArPSBzZWFyY2hDaGFyYWN0ZXJzW2Rl
bHRhICsgaV07Ci0gICAgICAgIG1hdGNoSGFzaCArPSBtYXRjaENoYXJhY3RlcnNbaV07Ci0gICAg
fQotCi0gICAgLy8ga2VlcCBsb29waW5nIHVudGlsIHdlIG1hdGNoCi0gICAgd2hpbGUgKHNlYXJj
aEhhc2ggIT0gbWF0Y2hIYXNoIHx8ICFlcXVhbChzZWFyY2hDaGFyYWN0ZXJzICsgZGVsdGEsIG1h
dGNoQ2hhcmFjdGVycywgbWF0Y2hMZW5ndGgpKSB7Ci0gICAgICAgIGlmICghZGVsdGEpCi0gICAg
ICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgIC0tZGVsdGE7Ci0gICAgICAgIHNlYXJj
aEhhc2ggLT0gc2VhcmNoQ2hhcmFjdGVyc1tkZWx0YSArIG1hdGNoTGVuZ3RoXTsKLSAgICAgICAg
c2VhcmNoSGFzaCArPSBzZWFyY2hDaGFyYWN0ZXJzW2RlbHRhXTsKLSAgICB9Ci0gICAgcmV0dXJu
IGRlbHRhOwotfQotCi1zaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCog
bWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQotewotICAgIC8vIENoZWNrIGZvciBudWxsIG9y
IGVtcHR5IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0Ci0gICAgaWYgKCFtYXRjaFN0cmluZykKLSAg
ICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHVuc2lnbmVkIG1hdGNoTGVuZ3RoID0gbWF0Y2hT
dHJpbmctPmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIG91ckxlbmd0aCA9IGxlbmd0aCgpOwotICAg
IGlmICghbWF0Y2hMZW5ndGgpCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbihpbmRleCwgb3VyTGVu
Z3RoKTsKLQotICAgIC8vIE9wdGltaXphdGlvbiAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2Yg
bGVuZ3RoIDEuCi0gICAgaWYgKG1hdGNoTGVuZ3RoID09IDEpIHsKLSAgICAgICAgaWYgKGlzOEJp
dCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVyczgoKSwg
b3VyTGVuZ3RoLCAoKm1hdGNoU3RyaW5nKVswXSwgaW5kZXgpOwotICAgICAgICByZXR1cm4gV1RG
OjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzMTYoKSwgb3VyTGVuZ3RoLCAoKm1hdGNoU3RyaW5nKVsw
XSwgaW5kZXgpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGluZGV4ICYgbWF0Y2hMZW5ndGggYXJl
IGluIHJhbmdlLgotICAgIGlmIChtYXRjaExlbmd0aCA+IG91ckxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIG5vdEZvdW5kOwotCi0gICAgaWYgKGlzOEJpdCgpKSB7Ci0gICAgICAgIGlmIChtYXRjaFN0
cmluZy0+aXM4Qml0KCkpCi0gICAgICAgICAgICByZXR1cm4gcmV2ZXJzZUZpbmRJbm5lcihjaGFy
YWN0ZXJzOCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVyczgoKSwgaW5kZXgsIG91ckxlbmd0aCwg
bWF0Y2hMZW5ndGgpOwotICAgICAgICByZXR1cm4gcmV2ZXJzZUZpbmRJbm5lcihjaGFyYWN0ZXJz
OCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVyczE2KCksIGluZGV4LCBvdXJMZW5ndGgsIG1hdGNo
TGVuZ3RoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1hdGNoU3RyaW5nLT5pczhCaXQoKSkKLSAg
ICAgICAgcmV0dXJuIHJldmVyc2VGaW5kSW5uZXIoY2hhcmFjdGVyczE2KCksIG1hdGNoU3RyaW5n
LT5jaGFyYWN0ZXJzOCgpLCBpbmRleCwgb3VyTGVuZ3RoLCBtYXRjaExlbmd0aCk7Ci0KLSAgICBy
ZXR1cm4gcmV2ZXJzZUZpbmRJbm5lcihjaGFyYWN0ZXJzMTYoKSwgbWF0Y2hTdHJpbmctPmNoYXJh
Y3RlcnMxNigpLCBpbmRleCwgb3VyTGVuZ3RoLCBtYXRjaExlbmd0aCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgc3RhdGljIGJvb2wgZXF1YWxJbm5lcihjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCBjb25zdCBjaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgbWF0
Y2hMZW5ndGgpCi17Ci0gICAgQVNTRVJUKG1hdGNoTGVuZ3RoIDw9IHN0cmluZy5sZW5ndGgoKSk7
Ci0gICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ICsgbWF0Y2hMZW5ndGggPD0gc3RyaW5nLmxlbmd0aCgp
KTsKLQotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBlcXVhbChzdHJp
bmcuY2hhcmFjdGVyczgoKSArIHN0YXJ0T2Zmc2V0LCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4obWF0Y2hTdHJpbmcpLCBtYXRjaExlbmd0aCk7Ci0gICAgcmV0dXJuIGVxdWFsKHN0cmlu
Zy5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0T2Zmc2V0LCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4obWF0Y2hTdHJpbmcpLCBtYXRjaExlbmd0aCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgc3Rh
dGljIGJvb2wgZXF1YWxJbm5lcihjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBjb25zdCBTdHJpbmdJbXBsJiBtYXRjaFN0cmluZykKLXsKLSAgICBpZiAoc3Rh
cnRPZmZzZXQgPiBzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAobWF0Y2hTdHJpbmcubGVuZ3RoKCkgPiBzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobWF0Y2hTdHJpbmcubGVuZ3RoKCkgKyBzdGFydE9mZnNldCA+IHN0
cmluZy5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmluZy5p
czhCaXQoKSkgewotICAgICAgICBpZiAobWF0Y2hTdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZXF1YWwoc3RyaW5nLmNoYXJhY3RlcnM4KCkgKyBzdGFydE9mZnNldCwgbWF0Y2hT
dHJpbmcuY2hhcmFjdGVyczgoKSwgbWF0Y2hTdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICByZXR1
cm4gZXF1YWwoc3RyaW5nLmNoYXJhY3RlcnM4KCkgKyBzdGFydE9mZnNldCwgbWF0Y2hTdHJpbmcu
Y2hhcmFjdGVyczE2KCksIG1hdGNoU3RyaW5nLmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgaWYgKG1h
dGNoU3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZXF1YWwoc3RyaW5nLmNoYXJhY3Rl
cnMxNigpICsgc3RhcnRPZmZzZXQsIG1hdGNoU3RyaW5nLmNoYXJhY3RlcnM4KCksIG1hdGNoU3Ry
aW5nLmxlbmd0aCgpKTsKLSAgICByZXR1cm4gZXF1YWwoc3RyaW5nLmNoYXJhY3RlcnMxNigpICsg
c3RhcnRPZmZzZXQsIG1hdGNoU3RyaW5nLmNoYXJhY3RlcnMxNigpLCBtYXRjaFN0cmluZy5sZW5n
dGgoKSk7Ci19Ci0KIGJvb2wgU3RyaW5nSW1wbDo6c3RhcnRzV2l0aChjb25zdCBTdHJpbmdJbXBs
KiBzdHJpbmcpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0cmluZyAmJiA6OldURjo6c3RhcnRzV2l0
aCgqdGhpcywgKnN0cmluZyk7CkBAIC0xMTk0LDE2ICs0NTAsNiBAQCBib29sIFN0cmluZ0ltcGw6
OnN0YXJ0c1dpdGgoVUNoYXIgY2hhcmFjdGVyKSBjb25zdAogICAgIHJldHVybiBtX2xlbmd0aCAm
JiAoKnRoaXMpWzBdID09IGNoYXJhY3RlcjsKIH0KIAotYm9vbCBTdHJpbmdJbXBsOjpzdGFydHNX
aXRoKGNvbnN0IGNoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBtYXRjaExlbmd0aCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbWF0Y2hMZW5ndGggPD0gbGVuZ3RoKCkgJiYgZXF1YWxJbm5lcigqdGhp
cywgMCwgbWF0Y2hTdHJpbmcsIG1hdGNoTGVuZ3RoKTsKLX0KLQotYm9vbCBTdHJpbmdJbXBsOjpo
YXNJbmZpeFN0YXJ0aW5nQXQoY29uc3QgU3RyaW5nSW1wbCYgbWF0Y2hTdHJpbmcsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0KSBjb25zdAotewotICAgIHJldHVybiBlcXVhbElubmVyKCp0aGlzLCBzdGFy
dE9mZnNldCwgbWF0Y2hTdHJpbmcpOwotfQotCiBib29sIFN0cmluZ0ltcGw6OmVuZHNXaXRoKFN0
cmluZ0ltcGwqIHN1ZmZpeCkKIHsKICAgICByZXR1cm4gc3VmZml4ICYmIDo6V1RGOjplbmRzV2l0
aCgqdGhpcywgKnN1ZmZpeCk7CkBAIC0xMjI5LDE2ICs0NzUsNiBAQCBib29sIFN0cmluZ0ltcGw6
OmVuZHNXaXRoKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKICAgICByZXR1cm4gbV9sZW5ndGggJiYg
KCp0aGlzKVttX2xlbmd0aCAtIDFdID09IGNoYXJhY3RlcjsKIH0KIAotYm9vbCBTdHJpbmdJbXBs
OjplbmRzV2l0aChjb25zdCBjaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgbWF0Y2hMZW5ndGgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1hdGNoTGVuZ3RoIDw9IGxlbmd0aCgpICYmIGVxdWFsSW5u
ZXIoKnRoaXMsIGxlbmd0aCgpIC0gbWF0Y2hMZW5ndGgsIG1hdGNoU3RyaW5nLCBtYXRjaExlbmd0
aCk7Ci19Ci0KLWJvb2wgU3RyaW5nSW1wbDo6aGFzSW5maXhFbmRpbmdBdChjb25zdCBTdHJpbmdJ
bXBsJiBtYXRjaFN0cmluZywgdW5zaWduZWQgZW5kT2Zmc2V0KSBjb25zdAotewotICAgIHJldHVy
biBlbmRPZmZzZXQgPj0gbWF0Y2hTdHJpbmcubGVuZ3RoKCkgJiYgZXF1YWxJbm5lcigqdGhpcywg
ZW5kT2Zmc2V0IC0gbWF0Y2hTdHJpbmcubGVuZ3RoKCksIG1hdGNoU3RyaW5nKTsKLX0KLQogUmVm
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgdGFyZ2V0LCBVQ2hhciByZXBs
YWNlbWVudCkKIHsKICAgICBpZiAodGFyZ2V0ID09IHJlcGxhY2VtZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaAppbmRleCBlNTY0NjQ4YzU0M2NkODIzZGU4ZjIyM2M0MjM3Y2M5MjY5NTE5MzA0
Li5hYjgwN2NhNWJiNWI1OWRkNjBlODU4NGMyYTY4N2JkZjRlOTJlM2MwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuaApAQCAtMzEsOSArMzEsOCBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQVNDSUlG
YXN0UGF0aC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NvbnZlcnNpb25Nb2RlLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29tbW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1VURjhDb252ZXJzaW9uRXJyb3IuaD4KIAogI2lmIFVTRShDRikKQEAgLTEzNiw3ICsxMzUs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBpc0xhdGlu
MShDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikKIGNsYXNzIFN0cmluZ0ltcGxTaGFwZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nSW1wbFNoYXBlKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIE1heExlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1heCgpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgTWF4TGVuZ3RoID0g
TWF4U3RyaW5nTGVuZ3RoOwogCiBwcm90ZWN0ZWQ6CiAgICAgU3RyaW5nSW1wbFNoYXBlKHVuc2ln
bmVkIHJlZkNvdW50LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IExDaGFyKiwgdW5zaWduZWQgaGFz
aEFuZEZsYWdzKTsKQEAgLTI4Niw2ICsyODUsOCBAQCBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzKCkg
Y29uc3Q7CiAKKyAgICBBTFdBWVNfSU5MSU5FIFN0cmluZ1ZpZXcgdmlldygpIGNvbnN0IHsgcmV0
dXJuICp0aGlzOyB9CisKICAgICBzaXplX3QgY29zdCgpIGNvbnN0OwogICAgIHNpemVfdCBjb3N0
RHVyaW5nR0MoKTsKIApAQCAtMzc0LDEwICszNzUsNiBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdGF0aWNTdHJpbmdJbXBsIHNfYXRvbWljRW1wdHlTdHJpbmc7CiAg
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgU3RyaW5nSW1wbCogZW1wdHkoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PFN0cmluZ0ltcGwqPigmc19hdG9taWNFbXB0eVN0cmluZyk7IH0KIAotICAg
IC8vIEZJWE1FOiBEb2VzIHRoaXMgcmVhbGx5IGJlbG9uZyBpbiBTdHJpbmdJbXBsPwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyB2b2lkIGNvcHlDaGFyYWN0ZXJz
KENoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzb3VyY2Us
IHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlDaGFyYWN0ZXJz
KFVDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgTENoYXIqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hh
cmFjdGVycyk7Ci0KICAgICAvLyBTb21lIHN0cmluZyBmZWF0dXJlcywgbGlrZSByZWZlcmVuY2Ug
Y291bnRpbmcgYW5kIHRoZSBhdG9taWNpdHkgZmxhZywgYXJlIG5vdAogICAgIC8vIHRocmVhZC1z
YWZlLiBXZSBhY2hpZXZlIHRocmVhZCBzYWZldHkgYnkgaXNvbGF0aW9uLCBnaXZpbmcgZWFjaCB0
aHJlYWQKICAgICAvLyBpdHMgb3duIGNvcHkgb2YgdGhlIHN0cmluZy4KQEAgLTM4OSw0NCArMzg2
LDI3IEBAIHB1YmxpYzoKICAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuIGF0KGkpOyB9CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFVDaGFyMzIgY2hhcmFjdGVy
U3RhcnRpbmdBdCh1bnNpZ25lZCk7CiAKLSAgICBpbnQgdG9JbnRTdHJpY3QoYm9vbCogb2sgPSAw
LCBpbnQgYmFzZSA9IDEwKTsKLSAgICB1bnNpZ25lZCB0b1VJbnRTdHJpY3QoYm9vbCogb2sgPSAw
LCBpbnQgYmFzZSA9IDEwKTsKLSAgICBpbnQ2NF90IHRvSW50NjRTdHJpY3QoYm9vbCogb2sgPSAw
LCBpbnQgYmFzZSA9IDEwKTsKLSAgICB1aW50NjRfdCB0b1VJbnQ2NFN0cmljdChib29sKiBvayA9
IDAsIGludCBiYXNlID0gMTApOwotICAgIGludHB0cl90IHRvSW50UHRyU3RyaWN0KGJvb2wqIG9r
ID0gMCwgaW50IGJhc2UgPSAxMCk7CisgICAgaW50IHRvSW50U3RyaWN0KGJvb2wqIG9rID0gMCwg
aW50IGJhc2UgPSAxMCkgY29uc3QgeyByZXR1cm4gdmlldygpLnRvSW50U3RyaWN0KG9rLCBiYXNl
KTsgfQorICAgIHVuc2lnbmVkIHRvVUludFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0g
MTApIGNvbnN0IHsgcmV0dXJuIHZpZXcoKS50b1VJbnRTdHJpY3Qob2ssIGJhc2UpOyB9CisgICAg
aW50NjRfdCB0b0ludDY0U3RyaWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Qg
eyByZXR1cm4gdmlldygpLnRvSW50NjRTdHJpY3Qob2ssIGJhc2UpOyB9CisgICAgdWludDY0X3Qg
dG9VSW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdCB7IHJldHVy
biB2aWV3KCkudG9VSW50NjRTdHJpY3Qob2ssIGJhc2UpOyB9CisgICAgaW50cHRyX3QgdG9JbnRQ
dHJTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdCB7IHJldHVybiB2aWV3
KCkudG9JbnRQdHJTdHJpY3Qob2ssIGJhc2UpOyB9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
aW50IHRvSW50KGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQotICAg
IHVuc2lnbmVkIHRvVUludChib29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJh
Z2UKLSAgICBpbnQ2NF90IHRvSW50NjQoYm9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0cmFpbGlu
ZyBnYXJiYWdlCi0gICAgdWludDY0X3QgdG9VSW50NjQoYm9vbCogb2sgPSAwKTsgLy8gaWdub3Jl
cyB0cmFpbGluZyBnYXJiYWdlCi0gICAgaW50cHRyX3QgdG9JbnRQdHIoYm9vbCogb2sgPSAwKTsg
Ly8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGludCB0
b0ludChib29sKiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIHZpZXcoKS50b0ludChvayk7IH0gLy8g
aWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCisgICAgdW5zaWduZWQgdG9VSW50KGJvb2wqIG9rID0g
MCkgY29uc3QgeyByZXR1cm4gdmlldygpLnRvVUludChvayk7IH0gLy8gaWdub3JlcyB0cmFpbGlu
ZyBnYXJiYWdlCisgICAgaW50NjRfdCB0b0ludDY0KGJvb2wqIG9rID0gMCkgY29uc3QgeyByZXR1
cm4gdmlldygpLnRvSW50NjQob2spOyB9IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQorICAg
IHVpbnQ2NF90IHRvVUludDY0KGJvb2wqIG9rID0gMCkgY29uc3QgeyByZXR1cm4gdmlldygpLnRv
VUludDY0KG9rKTsgfSAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKKyAgICBpbnRwdHJfdCB0
b0ludFB0cihib29sKiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIHZpZXcoKS50b0ludFB0cihvayk7
IH07IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQogCiAgICAgLy8gRklYTUU6IExpa2UgdGhl
IHN0cmljdCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNlIGdpdmUgZmFsc2UgZm9yICJvayIgd2hlbiB0
aGVyZSBpcyB0cmFpbGluZyBnYXJiYWdlLgogICAgIC8vIExpa2UgdGhlIG5vbi1zdHJpY3QgZnVu
Y3Rpb25zIGFib3ZlLCB0aGVzZSByZXR1cm4gdGhlIHZhbHVlIHdoZW4gdGhlcmUgaXMgdHJhaWxp
bmcgZ2FyYmFnZS4KICAgICAvLyBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlc2Ugd2VyZSBtb3Jl
IGNvbnNpc3RlbnQgd2l0aCB0aGUgYWJvdmUgZnVuY3Rpb25zIGluc3RlYWQuCi0gICAgZG91Ymxl
IHRvRG91YmxlKGJvb2wqIG9rID0gMCk7Ci0gICAgZmxvYXQgdG9GbG9hdChib29sKiBvayA9IDAp
OwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWY8U3RyaW5nSW1wbD4gY29u
dmVydFRvQVNDSUlVcHBlcmNhc2UoKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmPFN0cmlu
Z0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGUoKTsKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgUmVmPFN0cmluZ0ltcGw+IGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVT
dGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdCh1bnNpZ25lZCk7Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCk7Ci0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9Mb3dlcmNhc2VX
aXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIFJlZjxTdHJpbmdJbXBsPiBjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9j
YWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllcik7Ci0KLSAgICBSZWY8U3Ry
aW5nSW1wbD4gZm9sZENhc2UoKTsKLQotICAgIFJlZjxTdHJpbmdJbXBsPiBzdHJpcFdoaXRlU3Bh
Y2UoKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmPFN0cmluZ0ltcGw+IHNpbXBsaWZ5V2hp
dGVTcGFjZSgpOwotICAgIFJlZjxTdHJpbmdJbXBsPiBzaW1wbGlmeVdoaXRlU3BhY2UoQ29kZVVu
aXRNYXRjaEZ1bmN0aW9uKTsKLQotICAgIFJlZjxTdHJpbmdJbXBsPiBzdHJpcExlYWRpbmdBbmRU
cmFpbGluZ0NoYXJhY3RlcnMoQ29kZVVuaXRNYXRjaEZ1bmN0aW9uKTsKLSAgICBSZWY8U3RyaW5n
SW1wbD4gcmVtb3ZlQ2hhcmFjdGVycyhDb2RlVW5pdE1hdGNoRnVuY3Rpb24pOworICAgIGRvdWJs
ZSB0b0RvdWJsZShib29sKiBvayA9IDApIGNvbnN0IHsgcmV0dXJuIHZpZXcoKS50b0RvdWJsZShv
ayk7IH0KKyAgICBmbG9hdCB0b0Zsb2F0KGJvb2wqIG9rID0gMCkgY29uc3QgeyByZXR1cm4gdmll
dygpLnRvRmxvYXQob2spOyB9CiAKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdDsKICAgICBi
b29sIGlzQWxsTGF0aW4xKCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFy
YWN0ZXIoVUNoYXIpPiBib29sIGlzQWxsU3BlY2lhbENoYXJhY3RlcnMoKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGJvb2wgaXNBbGxTcGVjaWFs
Q2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIHZpZXcoKS5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJz
PGlzU3BlY2lhbENoYXJhY3Rlcj4oKTsgfTsKIAogICAgIHNpemVfdCBmaW5kKExDaGFyIGNoYXJh
Y3RlciwgdW5zaWduZWQgc3RhcnQgPSAwKTsKICAgICBzaXplX3QgZmluZChjaGFyIGNoYXJhY3Rl
ciwgdW5zaWduZWQgc3RhcnQgPSAwKTsKQEAgLTQ1MCw3ICs0MzAsNiBAQCBwdWJsaWM6CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IFN0cmluZ0ltcGwmKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBzdGFydHNX
aXRoKFVDaGFyKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBzdGFydHNXaXRo
KGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBtYXRjaExlbmd0aCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
dW5zaWduZWQgbWF0Y2hMZW5ndGg+IGJvb2wgc3RhcnRzV2l0aChjb25zdCBjaGFyICgmcHJlZml4
KVttYXRjaExlbmd0aF0pIGNvbnN0IHsgcmV0dXJuIHN0YXJ0c1dpdGgocHJlZml4LCBtYXRjaExl
bmd0aCAtIDEpOyB9CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzSW5maXhTdGFydGlu
Z0F0KGNvbnN0IFN0cmluZ0ltcGwmLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3Q7CiAKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBlbmRzV2l0aChTdHJpbmdJbXBsKik7CkBAIC00NTks
NyArNDM4LDYgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGVuZHNXaXRo
SWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1wbCYpIGNvbnN0OwogICAgIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIGVuZHNXaXRoKFVDaGFyKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCBlbmRzV2l0aChjb25zdCBjaGFyKiwgdW5zaWduZWQgbWF0Y2hMZW5ndGgpIGNv
bnN0OwotICAgIHRlbXBsYXRlPHVuc2lnbmVkIG1hdGNoTGVuZ3RoPiBib29sIGVuZHNXaXRoKGNv
bnN0IGNoYXIgKCZwcmVmaXgpW21hdGNoTGVuZ3RoXSkgY29uc3QgeyByZXR1cm4gZW5kc1dpdGgo
cHJlZml4LCBtYXRjaExlbmd0aCAtIDEpOyB9CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
aGFzSW5maXhFbmRpbmdBdChjb25zdCBTdHJpbmdJbXBsJiwgdW5zaWduZWQgZW5kT2Zmc2V0KSBj
b25zdDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWY8U3RyaW5nSW1wbD4gcmVwbGFjZShV
Q2hhciwgVUNoYXIpOwpAQCAtNTEzLDkgKzQ5MSw2IEBAIHByaXZhdGU6CiAgICAgZW51bSBjbGFz
cyBDYXNlQ29udmVydFR5cGUgeyBVcHBlciwgTG93ZXIgfTsKICAgICB0ZW1wbGF0ZTxDYXNlQ29u
dmVydFR5cGUsIHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4g
Y29udmVydEFTQ0lJQ2FzZShTdHJpbmdJbXBsJiwgY29uc3QgQ2hhcmFjdGVyVHlwZSosIHVuc2ln
bmVkKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIENvZGVVbml0UHJlZGljYXRlPiBSZWY8U3RyaW5n
SW1wbD4gc3RyaXBNYXRjaGVkQ2hhcmFjdGVycyhDb2RlVW5pdFByZWRpY2F0ZSk7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gQUxXQVlTX0lOTElORSBSZWY8U3RyaW5nSW1w
bD4gcmVtb3ZlQ2hhcmFjdGVycyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBDb2Rl
VW5pdE1hdGNoRnVuY3Rpb24pOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUs
IGNsYXNzIENvZGVVbml0UHJlZGljYXRlPiBSZWY8U3RyaW5nSW1wbD4gc2ltcGxpZnlNYXRjaGVk
Q2hhcmFjdGVyc1RvU3BhY2UoQ29kZVVuaXRQcmVkaWNhdGUpOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY29uc3RydWN0SW50ZXJu
YWwoU3RyaW5nSW1wbCYsIHVuc2lnbmVkKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5h
bCh1bnNpZ25lZCwgQ2hhcmFjdGVyVHlwZSomKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRl
cm5hbE5vbkVtcHR5KHVuc2lnbmVkLCBDaGFyYWN0ZXJUeXBlKiYpOwpAQCAtNTczLDE0ICs1NDgs
NiBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlTm9uTnVs
bChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgUwogdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBi
b29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZ0ltcGwmLCBjb25z
dCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSk7CiB0ZW1wbGF0ZTx1bnNpZ25lZCBs
ZW5ndGg+IGJvb2wgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nSW1w
bCosIGNvbnN0IGNoYXIgKCZsb3dlcmNhc2VMZXR0ZXJzKVtsZW5ndGhdKTsKIAotc2l6ZV90IGZp
bmQoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIENvZGVVbml0TWF0Y2hGdW5jdGlvbiwg
dW5zaWduZWQgaW5kZXggPSAwKTsKLXNpemVfdCBmaW5kKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQg
bGVuZ3RoLCBDb2RlVW5pdE1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIGluZGV4ID0gMCk7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHNpemVfdCByZXZlcnNlRmluZExpbmVUZXJt
aW5hdG9yKGNvbnN0IENoYXJhY3RlclR5cGUqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGlu
ZGV4ID0gU3RyaW5nSW1wbDo6TWF4TGVuZ3RoKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHNpemVfdCByZXZlcnNlRmluZChjb25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQg
bGVuZ3RoLCBDaGFyYWN0ZXJUeXBlIG1hdGNoQ2hhcmFjdGVyLCB1bnNpZ25lZCBpbmRleCA9IFN0
cmluZ0ltcGw6Ok1heExlbmd0aCk7Ci1zaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCBsZW5ndGgsIExDaGFyIG1hdGNoQ2hhcmFjdGVyLCB1bnNpZ25lZCBpbmRleCA9IFN0
cmluZ0ltcGw6Ok1heExlbmd0aCk7Ci1zaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgTENoYXIqLCB1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyIG1hdGNoQ2hhcmFjdGVyLCB1bnNpZ25lZCBpbmRleCA9IFN0
cmluZ0ltcGw6Ok1heExlbmd0aCk7Ci0KIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4g
Ym9vbCBlcXVhbElnbm9yaW5nTnVsbGl0eShjb25zdCBWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFj
aXR5PiYsIFN0cmluZ0ltcGwqKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZTEs
IHR5cGVuYW1lIENoYXJhY3RlclR5cGUyPiBpbnQgY29kZVBvaW50Q29tcGFyZShjb25zdCBDaGFy
YWN0ZXJUeXBlMSosIHVuc2lnbmVkIGxlbmd0aDEsIGNvbnN0IENoYXJhY3RlclR5cGUyKiwgdW5z
aWduZWQgbGVuZ3RoMik7CkBAIC02MjYsNjYgKzU5Myw2IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSBjb25zdCBVQ2hhciogU3RyaW5nSW1wbDo6Y2hhcmFjdGVyczxVQ2hhcj4oKSBjb25zdAog
ICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKIH0KIAotaW5saW5lIHNpemVfdCBmaW5kKGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvZGVVbml0TWF0Y2hGdW5jdGlv
biBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAgICB3aGlsZSAoaW5kZXggPCBs
ZW5ndGgpIHsKLSAgICAgICAgaWYgKG1hdGNoRnVuY3Rpb24oY2hhcmFjdGVyc1tpbmRleF0pKQot
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICArK2luZGV4OwotICAgIH0KLSAgICBy
ZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLWlubGluZSBzaXplX3QgZmluZChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb2RlVW5pdE1hdGNoRnVuY3Rpb24gbWF0Y2hGdW5j
dGlvbiwgdW5zaWduZWQgaW5kZXgpCi17Ci0gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0g
ICAgICAgIGlmIChtYXRjaEZ1bmN0aW9uKGNoYXJhY3RlcnNbaW5kZXhdKSkKLSAgICAgICAgICAg
IHJldHVybiBpbmRleDsKLSAgICAgICAgKytpbmRleDsKLSAgICB9Ci0gICAgcmV0dXJuIG5vdEZv
dW5kOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgc2l6ZV90
IHJldmVyc2VGaW5kTGluZVRlcm1pbmF0b3IoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIGlmIChpbmRleCA+PSBsZW5ndGgpCi0gICAg
ICAgIGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBhdXRvIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNb
aW5kZXhdOwotICAgIHdoaWxlIChjaGFyYWN0ZXIgIT0gJ1xuJyAmJiBjaGFyYWN0ZXIgIT0gJ1xy
JykgewotICAgICAgICBpZiAoIWluZGV4LS0pCi0gICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7
Ci0gICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaW5kZXhdOwotICAgIH0KLSAgICByZXR1
cm4gaW5kZXg7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBz
aXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCBDaGFyYWN0ZXJUeXBlIG1hdGNoQ2hhcmFjdGVyLCB1bnNpZ25lZCBpbmRleCkK
LXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIGlmIChp
bmRleCA+PSBsZW5ndGgpCi0gICAgICAgIGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICB3aGlsZSAo
Y2hhcmFjdGVyc1tpbmRleF0gIT0gbWF0Y2hDaGFyYWN0ZXIpIHsKLSAgICAgICAgaWYgKCFpbmRl
eC0tKQotICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIH0KLSAgICByZXR1cm4gaW5k
ZXg7Ci19Ci0KLUFMV0FZU19JTkxJTkUgc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIExDaGFyIG1hdGNoQ2hhcmFjdGVyLCB1bnNpZ25l
ZCBpbmRleCkKLXsKLSAgICByZXR1cm4gcmV2ZXJzZUZpbmQoY2hhcmFjdGVycywgbGVuZ3RoLCBz
dGF0aWNfY2FzdDxVQ2hhcj4obWF0Y2hDaGFyYWN0ZXIpLCBpbmRleCk7Ci19Ci0KLWlubGluZSBz
aXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCwgVUNoYXIgbWF0Y2hDaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmIChtYXRj
aENoYXJhY3RlciAmIH4weEZGKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgcmV0dXJu
IHJldmVyc2VGaW5kKGNoYXJhY3RlcnMsIGxlbmd0aCwgc3RhdGljX2Nhc3Q8TENoYXI+KG1hdGNo
Q2hhcmFjdGVyKSwgaW5kZXgpOwotfQotCiBpbmxpbmUgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQo
TENoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCkKIHsKICAgICBpZiAoaXM4Qml0KCkpCkBA
IC03MTAsNDUgKzYxNyw2IEBAIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5l
IGJvb2wgZXF1YWxJZ25vcmluZ051bGxpdHkoY29uc3QgVmVjdG9yPFVDCiAgICAgcmV0dXJuIGVx
dWFsSWdub3JpbmdOdWxsaXR5KGEuZGF0YSgpLCBhLnNpemUoKSwgYik7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUxLCB0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlMj4gaW5saW5l
IGludCBjb2RlUG9pbnRDb21wYXJlKGNvbnN0IENoYXJhY3RlclR5cGUxKiBjaGFyYWN0ZXJzMSwg
dW5zaWduZWQgbGVuZ3RoMSwgY29uc3QgQ2hhcmFjdGVyVHlwZTIqIGNoYXJhY3RlcnMyLCB1bnNp
Z25lZCBsZW5ndGgyKQotewotICAgIHVuc2lnbmVkIGNvbW1vbkxlbmd0aCA9IHN0ZDo6bWluKGxl
bmd0aDEsIGxlbmd0aDIpOwotCi0gICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwotICAgIHdoaWxl
IChwb3NpdGlvbiA8IGNvbW1vbkxlbmd0aCAmJiAqY2hhcmFjdGVyczEgPT0gKmNoYXJhY3RlcnMy
KSB7Ci0gICAgICAgICsrY2hhcmFjdGVyczE7Ci0gICAgICAgICsrY2hhcmFjdGVyczI7Ci0gICAg
ICAgICsrcG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKHBvc2l0aW9uIDwgY29tbW9uTGVuZ3Ro
KQotICAgICAgICByZXR1cm4gKGNoYXJhY3RlcnMxWzBdID4gY2hhcmFjdGVyczJbMF0pID8gMSA6
IC0xOwotCi0gICAgaWYgKGxlbmd0aDEgPT0gbGVuZ3RoMikKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIChsZW5ndGgxID4gbGVuZ3RoMikgPyAxIDogLTE7Ci19Ci0KLWlubGluZSBpbnQg
Y29kZVBvaW50Q29tcGFyZShjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmcxLCBjb25zdCBTdHJpbmdJ
bXBsKiBzdHJpbmcyKQotewotICAgIC8vIEZJWE1FOiBTaG91bGQgbnVsbCBzdHJpbmdzIGNvbXBh
cmUgYXMgbGVzcyB0aGFuIGVtcHR5IHN0cmluZ3MgcmF0aGVyIHRoYW4gZXF1YWwgdG8gdGhlbT8K
LSAgICBpZiAoIXN0cmluZzEpCi0gICAgICAgIHJldHVybiAoc3RyaW5nMiAmJiBzdHJpbmcyLT5s
ZW5ndGgoKSkgPyAtMSA6IDA7Ci0gICAgaWYgKCFzdHJpbmcyKQotICAgICAgICByZXR1cm4gc3Ry
aW5nMS0+bGVuZ3RoKCkgPyAxIDogMDsKLQotICAgIGJvb2wgc3RyaW5nMUlzOEJpdCA9IHN0cmlu
ZzEtPmlzOEJpdCgpOwotICAgIGJvb2wgc3RyaW5nMklzOEJpdCA9IHN0cmluZzItPmlzOEJpdCgp
OwotICAgIGlmIChzdHJpbmcxSXM4Qml0KSB7Ci0gICAgICAgIGlmIChzdHJpbmcySXM4Qml0KQot
ICAgICAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoc3RyaW5nMS0+Y2hhcmFjdGVyczgo
KSwgc3RyaW5nMS0+bGVuZ3RoKCksIHN0cmluZzItPmNoYXJhY3RlcnM4KCksIHN0cmluZzItPmxl
bmd0aCgpKTsKLSAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoc3RyaW5nMS0+Y2hhcmFj
dGVyczgoKSwgc3RyaW5nMS0+bGVuZ3RoKCksIHN0cmluZzItPmNoYXJhY3RlcnMxNigpLCBzdHJp
bmcyLT5sZW5ndGgoKSk7Ci0gICAgfQotICAgIGlmIChzdHJpbmcySXM4Qml0KQotICAgICAgICBy
ZXR1cm4gY29kZVBvaW50Q29tcGFyZShzdHJpbmcxLT5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nMS0+
bGVuZ3RoKCksIHN0cmluZzItPmNoYXJhY3RlcnM4KCksIHN0cmluZzItPmxlbmd0aCgpKTsKLSAg
ICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShzdHJpbmcxLT5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5n
MS0+bGVuZ3RoKCksIHN0cmluZzItPmNoYXJhY3RlcnMxNigpLCBzdHJpbmcyLT5sZW5ndGgoKSk7
Ci19Ci0KIGlubGluZSBib29sIGlzU3BhY2VPck5ld2xpbmUoVUNoYXIzMiBjaGFyYWN0ZXIpCiB7
CiAgICAgLy8gVXNlIGlzQVNDSUlTcGFjZSgpIGZvciBhbGwgTGF0aW4tMSBjaGFyYWN0ZXJzLiBU
aGlzIHdpbGwgaW5jbHVkZSBuZXdsaW5lcywgd2hpY2ggYXJlbid0IGluY2x1ZGVkIGluIFVuaWNv
ZGUgRGlyV1MuCkBAIC04MjksMjIgKzY5Nyw2IEBAIGlubGluZSBib29sIFN0cmluZ0ltcGw6Omlz
QWxsTGF0aW4xKCkgY29uc3QKICAgICByZXR1cm4gIShvcmVkICYgMHhGRjAwKTsKIH0KIAotdGVt
cGxhdGU8Ym9vbCBpc1NwZWNpYWxDaGFyYWN0ZXIoVUNoYXIpLCB0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPiBpbmxpbmUgYm9vbCBpc0FsbFNwZWNpYWxDaGFyYWN0ZXJzKGNvbnN0IENoYXJhY3RlclR5
cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIWlzU3BlY2lhbENoYXJhY3RlcihjaGFy
YWN0ZXJzW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXRlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4gaW5s
aW5lIGJvb2wgU3RyaW5nSW1wbDo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVycygpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gV1RGOjppc0FsbFNwZWNpYWxDaGFyYWN0
ZXJzPGlzU3BlY2lhbENoYXJhY3Rlcj4oY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkpOwotICAgIHJl
dHVybiBXVEY6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNTcGVjaWFsQ2hhcmFjdGVyPihjaGFy
YWN0ZXJzMTYoKSwgbGVuZ3RoKCkpOwotfQotCiBpbmxpbmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1w
bCh1bnNpZ25lZCBsZW5ndGgsIEZvcmNlOEJpdCkKICAgICA6IFN0cmluZ0ltcGxTaGFwZShzX3Jl
ZkNvdW50SW5jcmVtZW50LCBsZW5ndGgsIHRhaWxQb2ludGVyPExDaGFyPigpLCBzX2hhc2hGbGFn
OEJpdEJ1ZmZlciB8IFN0cmluZ05vcm1hbCB8IEJ1ZmZlckludGVybmFsKQogewpAQCAtMTA3OSwy
MSArOTMxLDYgQEAgaW5saW5lIHZvaWQgU3RyaW5nSW1wbDo6ZGVyZWYoKQogICAgIG1fcmVmQ291
bnQgPSB0ZW1wUmVmQ291bnQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGlubGluZSB2b2lkIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKENoYXJhY3RlclR5cGUqIGRl
c3RpbmF0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzb3VyY2UsIHVuc2lnbmVkIG51bUNoYXJh
Y3RlcnMpCi17Ci0gICAgaWYgKG51bUNoYXJhY3RlcnMgPT0gMSkgewotICAgICAgICAqZGVzdGlu
YXRpb24gPSAqc291cmNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1lbWNweShkZXN0
aW5hdGlvbiwgc291cmNlLCBudW1DaGFyYWN0ZXJzICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKTsK
LX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKFVDaGFy
KiBkZXN0aW5hdGlvbiwgY29uc3QgTENoYXIqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVy
cykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKQot
ICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKLX0KLQogaW5saW5lIFVDaGFyIFN0
cmluZ0ltcGw6OmF0KHVuc2lnbmVkIGkpIGNvbnN0CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oaSA8IG1fbGVuZ3RoKTsKQEAgLTEyMzcsNiArMTA3NCwyOSBAQCB0ZW1w
bGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGNvbnN0IFN0cmluZwogICAgIHJldHVybiBzdHJpbmcgJiYgZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoKnN0cmluZywgbG93ZXJjYXNlTGV0dGVycyk7CiB9CiAKKy8vIFN0cmlu
Z1ZpZXcgY29uc3RydWN0b3JzCisKK2lubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0
IFN0cmluZ0ltcGwmIHN0cmluZykKK3sKKyAgICBzZXRVbmRlcmx5aW5nU3RyaW5nKCZzdHJpbmcp
OworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIGluaXRpYWxpemUoc3RyaW5nLmNo
YXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgZWxzZQorICAgICAgICBpbml0aWFs
aXplKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKK30KKworaW5saW5l
IFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nKQoreworICAg
IGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRVbmRlcmx5aW5nU3RyaW5n
KHN0cmluZyk7CisgICAgaWYgKHN0cmluZy0+aXM4Qml0KCkpCisgICAgICAgIGluaXRpYWxpemUo
c3RyaW5nLT5jaGFyYWN0ZXJzOCgpLCBzdHJpbmctPmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAg
ICAgIGluaXRpYWxpemUoc3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLT5sZW5ndGgoKSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlN0YXRpY1N0cmluZ0ltcGw7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5oIGIvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdPcGVyYXRvcnMuaAppbmRleCA3NDNlZTlmODRlZTBkYTE0
MDVkZTk3OTU1OTA4YmMwNjE2ODRmOThmLi40NzVlY2ZlM2E1Y2VmY2ZjZjA0NWJkOTNlYThhNTYz
Y2Q0N2FmZjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ09wZXJhdG9y
cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nT3BlcmF0b3JzLmgKQEAgLTIxLDYg
KzIxLDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oPgorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
VHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyPiBjbGFzcyBTdHJpbmdBcHBlbmQgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nVmlldy5jcHAKaW5kZXggZWUxNmI5Y2QwMTIyYzQ0NjljZTIzZmM3MTRiYzY2
MGQ0ZDg2YzYxZi4uYjRkZmM2MzQyNDljN2NmN2QyYmNlODhhZDZlOGI1ZWU2YmVlNDMxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCkBAIC0zNCw3ICszNCw5IEBAIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjhDb252ZXJz
aW9uLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNjEsMjIgKzYzLDIyIEBAIHNpemVfdCBTdHJp
bmdWaWV3OjpmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nVmlldyYgbWF0Y2hTdHJp
bmcsIHVuc2lnbmVkCiAgICAgcmV0dXJuIDo6V1RGOjpmaW5kSWdub3JpbmdBU0NJSUNhc2UoKnRo
aXMsIG1hdGNoU3RyaW5nLCBzdGFydE9mZnNldCk7CiB9CiAKLWJvb2wgU3RyaW5nVmlldzo6c3Rh
cnRzV2l0aChjb25zdCBTdHJpbmdWaWV3JiBwcmVmaXgpIGNvbnN0Citib29sIFN0cmluZ1ZpZXc6
OnN0YXJ0c1dpdGgoU3RyaW5nVmlldyBwcmVmaXgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDo6V1RG
OjpzdGFydHNXaXRoKCp0aGlzLCBwcmVmaXgpOwogfQogCi1ib29sIFN0cmluZ1ZpZXc6OnN0YXJ0
c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdWaWV3JiBwcmVmaXgpIGNvbnN0Citi
b29sIFN0cmluZ1ZpZXc6OnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShTdHJpbmdWaWV3IHBy
ZWZpeCkgY29uc3QKIHsKICAgICByZXR1cm4gOjpXVEY6OnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZSgqdGhpcywgcHJlZml4KTsKIH0KIAotYm9vbCBTdHJpbmdWaWV3OjplbmRzV2l0aChjb25z
dCBTdHJpbmdWaWV3JiBzdWZmaXgpIGNvbnN0Citib29sIFN0cmluZ1ZpZXc6OmVuZHNXaXRoKFN0
cmluZ1ZpZXcgc3VmZml4KSBjb25zdAogewogICAgIHJldHVybiA6OldURjo6ZW5kc1dpdGgoKnRo
aXMsIHN1ZmZpeCk7CiB9CiAKLWJvb2wgU3RyaW5nVmlldzo6ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZShjb25zdCBTdHJpbmdWaWV3JiBzdWZmaXgpIGNvbnN0Citib29sIFN0cmluZ1ZpZXc6OmVu
ZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nVmlldyBzdWZmaXgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIDo6V1RGOjplbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCp0aGlzLCBzdWZmaXgpOwog
fQpAQCAtMjExLDYgKzIxMywxMzQgQEAgYm9vbCBTdHJpbmdWaWV3OjpHcmFwaGVtZUNsdXN0ZXJz
OjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGMKICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVVbml0UHJl
ZGljYXRlPiBpbmxpbmUgU3RyaW5nIFN0cmluZ1ZpZXc6OnN0cmlwTWF0Y2hlZENoYXJhY3RlcnMo
Q29kZVVuaXRQcmVkaWNhdGUgcHJlZGljYXRlLCBTdHJpbmdJbXBsKiBvd25lcikgY29uc3QKK3sK
KyAgICBhdXRvIHVuY2hhbmdlZCA9IFsmXSAoKSAtPiBTdHJpbmcgeworICAgICAgICByZXR1cm4g
b3duZXIgPyBvd25lciA6IHRvU3RyaW5nKCk7CisgICAgfTsKKworICAgIGlmICghbGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiB1bmNoYW5nZWQoKTsKKworICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsK
KyAgICB1bnNpZ25lZCBlbmQgPSBsZW5ndGgoKSAtIDE7CisKKyAgICAvLyBza2lwIHdoaXRlIHNw
YWNlIGZyb20gc3RhcnQKKyAgICB3aGlsZSAoc3RhcnQgPD0gZW5kICYmIHByZWRpY2F0ZShpczhC
aXQoKSA/IGNoYXJhY3RlcnM4KClbc3RhcnRdIDogY2hhcmFjdGVyczE2KClbc3RhcnRdKSkKKyAg
ICAgICAgKytzdGFydDsKKworICAgIC8vIG9ubHkgd2hpdGUgc3BhY2UKKyAgICBpZiAoc3RhcnQg
PiBlbmQpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgLy8gc2tpcCB3aGl0
ZSBzcGFjZSBmcm9tIGVuZAorICAgIHdoaWxlIChlbmQgJiYgcHJlZGljYXRlKGlzOEJpdCgpID8g
Y2hhcmFjdGVyczgoKVtlbmRdIDogY2hhcmFjdGVyczE2KClbZW5kXSkpCisgICAgICAgIC0tZW5k
OworCisgICAgaWYgKCFzdGFydCAmJiBlbmQgPT0gbGVuZ3RoKCkgLSAxKQorICAgICAgICByZXR1
cm4gdW5jaGFuZ2VkKCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KGNoYXJhY3RlcnM4KCkgKyBzdGFydCwgZW5kICsgMSAtIHN0YXJ0KTsKKyAgICByZXR1cm4gU3Ry
aW5nKGNoYXJhY3RlcnMxNigpICsgc3RhcnQsIGVuZCArIDEgLSBzdGFydCk7Cit9CisKK1N0cmlu
ZyBTdHJpbmdWaWV3OjpzdHJpcFdoaXRlU3BhY2UoU3RyaW5nSW1wbCogb3duZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHN0cmlwTWF0Y2hlZENoYXJhY3RlcnMoaXNTcGFjZU9yTmV3bGluZSwgb3du
ZXIpOworfQorCitTdHJpbmcgU3RyaW5nVmlldzo6c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdDaGFy
YWN0ZXJzKENvZGVVbml0TWF0Y2hGdW5jdGlvbiBwcmVkaWNhdGUsIFN0cmluZ0ltcGwqIG93bmVy
KSBjb25zdAoreworICAgIHJldHVybiBzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzKHByZWRpY2F0ZSwg
b3duZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5M
SU5FIFN0cmluZyBTdHJpbmdWaWV3OjpyZW1vdmVDaGFyYWN0ZXJzKGNvbnN0IENoYXJhY3RlclR5
cGUqIGNoYXJhY3RlcnMsIENvZGVVbml0TWF0Y2hGdW5jdGlvbiBmaW5kTWF0Y2gsIFN0cmluZ0lt
cGwqIG93bmVyKSBjb25zdAoreworICAgIGF1dG8qIGZyb20gPSBjaGFyYWN0ZXJzOworICAgIGF1
dG8qIGZyb21FbmQgPSBmcm9tICsgbGVuZ3RoKCk7CisKKyAgICAvLyBBc3N1bWUgdGhlIGNvbW1v
biBjYXNlIHdpbGwgbm90IHJlbW92ZSBhbnkgY2hhcmFjdGVycworICAgIHdoaWxlIChmcm9tICE9
IGZyb21FbmQgJiYgIWZpbmRNYXRjaCgqZnJvbSkpCisgICAgICAgICsrZnJvbTsKKyAgICBpZiAo
ZnJvbSA9PSBmcm9tRW5kKQorICAgICAgICByZXR1cm4gb3duZXIgPyBvd25lciA6IHRvU3RyaW5n
KCk7CisKKyAgICBTdHJpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gZGF0YShsZW5ndGgoKSk7Cisg
ICAgYXV0byogdG8gPSBkYXRhLmNoYXJhY3RlcnMoKTsKKyAgICB1bnNpZ25lZCBvdXRjID0gZnJv
bSAtIGNoYXJhY3RlcnM7CisKKyAgICBpZiAob3V0YykKKyAgICAgICAgY29weUNoYXJhY3RlcnMo
dG8sIGNoYXJhY3RlcnMsIG91dGMpOworCisgICAgZG8geworICAgICAgICB3aGlsZSAoZnJvbSAh
PSBmcm9tRW5kICYmIGZpbmRNYXRjaCgqZnJvbSkpCisgICAgICAgICAgICArK2Zyb207CisgICAg
ICAgIHdoaWxlIChmcm9tICE9IGZyb21FbmQgJiYgIWZpbmRNYXRjaCgqZnJvbSkpCisgICAgICAg
ICAgICB0b1tvdXRjKytdID0gKmZyb20rKzsKKyAgICB9IHdoaWxlIChmcm9tICE9IGZyb21FbmQp
OworCisgICAgZGF0YS5zaHJpbmsob3V0Yyk7CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6YWRv
cHQoV1RGTW92ZShkYXRhKSk7Cit9CisKK1N0cmluZyBTdHJpbmdWaWV3OjpyZW1vdmVDaGFyYWN0
ZXJzKENvZGVVbml0TWF0Y2hGdW5jdGlvbiBmaW5kTWF0Y2gsIFN0cmluZ0ltcGwqIG93bmVyKSBj
b25zdAoreworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHJlbW92ZUNoYXJhY3Rl
cnMoY2hhcmFjdGVyczgoKSwgZmluZE1hdGNoLCBvd25lcik7CisgICAgcmV0dXJuIHJlbW92ZUNo
YXJhY3RlcnMoY2hhcmFjdGVyczE2KCksIGZpbmRNYXRjaCwgb3duZXIpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBjbGFzcyBVQ2hhclByZWRpY2F0ZT4gaW5saW5lIFN0
cmluZyBTdHJpbmdWaWV3OjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFjZShVQ2hhclBy
ZWRpY2F0ZSBwcmVkaWNhdGUsIFN0cmluZ0ltcGwqIG93bmVyKSBjb25zdAoreworICAgIFN0cmlu
Z0J1ZmZlcjxDaGFyYWN0ZXJUeXBlPiBkYXRhKG1fbGVuZ3RoKTsKKworICAgIGF1dG8qIGZyb20g
PSBjaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CisgICAgYXV0byogZnJvbUVuZCA9IGZyb20g
KyBsZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBvdXRjID0gMDsKKyAgICBib29sIGNoYW5nZWRUb1Nw
YWNlID0gZmFsc2U7CisKKyAgICBhdXRvKiB0byA9IGRhdGEuY2hhcmFjdGVycygpOworCisgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbUVuZCAmJiBwcmVkaWNh
dGUoKmZyb20pKSB7CisgICAgICAgICAgICBpZiAoKmZyb20gIT0gJyAnKQorICAgICAgICAgICAg
ICAgIGNoYW5nZWRUb1NwYWNlID0gdHJ1ZTsKKyAgICAgICAgICAgICsrZnJvbTsKKyAgICAgICAg
fQorICAgICAgICB3aGlsZSAoZnJvbSAhPSBmcm9tRW5kICYmICFwcmVkaWNhdGUoKmZyb20pKQor
ICAgICAgICAgICAgdG9bb3V0YysrXSA9ICpmcm9tKys7CisgICAgICAgIGlmIChmcm9tICE9IGZy
b21FbmQpCisgICAgICAgICAgICB0b1tvdXRjKytdID0gJyAnOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAob3V0YyAmJiB0b1tvdXRjIC0gMV0gPT0g
JyAnKQorICAgICAgICAtLW91dGM7CisKKyAgICBpZiAob3V0YyA9PSBtX2xlbmd0aCAmJiAhY2hh
bmdlZFRvU3BhY2UpCisgICAgICAgIHJldHVybiBvd25lciA/IG93bmVyIDogdG9TdHJpbmcoKTsK
KworICAgIGRhdGEuc2hyaW5rKG91dGMpOworCisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0
KFdURk1vdmUoZGF0YSkpOworfQorCitTdHJpbmcgU3RyaW5nVmlldzo6c2ltcGxpZnlXaGl0ZVNw
YWNlKFN0cmluZ0ltcGwqIG93bmVyKSBjb25zdAoreworICAgIGlmIChpczhCaXQoKSkKKyAgICAg
ICAgcmV0dXJuIHNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlPExDaGFyPihpc1NwYWNl
T3JOZXdsaW5lLCBvd25lcik7CisgICAgcmV0dXJuIHNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNU
b1NwYWNlPFVDaGFyPihpc1NwYWNlT3JOZXdsaW5lLCBvd25lcik7Cit9CisKK1N0cmluZyBTdHJp
bmdWaWV3OjpzaW1wbGlmeVdoaXRlU3BhY2UoQ29kZVVuaXRNYXRjaEZ1bmN0aW9uIGlzV2hpdGVT
cGFjZSwgU3RyaW5nSW1wbCogb3duZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzOEJpdCgpKQorICAg
ICAgICByZXR1cm4gc2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2U8TENoYXI+KGlzV2hp
dGVTcGFjZSwgb3duZXIpOworICAgIHJldHVybiBzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9T
cGFjZTxVQ2hhcj4oaXNXaGl0ZVNwYWNlLCBvd25lcik7Cit9CisKIGVudW0gY2xhc3MgQVNDSUlD
YXNlIHsgTG93ZXIsIFVwcGVyIH07CiAKIHRlbXBsYXRlPEFTQ0lJQ2FzZSB0eXBlLCB0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPgpAQCAtMjE5LDExICszNDksMjEgQEAgU3RyaW5nIGNvbnZlcnRBU0NJ
SUNhc2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5wdXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICBp
ZiAoIWlucHV0KQogICAgICAgICByZXR1cm4geyB9OwogCisgICAgaWYgKHN0ZDo6aXNfc2FtZTxD
aGFyYWN0ZXJUeXBlLCBMQ2hhcj46OnZhbHVlICYmIFN0cmluZzo6c2hvdWxkQmVTbWFsbFN0cmlu
ZyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oaW5wdXQpLCBsZW5ndGgpKSB7CisgICAg
ICAgIENoYXJhY3RlclR5cGUgY2hhcmFjdGVyc1tTdHJpbmc6Om1heFNtYWxsU3RyaW5nTGVuZ3Ro
XTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgU3RyaW5nOjptYXhTbWFsbFN0
cmluZ0xlbmd0aDsgKytpKQorICAgICAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHR5cGUgPT0gQVND
SUlDYXNlOjpMb3dlciA/IHRvQVNDSUlMb3dlcihpbnB1dFtpXSkgOiB0b0FTQ0lJVXBwZXIoaW5w
dXRbaV0pOworCisgICAgICAgIHJldHVybiBTdHJpbmcoU3RyaW5nOjpLbm93blNtYWxsU3RyaW5n
LCBTdHJpbmc6OnRvUGFja2VkU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihj
aGFyYWN0ZXJzKSwgbGVuZ3RoKSk7CisgICAgfQorCiAgICAgQ2hhcmFjdGVyVHlwZSogY2hhcmFj
dGVyczsKLSAgICBhdXRvIHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5n
dGgsIGNoYXJhY3RlcnMpOworICAgIGF1dG8gcmVzdWx0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIGNoYXJhY3RlcnMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgY2hhcmFjdGVyc1tpXSA9IHR5cGUgPT0gQVNDSUlD
YXNlOjpMb3dlciA/IHRvQVNDSUlMb3dlcihpbnB1dFtpXSkgOiB0b0FTQ0lJVXBwZXIoaW5wdXRb
aV0pOwogICAgIHJldHVybiByZXN1bHQ7CisKIH0KIAogU3RyaW5nIFN0cmluZ1ZpZXc6OmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3QKQEAgLTI0MCw2ICszODAsNTI2IEBAIFN0cmluZyBT
dHJpbmdWaWV3Ojpjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0CiAgICAgcmV0dXJuIGNv
bnZlcnRBU0NJSUNhc2U8QVNDSUlDYXNlOjpVcHBlcj4oc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIq
PihtX2NoYXJhY3RlcnMpLCBtX2xlbmd0aCk7CiB9CiAKK1N0cmluZyBTdHJpbmdWaWV3Ojpjb252
ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKFN0cmluZ0ltcGwqIG93bmVyKSBjb25zdAorewor
ICAgIC8vIE5vdGU6IEF0IG9uZSB0aW1lIHRoaXMgd2FzIGEgaG90IGZ1bmN0aW9uIGluIHRoZSBE
cm9tYWVvIGJlbmNobWFyaywgc3BlY2lmaWNhbGx5IHRoZQorICAgIC8vIG5vLW9wIGNvZGUgcGF0
aCB0aGF0IG1heSByZXR1cm4gb3Vyc2VsZiBpZiB3ZSBmaW5kIG5vIHVwcGVyIGNhc2UgbGV0dGVy
cyBhbmQgbm8gaW52YWxpZAorICAgIC8vIEFTQ0lJIGxldHRlcnMuCisKKyAgICBhdXRvIHVuY2hh
bmdlZCA9IFsmXSAoKSAtPiBTdHJpbmcgeworICAgICAgICByZXR1cm4gb3duZXIgPyBvd25lciA6
IHRvU3RyaW5nKCk7CisgICAgfTsKKworICAgIC8vIEZpcnN0IHNjYW4gdGhlIHN0cmluZyBmb3Ig
dXBwZXJjYXNlIGFuZCBub24tQVNDSUkgY2hhcmFjdGVyczoKKyAgICBpZiAoaXM4Qml0KCkpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgIExDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnM4KClbaV07CisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoIWlzQVNDSUkoY2hhcmFjdGVyKSB8fCBpc0FTQ0lJVXBwZXIoY2hhcmFjdGVy
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2Nh
bGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdChpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiB1bmNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBib29sIG5vVXBwZXIgPSB0cnVlOworICAg
IHVuc2lnbmVkIG9yZWQgPSAwOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gY2hhcmFjdGVyczE2KClbaV07
CisgICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkpCisgICAgICAg
ICAgICBub1VwcGVyID0gZmFsc2U7CisgICAgICAgIG9yZWQgfD0gY2hhcmFjdGVyOworICAgIH0K
KyAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHRoZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8g
dXBwZXJjYXNlLgorICAgIGlmIChub1VwcGVyICYmICEob3JlZCAmIH4weDdGKSkKKyAgICAgICAg
cmV0dXJuIHVuY2hhbmdlZCgpOworCisgICAgaWYgKCEob3JlZCAmIH4weDdGKSkgeworICAgICAg
ICBVQ2hhciogZGF0YTE2OworICAgICAgICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVh
dGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRhdGExNltpXSA9IHRvQVND
SUlMb3dlcihjaGFyYWN0ZXJzMTYoKVtpXSk7CisgICAgICAgIHJldHVybiBuZXdJbXBsOworICAg
IH0KKworICAgIGlmIChtX2xlbmd0aCA+IFN0cmluZ0ltcGw6Ok1heExlbmd0aCkKKyAgICAgICAg
Q1JBU0goKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOworCisgICAgLy8gRG8gYSBz
bG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hh
cmFjdGVycy4KKyAgICBVQ2hhciogZGF0YTE2OworICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0lt
cGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7CisKKyAgICBVRXJyb3JD
b2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSB1X3N0
clRvTG93ZXIoZGF0YTE2LCBsZW5ndGgsIGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgIiIsICZz
dGF0dXMpOworICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisKKyAgICBuZXdJbXBsID0gU3RyaW5nSW1wbDo6
Y3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOworICAgIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKKyAgICB1X3N0clRvTG93ZXIoZGF0YTE2LCByZWFsTGVuZ3RoLCBjaGFyYWN0
ZXJzMTYoKSwgbV9sZW5ndGgsICIiLCAmc3RhdHVzKTsKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1
cykpCisgICAgICAgIHJldHVybiB1bmNoYW5nZWQoKTsKKyAgICByZXR1cm4gbmV3SW1wbDsKK30K
KworU3RyaW5nIFN0cmluZ1ZpZXc6OmNvbnZlcnRUb0xvd2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFy
dGluZ0F0RmFpbGluZ0luZGV4OEJpdCh1bnNpZ25lZCBmYWlsaW5nSW5kZXgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlzOEJpdCgpKTsKKyAgICBMQ2hhciogZGF0YTg7CisgICAgYXV0byBuZXdJbXBs
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTgpOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWxpbmdJbmRleDsgKytpKSB7CisgICAgICAg
IEFTU0VSVCghKGNoYXJhY3RlcnM4KClbaV0gJiB+MHg3RikgJiYgIWlzQVNDSUlVcHBlcihjaGFy
YWN0ZXJzOCgpW2ldKSk7CisgICAgICAgIGRhdGE4W2ldID0gY2hhcmFjdGVyczgoKVtpXTsKKyAg
ICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBmYWlsaW5nSW5kZXg7IGkgPCBtX2xlbmd0aDsg
KytpKSB7CisgICAgICAgIExDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnM4KClbaV07CisgICAg
ICAgIGlmICghKGNoYXJhY3RlciAmIH4weDdGKSkKKyAgICAgICAgICAgIGRhdGE4W2ldID0gdG9B
U0NJSUxvd2VyKGNoYXJhY3Rlcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KGlzTGF0aW4xKHVfdG9sb3dlcihjaGFyYWN0ZXIpKSk7CisgICAgICAgICAgICBkYXRhOFtpXSA9
IHN0YXRpY19jYXN0PExDaGFyPih1X3RvbG93ZXIoY2hhcmFjdGVyKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gbmV3SW1wbDsKK30KKworU3RyaW5nIFN0cmluZ1ZpZXc6OmNvbnZl
cnRUb1VwcGVyY2FzZVdpdGhvdXRMb2NhbGUoU3RyaW5nSW1wbCogb3duZXIpIGNvbnN0Cit7Cisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIG5vLW9wIGNhc2VzIHRo
ZSB3YXkKKyAgICAvLyBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgaXMsIGJ1dCBp
biBlbXBpcmljYWwgdGVzdGluZywKKyAgICAvLyBmZXcgYWN0dWFsIGNhbGxzIHRvIHVwcGVyKCkg
YXJlIG5vLW9wcywgc28gaXQgd291bGRuJ3QgYmUgd29ydGgKKyAgICAvLyB0aGUgZXh0cmEgdGlt
ZSBmb3IgcHJlLXNjYW5uaW5nLgorCisgICAgaWYgKG1fbGVuZ3RoID4gTWF4U3RyaW5nTGVuZ3Ro
KQorICAgICAgICBDUkFTSCgpOworICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CisKKyAg
ICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgTENoYXIqIGRhdGE4OworICAgICAgICBhdXRvIG5l
d0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhOCk7
CisKKyAgICAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRo
ZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KKyAgICAgICAgdW5zaWduZWQgb3JlZCA9IDA7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIExDaGFy
IGNoYXJhY3RlciA9IGNoYXJhY3RlcnM4KClbaV07CisgICAgICAgICAgICBvcmVkIHw9IGNoYXJh
Y3RlcjsKKyAgICAgICAgICAgIGRhdGE4W2ldID0gdG9BU0NJSVVwcGVyKGNoYXJhY3Rlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKKyAgICAgICAgICAgIHJldHVy
biBuZXdJbXBsOworCisgICAgICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBj
YXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIExhdGluLTEgY2hhcmFjdGVycy4KKyAgICAgICAg
aW50IG51bWJlclNoYXJwU0NoYXJhY3RlcnMgPSAwOworCisgICAgICAgIC8vIFRoZXJlIGFyZSB0
d28gc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgLy8gIDEuIFNvbWUgTGF0aW4tMSBjaGFyYWN0ZXJz
IHdoZW4gY29udmVydGVkIHRvIHVwcGVyIGNhc2UgYXJlIDE2IGJpdCBjaGFyYWN0ZXJzLgorICAg
ICAgICAvLyAgMi4gTG93ZXIgY2FzZSBzaGFycC1TIGNvbnZlcnRzIHRvICJTUyIgKHR3byBjaGFy
YWN0ZXJzKQorICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgTENoYXIgY2hhcmFjdGVyID0gY2hhcmFjdGVyczgoKVtpXTsKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShjaGFyYWN0ZXIgPT0gc21hbGxMZXR0ZXJTaGFycFMpKQorICAgICAg
ICAgICAgICAgICsrbnVtYmVyU2hhcnBTQ2hhcmFjdGVyczsKKyAgICAgICAgICAgIEFTU0VSVCh1
X3RvdXBwZXIoY2hhcmFjdGVyKSA8PSAweEZGRkYpOworICAgICAgICAgICAgVUNoYXIgdXBwZXIg
PSB1X3RvdXBwZXIoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghaXNMYXRp
bjEodXBwZXIpKSkgeworICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgdXBwZXItY2FzZWQg
Y2hhcmFjdGVyIGRvZXMgbm90IGZpdCBpbiBhbiA4LWJpdCBzdHJpbmcsIHdlIG5lZWQgdG8gdGFr
ZSB0aGUgMTYtYml0IHBhdGguCisgICAgICAgICAgICAgICAgZ290byB1cGNvbnZlcnQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPih1cHBl
cik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW51bWJlclNoYXJwU0NoYXJhY3RlcnMpCisg
ICAgICAgICAgICByZXR1cm4gbmV3SW1wbDsKKworICAgICAgICAvLyBXZSBoYXZlIG51bWJlclNT
Q2hhcmFjdGVycyBzaGFycC1zIGNoYXJhY3RlcnMsIGJ1dCBub25lIG9mIHRoZSBvdGhlciBzcGVj
aWFsIGNoYXJhY3RlcnMuCisgICAgICAgIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmlu
aXRpYWxpemVkKG1fbGVuZ3RoICsgbnVtYmVyU2hhcnBTQ2hhcmFjdGVycywgZGF0YTgpOworCisg
ICAgICAgIExDaGFyKiBkZXN0ID0gZGF0YTg7CisKKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIExDaGFyIGNoYXJhY3RlciA9IGNoYXJh
Y3RlcnM4KClbaV07CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09IHNtYWxsTGV0dGVyU2hh
cnBTKSB7CisgICAgICAgICAgICAgICAgKmRlc3QrKyA9ICdTJzsKKyAgICAgICAgICAgICAgICAq
ZGVzdCsrID0gJ1MnOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaXNMYXRpbjEodV90b3VwcGVyKGNoYXJhY3RlcikpKTsKKyAgICAgICAgICAgICAgICAqZGVz
dCsrID0gc3RhdGljX2Nhc3Q8TENoYXI+KHVfdG91cHBlcihjaGFyYWN0ZXIpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdJbXBsOworICAgIH0KKwordXBj
b252ZXJ0OgorICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldygqdGhp
cykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIHNvdXJjZTE2ID0g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOworCisgICAgVUNoYXIqIGRhdGExNjsKKyAgICBhdXRvIG5l
d0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYp
OworCisgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBj
aGFyYWN0ZXJzIGFyZSBBU0NJSS4KKyAgICB1bnNpZ25lZCBvcmVkID0gMDsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHNv
dXJjZTE2W2ldOworICAgICAgICBvcmVkIHw9IGNoYXJhY3RlcjsKKyAgICAgICAgZGF0YTE2W2ld
ID0gdG9BU0NJSVVwcGVyKGNoYXJhY3Rlcik7CisgICAgfQorICAgIGlmICghKG9yZWQgJiB+MHg3
RikpCisgICAgICAgIHJldHVybiBuZXdJbXBsOworCisgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVt
ZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycy4KKyAg
ICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBpbnQzMl90IHJlYWxMZW5n
dGggPSB1X3N0clRvVXBwZXIoZGF0YTE2LCBsZW5ndGgsIHNvdXJjZTE2LCBtX2xlbmd0aCwgIiIs
ICZzdGF0dXMpOworICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAgbmV3SW1wbCA9IFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKKyAgICBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7CisgICAgdV9zdHJUb1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwgc291cmNl
MTYsIG1fbGVuZ3RoLCAiIiwgJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQor
ICAgICAgICByZXR1cm4gb3duZXIgPyBvd25lciA6IHRvU3RyaW5nKCk7CisgICAgcmV0dXJuIG5l
d0ltcGw7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1R1cmtpc2hDYXNpbmdSdWxlcyhj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCit7CisgICAgLy8gRWl0aGVyICJ0
ciIgb3IgImF6IiBsb2NhbGUsIHdpdGggY2FzZSBzZW5zaXRpdmUgY29tcGFyaXNvbiBhbmQgYWxs
b3dpbmcgZm9yIGFuIGlnbm9yZWQgc3VidGFnLgorICAgIFVDaGFyIGZpcnN0ID0gbG9jYWxlSWRl
bnRpZmllclswXTsKKyAgICBVQ2hhciBzZWNvbmQgPSBsb2NhbGVJZGVudGlmaWVyWzFdOworICAg
IHJldHVybiAoKGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoZmlyc3QsICd0JykgJiYgaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChzZWNvbmQsICdyJykpCisgICAgICAgICAgICB8fCAoaXNBU0NJ
SUFscGhhQ2FzZWxlc3NFcXVhbChmaXJzdCwgJ2EnKSAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0Vx
dWFsKHNlY29uZCwgJ3onKSkpCisgICAgJiYgKGxvY2FsZUlkZW50aWZpZXIubGVuZ3RoKCkgPT0g
MiB8fCBsb2NhbGVJZGVudGlmaWVyWzJdID09ICctJyk7Cit9CisKK1N0cmluZyBTdHJpbmdWaWV3
Ojpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxl
SWRlbnRpZmllciwgU3RyaW5nSW1wbCogb3duZXIpIGNvbnN0Cit7CisgICAgLy8gVXNlIHRoZSBt
b3JlLW9wdGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0aGUgdGltZS4KKyAgICAvLyBBc3N1bWlu
ZyBoZXJlIHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNpZmljIGxvd2VyY2FzaW5nIGlzIHRoZSBU
dXJraXNoIGNhc2luZyBydWxlcy4KKyAgICAvLyBGSVhNRTogQ291bGQgcG9zc2libHkgb3B0aW1p
emUgZnVydGhlciBieSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgc2VxdWVuY2VzCisgICAgLy8g
dGhhdCBoYXZlIGxvY2FsZS1zcGVjaWZpYyBsb3dlcmNhc2luZy4gVGhlcmUgYXJlIG9ubHkgdGhy
ZWUgb2YgdGhlbS4KKyAgICBpZiAoIW5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGxvY2FsZUlkZW50
aWZpZXIpKQorICAgICAgICByZXR1cm4gY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgp
OworCisgICAgLy8gRklYTUU6IENvdWxkIHNoYXJlIG1vcmUgY29kZSB3aXRoIHRoZSBtYWluIFN0
cmluZ0ltcGw6Omxvd2VyIGJ5IGZhY3RvcmluZyBvdXQKKyAgICAvLyB0aGlzIGxhc3QgcGFydCBp
bnRvIGEgc2hhcmVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBsb2NhbGUgc3RyaW5nLCBzaW5jZSB0
aGlzIGlzCisgICAgLy8ganVzdCBsaWtlIHRoZSBlbmQgb2YgdGhhdCBmdW5jdGlvbi4KKworICAg
IGlmIChtX2xlbmd0aCA+IE1heFN0cmluZ0xlbmd0aCkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBp
bnQgbGVuZ3RoID0gbV9sZW5ndGg7CisKKyAgICAvLyBCZWxvdywgd2UgcGFzcyBpbiB0aGUgaGFy
ZGNvZGVkIGxvY2FsZSAidHIiLiBQYXNzaW5nIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbgor
ICAgIC8vIGFsbG9jYXRpbmcgbWVtb3J5IGp1c3QgdG8gdHVybiBsb2NhbGVJZGVudGlmaWVyIGlu
dG8gYSBDIHN0cmluZywgYW5kIHdlIGFzc3VtZQorICAgIC8vIHRoZXJlIGlzIG5vIGRpZmZlcmVu
Y2UgYmV0d2VlbiB0aGUgdXBwZXJjYXNpbmcgZm9yICJ0ciIgYW5kICJheiIgbG9jYWxlcy4KKyAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoKnRoaXMpLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBzb3VyY2UxNiA9IHVwY29udmVydGVk
Q2hhcmFjdGVyczsKKyAgICBVQ2hhciogZGF0YTE2OworICAgIGF1dG8gbmV3U3RyaW5nID0gU3Ry
aW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRhdGExNik7CisgICAgVUVycm9y
Q29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50IHJlYWxMZW5ndGggPSB1X3N0clRv
TG93ZXIoZGF0YTE2LCBsZW5ndGgsIHNvdXJjZTE2LCBsZW5ndGgsICJ0ciIsICZzdGF0dXMpOwor
ICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIG5ld1N0cmluZzsKKyAgICBuZXdTdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVV
bmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7CisgICAgc3RhdHVzID0gVV9aRVJPX0VS
Uk9SOworICAgIHVfc3RyVG9Mb3dlcihkYXRhMTYsIHJlYWxMZW5ndGgsIHNvdXJjZTE2LCBsZW5n
dGgsICJ0ciIsICZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAg
cmV0dXJuIG93bmVyID8gb3duZXIgOiB0b1N0cmluZygpOworICAgIHJldHVybiBuZXdTdHJpbmc7
Cit9CisKK1N0cmluZyBTdHJpbmdWaWV3Ojpjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllciwgU3RyaW5nSW1wbCogb3duZXIpIGNv
bnN0Cit7CisgICAgLy8gVXNlIHRoZSBtb3JlLW9wdGltaXplZCBjb2RlIHBhdGggbW9zdCBvZiB0
aGUgdGltZS4KKyAgICAvLyBBc3N1bWluZyBoZXJlIHRoYXQgdGhlIG9ubHkgbG9jYWxlLXNwZWNp
ZmljIGxvd2VyY2FzaW5nIGlzIHRoZSBUdXJraXNoIGNhc2luZyBydWxlcywKKyAgICAvLyBhbmQg
dGhhdCB0aGUgb25seSBhZmZlY3RlZCBjaGFyYWN0ZXIgaXMgbG93ZXJjYXNlICJpIi4KKyAgICBp
ZiAoIW5lZWRzVHVya2lzaENhc2luZ1J1bGVzKGxvY2FsZUlkZW50aWZpZXIpIHx8IGZpbmQoJ2kn
KSA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1VwcGVyY2FzZVdpdGhvdXRM
b2NhbGUoKTsKKworICAgIGlmIChtX2xlbmd0aCA+IE1heFN0cmluZ0xlbmd0aCkKKyAgICAgICAg
Q1JBU0goKTsKKyAgICBpbnQgbGVuZ3RoID0gbV9sZW5ndGg7CisKKyAgICAvLyBCZWxvdywgd2Ug
cGFzcyBpbiB0aGUgaGFyZGNvZGVkIGxvY2FsZSAidHIiLiBQYXNzaW5nIHRoYXQgaXMgbW9yZSBl
ZmZpY2llbnQgdGhhbgorICAgIC8vIGFsbG9jYXRpbmcgbWVtb3J5IGp1c3QgdG8gdHVybiBsb2Nh
bGVJZGVudGlmaWVyIGludG8gYSBDIHN0cmluZywgYW5kIHdlIGFzc3VtZQorICAgIC8vIHRoZXJl
IGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdXBwZXJjYXNpbmcgZm9yICJ0ciIgYW5kICJh
eiIgbG9jYWxlcy4KKyAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXco
KnRoaXMpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBzb3VyY2Ux
NiA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKKyAgICBVQ2hhciogZGF0YTE2OworICAgIGF1dG8g
bmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRhdGEx
Nik7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50IHJlYWxM
ZW5ndGggPSB1X3N0clRvVXBwZXIoZGF0YTE2LCBsZW5ndGgsIHNvdXJjZTE2LCBsZW5ndGgsICJ0
ciIsICZzdGF0dXMpOworICAgIGlmIChVX1NVQ0NFU1Moc3RhdHVzKSAmJiByZWFsTGVuZ3RoID09
IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKKyAgICBuZXdTdHJpbmcgPSBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7CisgICAgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOworICAgIHVfc3RyVG9VcHBlcihkYXRhMTYsIHJlYWxMZW5ndGgs
IHNvdXJjZTE2LCBsZW5ndGgsICJ0ciIsICZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3Rh
dHVzKSkKKyAgICAgICAgcmV0dXJuIG93bmVyID8gb3duZXIgOiB0b1N0cmluZygpOworICAgIHJl
dHVybiBuZXdTdHJpbmc7Cit9CisKKworLy9BTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGVxdWFs
SW5uZXIoU3RyaW5nVmlldyBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBjb25zdCBjaGFy
KiBtYXRjaFN0cmluZywgdW5zaWduZWQgbWF0Y2hMZW5ndGgpCisvL3sKKy8vICAgIEFTU0VSVCht
YXRjaExlbmd0aCA8PSBzdHJpbmcubGVuZ3RoKCkpOworLy8gICAgQVNTRVJUKHN0YXJ0T2Zmc2V0
ICsgbWF0Y2hMZW5ndGggPD0gc3RyaW5nLmxlbmd0aCgpKTsKKy8vCisvLyAgICBpZiAoc3RyaW5n
LmlzOEJpdCgpKQorLy8gICAgICAgIHJldHVybiBlcXVhbChzdHJpbmcuY2hhcmFjdGVyczgoKSAr
IHN0YXJ0T2Zmc2V0LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4obWF0Y2hTdHJpbmcp
LCBtYXRjaExlbmd0aCk7CisvLyAgICByZXR1cm4gZXF1YWwoc3RyaW5nLmNoYXJhY3RlcnMxNigp
ICsgc3RhcnRPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtYXRjaFN0cmlu
ZyksIG1hdGNoTGVuZ3RoKTsKKy8vfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGVxdWFs
SW5uZXIoU3RyaW5nVmlldyBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBTdHJpbmdWaWV3
IG1hdGNoU3RyaW5nKQoreworICAgIGlmIChzdGFydE9mZnNldCA+IHN0cmluZy5sZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtYXRjaFN0cmluZy5sZW5ndGgoKSA+IHN0
cmluZy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtYXRjaFN0cmlu
Zy5sZW5ndGgoKSArIHN0YXJ0T2Zmc2V0ID4gc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgIGlmIChtYXRj
aFN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgICAgIHJldHVybiBlcXVhbChzdHJpbmcuY2hhcmFj
dGVyczgoKSArIHN0YXJ0T2Zmc2V0LCBtYXRjaFN0cmluZy5jaGFyYWN0ZXJzOCgpLCBtYXRjaFN0
cmluZy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBlcXVhbChzdHJpbmcuY2hhcmFjdGVyczgo
KSArIHN0YXJ0T2Zmc2V0LCBtYXRjaFN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgbWF0Y2hTdHJpbmcu
bGVuZ3RoKCkpOworICAgIH0KKyAgICBpZiAobWF0Y2hTdHJpbmcuaXM4Qml0KCkpCisgICAgICAg
IHJldHVybiBlcXVhbChzdHJpbmcuY2hhcmFjdGVyczE2KCkgKyBzdGFydE9mZnNldCwgbWF0Y2hT
dHJpbmcuY2hhcmFjdGVyczgoKSwgbWF0Y2hTdHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVybiBl
cXVhbChzdHJpbmcuY2hhcmFjdGVyczE2KCkgKyBzdGFydE9mZnNldCwgbWF0Y2hTdHJpbmcuY2hh
cmFjdGVyczE2KCksIG1hdGNoU3RyaW5nLmxlbmd0aCgpKTsKK30KKworc2l6ZV90IFN0cmluZ1Zp
ZXc6OmZpbmQoY29uc3QgTENoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRleCwgT3B0aW9u
YWw8dW5zaWduZWQ+IG1hdGNoU3RyaW5nTGVuZ3RoKQoreworICAgIC8vIENoZWNrIGZvciBudWxs
IG9yIGVtcHR5IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0CisgICAgaWYgKCFtYXRjaFN0cmluZykK
KyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIGlmICghbWF0Y2hTdHJpbmdMZW5ndGgpCisg
ICAgICAgIG1hdGNoU3RyaW5nTGVuZ3RoID0gc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KG1hdGNoU3RyaW5nKSk7CisgICAgaWYgKCptYXRjaFN0cmluZ0xlbmd0aCA+IFN0cmlu
Z0ltcGw6Ok1heExlbmd0aCkKKyAgICAgICAgQ1JBU0goKTsKKyAgICB1bnNpZ25lZCBtYXRjaExl
bmd0aCA9ICptYXRjaFN0cmluZ0xlbmd0aDsKKyAgICBpZiAoIW1hdGNoTGVuZ3RoKQorICAgICAg
ICByZXR1cm4gc3RkOjptaW4oaW5kZXgsIGxlbmd0aCgpKTsKKworICAgIC8vIE9wdGltaXphdGlv
biAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3RoIDEuCisgICAgaWYgKG1hdGNoTGVu
Z3RoID09IDEpIHsKKyAgICAgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6ZmluZChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmdbMF0sIGluZGV4KTsK
KyAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksICptYXRj
aFN0cmluZywgaW5kZXgpOworICAgIH0KKworICAgIC8vIENoZWNrIGluZGV4ICYgbWF0Y2hMZW5n
dGggYXJlIGluIHJhbmdlLgorICAgIGlmIChpbmRleCA+IGxlbmd0aCgpKQorICAgICAgICByZXR1
cm4gbm90Rm91bmQ7CisgICAgdW5zaWduZWQgc2VhcmNoTGVuZ3RoID0gbGVuZ3RoKCkgLSBpbmRl
eDsKKyAgICBpZiAobWF0Y2hMZW5ndGggPiBzZWFyY2hMZW5ndGgpCisgICAgICAgIHJldHVybiBu
b3RGb3VuZDsKKyAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgdGltZXMg
dG8gdGVzdDsgZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KKyAgICB1bnNpZ25lZCBk
ZWx0YSA9IHNlYXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOworCisgICAgLy8gT3B0aW1pemF0aW9u
IDI6IGtlZXAgYSBydW5uaW5nIGhhc2ggb2YgdGhlIHN0cmluZ3MsCisgICAgLy8gb25seSBjYWxs
IGVxdWFsIGlmIHRoZSBoYXNoZXMgbWF0Y2guCisKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAg
ICAgY29uc3QgTENoYXIqIHNlYXJjaENoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzOCgpICsgaW5kZXg7
CisKKyAgICAgICAgdW5zaWduZWQgc2VhcmNoSGFzaCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG1h
dGNoSGFzaCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaExlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICBzZWFyY2hIYXNoICs9IHNlYXJjaENoYXJhY3RlcnNbaV07
CisgICAgICAgICAgICBtYXRjaEhhc2ggKz0gbWF0Y2hTdHJpbmdbaV07CisgICAgICAgIH0KKwor
ICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgd2hpbGUgKHNlYXJjaEhhc2ggIT0gbWF0
Y2hIYXNoIHx8ICFlcXVhbChzZWFyY2hDaGFyYWN0ZXJzICsgaSwgbWF0Y2hTdHJpbmcsIG1hdGNo
TGVuZ3RoKSkgeworICAgICAgICAgICAgaWYgKGkgPT0gZGVsdGEpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG5vdEZvdW5kOworICAgICAgICAgICAgc2VhcmNoSGFzaCArPSBzZWFyY2hDaGFyYWN0
ZXJzW2kgKyBtYXRjaExlbmd0aF07CisgICAgICAgICAgICBzZWFyY2hIYXNoIC09IHNlYXJjaENo
YXJhY3RlcnNbaV07CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGluZGV4ICsgaTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciogc2VhcmNoQ2hhcmFjdGVycyA9
IGNoYXJhY3RlcnMxNigpICsgaW5kZXg7CisKKyAgICB1bnNpZ25lZCBzZWFyY2hIYXNoID0gMDsK
KyAgICB1bnNpZ25lZCBtYXRjaEhhc2ggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtYXRjaExlbmd0aDsgKytpKSB7CisgICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFj
dGVyc1tpXTsKKyAgICAgICAgbWF0Y2hIYXNoICs9IG1hdGNoU3RyaW5nW2ldOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGkgPSAwOworICAgIHdoaWxlIChzZWFyY2hIYXNoICE9IG1hdGNoSGFzaCB8
fCAhZXF1YWwoc2VhcmNoQ2hhcmFjdGVycyArIGksIG1hdGNoU3RyaW5nLCBtYXRjaExlbmd0aCkp
IHsKKyAgICAgICAgaWYgKGkgPT0gZGVsdGEpCisgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7
CisgICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tpICsgbWF0Y2hMZW5ndGhd
OworICAgICAgICBzZWFyY2hIYXNoIC09IHNlYXJjaENoYXJhY3RlcnNbaV07CisgICAgICAgICsr
aTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4ICsgaTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFNlYXJjaENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIE1hdGNoQ2hhcmFjdGVyVHlwZT4KK0FMV0FZ
U19JTkxJTkUgc3RhdGljIHNpemVfdCByZXZlcnNlRmluZElubmVyKGNvbnN0IFNlYXJjaENoYXJh
Y3RlclR5cGUqIHNlYXJjaENoYXJhY3RlcnMsIGNvbnN0IE1hdGNoQ2hhcmFjdGVyVHlwZSogbWF0
Y2hDaGFyYWN0ZXJzLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBt
YXRjaExlbmd0aCkKK3sKKyAgICAvLyBPcHRpbWl6YXRpb246IGtlZXAgYSBydW5uaW5nIGhhc2gg
b2YgdGhlIHN0cmluZ3MsCisgICAgLy8gb25seSBjYWxsIGVxdWFsIGlmIHRoZSBoYXNoZXMgbWF0
Y2guCisKKyAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgdGltZXMgdG8g
dGVzdDsgZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KKyAgICB1bnNpZ25lZCBkZWx0
YSA9IHN0ZDo6bWluKGluZGV4LCBsZW5ndGggLSBtYXRjaExlbmd0aCk7CisKKyAgICB1bnNpZ25l
ZCBzZWFyY2hIYXNoID0gMDsKKyAgICB1bnNpZ25lZCBtYXRjaEhhc2ggPSAwOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaExlbmd0aDsgKytpKSB7CisgICAgICAgIHNlYXJjaEhh
c2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tkZWx0YSArIGldOworICAgICAgICBtYXRjaEhhc2ggKz0g
bWF0Y2hDaGFyYWN0ZXJzW2ldOworICAgIH0KKworICAgIC8vIGtlZXAgbG9vcGluZyB1bnRpbCB3
ZSBtYXRjaAorICAgIHdoaWxlIChzZWFyY2hIYXNoICE9IG1hdGNoSGFzaCB8fCAhZXF1YWwoc2Vh
cmNoQ2hhcmFjdGVycyArIGRlbHRhLCBtYXRjaENoYXJhY3RlcnMsIG1hdGNoTGVuZ3RoKSkgewor
ICAgICAgICBpZiAoIWRlbHRhKQorICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgICAg
ICAtLWRlbHRhOworICAgICAgICBzZWFyY2hIYXNoIC09IHNlYXJjaENoYXJhY3RlcnNbZGVsdGEg
KyBtYXRjaExlbmd0aF07CisgICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tk
ZWx0YV07CisgICAgfQorICAgIHJldHVybiBkZWx0YTsKK30KKworc2l6ZV90IFN0cmluZ1ZpZXc6
OnJldmVyc2VGaW5kKFN0cmluZ1ZpZXcgbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KSBjb25z
dAoreworICAgIC8vIENoZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmluZyB0byBtYXRjaCBhZ2Fp
bnN0CisgICAgaWYgKCFtYXRjaFN0cmluZykKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAg
IHVuc2lnbmVkIG1hdGNoTGVuZ3RoID0gbWF0Y2hTdHJpbmcubGVuZ3RoKCk7CisgICAgdW5zaWdu
ZWQgb3VyTGVuZ3RoID0gbGVuZ3RoKCk7CisgICAgaWYgKCFtYXRjaExlbmd0aCkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bWluKGluZGV4LCBvdXJMZW5ndGgpOworCisgICAgLy8gT3B0aW1pemF0aW9u
IDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5ndGggMS4KKyAgICBpZiAobWF0Y2hMZW5n
dGggPT0gMSkgeworICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzOCgpLCBvdXJMZW5ndGgsIG1hdGNoU3RyaW5nWzBdLCBp
bmRleCk7CisgICAgICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKGNoYXJhY3RlcnMxNigpLCBv
dXJMZW5ndGgsIG1hdGNoU3RyaW5nWzBdLCBpbmRleCk7CisgICAgfQorCisgICAgLy8gQ2hlY2sg
aW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCisgICAgaWYgKG1hdGNoTGVuZ3RoID4g
b3VyTGVuZ3RoKQorICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisKKyAgICBpZiAoaXM4Qml0KCkp
IHsKKyAgICAgICAgaWYgKG1hdGNoU3RyaW5nLmlzOEJpdCgpKQorICAgICAgICAgICAgcmV0dXJu
IHJldmVyc2VGaW5kSW5uZXIoY2hhcmFjdGVyczgoKSwgbWF0Y2hTdHJpbmcuY2hhcmFjdGVyczgo
KSwgaW5kZXgsIG91ckxlbmd0aCwgbWF0Y2hMZW5ndGgpOworICAgICAgICByZXR1cm4gcmV2ZXJz
ZUZpbmRJbm5lcihjaGFyYWN0ZXJzOCgpLCBtYXRjaFN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgaW5k
ZXgsIG91ckxlbmd0aCwgbWF0Y2hMZW5ndGgpOworICAgIH0KKworICAgIGlmIChtYXRjaFN0cmlu
Zy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHJldmVyc2VGaW5kSW5uZXIoY2hhcmFjdGVyczE2
KCksIG1hdGNoU3RyaW5nLmNoYXJhY3RlcnM4KCksIGluZGV4LCBvdXJMZW5ndGgsIG1hdGNoTGVu
Z3RoKTsKKworICAgIHJldHVybiByZXZlcnNlRmluZElubmVyKGNoYXJhY3RlcnMxNigpLCBtYXRj
aFN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgaW5kZXgsIG91ckxlbmd0aCwgbWF0Y2hMZW5ndGgpOwor
fQorCitib29sIFN0cmluZ1ZpZXc6Omhhc0luZml4U3RhcnRpbmdBdChTdHJpbmdWaWV3IG1hdGNo
U3RyaW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXF1YWxJ
bm5lcigqdGhpcywgc3RhcnRPZmZzZXQsIG1hdGNoU3RyaW5nKTsKK30KKworYm9vbCBTdHJpbmdW
aWV3OjpoYXNJbmZpeEVuZGluZ0F0KFN0cmluZ1ZpZXcgbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGVu
ZE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gZW5kT2Zmc2V0ID49IG1hdGNoU3RyaW5nLmxl
bmd0aCgpICYmIGVxdWFsSW5uZXIoKnRoaXMsIGVuZE9mZnNldCAtIG1hdGNoU3RyaW5nLmxlbmd0
aCgpLCBtYXRjaFN0cmluZyk7Cit9CisKK1N0cmluZyBTdHJpbmdWaWV3Ojpmb2xkQ2FzZShTdHJp
bmdJbXBsKiBvd25lcikgY29uc3QKK3sKKyAgICBhdXRvIHVuY2hhbmdlZCA9IFsmXSAoKSAtPiBT
dHJpbmcgeworICAgICAgICByZXR1cm4gb3duZXIgPyBvd25lciA6IHRvU3RyaW5nKCk7CisgICAg
fTsKKworICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICB1bnNpZ25lZCBmYWlsaW5nSW5kZXg7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgICAgICBhdXRvIGNoYXJhY3RlciA9IGNoYXJhY3RlcnM4KClbaV07CisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoIWlzQVNDSUkoY2hhcmFjdGVyKSB8fCBpc0FTQ0lJVXBwZXIoY2hhcmFjdGVy
KSkpIHsKKyAgICAgICAgICAgICAgICBmYWlsaW5nSW5kZXggPSBpOworICAgICAgICAgICAgICAg
IGdvdG8gU2xvd1BhdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gU3Ry
aW5nIHdhcyBhbGwgQVNDSUkgYW5kIG5vIHVwcGVyY2FzZSwgc28ganVzdCByZXR1cm4gYXMtaXMu
CisgICAgICAgIHJldHVybiB1bmNoYW5nZWQoKTsKKworICAgIFNsb3dQYXRoOgorICAgICAgICBi
b29sIG5lZWQxNkJpdENoYXJhY3RlcnMgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZmFpbGluZ0luZGV4OyBpIDwgbGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBj
aGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOCgpW2ldOworICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9
PSAweEI1IHx8IGNoYXJhY3RlciA9PSAweERGKSB7CisgICAgICAgICAgICAgICAgbmVlZDE2Qml0
Q2hhcmFjdGVycyA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW5lZWQxNkJpdENoYXJhY3RlcnMpIHsKKyAgICAg
ICAgICAgIExDaGFyKiBkYXRhODsKKyAgICAgICAgICAgIGF1dG8gZm9sZGVkID0gU3RyaW5nSW1w
bDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSwgZGF0YTgpOworICAgICAgICAgICAgY29w
eUNoYXJhY3RlcnMoZGF0YTgsIGNoYXJhY3RlcnM4KCksIGZhaWxpbmdJbmRleCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmYWlsaW5nSW5kZXg7IGkgPCBsZW5ndGgoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzOCgpW2ldOworICAg
ICAgICAgICAgICAgIGlmIChpc0FTQ0lJKGNoYXJhY3RlcikpCisgICAgICAgICAgICAgICAgICAg
IGRhdGE4W2ldID0gdG9BU0NJSUxvd2VyKGNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc0xhdGluMSh1X2ZvbGRDYXNlKGNoYXJh
Y3RlciwgVV9GT0xEX0NBU0VfREVGQVVMVCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YThb
aV0gPSBzdGF0aWNfY2FzdDxMQ2hhcj4odV9mb2xkQ2FzZShjaGFyYWN0ZXIsIFVfRk9MRF9DQVNF
X0RFRkFVTFQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gZm9sZGVkOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklY
TUU6IFVuY2xlYXIgd2h5IHdlIHVzZSBnb3RvIGluIHRoZSA4LWJpdCBjYXNlLCBhbmQgYSBkaWZm
ZXJlbnQgYXBwcm9hY2ggaW4gdGhlIDE2LWJpdCBjYXNlLgorICAgICAgICBib29sIG5vVXBwZXIg
PSB0cnVlOworICAgICAgICB1bnNpZ25lZCBvcmVkID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFVDaGFyIGNoYXJhY3Rl
ciA9IGNoYXJhY3RlcnMxNigpW2ldOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzQVNDSUlV
cHBlcihjaGFyYWN0ZXIpKSkKKyAgICAgICAgICAgICAgICBub1VwcGVyID0gZmFsc2U7CisgICAg
ICAgICAgICBvcmVkIHw9IGNoYXJhY3RlcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShvcmVk
ICYgfjB4N0YpKSB7CisgICAgICAgICAgICBpZiAobm9VcHBlcikgeworICAgICAgICAgICAgICAg
IC8vIFN0cmluZyB3YXMgYWxsIEFTQ0lJIGFuZCBubyB1cHBlcmNhc2UsIHNvIGp1c3QgcmV0dXJu
IGFzLWlzLgorICAgICAgICAgICAgICAgIHJldHVybiB1bmNoYW5nZWQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFVDaGFyKiBkYXRhMTY7CisgICAgICAgICAgICBhdXRvIGZvbGRlZCA9
IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCksIGRhdGExNik7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJTG93ZXIoY2hhcmFjdGVyczE2KClbaV0pOworICAg
ICAgICAgICAgcmV0dXJuIGZvbGRlZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsZW5n
dGgoKSA+IE1heFN0cmluZ0xlbmd0aCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIGF1dG8gdXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzID0gdGhpcy0+dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisKKyAg
ICBVQ2hhciogZGF0YTsKKyAgICBhdXRvIGZvbGRlZCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoKCksIGRhdGEpOworICAgIGludDMyX3QgbGVuZ3RoID0gdGhpcy0+bGVu
Z3RoKCk7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50MzJf
dCByZWFsTGVuZ3RoID0gdV9zdHJGb2xkQ2FzZShkYXRhLCBsZW5ndGgsIHVwY29udmVydGVkQ2hh
cmFjdGVycywgbGVuZ3RoLCBVX0ZPTERfQ0FTRV9ERUZBVUxULCAmc3RhdHVzKTsKKyAgICBpZiAo
VV9TVUNDRVNTKHN0YXR1cykgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCisgICAgICAgIHJldHVy
biBmb2xkZWQ7CisgICAgQVNTRVJUKHJlYWxMZW5ndGggPiBsZW5ndGgpOworICAgIGZvbGRlZCA9
IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7CisgICAg
c3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIHVfc3RyRm9sZENhc2UoZGF0YSwgcmVhbExlbmd0
aCwgdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLCBsZW5ndGgsIFVfRk9MRF9DQVNFX0RFRkFVTFQsICZz
dGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIHVuY2hh
bmdlZCgpOworICAgIHJldHVybiBmb2xkZWQ7Cit9CisKIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWlu
Z1N0cmluZyBub3JtYWxpemVkTkZDKFN0cmluZ1ZpZXcgc3RyaW5nKQogewogICAgIC8vIExhdGlu
LTEgY2hhcmFjdGVycyBhcmUgdW5hZmZlY3RlZCBieSBub3JtYWxpemF0aW9uLgpAQCAtMjU5LDcg
KzkxOSw3IEBAIFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyBub3JtYWxpemVkTkZDKFN0
cmluZ1ZpZXcgc3RyaW5nKQogICAgIEFTU0VSVChzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1df
RVJST1IpOwogCiAgICAgVUNoYXIqIGNoYXJhY3RlcnM7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IFN0
cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChub3JtYWxpemVkTGVuZ3RoLCBjaGFyYWN0ZXJzKTsK
KyAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChub3Jt
YWxpemVkTGVuZ3RoLCBjaGFyYWN0ZXJzKTsKIAogICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsK
ICAgICB1bm9ybTJfbm9ybWFsaXplKG5vcm1hbGl6ZXIsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwg
c3RyaW5nLmxlbmd0aCgpLCBjaGFyYWN0ZXJzLCBub3JtYWxpemVkTGVuZ3RoLCAmc3RhdHVzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5oIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdWaWV3LmgKaW5kZXggNjQxMDJiZmFhODA1Y2IwYzYzOGY1NDg2MTJl
NDY5MDE4YTFiMjY4Ny4uNzU3Mzg5NzIzMjMxMWJlMTA4MzU1Yzk4MzhkNWRkNzM3ZWI2Y2I2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmgKQEAgLTQxLDcgKzQxLDcgQEAKICNpZiBkZWZpbmVk
KE5ERUJVRykgfHwgQ09NUElMRVIoTVNWQykKICNkZWZpbmUgQ0hFQ0tfU1RSSU5HVklFV19MSUZF
VElNRSAwCiAjZWxzZQotI2RlZmluZSBDSEVDS19TVFJJTkdWSUVXX0xJRkVUSU1FIDEKKyNkZWZp
bmUgQ0hFQ0tfU1RSSU5HVklFV19MSUZFVElNRSAwCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7
CkBAIC01OSwxMCArNTksMTAgQEAgcHVibGljOgogICAgIFN0cmluZ1ZpZXcmIG9wZXJhdG9yPShj
b25zdCBTdHJpbmdWaWV3Jik7CiAjZW5kaWYKIAotICAgIFN0cmluZ1ZpZXcoY29uc3QgQXRvbWlj
U3RyaW5nJik7Ci0gICAgU3RyaW5nVmlldyhjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmdWaWV3
KGNvbnN0IFN0cmluZ0ltcGwmKTsKLSAgICBTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwqKTsK
KyAgICBpbmxpbmUgU3RyaW5nVmlldyhjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBpbmxpbmUg
U3RyaW5nVmlldyhjb25zdCBTdHJpbmcmKTsKKyAgICBpbmxpbmUgU3RyaW5nVmlldyhjb25zdCBT
dHJpbmdJbXBsJik7CisgICAgaW5saW5lIFN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nSW1wbCopOwog
ICAgIFN0cmluZ1ZpZXcoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFN0cmlu
Z1ZpZXcoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFN0cmluZ1ZpZXcoY29u
c3QgY2hhciopOwpAQCAtOTAsMTAgKzkwLDEzIEBAIHB1YmxpYzoKICAgICBjb25zdCBMQ2hhciog
Y2hhcmFjdGVyczgoKSBjb25zdDsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29u
c3Q7CiAKLSAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKLSAgICBTdHJpbmcgdG9TdHJpbmdX
aXRob3V0Q29weWluZygpIGNvbnN0OwotICAgIEF0b21pY1N0cmluZyB0b0F0b21pY1N0cmluZygp
IGNvbnN0OwotICAgIFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiB0b0V4aXN0aW5nQXRvbWljU3Ry
aW5nKCkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzKCkgY29uc3Q7CisKKyAgICBpbmxpbmUgU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3Q7CisgICAgaW5saW5lIFN0cmluZyB0b1N0cmluZ1dpdGhvdXRD
b3B5aW5nKCkgY29uc3Q7CisgICAgaW5saW5lIEF0b21pY1N0cmluZyB0b0F0b21pY1N0cmluZygp
IGNvbnN0OworICAgIGlubGluZSBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gdG9FeGlzdGluZ0F0
b21pY1N0cmluZygpIGNvbnN0OwogCiAjaWYgVVNFKENGKQogICAgIC8vIFRoaXMgZnVuY3Rpb24g
Y29udmVydHMgbnVsbCBzdHJpbmdzIHRvIGVtcHR5IHN0cmluZ3MuCkBAIC0xMzAsMzEgKzEzMyw2
OCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGZpbmQoVUNoYXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkg
Y29uc3Q7CiAgICAgc2l6ZV90IGZpbmQoQ29kZVVuaXRNYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBz
dGFydCA9IDApIGNvbnN0OwogCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmaW5kKGNv
bnN0IExDaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgsIE9wdGlvbmFsPHVuc2lnbmVk
PiBtYXRjaFN0cmluZ0xlbmd0aCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmaW5k
KFN0cmluZ1ZpZXcsIHVuc2lnbmVkIHN0YXJ0KSBjb25zdDsKIAogICAgIHNpemVfdCByZXZlcnNl
RmluZChVQ2hhciwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01BWCkgY29uc3Q7CisgICAgc2l6ZV90
IHJldmVyc2VGaW5kKFN0cmluZ1ZpZXcgbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KSBjb25z
dDsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNl
KGNvbnN0IFN0cmluZ1ZpZXcmKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90
IGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdWaWV3JiwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQpIGNvbnN0OwogCisgICAgU3RyaW5nIHN0cmlwV2hpdGVTcGFjZShTdHJpbmdJbXBsKiBv
d25lciA9IG51bGxwdHIpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2lt
cGxpZnlXaGl0ZVNwYWNlKFN0cmluZ0ltcGwqIG93bmVyID0gbnVsbHB0cikgY29uc3Q7CisgICAg
U3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFjZShDb2RlVW5pdE1hdGNoRnVuY3Rpb24sIFN0cmluZ0lt
cGwqIG93bmVyID0gbnVsbHB0cikgY29uc3Q7CisKKyAgICBTdHJpbmcgc3RyaXBMZWFkaW5nQW5k
VHJhaWxpbmdDaGFyYWN0ZXJzKENvZGVVbml0TWF0Y2hGdW5jdGlvbiwgU3RyaW5nSW1wbCogb3du
ZXIgPSBudWxscHRyKSBjb25zdDsKKyAgICBTdHJpbmcgcmVtb3ZlQ2hhcmFjdGVycyhDb2RlVW5p
dE1hdGNoRnVuY3Rpb24sIFN0cmluZ0ltcGwqIG93bmVyID0gbnVsbHB0cikgY29uc3Q7CisKKyAg
ICBTdHJpbmcgZm9sZENhc2UoU3RyaW5nSW1wbCogb3duZXIgPSBudWxscHRyKSBjb25zdDsKKwog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSBj
b25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGNvbnZlcnRUb0FTQ0lJVXBwZXJj
YXNlKCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBjb252ZXJ0VG9Mb3dl
cmNhc2VXaXRob3V0TG9jYWxlKFN0cmluZ0ltcGwqIG93bmVyID0gbnVsbHB0cikgY29uc3Q7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9j
YWxlU3RhcnRpbmdBdEZhaWxpbmdJbmRleDhCaXQodW5zaWduZWQpIGNvbnN0OworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBTdHJpbmcgY29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZShTdHJp
bmdJbXBsKiBvd25lciA9IG51bGxwdHIpIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBT
dHJpbmcgY29udmVydFRvTG93ZXJjYXNlV2l0aExvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsZUlkZW50aWZpZXIsIFN0cmluZ0ltcGwqIG93bmVyID0gbnVsbHB0cikgY29uc3Q7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBjb252ZXJ0VG9VcHBlcmNhc2VXaXRoTG9jYWxlKGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllciwgU3RyaW5nSW1wbCogb3duZXIgPSBu
dWxscHRyKSBjb25zdDsKIAogICAgIGJvb2wgY29udGFpbnMoVUNoYXIpIGNvbnN0OwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3Ry
aW5nVmlldyYpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGNvbnRhaW5zSWdu
b3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nVmlldyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KSBj
b25zdDsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Ry
aW5nVmlldyYpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHN0YXJ0c1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7Ci0KLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBlbmRzV2l0aChjb25zdCBTdHJpbmdWaWV3JikgY29uc3Q7Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBT
dHJpbmdWaWV3JikgY29uc3Q7Ci0KLSAgICBpbnQgdG9JbnQoKSBjb25zdDsKLSAgICBpbnQgdG9J
bnQoYm9vbCYgaXNWYWxpZCkgY29uc3Q7Ci0gICAgaW50IHRvSW50U3RyaWN0KGJvb2wmIGlzVmFs
aWQpIGNvbnN0OwotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiB0b1VJbnQ2NFN0cmljdCgpIGNvbnN0
OwotICAgIGZsb2F0IHRvRmxvYXQoYm9vbCYgaXNWYWxpZCkgY29uc3Q7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgc3RhcnRzV2l0aChTdHJpbmdWaWV3KSBjb25zdDsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBzdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nVmlldykg
Y29uc3Q7CisgICAgaW5saW5lIGJvb2wgc3RhcnRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0
IHsgcmV0dXJuIHN0YXJ0c1dpdGgoU3RyaW5nVmlldygmY2hhcmFjdGVyLCAxKSk7IH0KKyAgICB0
ZW1wbGF0ZTx1bnNpZ25lZCBtYXRjaExlbmd0aD4gYm9vbCBzdGFydHNXaXRoKGNvbnN0IGNoYXIg
KCZwcmVmaXgpW21hdGNoTGVuZ3RoXSkgY29uc3QgeyByZXR1cm4gc3RhcnRzV2l0aChwcmVmaXgs
IG1hdGNoTGVuZ3RoIC0gMSk7IH0KKyAgICBib29sIGhhc0luZml4U3RhcnRpbmdBdChTdHJpbmdW
aWV3IG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3Q7CisKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBlbmRzV2l0aChTdHJpbmdWaWV3KSBjb25zdDsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBlbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcp
IGNvbnN0OworICAgIGlubGluZSBib29sIGVuZHNXaXRoKFVDaGFyIGNoYXJhY3RlcikgY29uc3Qg
eyByZXR1cm4gZW5kc1dpdGgoU3RyaW5nVmlldygmY2hhcmFjdGVyLCAxKSk7IH0KKyAgICB0ZW1w
bGF0ZTx1bnNpZ25lZCBtYXRjaExlbmd0aD4gYm9vbCBlbmRzV2l0aChjb25zdCBjaGFyICgmcHJl
Zml4KVttYXRjaExlbmd0aF0pIGNvbnN0IHsgcmV0dXJuIGVuZHNXaXRoKHByZWZpeCwgbWF0Y2hM
ZW5ndGggLSAxKTsgfQorICAgIGJvb2wgaGFzSW5maXhFbmRpbmdBdChTdHJpbmdWaWV3IG1hdGNo
U3RyaW5nLCB1bnNpZ25lZCBlbmRPZmZzZXQpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Ym9vbCBp
c1NwZWNpYWxDaGFyYWN0ZXIoVUNoYXIpPiBib29sIGlzQWxsU3BlY2lhbENoYXJhY3RlcnMoKSBj
b25zdDsKKworICAgIGludCB0b0ludFN0cmljdChib29sKiBvayA9IG51bGxwdHIsIGludCBiYXNl
ID0gMTApIGNvbnN0OworICAgIHVuc2lnbmVkIHRvVUludFN0cmljdChib29sKiBvayA9IG51bGxw
dHIsIGludCBiYXNlID0gMTApIGNvbnN0OworICAgIGludDY0X3QgdG9JbnQ2NFN0cmljdChib29s
KiBvayA9IG51bGxwdHIsIGludCBiYXNlID0gMTApIGNvbnN0OworICAgIHVpbnQ2NF90IHRvVUlu
dDY0U3RyaWN0KGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCkgY29uc3Q7CisgICAg
aW50cHRyX3QgdG9JbnRQdHJTdHJpY3QoYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEw
KSBjb25zdDsKKworICAgIC8vIFRoZXNlIGFsbCBpZ25vcmUgdHJhaWxpbmcgZ2FyYmFnZS4KKyAg
ICBpbnQgdG9JbnQoYm9vbCogb2sgPSAwKSBjb25zdDsKKyAgICB1bnNpZ25lZCB0b1VJbnQoYm9v
bCogb2sgPSAwKSBjb25zdDsKKyAgICBpbnQ2NF90IHRvSW50NjQoYm9vbCogb2sgPSAwKSBjb25z
dDsKKyAgICB1aW50NjRfdCB0b1VJbnQ2NChib29sKiBvayA9IDApIGNvbnN0OworICAgIGludHB0
cl90IHRvSW50UHRyKGJvb2wqIG9rID0gMCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogTGlrZSB0
aGUgc3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgZ2l2ZSBmYWxzZSBmb3IgIm9rIiB3aGVu
IHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2UuCisgICAgLy8gTGlrZSB0aGUgbm9uLXN0cmljdCBm
dW5jdGlvbnMgYWJvdmUsIHRoZXNlIHJldHVybiB0aGUgdmFsdWUgd2hlbiB0aGVyZSBpcyB0cmFp
bGluZyBnYXJiYWdlLgorICAgIC8vIEl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGVzZSB3ZXJlIG1v
cmUgY29uc2lzdGVudCB3aXRoIHRoZSBhYm92ZSBmdW5jdGlvbnMgaW5zdGVhZC4KKyAgICBkb3Vi
bGUgdG9Eb3VibGUoYm9vbCogb2sgPSAwKSBjb25zdDsKKyAgICBmbG9hdCB0b0Zsb2F0KGJvb2wq
IG9rID0gMCkgY29uc3Q7CiAKICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IFN0cmlu
Z0ltcGwmKTsKIApAQCAtMTY5LDYgKzIwOSwxMCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIE1hdGNoZWRDaGFyYWN0ZXJQcmVkaWNhdGU+
CiAgICAgU3RyaW5nVmlldyBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJz
KGNvbnN0IENoYXJhY3RlclR5cGUqLCBjb25zdCBNYXRjaGVkQ2hhcmFjdGVyUHJlZGljYXRlJik7
CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb2RlVW5pdFByZWRpY2F0ZT4gU3RyaW5nIHN0cmlwTWF0
Y2hlZENoYXJhY3RlcnMoQ29kZVVuaXRQcmVkaWNhdGUsIFN0cmluZ0ltcGwqIG93bmVyKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBBTFdBWVNfSU5MSU5FIFN0
cmluZyByZW1vdmVDaGFyYWN0ZXJzKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIENv
ZGVVbml0TWF0Y2hGdW5jdGlvbiwgU3RyaW5nSW1wbCogb3duZXIpIGNvbnN0OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGNsYXNzIENvZGVVbml0UHJlZGljYXRlPiBTdHJp
bmcgc2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UoQ29kZVVuaXRQcmVkaWNhdGUsIFN0
cmluZ0ltcGwqIG93bmVyKSBjb25zdDsKKwogI2lmIENIRUNLX1NUUklOR1ZJRVdfTElGRVRJTUUK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bmRlcmx5aW5nU3RyaW5nSXNWYWxpZCgpIGNv
bnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFVuZGVybHlpbmdTdHJpbmcoY29u
c3QgU3RyaW5nSW1wbCopOwpAQCAtMjExLDI4ICsyNTUsNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KFN0cmluZ1ZpZXcgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gIWVxdWFsKGEsIGIpOyB9
CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExDaGFyKmEsIFN0cmluZ1ZpZXcgYikgeyBy
ZXR1cm4gIWVxdWFsKGIsIGEpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNoYXIq
YSwgU3RyaW5nVmlldyBiKSB7IHJldHVybiAhZXF1YWwoYiwgYSk7IH0KIAotc3RydWN0IFN0cmlu
Z1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZzsKLQotLy8gVGhpcyByZXR1cm5zIGEgU3RyaW5nVmll
dyBvZiB0aGUgbm9ybWFsaXplZCByZXN1bHQsIGFuZCBhIFN0cmluZyB0aGF0IGlzIGVpdGhlcgot
Ly8gbnVsbCwgaWYgdGhlIGlucHV0IHdhcyBhbHJlYWR5IG5vcm1hbGl6ZWQsIG9yIGNvbnRhaW5z
IHRoZSBub3JtYWxpemVkIHJlc3VsdAotLy8gYW5kIG5lZWRzIHRvIGJlIGtlcHQgYXJvdW5kIHNv
IHRoZSBTdHJpbmdWaWV3IHJlbWFpbnMgdmFsaWQuIFR5cGljYWxseSB0aGUKLS8vIGVhc2llc3Qg
d2F5IHRvIHVzZSBpdCBjb3JyZWN0bHkgaXMgdG8gcHV0IGl0IGludG8gYSBsb2NhbCBhbmQgdXNl
IHRoZSBTdHJpbmdWaWV3LgotV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZ1ZpZXdXaXRoVW5kZXJs
eWluZ1N0cmluZyBub3JtYWxpemVkTkZDKFN0cmluZ1ZpZXcpOwotCi1XVEZfRVhQT1JUX1BSSVZB
VEUgU3RyaW5nIG5vcm1hbGl6ZWRORkMoY29uc3QgU3RyaW5nJik7Ci0KLX0KLQotI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV1RGIHsKLQotc3RydWN0IFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0
cmluZyB7Ci0gICAgU3RyaW5nVmlldyB2aWV3OwotICAgIFN0cmluZyB1bmRlcmx5aW5nU3RyaW5n
OwotfTsKLQogaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoKQogewogfQpAQCAtMzI3LDQ2
ICszNDksNiBAQCBpbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBjaGFyKiBjaGFy
YWN0ZXJzKQogICAgIGluaXRpYWxpemUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNo
YXJhY3RlcnMpLCBzdHJsZW4oY2hhcmFjdGVycykpOwogfQogCi1pbmxpbmUgU3RyaW5nVmlldzo6
U3RyaW5nVmlldyhjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCi17Ci0gICAgc2V0VW5kZXJseWlu
Z1N0cmluZygmc3RyaW5nKTsKLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBpbml0
aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIGVsc2UK
LSAgICAgICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSk7Ci19Ci0KLWlubGluZSBTdHJpbmdWaWV3OjpTdHJpbmdWaWV3KGNvbnN0IFN0cmluZ0ltcGwq
IHN0cmluZykKLXsKLSAgICBpZiAoIXN0cmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0
VW5kZXJseWluZ1N0cmluZyhzdHJpbmcpOwotICAgIGlmIChzdHJpbmctPmlzOEJpdCgpKQotICAg
ICAgICBpbml0aWFsaXplKHN0cmluZy0+Y2hhcmFjdGVyczgoKSwgc3RyaW5nLT5sZW5ndGgoKSk7
Ci0gICAgZWxzZQotICAgICAgICBpbml0aWFsaXplKHN0cmluZy0+Y2hhcmFjdGVyczE2KCksIHN0
cmluZy0+bGVuZ3RoKCkpOwotfQotCi1pbmxpbmUgU3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25z
dCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBzZXRVbmRlcmx5aW5nU3RyaW5nKHN0cmluZy5pbXBs
KCkpOwotICAgIGlmICghc3RyaW5nLmltcGwoKSkgewotICAgICAgICBjbGVhcigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKLSAgICAgICAgaW5p
dGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpbml0aWFsaXplKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3Ry
aW5nLmxlbmd0aCgpKTsKLX0KLQotaW5saW5lIFN0cmluZ1ZpZXc6OlN0cmluZ1ZpZXcoY29uc3Qg
QXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCi0gICAgOiBTdHJpbmdWaWV3KGF0b21pY1N0cmlu
Zy5zdHJpbmcoKSkKLXsKLX0KLQogaW5saW5lIHZvaWQgU3RyaW5nVmlldzo6Y2xlYXIoKQogewog
ICAgIG1fY2hhcmFjdGVycyA9IG51bGxwdHI7CkBAIC0zOTMsNiArMzc1LDE2IEBAIGlubGluZSBj
b25zdCBVQ2hhciogU3RyaW5nVmlldzo6Y2hhcmFjdGVyczE2KCkgY29uc3QKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihtX2NoYXJhY3RlcnMpOwogfQogCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgY29uc3QgTENoYXIqIFN0cmluZ1ZpZXc6OmNoYXJhY3RlcnM8TENoYXI+
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyczgoKTsKK30KKwordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIGNvbnN0IFVDaGFyKiBTdHJpbmdWaWV3OjpjaGFyYWN0ZXJzPFVDaGFyPigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNoYXJhY3RlcnMxNigpOworfQorCiBjbGFzcyBTdHJpbmdW
aWV3OjpVcGNvbnZlcnRlZENoYXJhY3RlcnMgewogcHVibGljOgogICAgIGV4cGxpY2l0IFVwY29u
dmVydGVkQ2hhcmFjdGVycyhjb25zdCBTdHJpbmdWaWV3Jik7CkBAIC00NzEsMTYgKzQ2MywxNiBA
QCBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3Ojpjb250YWlucyhVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0
CiBpbmxpbmUgdm9pZCBTdHJpbmdWaWV3OjpnZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChMQ2hh
ciogZGVzdGluYXRpb24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzOEJpdCgpKTsKLSAgICBTdHJp
bmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgY2hhcmFjdGVyczgoKSwgbV9sZW5n
dGgpOworICAgIGNvcHlDaGFyYWN0ZXJzKGRlc3RpbmF0aW9uLCBjaGFyYWN0ZXJzOCgpLCBtX2xl
bmd0aCk7CiB9CiAKIGlubGluZSB2b2lkIFN0cmluZ1ZpZXc6OmdldENoYXJhY3RlcnNXaXRoVXBj
b252ZXJ0KFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0KCkpIHsK
LSAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNoYXJhY3Rl
cnM4KCksIG1fbGVuZ3RoKTsKKyAgICAgICAgY29weUNoYXJhY3RlcnMoZGVzdGluYXRpb24sIGNo
YXJhY3RlcnM4KCksIG1fbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBTdHJp
bmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgY2hhcmFjdGVyczE2KCksIG1fbGVu
Z3RoKTsKKyAgICBjb3B5Q2hhcmFjdGVycyhkZXN0aW5hdGlvbiwgY2hhcmFjdGVyczE2KCksIG1f
bGVuZ3RoKTsKIH0KIAogaW5saW5lIFN0cmluZ1ZpZXc6OlVwY29udmVydGVkQ2hhcmFjdGVyczo6
VXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKQEAgLTQ5Nyw2
NiArNDg5LDg4IEBAIGlubGluZSBTdHJpbmdWaWV3OjpVcGNvbnZlcnRlZENoYXJhY3RlcnM6OlVw
Y29udmVydGVkQ2hhcmFjdGVycyhjb25zdCBTdHJpbmdWaWV3CiAgICAgbV9jaGFyYWN0ZXJzID0g
bV91cGNvbnZlcnRlZENoYXJhY3RlcnMuZGF0YSgpOwogfQogCi1pbmxpbmUgU3RyaW5nIFN0cmlu
Z1ZpZXc6OnRvU3RyaW5nKCkgY29uc3QKK2lubGluZSBmbG9hdCBTdHJpbmdWaWV3Ojp0b0Zsb2F0
KGJvb2wqIGlzVmFsaWQpIGNvbnN0Cit7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1
cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIGlzVmFsaWQpOwor
ICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIGlz
VmFsaWQpOworfQorCitpbmxpbmUgZG91YmxlIFN0cmluZ1ZpZXc6OnRvRG91YmxlKGJvb2wqIGlz
VmFsaWQpIGNvbnN0Cit7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY2hhcmFj
dGVyc1RvRG91YmxlKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBpc1ZhbGlkKTsKKyAgICByZXR1
cm4gY2hhcmFjdGVyc1RvRG91YmxlKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgaXNWYWxpZCk7
Cit9CisKK2lubGluZSBpbnQgU3RyaW5nVmlldzo6dG9JbnQoYm9vbCogaXNWYWxpZCkgY29uc3QK
IHsKICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczgo
KSwgbV9sZW5ndGgpOwotICAgIHJldHVybiBTdHJpbmcoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0
aCwgaXNWYWxpZCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChjaGFyYWN0ZXJzMTYoKSwg
bV9sZW5ndGgsIGlzVmFsaWQpOwogfQogCi1pbmxpbmUgQXRvbWljU3RyaW5nIFN0cmluZ1ZpZXc6
OnRvQXRvbWljU3RyaW5nKCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBTdHJpbmdWaWV3Ojp0b1VJ
bnQoYm9vbCogaXNWYWxpZCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0KCkpCi0gICAgICAgIHJl
dHVybiBBdG9taWNTdHJpbmcoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgpOwotICAgIHJldHVybiBB
dG9taWNTdHJpbmcoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGNo
YXJhY3RlcnNUb1VJbnQoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIGlzVmFsaWQpOworICAgIHJl
dHVybiBjaGFyYWN0ZXJzVG9VSW50KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgaXNWYWxpZCk7
CiB9CiAKLWlubGluZSBSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gU3RyaW5nVmlldzo6dG9FeGlz
dGluZ0F0b21pY1N0cmluZygpIGNvbnN0CitpbmxpbmUgaW50NjRfdCBTdHJpbmdWaWV3Ojp0b0lu
dDY0KGJvb2wqIGlzVmFsaWQpIGNvbnN0CiB7CiAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gQXRvbWljU3RyaW5nSW1wbDo6bG9va1VwKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoKTsK
LSAgICByZXR1cm4gQXRvbWljU3RyaW5nSW1wbDo6bG9va1VwKGNoYXJhY3RlcnMxNigpLCBtX2xl
bmd0aCk7CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2NChjaGFyYWN0ZXJzOCgpLCBt
X2xlbmd0aCwgaXNWYWxpZCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludDY0KGNoYXJhY3Rl
cnMxNigpLCBtX2xlbmd0aCwgaXNWYWxpZCk7CiB9CiAKLWlubGluZSBmbG9hdCBTdHJpbmdWaWV3
Ojp0b0Zsb2F0KGJvb2wmIGlzVmFsaWQpIGNvbnN0CitpbmxpbmUgdWludDY0X3QgU3RyaW5nVmll
dzo6dG9VSW50NjQoYm9vbCogaXNWYWxpZCkgY29uc3QKIHsKICAgICBpZiAoaXM4Qml0KCkpCi0g
ICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwg
JmlzVmFsaWQpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzMTYoKSwg
bV9sZW5ndGgsICZpc1ZhbGlkKTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NChj
aGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgaXNWYWxpZCk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNU
b1VJbnQ2NChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIGlzVmFsaWQpOwogfQogCi1pbmxpbmUg
aW50IFN0cmluZ1ZpZXc6OnRvSW50KCkgY29uc3QKK2lubGluZSBpbnRwdHJfdCBTdHJpbmdWaWV3
Ojp0b0ludFB0cihib29sKiBpc1ZhbGlkKSBjb25zdAogewotICAgIGJvb2wgaXNWYWxpZDsKLSAg
ICByZXR1cm4gdG9JbnQoaXNWYWxpZCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1
cm4gY2hhcmFjdGVyc1RvSW50UHRyKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBpc1ZhbGlkKTsK
KyAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50UHRyKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwg
aXNWYWxpZCk7CiB9CiAKLWlubGluZSBpbnQgU3RyaW5nVmlldzo6dG9JbnQoYm9vbCYgaXNWYWxp
ZCkgY29uc3QKK2lubGluZSBpbnQgU3RyaW5nVmlldzo6dG9JbnRTdHJpY3QoYm9vbCogaXNWYWxp
ZCwgaW50IGJhc2UpIGNvbnN0CiB7CiAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4g
Y2hhcmFjdGVyc1RvSW50KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCAmaXNWYWxpZCk7Ci0gICAg
cmV0dXJuIGNoYXJhY3RlcnNUb0ludChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsICZpc1ZhbGlk
KTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFN0cmljdChjaGFyYWN0ZXJzOCgpLCBt
X2xlbmd0aCwgaXNWYWxpZCwgYmFzZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFN0cmlj
dChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIGlzVmFsaWQsIGJhc2UpOwogfQogCi1pbmxpbmUg
aW50IFN0cmluZ1ZpZXc6OnRvSW50U3RyaWN0KGJvb2wmIGlzVmFsaWQpIGNvbnN0CitpbmxpbmUg
dW5zaWduZWQgU3RyaW5nVmlldzo6dG9VSW50U3RyaWN0KGJvb2wqIGlzVmFsaWQsIGludCBiYXNl
KSBjb25zdAogewogICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNU
b0ludFN0cmljdChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgJmlzVmFsaWQpOwotICAgIHJldHVy
biBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCAmaXNWYWxp
ZCk7CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGNoYXJhY3RlcnM4KCks
IG1fbGVuZ3RoLCBpc1ZhbGlkLCBiYXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludFN0
cmljdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIGlzVmFsaWQsIGJhc2UpOwogfQogCi1pbmxp
bmUgT3B0aW9uYWw8dWludDY0X3Q+IFN0cmluZ1ZpZXc6OnRvVUludDY0U3RyaWN0KCkgY29uc3QK
K2lubGluZSBpbnQ2NF90IFN0cmluZ1ZpZXc6OnRvSW50NjRTdHJpY3QoYm9vbCogaXNWYWxpZCwg
aW50IGJhc2UpIGNvbnN0CiB7Ci0gICAgYm9vbCBpc1ZhbGlkOwotICAgIHVpbnQ2NF90IHJlc3Vs
dCA9IGlzOEJpdCgpID8gY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KGNoYXJhY3RlcnM4KCksIG1f
bGVuZ3RoLCAmaXNWYWxpZCkgOiBjaGFyYWN0ZXJzVG9VSW50NjRTdHJpY3QoY2hhcmFjdGVyczE2
KCksIG1fbGVuZ3RoLCAmaXNWYWxpZCk7Ci0gICAgcmV0dXJuIGlzVmFsaWQgPyBtYWtlT3B0aW9u
YWwocmVzdWx0KSA6IFdURjo6bnVsbG9wdDsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJl
dHVybiBjaGFyYWN0ZXJzVG9JbnQ2NFN0cmljdChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgaXNW
YWxpZCwgYmFzZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KGNoYXJhY3Rl
cnMxNigpLCBtX2xlbmd0aCwgaXNWYWxpZCwgYmFzZSk7CiB9CiAKLWlubGluZSBTdHJpbmcgU3Ry
aW5nVmlldzo6dG9TdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0CitpbmxpbmUgdWludDY0X3Qg
U3RyaW5nVmlldzo6dG9VSW50NjRTdHJpY3QoYm9vbCogaXNWYWxpZCwgaW50IGJhc2UpIGNvbnN0
CiB7CiAgICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRl
V2l0aG91dENvcHlpbmcoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgpOwotICAgIHJldHVybiBTdHJp
bmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgpOwor
ICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KGNoYXJhY3RlcnM4KCksIG1f
bGVuZ3RoLCBpc1ZhbGlkLCBiYXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3Ry
aWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgaXNWYWxpZCwgYmFzZSk7Cit9CisKK2lubGlu
ZSBpbnRwdHJfdCBTdHJpbmdWaWV3Ojp0b0ludFB0clN0cmljdChib29sKiBpc1ZhbGlkLCBpbnQg
YmFzZSkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBjaGFyYWN0
ZXJzVG9JbnRQdHJTdHJpY3QoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIGlzVmFsaWQsIGJhc2Up
OworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3QoY2hhcmFjdGVyczE2KCksIG1f
bGVuZ3RoLCBpc1ZhbGlkLCBiYXNlKTsKIH0KIAogaW5saW5lIHNpemVfdCBTdHJpbmdWaWV3Ojpm
aW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQpIGNvbnN0CkBAIC05OTgsOSArMTAx
MiwzNiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcgcwogICAgIHJldHVybiBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZUNvbW1vbihzdHJpbmcsIGxvd2VyY2FzZUxldHRlcnMpOwogfQogCit0
ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGlubGluZSBib29sIFN0cmlu
Z1ZpZXc6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnMoKSBjb25zdAoreworICAgIGlmIChpczhCaXQo
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc1NwZWNpYWxD
aGFyYWN0ZXI+KGNoYXJhY3RlcnM4KCksIGxlbmd0aCgpKTsKKyAgICByZXR1cm4gV1RGOjppc0Fs
bFNwZWNpYWxDaGFyYWN0ZXJzPGlzU3BlY2lhbENoYXJhY3Rlcj4oY2hhcmFjdGVyczE2KCksIGxl
bmd0aCgpKTsKK30KKworaW5saW5lIGludCBjb2RlUG9pbnRDb21wYXJlKFN0cmluZ1ZpZXcgc3Ry
aW5nMSwgU3RyaW5nVmlldyBzdHJpbmcyKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgbnVsbCBz
dHJpbmdzIGNvbXBhcmUgYXMgbGVzcyB0aGFuIGVtcHR5IHN0cmluZ3MgcmF0aGVyIHRoYW4gZXF1
YWwgdG8gdGhlbT8KKyAgICBpZiAoIXN0cmluZzEpCisgICAgICAgIHJldHVybiAoc3RyaW5nMiAm
JiBzdHJpbmcyLmxlbmd0aCgpKSA/IC0xIDogMDsKKyAgICBpZiAoIXN0cmluZzIpCisgICAgICAg
IHJldHVybiBzdHJpbmcxLmxlbmd0aCgpID8gMSA6IDA7CisKKyAgICBib29sIHN0cmluZzFJczhC
aXQgPSBzdHJpbmcxLmlzOEJpdCgpOworICAgIGJvb2wgc3RyaW5nMklzOEJpdCA9IHN0cmluZzIu
aXM4Qml0KCk7CisgICAgaWYgKHN0cmluZzFJczhCaXQpIHsKKyAgICAgICAgaWYgKHN0cmluZzJJ
czhCaXQpCisgICAgICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShzdHJpbmcxLmNoYXJh
Y3RlcnM4KCksIHN0cmluZzEubGVuZ3RoKCksIHN0cmluZzIuY2hhcmFjdGVyczgoKSwgc3RyaW5n
Mi5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKHN0cmluZzEuY2hh
cmFjdGVyczgoKSwgc3RyaW5nMS5sZW5ndGgoKSwgc3RyaW5nMi5jaGFyYWN0ZXJzMTYoKSwgc3Ry
aW5nMi5sZW5ndGgoKSk7CisgICAgfQorICAgIGlmIChzdHJpbmcySXM4Qml0KQorICAgICAgICBy
ZXR1cm4gY29kZVBvaW50Q29tcGFyZShzdHJpbmcxLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcxLmxl
bmd0aCgpLCBzdHJpbmcyLmNoYXJhY3RlcnM4KCksIHN0cmluZzIubGVuZ3RoKCkpOworICAgIHJl
dHVybiBjb2RlUG9pbnRDb21wYXJlKHN0cmluZzEuY2hhcmFjdGVyczE2KCksIHN0cmluZzEubGVu
Z3RoKCksIHN0cmluZzIuY2hhcmFjdGVyczE2KCksIHN0cmluZzIubGVuZ3RoKCkpOworfQorCisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OmFwcGVuZDsKIHVzaW5nIFdURjo6ZXF1
YWw7CiB1c2luZyBXVEY6OlN0cmluZ1ZpZXc7Ci11c2luZyBXVEY6OlN0cmluZ1ZpZXdXaXRoVW5k
ZXJseWluZ1N0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAppbmRl
eCA5MDIyMzJmYjFjMzMzZjE4M2IzZjE1OWQ1YWFlMmRmM2JiMzYwN2ExLi42NDY5ZDRhZTA4ZDA2
MWIwZTlkNzAxZDI0ZmJiMjFiNTljOTA3OGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJl
YWtJdGVyYXRvci5oCkBAIC0yMyw3ICsyMyw3IEBACiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9pY3UvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuaD4KIAogI2lmIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRl
eCBkY2Q0MmNmYjhmMTBkNWE4NTc0ZDE1MmUwZjIzOTJkZTMzZDg3ODBlLi5mY2Q3MDZlNzU1Y2Vi
NWJjMTFkMGQzYmYxM2M2Mjk2M2YzODQyZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3Bw
CkBAIC00NCwyNTMgKzQ0LDcxIEBAIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwogU3RyaW5nOjpT
dHJpbmcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBp
ZiAoY2hhcmFjdGVycykKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJh
Y3RlcnMsIGxlbmd0aCk7CisgICAgICAgIHUubV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGNo
YXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3aXRoIFVURi0x
NiBkYXRhLCBmcm9tIGEgbnVsbC10ZXJtaW5hdGVkIHNvdXJjZS4KIFN0cmluZzo6U3RyaW5nKGNv
bnN0IFVDaGFyKiBudWxsVGVybWluYXRlZFN0cmluZykKIHsKICAgICBpZiAobnVsbFRlcm1pbmF0
ZWRTdHJpbmcpCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShudWxsVGVybWlu
YXRlZFN0cmluZywgbGVuZ3RoT2ZOdWxsVGVybWluYXRlZFN0cmluZyhudWxsVGVybWluYXRlZFN0
cmluZykpOworICAgICAgICB1Lm1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShudWxsVGVybWlu
YXRlZFN0cmluZywgbGVuZ3RoT2ZOdWxsVGVybWluYXRlZFN0cmluZyhudWxsVGVybWluYXRlZFN0
cmluZykpOwogfQogCiAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YS4KIFN0
cmluZzo6U3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7
CiAgICAgaWYgKGNoYXJhY3RlcnMpCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0
ZShjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICB1Lm1faW1wbCA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZShjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCiBTdHJpbmc6OlN0cmluZyhjb25zdCBjaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKGNoYXJhY3RlcnMpCi0g
ICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCk7CisgICAgICAgIHUubV9pbXBsID0gU3RyaW5n
SW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSwg
bGVuZ3RoKTsKIH0KIAogLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggTGF0aW4tMSBkYXRhLCBm
cm9tIGEgbnVsbC10ZXJtaW5hdGVkIHNvdXJjZS4KIFN0cmluZzo6U3RyaW5nKGNvbnN0IExDaGFy
KiBudWxsVGVybWluYXRlZFN0cmluZykKIHsKICAgICBpZiAobnVsbFRlcm1pbmF0ZWRTdHJpbmcp
Ci0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShudWxsVGVybWluYXRlZFN0cmlu
Zyk7CisgICAgICAgIHUubV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKG51bGxUZXJtaW5hdGVk
U3RyaW5nKTsKIH0KIAogU3RyaW5nOjpTdHJpbmcoY29uc3QgY2hhciogbnVsbFRlcm1pbmF0ZWRT
dHJpbmcpCiB7CiAgICAgaWYgKG51bGxUZXJtaW5hdGVkU3RyaW5nKQotICAgICAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KG51bGxU
ZXJtaW5hdGVkU3RyaW5nKSk7CisgICAgICAgIHUubV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihudWxsVGVybWluYXRlZFN0cmluZykpOwog
fQogCiBTdHJpbmc6OlN0cmluZyhBU0NJSUxpdGVyYWwgY2hhcmFjdGVycykKLSAgICA6IG1faW1w
bChTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChjaGFyYWN0ZXJzKSkKIHsKKyAgICB1Lm1f
aW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKGNoYXJhY3RlcnMpOwogfQogCi12
b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyYgb3RoZXJTdHJpbmcpCi17Ci0gICAgLy8g
RklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LiBTbyBtdWNoIHNvIHRoYXQgd2Ug
bWlnaHQgd2FudCB0byB0YWtlIHRoaXMgb3V0IG9mIFN0cmluZydzIEFQSS4KLQotICAgIGlmICgh
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbCA9IG90aGVyU3RyaW5nLm1faW1wbDsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChvdGhlclN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gbGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgoKTsKLSAgICBhdXRv
IG90aGVyTGVuZ3RoID0gb3RoZXJTdHJpbmcubV9pbXBsLT5sZW5ndGgoKTsKLSAgICBpZiAob3Ro
ZXJMZW5ndGggPiBNYXhMZW5ndGggLSBsZW5ndGgpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBp
ZiAobV9pbXBsLT5pczhCaXQoKSAmJiBvdGhlclN0cmluZy5tX2ltcGwtPmlzOEJpdCgpKSB7Ci0g
ICAgICAgIExDaGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCArIG90aGVyTGVuZ3RoLCBkYXRhKTsKLSAgICAgICAg
U3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0YSwgbV9pbXBsLT5jaGFyYWN0ZXJzOCgpLCBs
ZW5ndGgpOwotICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhICsgbGVuZ3Ro
LCBvdGhlclN0cmluZy5tX2ltcGwtPmNoYXJhY3RlcnM4KCksIG90aGVyTGVuZ3RoKTsKLSAgICAg
ICAgbV9pbXBsID0gV1RGTW92ZShuZXdJbXBsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBVQ2hhciogZGF0YTsKLSAgICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCArIG90aGVyTGVuZ3RoLCBkYXRhKTsKLSAgICBTdHJpbmdWaWV3KCpt
X2ltcGwpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEpOwotICAgIFN0cmluZ1ZpZXco
Km90aGVyU3RyaW5nLm1faW1wbCkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0YSArIGxl
bmd0aCk7Ci0gICAgbV9pbXBsID0gV1RGTW92ZShuZXdJbXBsKTsKLX0KLQotdm9pZCBTdHJpbmc6
OmFwcGVuZChMQ2hhciBjaGFyYWN0ZXIpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgZXh0cmVt
ZWx5IGluZWZmaWNpZW50LiBTbyBtdWNoIHNvIHRoYXQgd2UgbWlnaHQgd2FudCB0byB0YWtlIHRo
aXMgb3V0IG9mIFN0cmluZydzIEFQSS4KLQotICAgIGlmICghbV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZSgmY2hhcmFjdGVyLCAxKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoIWlzOEJpdCgpKSB7Ci0gICAgICAgIGFwcGVuZChzdGF0aWNfY2Fz
dDxVQ2hhcj4oY2hhcmFjdGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1f
aW1wbC0+bGVuZ3RoKCkgPj0gTWF4TGVuZ3RoKQotICAgICAgICBDUkFTSCgpOwotICAgIExDaGFy
KiBkYXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQobV9pbXBsLT5sZW5ndGgoKSArIDEsIGRhdGEpOwotICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFy
YWN0ZXJzKGRhdGEsIG1faW1wbC0+Y2hhcmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSk7Ci0g
ICAgZGF0YVttX2ltcGwtPmxlbmd0aCgpXSA9IGNoYXJhY3RlcjsKLSAgICBtX2ltcGwgPSBXVEZN
b3ZlKG5ld0ltcGwpOwotfQotCi12b2lkIFN0cmluZzo6YXBwZW5kKFVDaGFyIGNoYXJhY3RlcikK
LXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQuIFNvIG11Y2gg
c28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgdGhpcyBvdXQgb2YgU3RyaW5nJ3MgQVBJLgot
Ci0gICAgaWYgKCFtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRl
KCZjaGFyYWN0ZXIsIDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpc0xhdGlu
MShjaGFyYWN0ZXIpICYmIGlzOEJpdCgpKSB7Ci0gICAgICAgIGFwcGVuZChzdGF0aWNfY2FzdDxM
Q2hhcj4oY2hhcmFjdGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1faW1w
bC0+bGVuZ3RoKCkgPj0gTWF4TGVuZ3RoKQotICAgICAgICBDUkFTSCgpOwotICAgIFVDaGFyKiBk
YXRhOwotICAgIGF1dG8gbmV3SW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bV9pbXBsLT5sZW5ndGgoKSArIDEsIGRhdGEpOwotICAgIFN0cmluZ1ZpZXcoKm1faW1wbCkuZ2V0
Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0YSk7Ci0gICAgZGF0YVttX2ltcGwtPmxlbmd0aCgp
XSA9IGNoYXJhY3RlcjsKLSAgICBtX2ltcGwgPSBXVEZNb3ZlKG5ld0ltcGwpOwotfQotCi1pbnQg
Y29kZVBvaW50Q29tcGFyZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikKLXsKLSAg
ICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShhLmltcGwoKSwgYi5pbXBsKCkpOwotfQotCi12b2lk
IFN0cmluZzo6aW5zZXJ0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBwb3NpdGlvbikK
LXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQuIFNvIG11Y2gg
c28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgdGhpcyBvdXQgb2YgU3RyaW5nJ3MgQVBJLgot
Ci0gICAgdW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQgPSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBp
ZiAoIWxlbmd0aFRvSW5zZXJ0KSB7Ci0gICAgICAgIGlmIChzdHJpbmcuaXNOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgICAgIG1faW1w
bCA9IHN0cmluZy5pbXBsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocG9z
aXRpb24gPj0gbGVuZ3RoKCkpIHsKLSAgICAgICAgYXBwZW5kKHN0cmluZyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAobGVuZ3RoVG9JbnNlcnQgPiBNYXhMZW5ndGggLSBsZW5n
dGgoKSkKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIGlmIChpczhCaXQoKSAmJiBzdHJpbmcuaXM4
Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGRhdGE7Ci0gICAgICAgIGF1dG8gbmV3U3RyaW5nID0g
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSArIGxlbmd0aFRvSW5zZXJ0
LCBkYXRhKTsKLSAgICAgICAgU3RyaW5nVmlldygqbV9pbXBsKS5zdWJzdHJpbmcoMCwgcG9zaXRp
b24pLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRhdGEpOwotICAgICAgICBTdHJpbmdWaWV3
KHN0cmluZykuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGF0YSArIHBvc2l0aW9uKTsKLSAg
ICAgICAgU3RyaW5nVmlldygqbV9pbXBsKS5zdWJzdHJpbmcocG9zaXRpb24pLmdldENoYXJhY3Rl
cnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0KTsKLSAgICAg
ICAgbV9pbXBsID0gV1RGTW92ZShuZXdTdHJpbmcpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVD
aGFyKiBkYXRhOwotICAgICAgICBhdXRvIG5ld1N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQobGVuZ3RoKCkgKyBsZW5ndGhUb0luc2VydCwgZGF0YSk7Ci0gICAgICAgIFN0
cmluZ1ZpZXcoKm1faW1wbCkuc3Vic3RyaW5nKDAsIHBvc2l0aW9uKS5nZXRDaGFyYWN0ZXJzV2l0
aFVwY29udmVydChkYXRhKTsKLSAgICAgICAgU3RyaW5nVmlldyhzdHJpbmcpLmdldENoYXJhY3Rl
cnNXaXRoVXBjb252ZXJ0KGRhdGEgKyBwb3NpdGlvbik7Ci0gICAgICAgIFN0cmluZ1ZpZXcoKm1f
aW1wbCkuc3Vic3RyaW5nKHBvc2l0aW9uKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkYXRh
ICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCk7Ci0gICAgICAgIG1faW1wbCA9IFdURk1vdmUo
bmV3U3RyaW5nKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RyaW5nOjphcHBlbmQoY29uc3QgTENoYXIq
IGNoYXJhY3RlcnNUb0FwcGVuZCwgdW5zaWduZWQgbGVuZ3RoVG9BcHBlbmQpCi17Ci0gICAgLy8g
RklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LiBTbyBtdWNoIHNvIHRoYXQgd2Ug
bWlnaHQgd2FudCB0byB0YWtlIHRoaXMgb3V0IG9mIFN0cmluZydzIEFQSS4KLQotICAgIGlmICgh
bV9pbXBsKSB7Ci0gICAgICAgIGlmICghY2hhcmFjdGVyc1RvQXBwZW5kKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVyc1Rv
QXBwZW5kLCBsZW5ndGhUb0FwcGVuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWxlbmd0aFRvQXBwZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoY2hhcmFj
dGVyc1RvQXBwZW5kKTsKLQotICAgIHVuc2lnbmVkIHN0ckxlbmd0aCA9IG1faW1wbC0+bGVuZ3Ro
KCk7Ci0KLSAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkgewotICAgICAgICBpZiAobGVuZ3RoVG9B
cHBlbmQgPiBNYXhMZW5ndGggLSBzdHJMZW5ndGgpCi0gICAgICAgICAgICBDUkFTSCgpOwotICAg
ICAgICBMQ2hhciogZGF0YTsKLSAgICAgICAgYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6Y3Jl
YXRlVW5pbml0aWFsaXplZChzdHJMZW5ndGggKyBsZW5ndGhUb0FwcGVuZCwgZGF0YSk7Ci0gICAg
ICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEsIG1faW1wbC0+Y2hhcmFjdGVyczgo
KSwgc3RyTGVuZ3RoKTsKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoZGF0YSAr
IHN0ckxlbmd0aCwgY2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVuZCk7Ci0gICAgICAg
IG1faW1wbCA9IFdURk1vdmUobmV3SW1wbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAobGVuZ3RoVG9BcHBlbmQgPiBNYXhMZW5ndGggLSBzdHJMZW5ndGgpCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgVUNoYXIqIGRhdGE7Ci0gICAgYXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6
Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSArIGxlbmd0aFRvQXBwZW5kLCBkYXRhKTsKLSAg
ICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhkYXRhLCBtX2ltcGwtPmNoYXJhY3RlcnMxNigp
LCBzdHJMZW5ndGgpOwotICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEgKyBzdHJM
ZW5ndGgsIGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgIG1faW1wbCA9
IFdURk1vdmUobmV3SW1wbCk7Ci19Ci0KLXZvaWQgU3RyaW5nOjphcHBlbmQoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnNUb0FwcGVuZCwgdW5zaWduZWQgbGVuZ3RoVG9BcHBlbmQpCi17Ci0gICAgLy8g
RklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LiBTbyBtdWNoIHNvIHRoYXQgd2Ug
bWlnaHQgd2FudCB0byB0YWtlIHRoaXMgb3V0IG9mIFN0cmluZydzIEFQSS4KLQotICAgIGlmICgh
bV9pbXBsKSB7Ci0gICAgICAgIGlmICghY2hhcmFjdGVyc1RvQXBwZW5kKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVyc1Rv
QXBwZW5kLCBsZW5ndGhUb0FwcGVuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWxlbmd0aFRvQXBwZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBzdHJM
ZW5ndGggPSBtX2ltcGwtPmxlbmd0aCgpOwotICAgIAotICAgIEFTU0VSVChjaGFyYWN0ZXJzVG9B
cHBlbmQpOwotICAgIGlmIChsZW5ndGhUb0FwcGVuZCA+IE1heExlbmd0aCAtIHN0ckxlbmd0aCkK
LSAgICAgICAgQ1JBU0goKTsKLSAgICBVQ2hhciogZGF0YTsKLSAgICBhdXRvIG5ld0ltcGwgPSBT
dHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHN0ckxlbmd0aCArIGxlbmd0aFRvQXBwZW5k
LCBkYXRhKTsKLSAgICBpZiAobV9pbXBsLT5pczhCaXQoKSkKLSAgICAgICAgU3RyaW5nSW1wbDo6
Y29weUNoYXJhY3RlcnMoZGF0YSwgY2hhcmFjdGVyczgoKSwgc3RyTGVuZ3RoKTsKLSAgICBlbHNl
Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEsIGNoYXJhY3RlcnMxNigp
LCBzdHJMZW5ndGgpOwotICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRhdGEgKyBzdHJM
ZW5ndGgsIGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwotICAgIG1faW1wbCA9
IFdURk1vdmUobmV3SW1wbCk7Ci19Ci0KLQogVUNoYXIzMiBTdHJpbmc6OmNoYXJhY3RlclN0YXJ0
aW5nQXQodW5zaWduZWQgaSkgY29uc3QKIHsKLSAgICBpZiAoIW1faW1wbCB8fCBpID49IG1faW1w
bC0+bGVuZ3RoKCkpCisgICAgaWYgKGkgPj0gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlclN0YXJ0aW5nQXQoaSk7CisgICAgaWYgKGlzU21h
bGxTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnM4KClbaV07CisgICAgcmV0dXJu
IGltcGwoKS0+Y2hhcmFjdGVyU3RhcnRpbmdBdChpKTsKIH0KIAogdm9pZCBTdHJpbmc6OnRydW5j
YXRlKHVuc2lnbmVkIHBvc2l0aW9uKQogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1w
bCA9IG1faW1wbC0+c3Vic3RyaW5nKDAsIHBvc2l0aW9uKTsKKyAgICBpZiAoaGFzSW1wbCgpKQor
ICAgICAgICBpbXBsKCktPnN1YnN0cmluZygwLCBwb3NpdGlvbik7CisgICAgZWxzZQorICAgICAg
ICB1Lm1fZGF0YSA9IHRvUGFja2VkU3RyaW5nKGNoYXJhY3RlcnM4KCksIHBvc2l0aW9uKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5lIHZvaWQgU3RyaW5nOjpy
ZW1vdmVJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBw
b3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoVG9SZW1vdmUpCiB7CiAgICAgQ2hhcmFjdGVyVHlwZSog
ZGF0YTsKICAgICBhdXRvIG5ld0ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVk
KGxlbmd0aCgpIC0gbGVuZ3RoVG9SZW1vdmUsIGRhdGEpOwotICAgIFN0cmluZ0ltcGw6OmNvcHlD
aGFyYWN0ZXJzKGRhdGEsIGNoYXJhY3RlcnMsIHBvc2l0aW9uKTsKLSAgICBTdHJpbmdJbXBsOjpj
b3B5Q2hhcmFjdGVycyhkYXRhICsgcG9zaXRpb24sIGNoYXJhY3RlcnMgKyBwb3NpdGlvbiArIGxl
bmd0aFRvUmVtb3ZlLCBsZW5ndGgoKSAtIGxlbmd0aFRvUmVtb3ZlIC0gcG9zaXRpb24pOwotICAg
IG1faW1wbCA9IFdURk1vdmUobmV3SW1wbCk7CisgICAgY29weUNoYXJhY3RlcnMoZGF0YSwgY2hh
cmFjdGVycywgcG9zaXRpb24pOworICAgIGNvcHlDaGFyYWN0ZXJzKGRhdGEgKyBwb3NpdGlvbiwg
Y2hhcmFjdGVycyArIHBvc2l0aW9uICsgbGVuZ3RoVG9SZW1vdmUsIGxlbmd0aCgpIC0gbGVuZ3Ro
VG9SZW1vdmUgLSBwb3NpdGlvbik7CisgICAgdS5tX2ltcGwgPSBXVEZNb3ZlKG5ld0ltcGwpOwog
fQogCiB2b2lkIFN0cmluZzo6cmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5n
dGhUb1JlbW92ZSkKQEAgLTMxMCw3ICsxMjgsMTcgQEAgdm9pZCBTdHJpbmc6OnJlbW92ZSh1bnNp
Z25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoVG9SZW1vdmUpCiBTdHJpbmcgU3RyaW5nOjpz
dWJzdHJpbmcodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAg
ICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgbWFueSBvdGhlcnMgbGlr
ZSBpdCwgYmUgaW5saW5lZD8KLSAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5zdWJzdHJpbmco
cG9zaXRpb24sIGxlbmd0aCkgOiBTdHJpbmcgeyB9OworICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0
aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IHN0ZDo6bWluKHBvc2l0
aW9uLCBzdHJpbmdMZW5ndGgpOworICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHN0ZDo6bWluKGxl
bmd0aCwgc3RyaW5nTGVuZ3RoIC0gb2Zmc2V0KTsKKworICAgIGlmICghb2Zmc2V0ICYmIGxlbmd0
aCA9PSBzdHJpbmdMZW5ndGgpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGlmIChoYXNJ
bXBsKCkpCisgICAgICAgIHJldHVybiBpbXBsKCktPnN1YnN0cmluZyhvZmZzZXQsIG5ld0xlbmd0
aCk7CisKKyAgICByZXR1cm4gU3RyaW5nKEtub3duU21hbGxTdHJpbmcsIChjb250ZW50cygpIDw8
IG9mZnNldCAqIENIQVJfQklUKSAmIChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4
KCkgPDwgbmV3TGVuZ3RoICogQ0hBUl9CSVQpKTsKIH0KIAogU3RyaW5nIFN0cmluZzo6c3Vic3Ry
aW5nU2hhcmluZ0ltcGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CkBA
IC0zMjMsNDkgKzE1MSw1MyBAQCBTdHJpbmcgU3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCh1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIAogICAgIGlmICghb2Zmc2V0
ICYmIGxlbmd0aCA9PSBzdHJpbmdMZW5ndGgpCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICBy
ZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwoKm1faW1wbCwgb2Zm
c2V0LCBsZW5ndGgpOworCisgICAgaWYgKGhhc0ltcGwoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
Z0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCppbXBsKCksIG9mZnNldCwgbGVuZ3Ro
KTsKKworICAgIHJldHVybiBTdHJpbmcoS25vd25TbWFsbFN0cmluZywgKGNvbnRlbnRzKCkgPDwg
b2Zmc2V0ICogQ0hBUl9CSVQpICYgKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgo
KSA8PCBsZW5ndGggKiBDSEFSX0JJVCkpOwogfQogCiBTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9B
U0NJSUxvd2VyY2FzZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGZ1bmN0
aW9uLCBhbmQgdGhlIG1hbnkgb3RoZXJzIGxpa2UgaXQsIGJlIGlubGluZWQ/Ci0gICAgcmV0dXJu
IG1faW1wbCA/IG1faW1wbC0+Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSA6IFN0cmluZyB7IH07
CisgICAgcmV0dXJuIHZpZXcoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogfQogCiBTdHJp
bmcgU3RyaW5nOjpjb252ZXJ0VG9BU0NJSVVwcGVyY2FzZSgpIGNvbnN0CiB7CiAgICAgLy8gRklY
TUU6IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1hbnkgb3RoZXJzIGxpa2UgaXQsIGJl
IGlubGluZWQ/Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Y29udmVydFRvQVNDSUlVcHBl
cmNhc2UoKSA6IFN0cmluZyB7IH07CisgICAgcmV0dXJuIHZpZXcoKS5jb252ZXJ0VG9BU0NJSVVw
cGVyY2FzZSgpOwogfQogCiBTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0
TG9jYWxlKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFu
ZCB0aGUgbWFueSBvdGhlcnMgbGlrZSBpdCwgYmUgaW5saW5lZD8KLSAgICByZXR1cm4gbV9pbXBs
ID8gbV9pbXBsLT5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlKCkgOiBTdHJpbmcgeyB9
OworICAgIHJldHVybiB2aWV3KCkuY29udmVydFRvTG93ZXJjYXNlV2l0aG91dExvY2FsZSgpOwog
fQogCiBTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRob3V0TG9jYWxlU3RhcnRp
bmdBdEZhaWxpbmdJbmRleDhCaXQodW5zaWduZWQgZmFpbGluZ0luZGV4KSBjb25zdAogewogICAg
IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBtYW55IG90aGVycyBsaWtl
IGl0LCBiZSBpbmxpbmVkPwotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmNvbnZlcnRUb0xv
d2VyY2FzZVdpdGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdChmYWlsaW5nSW5k
ZXgpIDogU3RyaW5nIHsgfTsKKyAgICByZXR1cm4gdmlldygpLmNvbnZlcnRUb0xvd2VyY2FzZVdp
dGhvdXRMb2NhbGVTdGFydGluZ0F0RmFpbGluZ0luZGV4OEJpdChmYWlsaW5nSW5kZXgpOwogfQog
CiBTdHJpbmcgU3RyaW5nOjpjb252ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgbWFueSBvdGhl
cnMgbGlrZSBpdCwgYmUgaW5saW5lZD8KLSAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5jb252
ZXJ0VG9VcHBlcmNhc2VXaXRob3V0TG9jYWxlKCkgOiBTdHJpbmcgeyB9OworICAgIHJldHVybiB2
aWV3KCkuY29udmVydFRvVXBwZXJjYXNlV2l0aG91dExvY2FsZSgpOwogfQogCiBTdHJpbmcgU3Ry
aW5nOjpjb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxlSWRlbnRpZmllcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rp
b24sIGFuZCB0aGUgbWFueSBvdGhlcnMgbGlrZSBpdCwgYmUgaW5saW5lZD8KLSAgICByZXR1cm4g
bV9pbXBsID8gbV9pbXBsLT5jb252ZXJ0VG9Mb3dlcmNhc2VXaXRoTG9jYWxlKGxvY2FsZUlkZW50
aWZpZXIpIDogU3RyaW5nIHsgfTsKKyAgICByZXR1cm4gdmlldygpLmNvbnZlcnRUb0xvd2VyY2Fz
ZVdpdGhMb2NhbGUobG9jYWxlSWRlbnRpZmllcik7CiB9CiAKIFN0cmluZyBTdHJpbmc6OmNvbnZl
cnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlm
aWVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBmdW5jdGlvbiwgYW5kIHRo
ZSBtYW55IG90aGVycyBsaWtlIGl0LCBiZSBpbmxpbmVkPwotICAgIHJldHVybiBtX2ltcGwgPyBt
X2ltcGwtPmNvbnZlcnRUb1VwcGVyY2FzZVdpdGhMb2NhbGUobG9jYWxlSWRlbnRpZmllcikgOiBT
dHJpbmcgeyB9OworICAgIHJldHVybiB2aWV3KCkuY29udmVydFRvVXBwZXJjYXNlV2l0aExvY2Fs
ZShsb2NhbGVJZGVudGlmaWVyKTsKIH0KIAogU3RyaW5nIFN0cmluZzo6c3RyaXBXaGl0ZVNwYWNl
KCkgY29uc3QKQEAgLTM3NSwxMyArMjA3LDEzIEBAIFN0cmluZyBTdHJpbmc6OnN0cmlwV2hpdGVT
cGFjZSgpIGNvbnN0CiAgICAgLy8gd29yZCBzbyB0aGUgInMiIHNob3VsZCBiZSBsb3dlcmNhc2Uu
IEZvciBhbm90aGVyLCBpdCdzIG5vdCBjbGVhciBmcm9tIHRoaXMgbmFtZQogICAgIC8vIHRoYXQg
dGhlIGZ1bmN0aW9uIHVzZXMgdGhlIFVuaWNvZGUgZGVmaW5pdGlvbiBvZiB3aGl0ZXNwYWNlLiBN
b3N0IFdlYktpdCBjYWxsZXJzCiAgICAgLy8gZG9uJ3Qgd2FudCB0aGF0IGFuZCBldmVudHVhbGx5
IHdlIHNob3VsZCBjb25zaWRlciBkZWxldGluZyB0aGlzLgotICAgIHJldHVybiBtX2ltcGwgPyBt
X2ltcGwtPnN0cmlwV2hpdGVTcGFjZSgpIDogU3RyaW5nIHsgfTsKKyAgICByZXR1cm4gdmlldygp
LnN0cmlwV2hpdGVTcGFjZSgpOwogfQogCiBTdHJpbmcgU3RyaW5nOjpzdHJpcExlYWRpbmdBbmRU
cmFpbGluZ0NoYXJhY3RlcnMoQ29kZVVuaXRNYXRjaEZ1bmN0aW9uIHByZWRpY2F0ZSkgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgbWFueSBvdGhl
cnMgbGlrZSBpdCwgYmUgaW5saW5lZD8KLSAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5zdHJp
cExlYWRpbmdBbmRUcmFpbGluZ0NoYXJhY3RlcnMocHJlZGljYXRlKSA6IFN0cmluZyB7IH07Cisg
ICAgcmV0dXJuIHZpZXcoKS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ0NoYXJhY3RlcnMocHJlZGlj
YXRlKTsKIH0KIAogU3RyaW5nIFN0cmluZzo6c2ltcGxpZnlXaGl0ZVNwYWNlKCkgY29uc3QKQEAg
LTM5MSwzOSArMjIzLDM5IEBAIFN0cmluZyBTdHJpbmc6OnNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNv
bnN0CiAgICAgLy8gd29yZCBzbyB0aGUgInMiIHNob3VsZCBiZSBsb3dlcmNhc2UuIEZvciBhbm90
aGVyLCBpdCdzIG5vdCBjbGVhciBmcm9tIHRoaXMgbmFtZQogICAgIC8vIHRoYXQgdGhlIGZ1bmN0
aW9uIHVzZXMgdGhlIFVuaWNvZGUgZGVmaW5pdGlvbiBvZiB3aGl0ZXNwYWNlLiBNb3N0IFdlYktp
dCBjYWxsZXJzCiAgICAgLy8gZG9uJ3Qgd2FudCB0aGF0IGFuZCBldmVudHVhbGx5IHdlIHNob3Vs
ZCBjb25zaWRlciBkZWxldGluZyB0aGlzLgotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnNp
bXBsaWZ5V2hpdGVTcGFjZSgpIDogU3RyaW5nIHsgfTsKKyAgICByZXR1cm4gdmlldygpLnNpbXBs
aWZ5V2hpdGVTcGFjZSgpOwogfQogCiBTdHJpbmcgU3RyaW5nOjpzaW1wbGlmeVdoaXRlU3BhY2Uo
Q29kZVVuaXRNYXRjaEZ1bmN0aW9uIGlzV2hpdGVTcGFjZSkgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgbWFueSBvdGhlcnMgbGlrZSBpdCwgYmUg
aW5saW5lZD8KLSAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5zaW1wbGlmeVdoaXRlU3BhY2Uo
aXNXaGl0ZVNwYWNlKSA6IFN0cmluZyB7IH07CisgICAgcmV0dXJuIHZpZXcoKS5zaW1wbGlmeVdo
aXRlU3BhY2UoaXNXaGl0ZVNwYWNlKTsKIH0KIAogU3RyaW5nIFN0cmluZzo6cmVtb3ZlQ2hhcmFj
dGVycyhDb2RlVW5pdE1hdGNoRnVuY3Rpb24gZmluZE1hdGNoKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBTaG91bGQgdGhpcyBmdW5jdGlvbiwgYW5kIHRoZSBtYW55IG90aGVycyBsaWtlIGl0LCBi
ZSBpbmxpbmVkPwotICAgIHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJlbW92ZUNoYXJhY3RlcnMo
ZmluZE1hdGNoKSA6IFN0cmluZyB7IH07CisgICAgcmV0dXJuIHZpZXcoKS5yZW1vdmVDaGFyYWN0
ZXJzKGZpbmRNYXRjaCk7CiB9CiAKIFN0cmluZyBTdHJpbmc6OmZvbGRDYXNlKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgZnVuY3Rpb24sIGFuZCB0aGUgbWFueSBvdGhlcnMg
bGlrZSBpdCwgYmUgaW5saW5lZD8KLSAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5mb2xkQ2Fz
ZSgpIDogU3RyaW5nIHsgfTsKKyAgICByZXR1cm4gdmlldygpLmZvbGRDYXNlKCk7CiB9CiAKIGJv
b2wgU3RyaW5nOjpwZXJjZW50YWdlKGludCYgcmVzdWx0KSBjb25zdAogewotICAgIGlmICghbV9p
bXBsIHx8ICFtX2ltcGwtPmxlbmd0aCgpKQorICAgIGlmICghbGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmICgoKm1faW1wbClbbV9pbXBsLT5sZW5ndGgoKSAtIDFdICE9
ICclJykKKyAgICBpZiAoY2hhcmFjdGVyQXQobGVuZ3RoKCkgLSAxKSAhPSAnJScpCiAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faW1wbC0+aXM4Qml0KCkpCi0gICAgICAgIHJlc3Vs
dCA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChtX2ltcGwtPmNoYXJhY3RlcnM4KCksIG1faW1wbC0+
bGVuZ3RoKCkgLSAxKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJlc3VsdCA9IGNoYXJh
Y3RlcnNUb0ludFN0cmljdChjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSAtIDEpOwogICAgIGVsc2UK
LSAgICAgICAgcmVzdWx0ID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KG1faW1wbC0+Y2hhcmFjdGVy
czE2KCksIG1faW1wbC0+bGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgcmVzdWx0ID0gY2hhcmFjdGVy
c1RvSW50U3RyaWN0KGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSAtIDEpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC00MzEsMTcgKzI2MywxNCBAQCBWZWN0b3I8VUNoYXI+IFN0cmluZzo6Y2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSBjb25zdAogewogICAgIFZlY3RvcjxVQ2hhcj4g
cmVzdWx0OwogCi0gICAgaWYgKG1faW1wbCkgeworICAgIGlmIChpc051bGwoKSkgewogICAgICAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgoKSArIDEpOwogCiAgICAgICAg
IGlmIChpczhCaXQoKSkgewotICAgICAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4ID0g
bV9pbXBsLT5jaGFyYWN0ZXJzOCgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGgoKTsgKytpKQotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y2hhcmFjdGVyczhbaV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMxNiA9IG1faW1wbC0+Y2hhcmFjdGVyczE2KCk7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGNoYXJhY3RlcnMxNiwgbV9pbXBsLT5sZW5ndGgoKSk7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNoYXJhY3RlcnM4KClbaV0p
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpKTsKIAogICAgICAgICByZXN1bHQuYXBwZW5kKDApOwogICAgIH0KQEAgLTUx
MSwxMjggKzM0MCwxMjkgQEAgU3RyaW5nIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdGaXhlZFdpZHRo
KGRvdWJsZSBudW1iZXIsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMpCiAKIGludCBTdHJpbmc6OnRv
SW50U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkgY29uc3QKIHsKLSAgICBpZiAoIW1faW1wbCkg
eworICAgIGlmIChpc051bGwoKSkgewogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICAqb2sg
PSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRv
SW50U3RyaWN0KG9rLCBiYXNlKTsKKyAgICByZXR1cm4gdmlldygpLnRvSW50U3RyaWN0KG9rLCBi
YXNlKTsKIH0KIAogdW5zaWduZWQgU3RyaW5nOjp0b1VJbnRTdHJpY3QoYm9vbCogb2ssIGludCBi
YXNlKSBjb25zdAogewotICAgIGlmICghbV9pbXBsKSB7CisgICAgaWYgKGlzTnVsbCgpKSB7CiAg
ICAgICAgIGlmIChvaykKICAgICAgICAgICAgICpvayA9IGZhbHNlOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9VSW50U3RyaWN0KG9rLCBiYXNlKTsKKyAg
ICByZXR1cm4gdmlldygpLnRvVUludFN0cmljdChvaywgYmFzZSk7CisKIH0KIAogaW50NjRfdCBT
dHJpbmc6OnRvSW50NjRTdHJpY3QoYm9vbCogb2ssIGludCBiYXNlKSBjb25zdAogewotICAgIGlm
ICghbV9pbXBsKSB7CisgICAgaWYgKGlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChvaykKICAgICAg
ICAgICAgICpvayA9IGZhbHNlOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJu
IG1faW1wbC0+dG9JbnQ2NFN0cmljdChvaywgYmFzZSk7CisgICAgcmV0dXJuIHZpZXcoKS50b0lu
dDY0U3RyaWN0KG9rLCBiYXNlKTsKIH0KIAogdWludDY0X3QgU3RyaW5nOjp0b1VJbnQ2NFN0cmlj
dChib29sKiBvaywgaW50IGJhc2UpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltcGwpIHsKKyAgICBp
ZiAoaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgKm9rID0gZmFsc2U7
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b1VJbnQ2NFN0
cmljdChvaywgYmFzZSk7CisgICAgcmV0dXJuIHZpZXcoKS50b1VJbnQ2NFN0cmljdChvaywgYmFz
ZSk7CiB9CiAKIGludHB0cl90IFN0cmluZzo6dG9JbnRQdHJTdHJpY3QoYm9vbCogb2ssIGludCBi
YXNlKSBjb25zdAogewotICAgIGlmICghbV9pbXBsKSB7CisgICAgaWYgKGlzTnVsbCgpKSB7CiAg
ICAgICAgIGlmIChvaykKICAgICAgICAgICAgICpvayA9IGZhbHNlOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9JbnRQdHJTdHJpY3Qob2ssIGJhc2UpOwor
ICAgIHJldHVybiB2aWV3KCkudG9JbnRQdHJTdHJpY3Qob2ssIGJhc2UpOwogfQogCiBpbnQgU3Ry
aW5nOjp0b0ludChib29sKiBvaykgY29uc3QKIHsKLSAgICBpZiAoIW1faW1wbCkgeworICAgIGlm
IChpc051bGwoKSkgewogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICAqb2sgPSBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRvSW50KG9rKTsK
KyAgICByZXR1cm4gdmlldygpLnRvSW50KG9rKTsKIH0KIAogdW5zaWduZWQgU3RyaW5nOjp0b1VJ
bnQoYm9vbCogb2spIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltcGwpIHsKKyAgICBpZiAoaXNOdWxs
KCkpIHsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgKm9rID0gZmFsc2U7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b1VJbnQob2spOworICAgIHJl
dHVybiB2aWV3KCkudG9VSW50KG9rKTsKIH0KIAogaW50NjRfdCBTdHJpbmc6OnRvSW50NjQoYm9v
bCogb2spIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltcGwpIHsKKyAgICBpZiAoaXNOdWxsKCkpIHsK
ICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgKm9rID0gZmFsc2U7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b0ludDY0KG9rKTsKKyAgICByZXR1cm4g
dmlldygpLnRvSW50NjQob2spOwogfQogCiB1aW50NjRfdCBTdHJpbmc6OnRvVUludDY0KGJvb2wq
IG9rKSBjb25zdAogewotICAgIGlmICghbV9pbXBsKSB7CisgICAgaWYgKGlzTnVsbCgpKSB7CiAg
ICAgICAgIGlmIChvaykKICAgICAgICAgICAgICpvayA9IGZhbHNlOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9VSW50NjQob2spOworICAgIHJldHVybiB2
aWV3KCkudG9VSW50NjQob2spOwogfQogCiBpbnRwdHJfdCBTdHJpbmc6OnRvSW50UHRyKGJvb2wq
IG9rKSBjb25zdAogewotICAgIGlmICghbV9pbXBsKSB7CisgICAgaWYgKGlzTnVsbCgpKSB7CiAg
ICAgICAgIGlmIChvaykKICAgICAgICAgICAgICpvayA9IGZhbHNlOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9JbnRQdHIob2spOworICAgIHJldHVybiB2
aWV3KCkudG9JbnRQdHIob2spOwogfQogCiBkb3VibGUgU3RyaW5nOjp0b0RvdWJsZShib29sKiBv
aykgY29uc3QKIHsKLSAgICBpZiAoIW1faW1wbCkgeworICAgIGlmIChpc051bGwoKSkgewogICAg
ICAgICBpZiAob2spCiAgICAgICAgICAgICAqb2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDAu
MDsKICAgICB9Ci0gICAgcmV0dXJuIG1faW1wbC0+dG9Eb3VibGUob2spOworICAgIHJldHVybiB2
aWV3KCkudG9Eb3VibGUob2spOwogfQogCiBmbG9hdCBTdHJpbmc6OnRvRmxvYXQoYm9vbCogb2sp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltcGwpIHsKKyAgICBpZiAoaXNOdWxsKCkpIHsKICAgICAg
ICAgaWYgKG9rKQogICAgICAgICAgICAgKm9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwLjBm
OwogICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b0Zsb2F0KG9rKTsKKyAgICByZXR1cm4gdmll
dygpLnRvRmxvYXQob2spOwogfQogCiBTdHJpbmcgU3RyaW5nOjppc29sYXRlZENvcHkoKSBjb25z
dCAmCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGZ1bmN0aW9uLCBhbmQgdGhlIG1hbnkg
b3RoZXJzIGxpa2UgaXQsIGJlIGlubGluZWQ/Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+
aXNvbGF0ZWRDb3B5KCkgOiBTdHJpbmcgeyB9OworICAgIHJldHVybiBoYXNJbXBsKCkgPyBpbXBs
KCktPmlzb2xhdGVkQ29weSgpIDogKnRoaXM7CiB9CiAKIFN0cmluZyBTdHJpbmc6Omlzb2xhdGVk
Q29weSgpICYmCkBAIC02NDMsMTQgKzQ3MywxNCBAQCBTdHJpbmcgU3RyaW5nOjppc29sYXRlZENv
cHkoKSAmJgogICAgICAgICByZXR1cm4geyBXVEZNb3ZlKCp0aGlzKSB9OwogICAgIH0KIAotICAg
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmlzb2xhdGVkQ29weSgpIDogU3RyaW5nIHsgfTsKKyAg
ICByZXR1cm4gaGFzSW1wbCgpID8gaW1wbCgpLT5pc29sYXRlZENvcHkoKSA6ICp0aGlzOwogfQog
CiBib29sIFN0cmluZzo6aXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgY29uc3QKIHsKICAg
ICAvLyBBdG9taWNTdHJpbmdzIGFyZSBub3Qgc2FmZSB0byBzZW5kIGJldHdlZW4gdGhyZWFkcyBh
cyB+U3RyaW5nSW1wbCgpCiAgICAgLy8gd2lsbCB0cnkgdG8gcmVtb3ZlIHRoZW0gZnJvbSB0aGUg
d3JvbmcgQXRvbWljU3RyaW5nVGFibGUuCi0gICAgcmV0dXJuIGlzRW1wdHkoKSB8fCAobV9pbXBs
LT5oYXNPbmVSZWYoKSAmJiAhbV9pbXBsLT5pc0F0b21pYygpKTsKKyAgICByZXR1cm4gIWhhc0lt
cGwoKSB8fCAoaW1wbCgpLT5oYXNPbmVSZWYoKSAmJiAhaW1wbCgpLT5pc0F0b21pYygpKTsKIH0K
IAogdGVtcGxhdGU8Ym9vbCBhbGxvd0VtcHR5RW50cmllcz4KQEAgLTc5NCw3ICs2MjQsNyBAQCBD
U3RyaW5nIFN0cmluZzo6bGF0aW4xKCkgY29uc3QKIAogRXhwZWN0ZWQ8Q1N0cmluZywgVVRGOENv
bnZlcnNpb25FcnJvcj4gU3RyaW5nOjp0cnlHZXRVdGY4KENvbnZlcnNpb25Nb2RlIG1vZGUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+dHJ5R2V0VXRmOChtb2RlKSA6IENT
dHJpbmcgeyAiIiwgMCB9OworICAgIHJldHVybiAhaXNOdWxsKCkgPyB2aWV3KCkudHJ5R2V0VXRm
OChtb2RlKSA6IENTdHJpbmcgeyAiIiwgMCB9OwogfQogCiBFeHBlY3RlZDxDU3RyaW5nLCBVVEY4
Q29udmVyc2lvbkVycm9yPiBTdHJpbmc6OnRyeUdldFV0ZjgoKSBjb25zdApAQCAtODE5LDggKzY0
OSwxNCBAQCBTdHJpbmcgU3RyaW5nOjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShjb25zdCBVQ2hh
ciogc291cmNlLCBzaXplX3QgbGVuZ3RoKQogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKKyAgICBpZiAobGVuZ3RoIDw9IG1heFNtYWxsU3RyaW5nTGVuZ3RoICYm
IGNoYXJhY3RlcnNBcmVBbGxBU0NJSShzb3VyY2UsIGxlbmd0aCkpIHsKKyAgICAgICAgTENoYXIg
Y2hhcmFjdGVyc1tsZW5ndGhdOworICAgICAgICBjb3B5TENoYXJzRnJvbVVDaGFyU291cmNlKGNo
YXJhY3RlcnMsIHNvdXJjZSwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhLbm93blNt
YWxsU3RyaW5nLCB0b1BhY2tlZFN0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICB9CisK
ICAgICBMQ2hhciogZGVzdGluYXRpb247Ci0gICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRlc3RpbmF0aW9uKTsKKyAgICBTdHJpbmcgcmVzdWx0
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRlc3RpbmF0aW9uKTsK
IAogICAgIGNvcHlMQ2hhcnNGcm9tVUNoYXJTb3VyY2UoZGVzdGluYXRpb24sIHNvdXJjZSwgbGVu
Z3RoKTsKIApAQCAtODMzLDkgKzY2OSw5IEBAIFN0cmluZyBTdHJpbmc6Om1ha2UxNkJpdEZyb204
Qml0U291cmNlKGNvbnN0IExDaGFyKiBzb3VyY2UsIHNpemVfdCBsZW5ndGgpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICAKICAgICBVQ2hhciogZGVzdGluYXRpb247Ci0gICAgU3RyaW5n
IHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRlc3RpbmF0aW9u
KTsKKyAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGRlc3RpbmF0aW9uKTsKICAgICAKLSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVy
cyhkZXN0aW5hdGlvbiwgc291cmNlLCBsZW5ndGgpOworICAgIGNvcHlDaGFyYWN0ZXJzKGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIGxlbmd0aCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTEwNzIsMTggKzkwOCw2IEBAIGZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IFVDaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCkKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHRvRG91YmxlVHlwZTxVQ2hhciwgQWxsb3dUcmFpbGluZ0p1bms+KGRh
dGEsIGxlbmd0aCwgMCwgcGFyc2VkTGVuZ3RoKSk7CiB9CiAKLWNvbnN0IFN0cmluZyYgZW1wdHlT
dHJpbmcoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGVtcHR5U3RyaW5n
KFN0cmluZ0ltcGw6OmVtcHR5KCkpOwotICAgIHJldHVybiBlbXB0eVN0cmluZzsKLX0KLQotY29u
c3QgU3RyaW5nJiBudWxsU3RyaW5nKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBudWxsU3RyaW5nOwotICAgIHJldHVybiBudWxsU3RyaW5nOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDFk
OWYwZGIwMDgzMDQxOTQ5YWEwMDU4NjRlNTA0NDQwOTIwMWRlNzQuLmZkNjUzODEwY2ZjMzQ2MTI2
ZjE0YmI2ZDBmZmU0ZTFmOWExNmQwM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
V1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApAQCAtMjcs
OCArMjcsOSBAQAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0FTQ0lJTGl0ZXJhbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZ0ltcGwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TeW1ib2xJbXBsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAogI2lmZGVmIF9fT0JKQ19fCiAjaW5jbHVkZSA8b2Jq
Yy9vYmpjLmg+CkBAIC00Miw0NyArNDMsOTEgQEAgbmFtZXNwYWNlIFdURiB7CiAKIC8vIERlY2xh
cmF0aW9ucyBvZiBzdHJpbmcgb3BlcmF0aW9ucwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgaW50IGNo
YXJhY3RlcnNUb0ludFN0cmljdChjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxs
cHRyLCBpbnQgYmFzZSA9IDEwKTsKLVdURl9FWFBPUlRfUFJJVkFURSBpbnQgY2hhcmFjdGVyc1Rv
SW50U3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIsIGludCBi
YXNlID0gMTApOwotV1RGX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGNoYXJhY3RlcnNUb1VJbnRT
dHJpY3QoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2Ug
PSAxMCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgY2hhcmFjdGVyc1RvVUludFN0cmlj
dChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQgYmFzZSA9IDEw
KTsKLWludDY0X3QgY2hhcmFjdGVyc1RvSW50NjRTdHJpY3QoY29uc3QgTENoYXIqLCBzaXplX3Qs
IGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7Ci1pbnQ2NF90IGNoYXJhY3RlcnNU
b0ludDY0U3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIsIGlu
dCBiYXNlID0gMTApOwotV1RGX0VYUE9SVF9QUklWQVRFIHVpbnQ2NF90IGNoYXJhY3RlcnNUb1VJ
bnQ2NFN0cmljdChjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxscHRyLCBpbnQg
YmFzZSA9IDEwKTsKLVdURl9FWFBPUlRfUFJJVkFURSB1aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50
NjRTdHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJh
c2UgPSAxMCk7Ci1pbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3QoY29uc3QgTENoYXIq
LCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7Ci1pbnRwdHJfdCBj
aGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0g
bnVsbHB0ciwgaW50IGJhc2UgPSAxMCk7Ci0KLVdURl9FWFBPUlRfUFJJVkFURSBpbnQgY2hhcmFj
dGVyc1RvSW50KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIpOyAvLyBp
Z25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKLVdURl9FWFBPUlRfUFJJVkFURSBpbnQgY2hhcmFjdGVy
c1RvSW50KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIpOyAvLyBpZ25v
cmVzIHRyYWlsaW5nIGdhcmJhZ2UKLXVuc2lnbmVkIGNoYXJhY3RlcnNUb1VJbnQoY29uc3QgTENo
YXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2Fy
YmFnZQotdW5zaWduZWQgY2hhcmFjdGVyc1RvVUludChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9v
bCogb2sgPSBudWxscHRyKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCi1pbnQ2NF90IGNo
YXJhY3RlcnNUb0ludDY0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIp
OyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKLWludDY0X3QgY2hhcmFjdGVyc1RvSW50NjQo
Y29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJh
aWxpbmcgZ2FyYmFnZQotdWludDY0X3QgY2hhcmFjdGVyc1RvVUludDY0KGNvbnN0IExDaGFyKiwg
c2l6ZV90LCBib29sKiBvayA9IG51bGxwdHIpOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UK
LVdURl9FWFBPUlRfUFJJVkFURSB1aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjQoY29uc3QgVUNo
YXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2Fy
YmFnZQotaW50cHRyX3QgY2hhcmFjdGVyc1RvSW50UHRyKGNvbnN0IExDaGFyKiwgc2l6ZV90LCBi
b29sKiBvayA9IG51bGxwdHIpOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKLWludHB0cl90
IGNoYXJhY3RlcnNUb0ludFB0cihjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSBudWxs
cHRyKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCi0KLS8vIEZJWE1FOiBMaWtlIHRoZSBz
dHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVzZSBnaXZlIGZhbHNlIGZvciAib2siIHdoZW4gdGhl
cmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KLS8vIExpa2UgdGhlIG5vbi1zdHJpY3QgZnVuY3Rpb25z
IGFib3ZlLCB0aGVzZSByZXR1cm4gdGhlIHZhbHVlIHdoZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2Fy
YmFnZS4KLS8vIEl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGVzZSB3ZXJlIG1vcmUgY29uc2lzdGVu
dCB3aXRoIHRoZSBhYm92ZSBmdW5jdGlvbnMgaW5zdGVhZC4KLVdURl9FWFBPUlRfUFJJVkFURSBk
b3VibGUgY2hhcmFjdGVyc1RvRG91YmxlKGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9
IG51bGxwdHIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBjaGFyYWN0ZXJzVG9Eb3VibGUo
Y29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7Ci1XVEZfRVhQT1JUX1BS
SVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wq
IG9rID0gbnVsbHB0cik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxv
YXQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gbnVsbHB0cik7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIqLCBzaXplX3QsIHNp
emVfdCYgcGFyc2VkTGVuZ3RoKTsKLVdURl9FWFBPUlRfUFJJVkFURSBmbG9hdCBjaGFyYWN0ZXJz
VG9GbG9hdChjb25zdCBVQ2hhciosIHNpemVfdCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpOwotCi10
ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhciksIHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGJvb2wgaXNBbGxTcGVjaWFsQ2hhcmFjdGVycyhjb25zdCBDaGFyYWN0ZXJUeXBlKiwg
c2l6ZV90KTsKLQogZW51bSBUcmFpbGluZ1plcm9zVHJ1bmNhdGluZ1BvbGljeSB7IEtlZXBUcmFp
bGluZ1plcm9zLCBUcnVuY2F0ZVRyYWlsaW5nWmVyb3MgfTsKIAogY2xhc3MgU3RyaW5nIHsKIHB1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHBvaW50ZXJGbGFnID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IHBvaW50ZXJNYXNrID0gcG9pbnRlckZsYWcgLSAx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heFNtYWxsU3RyaW5nTGVuZ3RoID0gc2l6
ZW9mKHVpbnQ2NF90KTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgdG9QYWNrZWRT
dHJpbmdDb25zdGV4cHIoY29uc3QgY2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4U21hbGxTdHJpbmdMZW5ndGgpOworICAg
ICAgICB1aW50NjRfdCByZXN1bHQgeyAwIH07CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAg
ICAgICBmb3IgKDsgaSA8IG1heFNtYWxsU3RyaW5nTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChpIDwgbGVuZ3RoKQorICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBjaGFyYWN0ZXJzW2ld
OworICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0IDw8IENIQVJfQklUOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUg
dWludDY0X3QgdG9QYWNrZWRTdHJpbmcoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heFNtYWxsU3RyaW5nTGVu
Z3RoKTsKKyAgICAgICAgdWludDY0X3QgcmVzdWx0IHsgMCB9OworICAgICAgICBtZW1jcHkoJnJl
c3VsdCwgY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHNob3VsZEJlU21hbGxTdHJpbmcoY29u
c3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICBpZiAo
bGVuZ3RoIDw9IG1heFNtYWxsU3RyaW5nTGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGNoYXJh
Y3RlcnNBcmVBbGxBU0NJSShjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzU21hbGxTdHJpbmcoKSBjb25z
dCB7IHJldHVybiAhKHUubV9kYXRhICYgcG9pbnRlck1hc2spOyB9CisgICAgQUxXQVlTX0lOTElO
RSBTdHJpbmdJbXBsKiBpbXBsKCkgY29uc3QgeyBBU1NFUlQoIWlzU21hbGxTdHJpbmcoKSk7IHJl
dHVybiB1Lm1faW1wbC5nZXQoKTsgfQorICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZWxlYXNlSW1w
bCgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UodS5tX2ltcGwsIG51bGxwdHIpOyB9CisKKyAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFpc1NtYWxsU3RyaW5nKCkgJiYgIWltcGwoKTsg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICF1Lm1fZGF0YTsgfQorICAgIGJv
b2wgaGFzSW1wbCgpIGNvbnN0IHsgcmV0dXJuICFpc1NtYWxsU3RyaW5nKCkgJiYgIWltcGwoKTsg
fQorCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1Nt
YWxsU3RyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gY3R6KHUubV9kYXRhKSAvIENIQVJfQklU
OworICAgICAgICByZXR1cm4gaW1wbCgpID8gaW1wbCgpLT5sZW5ndGgoKSA6IDA7CisgICAgfQor
CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBpc1NtYWxsU3RyaW5nKCkgfHwgIWlt
cGwoKSB8fCBpbXBsKCktPmlzOEJpdCgpOyB9CisgICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBj
b25zdCB7IHJldHVybiBsZW5ndGgoKSAqIChpczhCaXQoKSA/IHNpemVvZihMQ2hhcikgOiBzaXpl
b2YoVUNoYXIpKTsgfQorCisgICAgZW51bSBLbm93blNtYWxsU3RyaW5nVGFnVHlwZSB7IEtub3du
U21hbGxTdHJpbmcgfTsKKyAgICBleHBsaWNpdCBTdHJpbmcoS25vd25TbWFsbFN0cmluZ1RhZ1R5
cGUsIHVpbnQ2NF90KQorICAgIHsKKyAgICB9CisKKy8vICAgIC8vIFdlIGFsbG93IGltcGxpY2l0
IHVwY2FzdGluZyBvbiB0aGUgaW1wbCB0eXBlIHRvIG1pcnJvciB0aGUgc3ViY2xhc3NpbmcgbGF5
b3V0IG9mIHRoZSBpbXBsLgorLy8gICAgdGVtcGxhdGU8dHlwZW5hbWUgU3VwZXJUeXBlLCB0eXBl
bmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZjxTdXBlclR5cGUs
IEltcGxUeXBlPjo6dmFsdWU+Ojp0eXBlPgorLy8gICAgb3BlcmF0b3IgY29uc3QgU3RyaW5nPFN1
cGVyVHlwZT4mKCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU3RyaW5n
PFN1cGVyVHlwZT4qPih0aGlzKTsgfQorLy8KKy8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN1cGVy
VHlwZSwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Jhc2Vfb2Y8
U3VwZXJUeXBlLCBJbXBsVHlwZT46OnZhbHVlPjo6dHlwZT4KKy8vICAgIG9wZXJhdG9yIFN0cmlu
ZzxTdXBlclR5cGU+JigpIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFN0cmluZzxTdXBlclR5
cGU+Kj4odGhpcyk7IH0KKworICAgIFN0cmluZyhSZWZQdHI8U3RyaW5nSW1wbD4mJik7CisgICAg
U3RyaW5nKFN0cmluZ0ltcGwqKTsKKyAgICBTdHJpbmcoU3RyaW5nSW1wbCYpOworCisgICAgU3Ry
aW5nKGNvbnN0IFN0cmluZyYpID0gZGVmYXVsdDsKKyAgICBTdHJpbmcoU3RyaW5nJiYpID0gZGVm
YXVsdDsKKyAgICBTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBTdHJpbmcmKSA9IGRlZmF1bHQ7Cisg
ICAgU3RyaW5nJiBvcGVyYXRvcj0oU3RyaW5nJiYpID0gZGVmYXVsdDsKKwogICAgIC8vIENvbnN0
cnVjdCBhIG51bGwgc3RyaW5nLCBkaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBlbXB0eSBzdHJpbmcu
CiAgICAgU3RyaW5nKCkgPSBkZWZhdWx0OwogCisvLyAgICBlbnVtIFNtYWxsU3RyaW5nVGFnVHlw
ZSB7IFNtYWxsU3RyaW5nVGFnIH07CisvLyAgICBTdHJpbmcoU21hbGxTdHJpbmdUYWdUeXBlLCBj
b25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKy8vICAgICAgICA6IG1fY29u
dGVudHModG9QYWNrZWRTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSkKKy8vICAgIHsKKy8vICAg
ICAgICBBU1NFUlQoc2hvdWxkQmVTbWFsbFN0cmluZyhpbXBsLT5jaGFyYWN0ZXJzOCgpLCBpbXBs
LT5sZW5ndGgoKSkpOworLy8gICAgfQorCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGgg
VVRGLTE2IGRhdGEuCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyhjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKIApAQCAtMTA4LDE0ICsxNTMsNyBAQCBwdWJs
aWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVy
cyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJz
KTsKIAotICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyByZWZlcmVuY2luZyBhbiBleGlzdGluZyBT
dHJpbmdJbXBsLgotICAgIFN0cmluZyhTdHJpbmdJbXBsJik7Ci0gICAgU3RyaW5nKFN0cmluZ0lt
cGwqKTsKICAgICBTdHJpbmcoUmVmPFN0cmluZ0ltcGw+JiYpOwotICAgIFN0cmluZyhSZWZQdHI8
U3RyaW5nSW1wbD4mJik7Ci0KLSAgICBTdHJpbmcoUmVmPEF0b21pY1N0cmluZ0ltcGw+JiYpOwot
ICAgIFN0cmluZyhSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4mJik7CiAKICAgICBTdHJpbmcoU3Rh
dGljU3RyaW5nSW1wbCYpOwogICAgIFN0cmluZyhTdGF0aWNTdHJpbmdJbXBsKik7CkBAIC0xMjQs
NDIgKzE2MiwzMSBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyhBU0NJ
SUxpdGVyYWwpOwogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIGZyb20gYSBjb25zdGFudCBz
dHJpbmcgbGl0ZXJhbC4KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHRoZSAiYmlnIiB2ZXJz
aW9uLCBhcyBpdCBwdXQgdGhlIGxlbmd0aCBpbiB0aGUgZnVuY3Rpb24gY2FsbCBhbmQgZ2VuZXJh
dGUgYmlnZ2VyIGNvZGUuCisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyB0aGUgImJpZyIgdmVy
c2lvbiwgYXMgaXQgcHV0cyB0aGUgbGVuZ3RoIGluIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5k
IGdlbmVyYXRlcyBiaWdnZXIgY29kZS4KICAgICBlbnVtIENvbnN0cnVjdEZyb21MaXRlcmFsVGFn
IHsgQ29uc3RydWN0RnJvbUxpdGVyYWwgfTsKLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0
ZXJDb3VudD4gU3RyaW5nKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJDb3VudF0s
IENvbnN0cnVjdEZyb21MaXRlcmFsVGFnKSA6IG1faW1wbChTdHJpbmdJbXBsOjpjcmVhdGVGcm9t
TGl0ZXJhbDxjaGFyYWN0ZXJDb3VudD4oY2hhcmFjdGVycykpIHsgfQorICAgIHRlbXBsYXRlPHVu
c2lnbmVkIGNoYXJhY3RlckNvdW50PiBTdHJpbmcoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2No
YXJhY3RlckNvdW50XSwgQ29uc3RydWN0RnJvbUxpdGVyYWxUYWcpOwogCi0gICAgLy8gRklYTUU6
IFdoeSBkbyB3ZSBoYXZlIHRvIGRlZmluZSB0aGVzZSBleHBsaWNpdGx5IGdpdmVuIHRoYXQgd2Ug
anVzdCB3YW50IHRoZSBkZWZhdWx0IHZlcnNpb25zPwotICAgIC8vIFdlIGhhdmUgdmVyaWZpZWQg
ZW1waXJpY2FsbHkgdGhhdCB3ZSBkby4KLSAgICBTdHJpbmcoY29uc3QgU3RyaW5nJikgPSBkZWZh
dWx0OwotICAgIFN0cmluZyhTdHJpbmcmJikgPSBkZWZhdWx0OwotICAgIFN0cmluZyYgb3BlcmF0
b3I9KGNvbnN0IFN0cmluZyYpID0gZGVmYXVsdDsKLSAgICBTdHJpbmcmIG9wZXJhdG9yPShTdHJp
bmcmJikgPSBkZWZhdWx0OwotCi0gICAgQUxXQVlTX0lOTElORSB+U3RyaW5nKCkgPSBkZWZhdWx0
OworICAgIHN0YXRpYyBTdHJpbmcgbnVsbFN0cmluZygpIHsgcmV0dXJuIFN0cmluZyhLbm93blNt
YWxsU3RyaW5nLCBwb2ludGVyRmxhZyk7IH0KKyAgICBzdGF0aWMgU3RyaW5nIGVtcHR5U3RyaW5n
KCkgeyByZXR1cm4gU3RyaW5nKEtub3duU21hbGxTdHJpbmcsIDApOyB9CiAKLSAgICB2b2lkIHN3
YXAoU3RyaW5nJiBvKSB7IG1faW1wbC5zd2FwKG8ubV9pbXBsKTsgfQorICAgIHZvaWQgc3dhcChT
dHJpbmcmIG8pIHsgc3RkOjpzd2FwKHUubV9kYXRhLCBvLnUubV9kYXRhKTsgfQogCiAgICAgc3Rh
dGljIFN0cmluZyBhZG9wdChTdHJpbmdCdWZmZXI8TENoYXI+JiYgYnVmZmVyKSB7IHJldHVybiBT
dHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOyB9CiAgICAgc3RhdGljIFN0cmluZyBh
ZG9wdChTdHJpbmdCdWZmZXI8VUNoYXI+JiYgYnVmZmVyKSB7IHJldHVybiBTdHJpbmdJbXBsOjph
ZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4KICAgICBzdGF0aWMgU3RyaW5nIGFkb3B0KFZlY3RvcjxDaGFyYWN0
ZXJUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mJiB2
ZWN0b3IpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUodmVjdG9yKSk7IH0KIAot
ICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbDsgfQotICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwgfHwgbV9pbXBsLT5pc0VtcHR5KCk7IH0KLQot
ICAgIFN0cmluZ0ltcGwqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLSAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVsZWFzZUltcGwoKSB7IHJldHVybiBXVEZNb3ZlKG1faW1w
bCk7IH0KKyAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IHJldHVybiBpc1Nt
YWxsU3RyaW5nKCkgPyByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4odGhpcykgOiAoaGFz
SW1wbCgpID8gaW1wbCgpLT5jaGFyYWN0ZXJzOCgpIDogbnVsbHB0cik7IH0KKyAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVyczE2KCkgY29uc3QgeyBBU1NFUlQoIWlzU21hbGxTdHJpbmcoKSk7IHJl
dHVybiAhaXNOdWxsKCkgPyBpbXBsKCktPmNoYXJhY3RlcnMxNigpIDogbnVsbHB0cjsgfQogCi0g
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5n
dGgoKSA6IDA7IH0KLSAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IHJldHVy
biBtX2ltcGwgPyBtX2ltcGwtPmNoYXJhY3RlcnM4KCkgOiBudWxscHRyOyB9Ci0gICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Y2hh
cmFjdGVyczE2KCkgOiBudWxscHRyOyB9CisgICAgLy8gUmV0dXJuIGNoYXJhY3RlcnM4KCkgb3Ig
Y2hhcmFjdGVyczE2KCkgZGVwZW5kaW5nIG9uIENoYXJhY3RlclR5cGUuIFdlIGhhdmUgdG8gdXNl
IGRlZmF1bHQgcGFyYW1ldGVycyBzbyB0aGlzIHdpbGwgY29tcGlsZQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPENoYXJhY3RlclR5cGUsIExDaGFyPjo6dmFsdWU+Ojp0eXBlPgorICAgIGlu
bGluZSBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzKENoYXJhY3RlclR5cGUgPSAnXDAn
KSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzOCgpOyB9CiAKLSAgICAvLyBSZXR1cm4gY2hhcmFj
dGVyczgoKSBvciBjaGFyYWN0ZXJzMTYoKSBkZXBlbmRpbmcgb24gQ2hhcmFjdGVyVHlwZS4KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdCBDaGFyYWN0ZXJUeXBlKiBj
aGFyYWN0ZXJzKCkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwg
dHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8Q2hhcmFjdGVy
VHlwZSwgVUNoYXI+Ojp2YWx1ZT46OnR5cGU+CisgICAgaW5saW5lIGNvbnN0IENoYXJhY3RlclR5
cGUqIGNoYXJhY3RlcnMoQ2hhcmFjdGVyVHlwZSogPSBudWxscHRyKSBjb25zdCB7IHJldHVybiBj
aGFyYWN0ZXJzMTYoKTsgfQogCi0gICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiAhbV9p
bXBsIHx8IG1faW1wbC0+aXM4Qml0KCk7IH0KLQotICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSAqIChpczhCaXQoKSA/IHNp
emVvZihMQ2hhcikgOiBzaXplb2YoVUNoYXIpKSA6IDA7IH0KKyAgICBTdHJpbmdWaWV3IHZpZXco
KSBjb25zdCB7IHJldHVybiBpc1NtYWxsU3RyaW5nKCkgPyBTdHJpbmdWaWV3KGNoYXJhY3RlcnM4
KCksIGxlbmd0aCgpKSA6IChpc051bGwoKSA/IFN0cmluZ1ZpZXcoKSA6IGltcGwoKS0+dmlldygp
KTsgfQogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENTdHJpbmcgYXNjaWkoKSBjb25zdDsKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgQ1N0cmluZyBsYXRpbjEoKSBjb25zdDsKQEAgLTE5NSwxOSAr
MjIyLDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5nIG51bWJlclRvU3RyaW5nRUNNQVNj
cmlwdChkb3VibGUpOwogCiAgICAgLy8gRmluZCBhIHNpbmdsZSBjaGFyYWN0ZXIgb3Igc3RyaW5n
LCBhbHNvIHdpdGggbWF0Y2ggZnVuY3Rpb24gJiBsYXRpbjEgZm9ybXMuCi0gICAgc2l6ZV90IGZp
bmQoVUNoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0IHsgcmV0dXJuIG1f
aW1wbCA/IG1faW1wbC0+ZmluZChjaGFyYWN0ZXIsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9Ci0KLSAg
ICBzaXplX3QgZmluZChjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbV9pbXBs
ID8gbV9pbXBsLT5maW5kKHN0cmluZy5pbXBsKCkpIDogbm90Rm91bmQ7IH0KLSAgICBzaXplX3Qg
ZmluZChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbCA/IG1faW1wbC0+ZmluZChzdHJpbmcuaW1wbCgpLCBzdGFydCkgOiBub3RGb3VuZDsg
fQotICAgIHNpemVfdCBmaW5kSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcp
IGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZy5pbXBsKCkpIDogbm90Rm91bmQ7IH0KLSAgICBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlD
YXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwo
KSwgc3RhcnRPZmZzZXQpIDogbm90Rm91bmQ7IH0KKyAgICBzaXplX3QgZmluZChVQ2hhciBjaGFy
YWN0ZXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QgeyByZXR1cm4gdmlldygpLmZpbmQoY2hh
cmFjdGVyLCBzdGFydCk7IH0KKyAgICBzaXplX3QgZmluZChjb25zdCBTdHJpbmcmIHN0cmluZywg
dW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiB2aWV3KCkuZmluZChzdHJpbmcudmll
dygpLCBzdGFydCk7IH0KKyAgICBzaXplX3QgZmluZElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDApIGNvbnN0IHsgcmV0dXJuIHZp
ZXcoKS5maW5kSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLnZpZXcoKSwgc3RhcnRPZmZzZXQpOyB9
CiAKLSAgICBzaXplX3QgZmluZChDb2RlVW5pdE1hdGNoRnVuY3Rpb24gbWF0Y2hGdW5jdGlvbiwg
dW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQo
bWF0Y2hGdW5jdGlvbiwgc3RhcnQpIDogbm90Rm91bmQ7IH0KLSAgICBzaXplX3QgZmluZChjb25z
dCBMQ2hhciogc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0IHsgcmV0dXJuIG1faW1w
bCA/IG1faW1wbC0+ZmluZChzdHJpbmcsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CisgICAgc2l6ZV90
IGZpbmQoQ29kZVVuaXRNYXRjaEZ1bmN0aW9uIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIHN0YXJ0
ID0gMCkgY29uc3QgeyByZXR1cm4gdmlldygpLmZpbmQobWF0Y2hGdW5jdGlvbiwgc3RhcnQpOyB9
CisgICAgc2l6ZV90IGZpbmQoY29uc3QgTENoYXIqIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAw
KSBjb25zdCB7IHJldHVybiB2aWV3KCkuZmluZChzdHJpbmcsIHN0YXJ0LCBudWxsb3B0KTsgfQog
CiAgICAgLy8gRmluZCB0aGUgbGFzdCBpbnN0YW5jZSBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIgb3Ig
c3RyaW5nLgotICAgIHNpemVfdCByZXZlcnNlRmluZChVQ2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVk
IHN0YXJ0ID0gTWF4TGVuZ3RoKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVy
c2VGaW5kKGNoYXJhY3Rlciwgc3RhcnQpIDogbm90Rm91bmQ7IH0KLSAgICBzaXplX3QgcmV2ZXJz
ZUZpbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gTWF4TGVuZ3RoKSBj
b25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kKHN0cmluZy5pbXBsKCks
IHN0YXJ0KSA6IG5vdEZvdW5kOyB9CisgICAgc2l6ZV90IHJldmVyc2VGaW5kKFVDaGFyIGNoYXJh
Y3RlciwgdW5zaWduZWQgc3RhcnQgPSBNYXhMZW5ndGgpIGNvbnN0IHsgcmV0dXJuIHZpZXcoKS5y
ZXZlcnNlRmluZChjaGFyYWN0ZXIsIHN0YXJ0KTsgfQorICAgIHNpemVfdCByZXZlcnNlRmluZChj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSBNYXhMZW5ndGgpIGNvbnN0IHsg
cmV0dXJuIHZpZXcoKS5yZXZlcnNlRmluZChzdHJpbmcudmlldygpLCBzdGFydCk7IH0KIAogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBWZWN0b3I8VUNoYXI+IGNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCkgY29uc3Q7CiAKQEAgLTIxOSwyMiArMjQzLDIyIEBAIHB1YmxpYzoKICAgICBib29s
IGNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsg
cmV0dXJuIGZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcpICE9IG5vdEZvdW5kOyB9CiAgICAg
Ym9vbCBjb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNp
Z25lZCBzdGFydE9mZnNldCkgY29uc3QgeyByZXR1cm4gZmluZElnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZywgc3RhcnRPZmZzZXQpICE9IG5vdEZvdW5kOyB9CiAKLSAgICBib29sIHN0YXJ0c1dpdGgo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+c3Rh
cnRzV2l0aChzdHJpbmcuaW1wbCgpKSA6IHN0cmluZy5pc0VtcHR5KCk7IH0KLSAgICBib29sIHN0
YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5n
LmltcGwoKSkgOiBzdHJpbmcuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBzdGFydHNXaXRoKFVDaGFy
IGNoYXJhY3RlcikgY29uc3QgeyByZXR1cm4gbV9pbXBsICYmIG1faW1wbC0+c3RhcnRzV2l0aChj
aGFyYWN0ZXIpOyB9Ci0gICAgdGVtcGxhdGU8dW5zaWduZWQgbWF0Y2hMZW5ndGg+IGJvb2wgc3Rh
cnRzV2l0aChjb25zdCBjaGFyICgmcHJlZml4KVttYXRjaExlbmd0aF0pIGNvbnN0IHsgcmV0dXJu
IG1faW1wbCA/IG1faW1wbC0+c3RhcnRzV2l0aDxtYXRjaExlbmd0aD4ocHJlZml4KSA6ICFtYXRj
aExlbmd0aDsgfQotICAgIGJvb2wgaGFzSW5maXhTdGFydGluZ0F0KGNvbnN0IFN0cmluZyYgcHJl
Zml4LCB1bnNpZ25lZCBzdGFydE9mZnNldCkgY29uc3QgeyByZXR1cm4gbV9pbXBsICYmIHByZWZp
eC5pbXBsKCkgJiYgbV9pbXBsLT5oYXNJbmZpeFN0YXJ0aW5nQXQoKnByZWZpeC5pbXBsKCksIHN0
YXJ0T2Zmc2V0KTsgfQorICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmcmIHN0cmluZykg
Y29uc3QgeyByZXR1cm4gdmlldygpLnN0YXJ0c1dpdGgoc3RyaW5nLmltcGwoKSk7IH0KKyAgICBi
b29sIHN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmIHN0cmluZykgY29u
c3QgeyByZXR1cm4gdmlldygpLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcudmll
dygpKTsgfQorICAgIGJvb2wgc3RhcnRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0IHsgcmV0
dXJuIHZpZXcoKS5zdGFydHNXaXRoKGNoYXJhY3Rlcik7IH0KKyAgICB0ZW1wbGF0ZTx1bnNpZ25l
ZCBtYXRjaExlbmd0aD4gYm9vbCBzdGFydHNXaXRoKGNvbnN0IGNoYXIgKCZwcmVmaXgpW21hdGNo
TGVuZ3RoXSkgY29uc3QgeyB2aWV3KCkuc3RhcnRzV2l0aDxtYXRjaExlbmd0aD4ocHJlZml4KTsg
fQorICAgIGJvb2wgaGFzSW5maXhTdGFydGluZ0F0KGNvbnN0IFN0cmluZyYgcHJlZml4LCB1bnNp
Z25lZCBzdGFydE9mZnNldCkgY29uc3QgeyByZXR1cm4gIWlzTnVsbCgpICYmICFwcmVmaXguaXNO
dWxsKCkgJiYgdmlldygpLmhhc0luZml4U3RhcnRpbmdBdChwcmVmaXgudmlldygpLCBzdGFydE9m
ZnNldCk7IH0KIAotICAgIGJvb2wgZW5kc1dpdGgoY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0
IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZW5kc1dpdGgoc3RyaW5nLmltcGwoKSkgOiBzdHJp
bmcuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBlbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0
IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmVuZHNXaXRo
SWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwoKSkgOiBzdHJpbmcuaXNFbXB0eSgpOyB9Ci0g
ICAgYm9vbCBlbmRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCAm
JiBtX2ltcGwtPmVuZHNXaXRoKGNoYXJhY3Rlcik7IH0KKyAgICBib29sIGVuZHNXaXRoKGNvbnN0
IFN0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiB2aWV3KCkuZW5kc1dpdGgoc3RyaW5nLnZp
ZXcoKSk7IH0KKyAgICBib29sIGVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoY29uc3QgU3RyaW5n
JiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIHZpZXcoKS5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNl
KHN0cmluZy52aWV3KCkpOyB9CisgICAgYm9vbCBlbmRzV2l0aChVQ2hhciBjaGFyYWN0ZXIpIGNv
bnN0IHsgcmV0dXJuIHZpZXcoKS5lbmRzV2l0aChjaGFyYWN0ZXIpOyB9CiAgICAgYm9vbCBlbmRz
V2l0aChjaGFyIGNoYXJhY3RlcikgY29uc3QgeyByZXR1cm4gZW5kc1dpdGgoc3RhdGljX2Nhc3Q8
VUNoYXI+KGNoYXJhY3RlcikpOyB9Ci0gICAgdGVtcGxhdGU8dW5zaWduZWQgbWF0Y2hMZW5ndGg+
IGJvb2wgZW5kc1dpdGgoY29uc3QgY2hhciAoJnByZWZpeClbbWF0Y2hMZW5ndGhdKSBjb25zdCB7
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmVuZHNXaXRoPG1hdGNoTGVuZ3RoPihwcmVmaXgpIDog
IW1hdGNoTGVuZ3RoOyB9Ci0gICAgYm9vbCBoYXNJbmZpeEVuZGluZ0F0KGNvbnN0IFN0cmluZyYg
c3VmZml4LCB1bnNpZ25lZCBlbmRPZmZzZXQpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCAmJiBzdWZm
aXguaW1wbCgpICYmIG1faW1wbC0+aGFzSW5maXhFbmRpbmdBdCgqc3VmZml4LmltcGwoKSwgZW5k
T2Zmc2V0KTsgfQorICAgIHRlbXBsYXRlPHVuc2lnbmVkIG1hdGNoTGVuZ3RoPiBib29sIGVuZHNX
aXRoKGNvbnN0IGNoYXIgKCZwcmVmaXgpW21hdGNoTGVuZ3RoXSkgY29uc3QgeyByZXR1cm4gdmll
dygpLmVuZHNXaXRoPG1hdGNoTGVuZ3RoPihwcmVmaXgpOyB9CisgICAgYm9vbCBoYXNJbmZpeEVu
ZGluZ0F0KGNvbnN0IFN0cmluZyYgc3VmZml4LCB1bnNpZ25lZCBlbmRPZmZzZXQpIGNvbnN0IHsg
cmV0dXJuIHZpZXcoKS5oYXNJbmZpeEVuZGluZ0F0KCpzdWZmaXguaW1wbCgpLCBlbmRPZmZzZXQp
OyB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKExDaGFyKTsKLSAgICB2b2lkIGFw
cGVuZChjaGFyIGNoYXJhY3RlcikgeyBhcHBlbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3Rl
cikpOyB9OworICAgIHZvaWQgYXBwZW5kKGNoYXIgY2hhcmFjdGVyKSB7IHJldHVybiBhcHBlbmQo
c3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3RlcikpOyB9OwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGFwcGVuZChVQ2hhcik7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5k
KGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhcHBlbmQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwpAQCAtMjQ0LDE0ICsy
NjgsMTUgQEAgcHVibGljOgogICAgIFN0cmluZyYgcmVwbGFjZShVQ2hhciB0YXJnZXQsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnQpOwogICAgIFN0cmluZyYgcmVwbGFjZShjb25zdCBTdHJpbmcm
IHRhcmdldCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCk7CiAgICAgU3RyaW5nJiByZXBsYWNl
KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1l
bnQpOwotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50PiBTdHJpbmcmIHJlcGxh
Y2VXaXRoTGl0ZXJhbChVQ2hhciB0YXJnZXQsIGNvbnN0IGNoYXIgKCZyZXBsYWNlbWVudClbY2hh
cmFjdGVyQ291bnRdKTsKKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KKyAg
ICBTdHJpbmcmIHJlcGxhY2VXaXRoTGl0ZXJhbChVQ2hhciB0YXJnZXQsIGNvbnN0IGNoYXIgKCZy
ZXBsYWNlbWVudClbY2hhcmFjdGVyQ291bnRdKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHRydW5jYXRlKHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGggPSAxKTsKIAogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgc3Vic3RyaW5nKHVuc2lnbmVkIHBvc2l0aW9uLCB1
bnNpZ25lZCBsZW5ndGggPSBNYXhMZW5ndGgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgc3Vic3RyaW5nU2hhcmluZ0ltcGwodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVk
IGxlbmd0aCA9IE1heExlbmd0aCkgY29uc3Q7Ci0gICAgU3RyaW5nIGxlZnQodW5zaWduZWQgbGVu
Z3RoKSBjb25zdCB7IHJldHVybiBzdWJzdHJpbmcoMCwgbGVuZ3RoKTsgfQorICAgIFN0cmluZyBs
ZWZ0KHVuc2lnbmVkIGxlbmd0aCkgY29uc3QgeyByZXR1cm4gc3Vic3RyaW5nKDB1LCBsZW5ndGgp
OyB9CiAgICAgU3RyaW5nIHJpZ2h0KHVuc2lnbmVkIGxlbmd0aCkgY29uc3QgeyByZXR1cm4gc3Vi
c3RyaW5nKHRoaXMtPmxlbmd0aCgpIC0gbGVuZ3RoLCBsZW5ndGgpOyB9CiAKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgU3RyaW5nIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3Q7CkBAIC0y
NzUsOCArMzAwLDggQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyBhbiB1bmluaXRpYWxpemVk
IHN0cmluZy4gVGhlIGNoYXJhY3RlcnMgbmVlZHMgdG8gYmUgd3JpdHRlbgogICAgIC8vIGludG8g
dGhlIGJ1ZmZlciByZXR1cm5lZCBpbiBkYXRhIGJlZm9yZSB0aGUgcmV0dXJuZWQgc3RyaW5nIGlz
IHVzZWQuCi0gICAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCwgVUNoYXIqJiBkYXRhKSB7IHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgZGF0YSk7IH0KLSAgICBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpIHsgcmV0dXJuIFN0cmluZ0ltcGw6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhKTsgfQorLy8gICAgc3RhdGljIFN0cmluZyBj
cmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBkYXRhKSB7IHJldHVy
biBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YSk7IH0KKy8vICAg
IHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIExDaGFy
KiYgZGF0YSkgeyByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgs
IGRhdGEpOyB9CiAKICAgICB1c2luZyBTcGxpdEZ1bmN0b3IgPSBXVEY6OkZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3RyaW5nVmlldyYpPjsKIApAQCAtMzA4LDYgKzMzMyw4IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgcGVyY2VudGFnZShpbnQmIHBlcmNlbnRhZ2UpIGNvbnN0OwogCisgICAgaW5saW5lIEF0
b21pY1N0cmluZyB0b0F0b21pY1N0cmluZygpIGNvbnN0OworCiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIFN0cmluZyBpc29sYXRlZENvcHkoKSBjb25zdCAmOwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgaXNvbGF0ZWRDb3B5KCkgJiY7CiAKQEAgLTM2NywxNiArMzk0LDE4IEBAIHB1Ymxp
YzoKICAgICAvLyBEZXRlcm1pbmVzIHRoZSB3cml0aW5nIGRpcmVjdGlvbiB1c2luZyB0aGUgVW5p
Y29kZSBCaWRpIEFsZ29yaXRobSBydWxlcyBQMiBhbmQgUDMuCiAgICAgVUNoYXJEaXJlY3Rpb24g
ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oYm9vbCogaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPSBu
dWxscHRyKSBjb25zdDsKIAotICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsgcmV0dXJuICFt
X2ltcGwgfHwgbV9pbXBsLT5pc0FsbEFTQ0lJKCk7IH0KLSAgICBib29sIGlzQWxsTGF0aW4xKCkg
Y29uc3QgeyByZXR1cm4gIW1faW1wbCB8fCBtX2ltcGwtPmlzQWxsTGF0aW4xKCk7IH0KLSAgICB0
ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGJvb2wgaXNBbGxTcGVjaWFs
Q2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGwgfHwgbV9pbXBsLT5pc0FsbFNwZWNp
YWxDaGFyYWN0ZXJzPGlzU3BlY2lhbENoYXJhY3Rlcj4oKTsgfQorICAgIGJvb2wgaXNBbGxBU0NJ
SSgpIGNvbnN0IHsgcmV0dXJuICFoYXNJbXBsKCkgfHwgaW1wbCgpLT5pc0FsbEFTQ0lJKCk7IH0K
KyAgICBib29sIGlzQWxsTGF0aW4xKCkgY29uc3QgeyByZXR1cm4gIWhhc0ltcGwoKSB8fCBpbXBs
KCktPmlzQWxsTGF0aW4xKCk7IH0KKyAgICB0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3Rl
cihVQ2hhcik+IGJvb2wgaXNBbGxTcGVjaWFsQ2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIGlz
TnVsbCgpIHx8IHZpZXcoKS5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzU3BlY2lhbENoYXJhY3Rl
cj4oKTsgfQogCiAgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9u
bHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCi0gICAgU3RyaW5n
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2ltcGwoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWUpIHsgfQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX2ltcGwuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQorICAgIC8vIFNp
bmNlIHVpbnQ2NF90IG1heCBoYXMgaXRzIGhpZ2ggYml0IHNldCB3ZSBkb24ndCBoYXZlIHRvIHdv
cnJ5IGFib3V0IGNvbmZ1c2luZyB0aGlzIHdpdGggYSBzbWFsbCBzdHJpbmcuCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50NjRfdCBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7IH0KKyAgICBTdHJpbmcoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKSB7IHUubV9kYXRhID0gaGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCk7IH0KKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
dS5tX2RhdGEgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KIAotICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdCB7IHJldHVybiBpc051bGwoKSA/IDAgOiBpbXBsKCktPmhhc2goKTsgfQotICAg
IHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0IHsgcmV0dXJuIGlzTnVsbCgpID8gMCA6IGlt
cGwoKS0+ZXhpc3RpbmdIYXNoKCk7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gaGFzSW1wbCgpID8gaW1wbCgpLT5oYXNoKCkgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKHUu
bV9kYXRhID4+IDMyKSBeIHUubV9kYXRhKTsgfQorICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgp
IGNvbnN0IHsgcmV0dXJuIGhhc0ltcGwoKSA/IGltcGwoKS0+ZXhpc3RpbmdIYXNoKCkgOiBoYXNo
KCk7IH0KIAogI2lmbmRlZiBOREVCVUcKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzaG93
KCkgY29uc3Q7CkBAIC0zODgsMjUgKzQxNyw5OSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIE1heExlbmd0aCA9IFN0cmluZ0ltcGw6Ok1heExlbmd0aDsKIAorICAg
IC8vIFdlIHByb2JhYmx5IHNob3VsZG4ndCBoYXZlIHRoaXMgYnV0IGl0J3MgY29udmVpZW50IGZv
ciB0aGUgb3BlcmF0b3IgPT0gaW1wbGVtZW50YXRpb25zIGJlbG93LgorICAgIHVpbnQ2NF90IGNv
bnRlbnRzKCkgY29uc3QgeyByZXR1cm4gdS5tX2RhdGE7IH0KIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIEF0b21pY1N0cmluZzsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiB2b2lkIHJlbW92ZUludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqLCB1bnNpZ25lZCwgdW5z
aWduZWQpOwogCiAgICAgdGVtcGxhdGU8Ym9vbCBhbGxvd0VtcHR5RW50cmllcz4gdm9pZCBzcGxp
dEludGVybmFsKFVDaGFyIHNlcGFyYXRvciwgY29uc3QgU3BsaXRGdW5jdG9yJikgY29uc3Q7CiAg
ICAgdGVtcGxhdGU8Ym9vbCBhbGxvd0VtcHR5RW50cmllcz4gVmVjdG9yPFN0cmluZz4gc3BsaXRJ
bnRlcm5hbChVQ2hhciBzZXBhcmF0b3IpIGNvbnN0OwogICAgIHRlbXBsYXRlPGJvb2wgYWxsb3dF
bXB0eUVudHJpZXM+IFZlY3RvcjxTdHJpbmc+IHNwbGl0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiBz
ZXBhcmF0b3IpIGNvbnN0OwogCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1faW1wbDsKKyAgICBz
dHJ1Y3QgU3RyaW5nUHRyVHJhaXRzIHsKKyAgICAgICAgc3RydWN0IFN0b3JhZ2VUeXBlIHsKKwor
ICAgICAgICAgICAgU3RvcmFnZVR5cGUoU3RyaW5nSW1wbCogaW1wbCkgOiBtX2RhdGEoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbXBsKSkgfCBwb2lu
dGVyRmxhZykgeyB9CisKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIGdldCgpIGNvbnN0IHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RyaW5nSW1wbCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
bV9kYXRhICYgcG9pbnRlck1hc2spKTsgfQorCisgICAgICAgICAgICB1aW50NjRfdCBtX2RhdGEg
eyBwb2ludGVyRmxhZyB9OworICAgICAgICB9OworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihTdHJpbmdJbXBsKikgPD0gc2l6ZW9mKFN0b3JhZ2VUeXBlKSwgIiIpOworCisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk
Ojppc19wb2ludGVyPFU+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VSwgbnVsbHB0cl90Pjo6dmFs
dWU+Ojp0eXBlPgorICAgICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdJbXBsKiBleGNo
YW5nZShTdG9yYWdlVHlwZSYgcHRyLCBVJiYgbmV3VmFsdWUpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFu
Z2UocHRyLCBTdG9yYWdlVHlwZShuZXdWYWx1ZSkpLmdldCgpOyB9CisKKyAgICAgICAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgdm9pZCBzd2FwKFN0b3JhZ2VUeXBlJiBhLCBTdHJpbmdJbXBsKiYgYikg
eworICAgICAgICAgICAgU3RyaW5nSW1wbCogdGVtcCA9IGEuZ2V0KCk7CisgICAgICAgICAgICBh
ID0gYjsKKyAgICAgICAgICAgIGIgPSB0ZW1wOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIHZvaWQgc3dhcChTdG9yYWdlVHlwZSYgYSwgU3RvcmFnZVR5cGUmIGIpIHsg
c3RkOjpzd2FwKGEsIGIpOyB9CisgICAgICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFN0cmluZ0lt
cGwqIHVud3JhcChjb25zdCBTdG9yYWdlVHlwZSYgcHRyKSB7IHJldHVybiBwdHIuZ2V0KCk7IH0K
KyAgICB9OworCisgICAgdW5pb24gQ29udGVudHMgeworICAgICAgICB1aW50NjRfdCBtX2RhdGE7
CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsLCBTdHJpbmdQdHJUcmFpdHM+IG1faW1wbDsKKwor
ICAgICAgICBDb250ZW50cygpIDogbV9pbXBsKG51bGxwdHIpIHsgfQorICAgICAgICBDb250ZW50
cyhjb25zdCBDb250ZW50cyYgb3RoZXIpIHsKKyAgICAgICAgICAgIGlmIChvdGhlci5tX2RhdGEg
JiBwb2ludGVyRmxhZykKKyAgICAgICAgICAgICAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOwor
ICAgICAgICB9CisgICAgICAgIENvbnRlbnRzKENvbnRlbnRzJiYgb3RoZXIpIHsKKyAgICAgICAg
ICAgIGlmIChvdGhlci5tX2RhdGEgJiBwb2ludGVyRmxhZykKKyAgICAgICAgICAgICAgICBtX2lt
cGwgPSBXVEZNb3ZlKG90aGVyLm1faW1wbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOworICAgICAgICB9CisKKyAgICAgICAgQ29udGVu
dHMmIG9wZXJhdG9yPShjb25zdCBDb250ZW50cyYgb3RoZXIpIHsKKyAgICAgICAgICAgIGlmIChv
dGhlci5tX2RhdGEgJiBwb2ludGVyRmxhZykKKyAgICAgICAgICAgICAgICBtX2ltcGwgPSBvdGhl
ci5tX2ltcGw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9kYXRhID0gb3Ro
ZXIubV9kYXRhOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAg
IENvbnRlbnRzJiBvcGVyYXRvcj0oQ29udGVudHMmJiBvdGhlcikgeworICAgICAgICAgICAgaWYg
KG90aGVyLm1fZGF0YSAmIHBvaW50ZXJGbGFnKQorICAgICAgICAgICAgICAgIG1faW1wbCA9IFdU
Rk1vdmUob3RoZXIubV9pbXBsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X2RhdGEgPSBvdGhlci5tX2RhdGE7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
IH0KKworICAgICAgICB+Q29udGVudHMoKSB7IGlmIChtX2RhdGEgJiBwb2ludGVyRmxhZykgbV9p
bXBsLn5SZWZQdHIoKTsgfQorICAgIH07CisKKyAgICBDb250ZW50cyB1OwogfTsKIAotc3RhdGlj
X2Fzc2VydChzaXplb2YoU3RyaW5nKSA9PSBzaXplb2Yodm9pZCopLCAiU3RyaW5nIHNob3VsZCBl
ZmZlY3RpdmVseSBiZSBhIHBvaW50ZXIgdG8gYSBTdHJpbmdJbXBsLCBhbmQgZWZmaWNpZW50IHRv
IHBhc3MgYnkgdmFsdWUiKTsKK3N0YXRpY19hc3NlcnQoc2l6ZW9mKFN0cmluZykgPT0gc2l6ZW9m
KHVpbnQ2NF90KSwgIlN0cmluZyBzaG91bGQgYmUgNjQtYml0cyIpOwogCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVh
bChhLmltcGwoKSwgYi5pbXBsKCkpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0
cmluZyYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBiKTsgfQot
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsg
cmV0dXJuIGVxdWFsKGEuaW1wbCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikp
OyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZyYgYSwgQVNDSUlMaXRlcmFs
IGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oYi5jaGFyYWN0ZXJzKCkpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMQ2hh
ciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLCBiLmltcGwoKSk7IH0KLWlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJl
dHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSksIGIuaW1wbCgpKTsg
fQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShBU0NJSUxpdGVyYWwgYSwgY29uc3QgU3RyaW5nJiBi
KSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYS5jaGFyYWN0
ZXJzKCkpLCBiLmltcGwoKSk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5n
JiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGEuaGFzSW1wbCgpICYmIGIuaGFzSW1wbCgp
ID8gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKSA6IGEuY29udGVudHMoKSA9PSBiLmNvbnRlbnRz
KCk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBMQ2hh
ciogYikKK3sKKyAgICBpZiAoYS5oYXNJbXBsKCkpCisgICAgICAgIHJldHVybiBlcXVhbChhLmlt
cGwoKSwgYik7CisgICAgLy8gVE9ETworICAgIHJldHVybiB0cnVlOworfQoraW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIGEgPT0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpOyB9CisgICAgLy8gRklYTUU6IEluIHRo
ZW9yeSB3ZSBzaG91bGQga25vdyB0aGF0IHRoaXMgc3RyaW5nIGlzIGluIHRleHQgc2VjdGlvbiBz
byB3ZSBjb3VsZCBsb2FkIGFzIGlmIGl0IHdlcmUgYW4KK0FMV0FZU19JTkxJTkUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFN0cmluZyYgYSwgQVNDSUlMaXRlcmFsIGIpCit7CisgICAgaWYgKGIubGVu
Z3RoKCkgPCBTdHJpbmc6Om1heFNtYWxsU3RyaW5nTGVuZ3RoKQorICAgICAgICByZXR1cm4gYS5j
b250ZW50cygpID09IFN0cmluZzo6dG9QYWNrZWRTdHJpbmcoYi5jaGFyYWN0ZXJzOCgpLCBiLmxl
bmd0aCgpKTsKKyAgICByZXR1cm4gYSA9PSByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
Yi5jaGFyYWN0ZXJzKCkpOworfQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMQ2hhciog
YSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBiID09IGE7IH0KK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBiID09IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShB
U0NJSUxpdGVyYWwgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBiID09IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihhLmNoYXJhY3RlcnMoKSk7IH0KIHRlbXBsYXRlPHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWZWN0b3I8Y2hhciwg
aW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGIuaW1w
bCgpLCBhLmRhdGEoKSwgYS5zaXplKCkpOyB9CiB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNp
dHk+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBWZWN0b3I8
Y2hhciwgaW5saW5lQ2FwYWNpdHk+JiBiKSB7IHJldHVybiBiID09IGE7IH0KIApAQCAtNDQ1LDkg
KzU0OCw4IEBAIGJvb2wgY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIGFw
cGVuZE51bWJlcihWZWN0b3I8Q2hhcmFjdGVyVHlwZT4mLCB1bnNpZ25lZCBjaGFyIG51bWJlcik7
CiAKLS8vIFNoYXJlZCBnbG9iYWwgZW1wdHkgYW5kIG51bGwgc3RyaW5nLgotV1RGX0VYUE9SVF9Q
UklWQVRFIGNvbnN0IFN0cmluZyYgZW1wdHlTdHJpbmcoKTsKLVdURl9FWFBPUlRfUFJJVkFURSBj
b25zdCBTdHJpbmcmIG51bGxTdHJpbmcoKTsKK0FMV0FZU19JTkxJTkUgU3RyaW5nIGVtcHR5U3Ry
aW5nKCkgeyByZXR1cm4gU3RyaW5nOjplbXB0eVN0cmluZygpOyB9CitBTFdBWVNfSU5MSU5FIFN0
cmluZyBudWxsU3RyaW5nKCkgeyByZXR1cm4gU3RyaW5nOjpudWxsU3RyaW5nKCk7IH0KIAogdGVt
cGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEZWZhdWx0SGFzaDsKIHRlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPFN0cmluZz4geyB1c2luZyBIYXNoID0gU3RyaW5nSGFzaDsgfTsKQEAgLTQ2Miwx
MDQgKzU2NCwxMDggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSW50ZWdlclRvU3RyaW5nQ29udmVyc2lv
blRyYWl0PFN0cmluZz4gewogICAgIHN0YXRpYyBTdHJpbmcgZmx1c2goTENoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCopIHsgcmV0dXJuIHsgY2hhcmFjdGVycywgbGVuZ3Ro
IH07IH0KIH07CiAKLS8vIERlZmluaXRpb25zIG9mIHN0cmluZyBvcGVyYXRpb25zCisvLyBOb24t
Zm9yd2FyZGluZyBDb25zdHJ1Y3RvcnMKIAotaW5saW5lIFN0cmluZzo6U3RyaW5nKFN0cmluZ0lt
cGwmIHN0cmluZykKLSAgICA6IG1faW1wbCgmc3RyaW5nKQorU3RyaW5nOjpTdHJpbmcoUmVmUHRy
PFN0cmluZ0ltcGw+JiYgaW1wbCkKIHsKKyAgICBpZiAoaW1wbCAmJiBpbXBsLT5pczhCaXQoKSAm
JiAhaW1wbC0+aXNTeW1ib2woKSAmJiBzaG91bGRCZVNtYWxsU3RyaW5nKGltcGwtPmNoYXJhY3Rl
cnM4KCksIGltcGwtPmxlbmd0aCgpKSkKKyAgICAgICAgdS5tX2RhdGEgPSB0b1BhY2tlZFN0cmlu
ZyhpbXBsLT5jaGFyYWN0ZXJzOCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAgZWxzZQorICAgICAg
ICB1Lm1faW1wbCA9IFdURk1vdmUoaW1wbCk7CiB9CiAKLWlubGluZSBTdHJpbmc6OlN0cmluZyhT
dHJpbmdJbXBsKiBzdHJpbmcpCi0gICAgOiBtX2ltcGwoc3RyaW5nKQotewotfQogCi1pbmxpbmUg
U3RyaW5nOjpTdHJpbmcoUmVmPFN0cmluZ0ltcGw+JiYgc3RyaW5nKQotICAgIDogbV9pbXBsKFdU
Rk1vdmUoc3RyaW5nKSkKK1N0cmluZzo6U3RyaW5nKFN0YXRpY1N0cmluZ0ltcGwmIHN0YXRpY0lt
cGwpCiB7CisgICAgU3RyaW5nSW1wbCYgaW1wbCA9IHN0YXRpY0ltcGw7CisgICAgQVNTRVJUKCFp
bXBsLmlzU3ltYm9sKCkpOworICAgIGlmIChpbXBsLmlzOEJpdCgpICYmIHNob3VsZEJlU21hbGxT
dHJpbmcoaW1wbC5jaGFyYWN0ZXJzOCgpLCBpbXBsLmxlbmd0aCgpKSkKKyAgICAgICAgdS5tX2Rh
dGEgPSB0b1BhY2tlZFN0cmluZyhpbXBsLmNoYXJhY3RlcnM4KCksIGltcGwubGVuZ3RoKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgdS5tX2ltcGwgPSBtYWtlUmVmUHRyKGltcGwpOwogfQogCi1pbmxp
bmUgU3RyaW5nOjpTdHJpbmcoUmVmUHRyPFN0cmluZ0ltcGw+JiYgc3RyaW5nKQotICAgIDogbV9p
bXBsKFdURk1vdmUoc3RyaW5nKSkKK3RlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50Pgor
U3RyaW5nOjpTdHJpbmcoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSwg
Q29uc3RydWN0RnJvbUxpdGVyYWxUYWcpCiB7CisgICAgaWYgKGNoYXJhY3RlckNvdW50IDw9IG1h
eFNtYWxsU3RyaW5nTGVuZ3RoKQorICAgICAgICB1Lm1fZGF0YSA9IHRvUGFja2VkU3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigmY2hhcmFjdGVycyksIGNoYXJhY3RlckNvdW50
KTsKKyAgICBlbHNlCisgICAgICAgIHUubV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlRnJvbUxp
dGVyYWw8Y2hhcmFjdGVyQ291bnQ+KGNoYXJhY3RlcnMpOwogfQogCi1pbmxpbmUgU3RyaW5nOjpT
dHJpbmcoUmVmPEF0b21pY1N0cmluZ0ltcGw+JiYgc3RyaW5nKQotICAgIDogbV9pbXBsKFdURk1v
dmUoc3RyaW5nKSkKLXsKLX0KKy8vIERlZmluaXRpb25zIG9mIHN0cmluZyBvcGVyYXRpb25zCiAK
LWlubGluZSBTdHJpbmc6OlN0cmluZyhSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4mJiBzdHJpbmcp
Ci0gICAgOiBtX2ltcGwoV1RGTW92ZShzdHJpbmcpKQotewotfQogCi1pbmxpbmUgU3RyaW5nOjpT
dHJpbmcoU3RhdGljU3RyaW5nSW1wbCYgc3RyaW5nKQotICAgIDogbV9pbXBsKHJlaW50ZXJwcmV0
X2Nhc3Q8U3RyaW5nSW1wbCo+KCZzdHJpbmcpKQorU3RyaW5nOjpTdHJpbmcoU3RyaW5nSW1wbCog
aW1wbCkKKyAgICA6IFN0cmluZyhtYWtlUmVmUHRyKGltcGwpKQogewogfQogCi1pbmxpbmUgU3Ry
aW5nOjpTdHJpbmcoU3RhdGljU3RyaW5nSW1wbCogc3RyaW5nKQotICAgIDogbV9pbXBsKHJlaW50
ZXJwcmV0X2Nhc3Q8U3RyaW5nSW1wbCo+KHN0cmluZykpCitTdHJpbmc6OlN0cmluZyhTdHJpbmdJ
bXBsJiBzdHJpbmcpCisgICAgOiBTdHJpbmcoJnN0cmluZykKIHsKIH0KIAotdGVtcGxhdGU8c2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IFN0cmluZzo6U3Ry
aW5nKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4m
IHZlY3RvcikKLSAgICA6IG1faW1wbCh2ZWN0b3Iuc2l6ZSgpID8gU3RyaW5nSW1wbDo6Y3JlYXRl
KHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpIDogUmVmPFN0cmluZ0ltcGw+IHsgKlN0cmlu
Z0ltcGw6OmVtcHR5KCkgfSkKK1N0cmluZzo6U3RyaW5nKFJlZjxTdHJpbmdJbXBsPiYmIHN0cmlu
ZykKKyAgICA6IFN0cmluZyhhZG9wdFJlZigmc3RyaW5nLmxlYWtSZWYoKSkpCiB7CiB9CiAKLXRl
bXBsYXRlPD4gaW5saW5lIGNvbnN0IExDaGFyKiBTdHJpbmc6OmNoYXJhY3RlcnM8TENoYXI+KCkg
Y29uc3QKK1N0cmluZzo6U3RyaW5nKFN0YXRpY1N0cmluZ0ltcGwqIHN0cmluZykKKyAgICA6IFN0
cmluZygqc3RyaW5nKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzOCgpOwogfQogCi10ZW1wbGF0
ZTw+IGlubGluZSBjb25zdCBVQ2hhciogU3RyaW5nOjpjaGFyYWN0ZXJzPFVDaGFyPigpIGNvbnN0
Cit0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
cj4KK1N0cmluZzo6U3RyaW5nKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj4mKQorICAgIC8vIDogbV9pbXBsKHZlY3Rvci5zaXplKCkgPyBTdHJpbmdJ
bXBsOjpjcmVhdGUodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSkgOiBSZWY8U3RyaW5nSW1w
bD4geyAqU3RyaW5nSW1wbDo6ZW1wdHkoKSB9KQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzMTYo
KTsKKyAgICAvLyBUT0RPLi4uCisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiB9CiAK
IGlubGluZSBVQ2hhciBTdHJpbmc6OmNoYXJhY3RlckF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAog
ewotICAgIGlmICghbV9pbXBsIHx8IGluZGV4ID49IG1faW1wbC0+bGVuZ3RoKCkpCisgICAgaWYg
KGluZGV4ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKCptX2lt
cGwpW2luZGV4XTsKLX0KLQotaW5saW5lIFN0cmluZyYgU3RyaW5nOjpyZXBsYWNlKFVDaGFyIHRh
cmdldCwgVUNoYXIgcmVwbGFjZW1lbnQpCi17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9p
bXBsID0gbV9pbXBsLT5yZXBsYWNlKHRhcmdldCwgcmVwbGFjZW1lbnQpOwotICAgIHJldHVybiAq
dGhpczsKLX0KLQotaW5saW5lIFN0cmluZyYgU3RyaW5nOjpyZXBsYWNlKFVDaGFyIHRhcmdldCwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKLXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBt
X2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UodGFyZ2V0LCByZXBsYWNlbWVudC5pbXBsKCkpOwotICAg
IHJldHVybiAqdGhpczsKLX0KLQotaW5saW5lIFN0cmluZyYgU3RyaW5nOjpyZXBsYWNlKGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQotewotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbCA9IG1faW1wbC0+cmVwbGFjZSh0YXJnZXQuaW1wbCgpLCBy
ZXBsYWNlbWVudC5pbXBsKCkpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotaW5saW5lIFN0cmlu
ZyYgU3RyaW5nOjpyZXBsYWNlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnQpCi17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
ID0gbV9pbXBsLT5yZXBsYWNlKHN0YXJ0LCBsZW5ndGgsIHJlcGxhY2VtZW50LmltcGwoKSk7Ci0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4g
QUxXQVlTX0lOTElORSBTdHJpbmcmIFN0cmluZzo6cmVwbGFjZVdpdGhMaXRlcmFsKFVDaGFyIHRh
cmdldCwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlckNvdW50XSkKLXsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UodGFyZ2V0LCBjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJDb3VudCAtIDEpOwotICAgIHJldHVybiAqdGhpczsKLX0KKyAgICBy
ZXR1cm4gdmlldygpW2luZGV4XTsKK30KKworLy9pbmxpbmUgU3RyaW5nJiBTdHJpbmc6OnJlcGxh
Y2UoVUNoYXIgdGFyZ2V0LCBVQ2hhciByZXBsYWNlbWVudCkKKy8veworLy8gICAgaWYgKG1faW1w
bCkKKy8vICAgICAgICBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UodGFyZ2V0LCByZXBsYWNlbWVu
dCk7CisvLyAgICByZXR1cm4gKnRoaXM7CisvL30KKy8vCisvL2lubGluZSBTdHJpbmcmIFN0cmlu
Zzo6cmVwbGFjZShVQ2hhciB0YXJnZXQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCisvL3sK
Ky8vICAgIGlmIChtX2ltcGwpCisvLyAgICAgICAgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKHRh
cmdldCwgcmVwbGFjZW1lbnQuaW1wbCgpKTsKKy8vICAgIHJldHVybiAqdGhpczsKKy8vfQorLy8K
Ky8vaW5saW5lIFN0cmluZyYgU3RyaW5nOjpyZXBsYWNlKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQorLy97CisvLyAgICBpZiAobV9pbXBsKQorLy8gICAg
ICAgIG1faW1wbCA9IG1faW1wbC0+cmVwbGFjZSh0YXJnZXQuaW1wbCgpLCByZXBsYWNlbWVudC5p
bXBsKCkpOworLy8gICAgcmV0dXJuICp0aGlzOworLy99CisvLworLy9pbmxpbmUgU3RyaW5nJiBT
dHJpbmc6OnJlcGxhY2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudCkKKy8veworLy8gICAgaWYgKG1faW1wbCkKKy8vICAgICAgICBtX2lt
cGwgPSBtX2ltcGwtPnJlcGxhY2Uoc3RhcnQsIGxlbmd0aCwgcmVwbGFjZW1lbnQuaW1wbCgpKTsK
Ky8vICAgIHJldHVybiAqdGhpczsKKy8vfQorCisvL3RlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3Rl
ckNvdW50PiBBTFdBWVNfSU5MSU5FIFN0cmluZyYgU3RyaW5nOjpyZXBsYWNlV2l0aExpdGVyYWwo
VUNoYXIgdGFyZ2V0LCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVyQ291bnRdKQor
Ly97CisvLyAgICBpZiAobV9pbXBsKQorLy8gICAgICAgIG1faW1wbCA9IG1faW1wbC0+cmVwbGFj
ZSh0YXJnZXQsIGNoYXJhY3RlcnMsIGNoYXJhY3RlckNvdW50IC0gMSk7CisvLyAgICByZXR1cm4g
KnRoaXM7CisvL30KIAogdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgU3Ry
aW5nIFN0cmluZzo6bWFrZThCaXRGcm9tMTZCaXRTb3VyY2UoY29uc3QgVmVjdG9yPFVDaGFyLCBp
bmxpbmVDYXBhY2l0eT4mIGJ1ZmZlcikKIHsKQEAgLTU2OCw4ICs2NzQsOCBAQCB0ZW1wbGF0ZTxz
aXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSBTdHJpbmcgU3RyaW5nOjptYWtlOEJpdEZyb20x
NkJpdFNvdXJjZShjbwogCiBpbmxpbmUgVUNoYXJEaXJlY3Rpb24gU3RyaW5nOjpkZWZhdWx0V3Jp
dGluZ0RpcmVjdGlvbihib29sKiBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkgY29uc3QKIHsKLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5kZWZhdWx0V3JpdGluZ0RpcmVj
dGlvbihoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSk7CisgICAgaWYgKGhhc0ltcGwoKSkKKyAgICAg
ICAgcmV0dXJuIGltcGwoKS0+ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oaGFzU3Ryb25nRGlyZWN0
aW9uYWxpdHkpOwogICAgIGlmIChoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkKICAgICAgICAgKmhh
c1N0cm9uZ0RpcmVjdGlvbmFsaXR5ID0gZmFsc2U7CiAgICAgcmV0dXJuIFVfTEVGVF9UT19SSUdI
VDsKQEAgLTU3NywzMSArNjgzLDM3IEBAIGlubGluZSBVQ2hhckRpcmVjdGlvbiBTdHJpbmc6OmRl
ZmF1bHRXcml0aW5nRGlyZWN0aW9uKGJvb2wqIGhhc1N0cm9uZ0RpcmVjdGlvbmFsCiAKIGlubGlu
ZSB2b2lkIFN0cmluZzo6Y2xlYXJJbXBsSWZOb3RTaGFyZWQoKQogewotICAgIGlmIChtX2ltcGwg
JiYgbV9pbXBsLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgbV9pbXBsID0gbnVsbHB0cjsKKyAgICBp
ZiAoaGFzSW1wbCgpICYmIGltcGwoKS0+aGFzT25lUmVmKCkpIHsKKyAgICAgICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG51bGxTdHJpbmc7CisgICAgICAgIHUubV9pbXBsLnN3YXAobnVsbFN0cmluZyk7
CisgICAgfQogfQogCiAjaWZkZWYgX19PQkpDX18KIAogaW5saW5lIFN0cmluZzo6b3BlcmF0b3Ig
TlNTdHJpbmcgKigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ltcGwpCisgICAgaWYgKGlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gQCIiOwotICAgIHJldHVybiAqbV9pbXBsOworICAgIGlmIChpc1Nt
YWxsU3RyaW5nKCkpIHsKKyAgICAgICAgLy8gVE9ETy4uLgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gKmltcGwoKTsKIH0KIAogaW5saW5l
IE5TU3RyaW5nICogbnNTdHJpbmdOaWxJZkVtcHR5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewog
ICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVy
biAqc3RyaW5nLmltcGwoKTsKKyAgICByZXR1cm4gc3RyaW5nOwogfQogCiAjZW5kaWYKIAogaW5s
aW5lIGJvb2wgY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGNvbnN0IFN0cmluZyYgYSwgY29uc3Qg
U3RyaW5nJiBiKQogewotICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEuaW1wbCgpLCBiLmlt
cGwoKSkgPCAwOworICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEudmlldygpLCBiLnZpZXco
KSkgPCAwOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtNjI3LDcg
KzczOSw3IEBAIGlubGluZSB2b2lkIGFwcGVuZE51bWJlcihWZWN0b3I8Q2hhcmFjdGVyVHlwZT4m
IHZlY3RvciwgdW5zaWduZWQgY2hhciBudW1iZXIpCiAgICAgfQogfQogCi1pbmxpbmUgU3RyaW5n
IFN0cmluZzo6ZnJvbVVURjgoY29uc3QgVmVjdG9yPExDaGFyPiYgY2hhcmFjdGVycykKK1N0cmlu
ZyBTdHJpbmc6OmZyb21VVEY4KGNvbnN0IFZlY3RvcjxMQ2hhcj4mIGNoYXJhY3RlcnMpCiB7CiAg
ICAgaWYgKGNoYXJhY3RlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKQEAgLTYzNiw1NSArNzQ4LDk3IEBAIGlubGluZSBTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOChj
b25zdCBWZWN0b3I8TENoYXI+JiBjaGFyYWN0ZXJzKQogCiB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5n
dGg+IGlubGluZSBib29sIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBjaGFyICgmbG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKIHsKLSAg
ICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc3RyaW5nLmltcGwoKSwgbG93
ZXJjYXNlTGV0dGVycyk7CisgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHN0cmluZy52aWV3KCksIGxvd2VyY2FzZUxldHRlcnMpOwogfQogCiBpbmxpbmUgYm9vbCBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKQogewot
ICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEuaW1wbCgpLCBiLmltcGwoKSk7Cisg
ICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYS52aWV3KCksIGIudmlldygpKTsKIH0K
IAogaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNv
bnN0IGNoYXIqIGIpCiB7Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYS5pbXBs
KCksIGIpOworICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGEudmlldygpLCBiKTsK
IH0KIAogdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBpbmxpbmUgYm9vbCBzdGFydHNXaXRoTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyICgm
bG93ZXJjYXNlTGV0dGVycylbbGVuZ3RoXSkKIHsKLSAgICByZXR1cm4gc3RhcnRzV2l0aExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcuaW1wbCgpLCBsb3dlcmNhc2VMZXR0ZXJzKTsKKyAg
ICByZXR1cm4gc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzdHJpbmcudmlldygp
LCBsb3dlcmNhc2VMZXR0ZXJzKTsKIH0KIAotaW5saW5lIFN0cmluZyBTdHJpbmc6Om51bWJlcihm
bG9hdCBudW1iZXIpCitTdHJpbmcgU3RyaW5nOjpudW1iZXIoZmxvYXQgbnVtYmVyKQogewogICAg
IHJldHVybiBudW1iZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKG51bWJlcik7CiB9CiAKLWlubGlu
ZSBTdHJpbmcgU3RyaW5nOjpudW1iZXIoZG91YmxlIG51bWJlciwgdW5zaWduZWQgcHJlY2lzaW9u
LCBUcmFpbGluZ1plcm9zVHJ1bmNhdGluZ1BvbGljeSBwb2xpY3kpCitTdHJpbmcgU3RyaW5nOjpu
dW1iZXIoZG91YmxlIG51bWJlciwgdW5zaWduZWQgcHJlY2lzaW9uLCBUcmFpbGluZ1plcm9zVHJ1
bmNhdGluZ1BvbGljeSBwb2xpY3kpCiB7CiAgICAgcmV0dXJuIG51bWJlclRvU3RyaW5nRml4ZWRQ
cmVjaXNpb24obnVtYmVyLCBwcmVjaXNpb24sIHBvbGljeSk7CiB9CiAKLWlubGluZSBTdHJpbmcg
U3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQoZmxvYXQgbnVtYmVyKQorU3RyaW5nIFN0
cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KGZsb2F0IG51bWJlcikKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBwcmVzZXJ2ZXMgZXhpc3RpbmcgYmVoYXZpb3IgYnV0IGlzIG5vdCB3aGF0IHdl
IHdhbnQuCiAgICAgLy8gSW4gdGhlIGZ1dHVyZSwgdGhpcyBzaG91bGQgZWl0aGVyIGJlIGEgY29t
cGlsYXRpb24gZXJyb3Igb3IgY2FsbCBudW1iZXJUb1N0cmluZ1Nob3J0ZXN0IHdpdGhvdXQgY29u
dmVydGluZyB0byBkb3VibGUuCiAgICAgcmV0dXJuIG51bWJlclRvU3RyaW5nU2hvcnRlc3Qoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihudW1iZXIpKTsKIH0KIAotaW5saW5lIFN0cmluZyBTdHJpbmc6Om51
bWJlclRvU3RyaW5nRUNNQVNjcmlwdChkb3VibGUgbnVtYmVyKQorU3RyaW5nIFN0cmluZzo6bnVt
YmVyVG9TdHJpbmdFQ01BU2NyaXB0KGRvdWJsZSBudW1iZXIpCiB7CiAgICAgcmV0dXJuIG51bWJl
clRvU3RyaW5nU2hvcnRlc3QobnVtYmVyKTsKIH0KIAogaW5saW5lIG5hbWVzcGFjZSBTdHJpbmdM
aXRlcmFscyB7CiAKLWlubGluZSBTdHJpbmcgb3BlcmF0b3IiIiBfc3RyKGNvbnN0IGNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCkKK2lubGluZSBTdHJpbmcgb3BlcmF0b3IiIiBfc3RyKGNvbnN0IGNo
YXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bDo6ZnJvbUxpdGVyYWxVbnNhZmUoY2hhcmFjdGVycyk7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bDo6ZnJvbUxpdGVyYWxVbnNhZmUoY2hhcmFjdGVycywgbGVuZ3RoKTsKIH0KIAogfSAvLyBpbmxp
bmUgU3RyaW5nTGl0ZXJhbHMKIAorLy8gU3RyaW5nVmlldyBpbXBsZW1lbnRhdGlvbnMKK3N0cnVj
dCBTdHJpbmdWaWV3V2l0aFVuZGVybHlpbmdTdHJpbmcgeworICAgIFN0cmluZ1ZpZXcgdmlldzsK
KyAgICBTdHJpbmcgdW5kZXJseWluZ1N0cmluZzsKK307CisKKy8vIFRoaXMgcmV0dXJucyBhIFN0
cmluZ1ZpZXcgb2YgdGhlIG5vcm1hbGl6ZWQgcmVzdWx0LCBhbmQgYSBTdHJpbmcgdGhhdCBpcyBl
aXRoZXIKKy8vIG51bGwsIGlmIHRoZSBpbnB1dCB3YXMgYWxyZWFkeSBub3JtYWxpemVkLCBvciBj
b250YWlucyB0aGUgbm9ybWFsaXplZCByZXN1bHQKKy8vIGFuZCBuZWVkcyB0byBiZSBrZXB0IGFy
b3VuZCBzbyB0aGUgU3RyaW5nVmlldyByZW1haW5zIHZhbGlkLiBUeXBpY2FsbHkgdGhlCisvLyBl
YXNpZXN0IHdheSB0byB1c2UgaXQgY29ycmVjdGx5IGlzIHRvIHB1dCBpdCBpbnRvIGEgbG9jYWwg
YW5kIHVzZSB0aGUgU3RyaW5nVmlldy4KK1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmdWaWV3V2l0
aFVuZGVybHlpbmdTdHJpbmcgbm9ybWFsaXplZE5GQyhTdHJpbmdWaWV3KTsKKworV1RGX0VYUE9S
VF9QUklWQVRFIFN0cmluZyBub3JtYWxpemVkTkZDKGNvbnN0IFN0cmluZyYpOworCitpbmxpbmUg
U3RyaW5nVmlldzo6U3RyaW5nVmlldyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBzZXRV
bmRlcmx5aW5nU3RyaW5nKHN0cmluZy5pbXBsKCkpOworICAgIGlmICghc3RyaW5nLmltcGwoKSkg
eworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJp
bmcuaXM4Qml0KCkpIHsKKyAgICAgICAgaW5pdGlhbGl6ZShzdHJpbmcuY2hhcmFjdGVyczgoKSwg
c3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbml0aWFsaXpl
KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKK30KKworaW5saW5lIFN0
cmluZyBTdHJpbmdWaWV3Ojp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgaWYgKGlzOEJpdCgpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoKTsKKyAgICByZXR1
cm4gU3RyaW5nKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCk7Cit9CisKK2lubGluZSBTdHJpbmcg
U3RyaW5nVmlldzo6dG9TdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0Cit7CisgICAgaWYgKGlz
OEJpdCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmco
Y2hhcmFjdGVyczgoKSwgbV9sZW5ndGgpOworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVX
aXRob3V0Q29weWluZyhjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAogdXNpbmcgV1RGOjpLZWVwVHJhaWxpbmdaZXJvczsKQEAgLTcwOSw1ICs4NjMs
NCBAQCB1c2luZyBXVEY6OmZpbmQ7CiB1c2luZyBXVEY6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnM7
CiB1c2luZyBXVEY6OmlzU3BhY2VPck5ld2xpbmU7CiB1c2luZyBXVEY6OnJldmVyc2VGaW5kOwot
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Cit1c2luZyBXVEY6OlN0cmluZ1Zp
ZXdXaXRoVW5kZXJseWluZ1N0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
Y2YvU3RyaW5nQ0YuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdDRi5jcHAKaW5k
ZXggMTBlYmMwYzY1NzM1YTk1OTY5ODU5NjMyMGIwZGFlNzIwZGQ0ZDQ1YS4uMzNhN2ZkY2Y4NGZi
OTgzZTNiNjRmZmJmZTliNDMxM2ZmNTY4ZDQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGV4dC9jZi9TdHJpbmdDRi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdD
Ri5jcHAKQEAgLTM1LDI4ICszNSwzNCBAQCBTdHJpbmc6OlN0cmluZyhDRlN0cmluZ1JlZiBzdHIp
CiAKICAgICBDRkluZGV4IHNpemUgPSBDRlN0cmluZ0dldExlbmd0aChzdHIpOwogICAgIGlmIChz
aXplID09IDApCi0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAg
IHUubV9kYXRhID0gU3RyaW5nOjplbXB0eVN0cmluZygpLnUubV9kYXRhOwogICAgIGVsc2Ugewor
ICAgICAgICBTdHJpbmcgcmVzdWx0OwogICAgICAgICBWZWN0b3I8TENoYXIsIDEwMjQ+IGxjaGFy
QnVmZmVyKHNpemUpOwogICAgICAgICBDRkluZGV4IHVzZWRCdWZMZW47CiAgICAgICAgIENGSW5k
ZXggY29udmVydGVkc2l6ZSA9IENGU3RyaW5nR2V0Qnl0ZXMoc3RyLCBDRlJhbmdlTWFrZSgwLCBz
aXplKSwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIDAsIGZhbHNlLCBsY2hhckJ1ZmZlci5k
YXRhKCksIHNpemUsICZ1c2VkQnVmTGVuKTsKICAgICAgICAgaWYgKChjb252ZXJ0ZWRzaXplID09
IHNpemUpICYmICh1c2VkQnVmTGVuID09IHNpemUpKSB7Ci0gICAgICAgICAgICBtX2ltcGwgPSBT
dHJpbmdJbXBsOjpjcmVhdGUobGNoYXJCdWZmZXIuZGF0YSgpLCBzaXplKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShsY2hhckJ1ZmZlci5kYXRhKCksIHNpemUpOwor
ICAgICAgICAgICAgc3dhcChyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBidWZmZXIoc2l6ZSk7CiAgICAgICAgIENG
U3RyaW5nR2V0Q2hhcmFjdGVycyhzdHIsIENGUmFuZ2VNYWtlKDAsIHNpemUpLCAoVW5pQ2hhciop
YnVmZmVyLmRhdGEoKSk7Ci0gICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShidWZm
ZXIuZGF0YSgpLCBzaXplKTsKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nKFN0cmluZ0ltcGw6OmNy
ZWF0ZShidWZmZXIuZGF0YSgpLCBzaXplKSk7CisgICAgICAgIHN3YXAocmVzdWx0KTsKICAgICB9
CiB9CiAKIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gU3RyaW5nOjpjcmVhdGVDRlN0cmluZygpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2ltcGwpCisgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gQ0ZTVFIoIiIpOwogCi0gICAgcmV0dXJuIG1faW1wbC0+Y3JlYXRlQ0ZTdHJpbmcoKTsKKyAg
ICBpZiAoaXNTbWFsbFN0cmluZygpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihDRlN0cmluZ0Ny
ZWF0ZVdpdGhCeXRlcygwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oY2hhcmFjdGVy
czgoKSksIGxlbmd0aCgpLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJLCBmYWxzZSkpOworCisgICAg
cmV0dXJuIGltcGwoKS0+Y3JlYXRlQ0ZTdHJpbmcoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9jb2NvYS9TdHJpbmdDb2NvYS5tbSBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvY29jb2EvU3RyaW5nQ29jb2EubW0KaW5kZXggNDg5MDYwZDA3ZDIzZjE3N2ZmMzRhNzI3ZGZj
OWM4MDM3ZjI1ZmU3OS4uZWQyYWIzZjY1Njk0ODI5MTc4ZWJlNzgxNzU5MzMxYjQ0Y2JlYjE1NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9TdHJpbmdDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1N0cmluZ0NvY29hLm1tCkBAIC0zMiwxOSArMzIs
MjIgQEAgU3RyaW5nOjpTdHJpbmcoTlNTdHJpbmcgKnN0cikKIAogICAgIENGSW5kZXggc2l6ZSA9
IENGU3RyaW5nR2V0TGVuZ3RoKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KHN0cikpOwog
ICAgIGlmICghc2l6ZSkKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAg
ICAgICAgdS5tX2RhdGEgPSBTdHJpbmc6OmVtcHR5U3RyaW5nKCkudS5tX2RhdGE7CiAgICAgZWxz
ZSB7CisgICAgICAgIFN0cmluZyByZXN1bHQ7CiAgICAgICAgIFZlY3RvcjxMQ2hhciwgMTAyND4g
bGNoYXJCdWZmZXIoc2l6ZSk7CiAgICAgICAgIENGSW5kZXggdXNlZEJ1ZkxlbjsKICAgICAgICAg
Q0ZJbmRleCBjb252ZXJ0ZWRzaXplID0gQ0ZTdHJpbmdHZXRCeXRlcyhyZWludGVycHJldF9jYXN0
PENGU3RyaW5nUmVmPihzdHIpLCBDRlJhbmdlTWFrZSgwLCBzaXplKSwga0NGU3RyaW5nRW5jb2Rp
bmdJU09MYXRpbjEsIDAsIGZhbHNlLCBsY2hhckJ1ZmZlci5kYXRhKCksIHNpemUsICZ1c2VkQnVm
TGVuKTsKICAgICAgICAgaWYgKChjb252ZXJ0ZWRzaXplID09IHNpemUpICYmICh1c2VkQnVmTGVu
ID09IHNpemUpKSB7Ci0gICAgICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUobGNo
YXJCdWZmZXIuZGF0YSgpLCBzaXplKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0ltcGw6
OmNyZWF0ZShsY2hhckJ1ZmZlci5kYXRhKCksIHNpemUpOworICAgICAgICAgICAgc3dhcChyZXN1
bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgVmVjdG9yPFVD
aGFyLCAxMDI0PiB1Y2hhckJ1ZmZlcihzaXplKTsKICAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0
ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KHN0ciksIENGUmFuZ2VNYWtlKDAsIHNp
emUpLCB1Y2hhckJ1ZmZlci5kYXRhKCkpOwotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpj
cmVhdGUodWNoYXJCdWZmZXIuZGF0YSgpLCBzaXplKTsKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5n
KFN0cmluZ0ltcGw6OmNyZWF0ZSh1Y2hhckJ1ZmZlci5kYXRhKCksIHNpemUpKTsKKyAgICAgICAg
c3dhcChyZXN1bHQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4
dC9jb2NvYS9TdHJpbmdJbXBsQ29jb2EubW0gYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1N0
cmluZ0ltcGxDb2NvYS5tbQppbmRleCAyODBmMTgxMDY4MjE0NDcwMGJiN2E4OTJiOGNlODNlMjQy
YWUwMjI1Li5iMTQ0NTQwMjZmZmQ3MDhkMWFmMjFjYzY0Yzc3Nzc2YzIwOTdkMzhkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1N0cmluZ0ltcGxDb2NvYS5tbQorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1N0cmluZ0ltcGxDb2NvYS5tbQpAQCAtMjEsNyArMjEs
NyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJTdHJpbmdJbXBsLmgiCiAKLSNpbXBv
cnQgIlJldGFpblB0ci5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9pY3UvVVRleHRQcm92aWRl
ckxhdGluMS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyTGF0aW4x
LmNwcAppbmRleCA3MTkwNDJmZTYyNDQzZmE3MDNkNjkxZTRmOWRmYTk4MDhjYzNhMzEwLi4wNjY4
NTMzODlmYTljNmM4ZGY1YTQ4NzQ2NGMyOGIzMDIxYjI4NjJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyTGF0aW4xLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L2ljdS9VVGV4dFByb3ZpZGVyTGF0aW4xLmNwcApAQCAtMTQwLDcgKzE0MCw3IEBA
IHN0YXRpYyBVQm9vbCB1VGV4dExhdGluMUFjY2VzcyhVVGV4dCogdVRleHQsIGludDY0X3QgaW5k
ZXgsIFVCb29sIGZvcndhcmQpCiAgICAgfQogICAgIHVUZXh0LT5jaHVua0xlbmd0aCA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KHVUZXh0LT5jaHVua05hdGl2ZUxpbWl0IC0gdVRleHQtPmNodW5rTmF0
aXZlU3RhcnQpOwogCi0gICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMoY29uc3RfY2FzdDxV
Q2hhcio+KHVUZXh0LT5jaHVua0NvbnRlbnRzKSwgc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIqPih1
VGV4dC0+Y29udGV4dCkgKyB1VGV4dC0+Y2h1bmtOYXRpdmVTdGFydCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHVUZXh0LT5jaHVua0xlbmd0aCkpOworICAgIGNvcHlDaGFyYWN0ZXJzKGNvbnN0X2Nh
c3Q8VUNoYXIqPih1VGV4dC0+Y2h1bmtDb250ZW50cyksIHN0YXRpY19jYXN0PGNvbnN0IExDaGFy
Kj4odVRleHQtPmNvbnRleHQpICsgdVRleHQtPmNodW5rTmF0aXZlU3RhcnQsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPih1VGV4dC0+Y2h1bmtMZW5ndGgpKTsKIAogICAgIHVUZXh0LT5uYXRpdmVJbmRl
eGluZ0xpbWl0ID0gdVRleHQtPmNodW5rTGVuZ3RoOwogCkBAIC0xNzgsNyArMTc4LDcgQEAgc3Rh
dGljIGludDMyX3QgdVRleHRMYXRpbjFFeHRyYWN0KFVUZXh0KiB1VGV4dCwgaW50NjRfdCBzdGFy
dCwgaW50NjRfdCBsaW1pdCwgVUMKICAgICAgICAgaWYgKHRyaW1tZWRMZW5ndGggPiBkZXN0Q2Fw
YWNpdHkpCiAgICAgICAgICAgICB0cmltbWVkTGVuZ3RoID0gZGVzdENhcGFjaXR5OwogCi0gICAg
ICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKGRlc3QsIHN0YXRpY19jYXN0PGNvbnN0IExD
aGFyKj4odVRleHQtPmNvbnRleHQpICsgc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0cmlt
bWVkTGVuZ3RoKSk7CisgICAgICAgIGNvcHlDaGFyYWN0ZXJzKGRlc3QsIHN0YXRpY19jYXN0PGNv
bnN0IExDaGFyKj4odVRleHQtPmNvbnRleHQpICsgc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih0cmltbWVkTGVuZ3RoKSk7CiAgICAgfQogCiAgICAgaWYgKGxlbmd0aCA8IGRlc3RDYXBhY2l0
eSkgewpAQCAtMjkwLDcgKzI5MCw3IEBAIHN0YXRpYyB2b2lkIHRleHRMYXRpbjFDb250ZXh0QXdh
cmVNb3ZlSW5QcmltYXJ5Q29udGV4dChVVGV4dCogdGV4dCwgaW50NjRfdCBuYXRpCiAgICAgdGV4
dC0+Y2h1bmtMZW5ndGggPSBsZW5ndGggPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
YXgoKSA/IHN0YXRpY19jYXN0PGludDMyX3Q+KGxlbmd0aCkgOiAwOwogICAgIHRleHQtPm5hdGl2
ZUluZGV4aW5nTGltaXQgPSB0ZXh0LT5jaHVua0xlbmd0aDsKICAgICB0ZXh0LT5jaHVua09mZnNl
dCA9IGZvcndhcmQgPyAwIDogdGV4dC0+Y2h1bmtMZW5ndGg7Ci0gICAgU3RyaW5nSW1wbDo6Y29w
eUNoYXJhY3RlcnMoY29uc3RfY2FzdDxVQ2hhcio+KHRleHQtPmNodW5rQ29udGVudHMpLCBzdGF0
aWNfY2FzdDxjb25zdCBMQ2hhcio+KHRleHQtPnApICsgKHRleHQtPmNodW5rTmF0aXZlU3RhcnQg
LSB0ZXh0LT5iKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHQtPmNodW5rTGVuZ3RoKSk7Cisg
ICAgY29weUNoYXJhY3RlcnMoY29uc3RfY2FzdDxVQ2hhcio+KHRleHQtPmNodW5rQ29udGVudHMp
LCBzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KHRleHQtPnApICsgKHRleHQtPmNodW5rTmF0aXZl
U3RhcnQgLSB0ZXh0LT5iKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRleHQtPmNodW5rTGVuZ3Ro
KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRleHRMYXRpbjFDb250ZXh0QXdhcmVTd2l0Y2hUb1ByaW1h
cnlDb250ZXh0KFVUZXh0KiB0ZXh0LCBpbnQ2NF90IG5hdGl2ZUluZGV4LCBpbnQ2NF90IG5hdGl2
ZUxlbmd0aCwgVUJvb2wgZm9yd2FyZCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>