<?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>100641</bug_id>
          
          <creation_ts>2012-10-29 01:58:16 -0700</creation_ts>
          <short_desc>Move LocaleWin.{cpp,h} to platform/text/win/</short_desc>
          <delta_ts>2012-10-29 02:19:06 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>haraken</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>753170</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-29 01:58:16 -0700</bug_when>
    <thetext>Move LocaleWin.{cpp,h} to platform/text/win/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753172</commentid>
    <comment_count>1</comment_count>
      <attachid>171178</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-29 02:01:12 -0700</bug_when>
    <thetext>Created attachment 171178
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753173</commentid>
    <comment_count>2</comment_count>
      <attachid>171178</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-10-29 02:03:45 -0700</bug_when>
    <thetext>Comment on attachment 171178
Patch

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753184</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-29 02:19:06 -0700</bug_when>
    <thetext>Committed r132777: &lt;http://trac.webkit.org/changeset/132777&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171178</attachid>
            <date>2012-10-29 02:01:12 -0700</date>
            <delta_ts>2012-10-29 02:03:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100641-20121029175938.patch</filename>
            <type>text/plain</type>
            <size>71299</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE3ZTlhNzIzMTk0NzY0
YTI0YmMxMDc4MzAwNjc0NTZjMjdhMDM1Mi4uYWE3NTNlMDBiOGFhMGRiOWU5ZmY5Y2ZmNDFhYzJi
MjQ4YTZhNzI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIzIEBACiAyMDEyLTEwLTI5ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAorICAgICAgICBNb3ZlIExvY2FsZVdpbi57
Y3BwLGh9IHRvIHBsYXRmb3JtL3RleHQvd2luLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNjQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2UgaGF2ZSBwbGF0Zm9ybS90ZXh0L3dpbi8gZGlyZWN0b3J5
LiBXaW5kb3dzLXNwZWNpZmljIGZpbGVzIHNob3VsZCBiZQorICAgICAgICBpbiBpdC4KKyAgICAg
ICAgTm90ZSB0aGF0IHRoZXNlIGZpbGVzIGFyZSB1c2VkIG9ubHkgaW4gQ2hyb21pdW0td2luIGZv
ciBub3cuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIGRvZXNuJ3QgY2hhbmdlIGFueSBi
ZWhhdmlvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBGaXggcGF0aCBu
YW1lcy4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvd2luL0xvY2FsZVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0xvY2FsZVdpbi5jcHAuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW4vTG9j
YWxlV2luLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2Fs
ZVdpbi5oLgorCisyMDEyLTEwLTI5ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4K
KwogICAgICAgICBSZW5hbWUgTG9jYWxpemVyIHRvIExvY2FsZQogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNjM0CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAKaW5kZXggMjI2OWJlNzJjZjMzOTUwMTU4YWVlOWQ3ZjlhZmE0ZWQw
YmEzOTRlMi4uNTlmNjQ3NDFkOGUyNTllNWMzMDQ3NTk0ZTkyOGJmYThmYzk1YjlmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTE4NzYsOCArMTg3Niw4IEBACiAK
ICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVVxcLmNwcCQn
XSwKICAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVVxcLmgk
J10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vdGV4dC9Mb2NhbGVXaW5cLmNw
cCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS90ZXh0L0xvY2FsZVdpblwu
aCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS90ZXh0L3dpbi9Mb2NhbGVX
aW5cLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS90ZXh0L3dpbi9M
b2NhbGVXaW5cLmgkJ10sCiAgICAgICAgICAgXSwKICAgICAgICAgfSx7ICMgT1MhPSJ3aW4iCiAg
ICAgICAgICAgJ3NvdXJjZXMvJzogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDE5MzkwYjZlMzY3MjI1
ODcyMjNiODYyMDgwN2FiZTFjZWU3ZThkNmUuLmFhZDAyYzkxZTdjMmJlMTA1ZDNmMDBhMDRhZmM2
ODhkNTc0MGNhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU3MjMsOCArNTcyMyw2IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdJQ1UuY3BwJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0xvY2FsZVdpbi5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL3RleHQvTG9jYWxlV2luLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQv
UGFyc2VyVXRpbGl0aWVzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvUGxhdGZvcm1M
b2NhbGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmgn
LApAQCAtNTc3Niw2ICs1Nzc0LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L3F0L1Rl
eHRDb2RlY1F0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9Gb250
VHJhbnNjb2Rlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvdHJhbnNjb2Rlci9G
b250VHJhbnNjb2Rlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L3dpbi9Mb2NhbGVX
aW4uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L3dpbi9Mb2NhbGVXaW4uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vdGV4dC93aW4vVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElD
VVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5oJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlV2luLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjZlZmMyNTc4MDU5NjQ0OTZkZGY0NDIyYjBlNTgxYzkwYWM5OGI2ZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MjUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2NhbGVXaW4uaCIKLQotI2lu
Y2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCi0jaWYgRU5BQkxFKElOUFVUX01VTFRJUExFX0ZJRUxE
U19VSSkKLSNpbmNsdWRlICJEYXRlVGltZUZvcm1hdC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiTGFu
Z3VhZ2UuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSA8bGltaXRz
PgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRl
ZiBMQ0lEIChXSU5BUEkqIExvY2FsZU5hbWVUb0xDSURQdHIpKExQQ1dTVFIsIERXT1JEKTsKLQot
c3RhdGljIFN0cmluZyBleHRyYWN0TGFuZ3VhZ2VDb2RlKGNvbnN0IFN0cmluZyYgbG9jYWxlKQot
ewotICAgIHNpemVfdCBkYXNoUG9zaXRpb24gPSBsb2NhbGUuZmluZCgnLScpOwotICAgIGlmIChk
YXNoUG9zaXRpb24gPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBsb2NhbGU7Ci0gICAgcmV0
dXJuIGxvY2FsZS5sZWZ0KGRhc2hQb3NpdGlvbik7Ci19Ci0KLXN0YXRpYyBMQ0lEIExDSURGcm9t
TG9jYWxlSW50ZXJuYWwoTENJRCB1c2VyRGVmYXVsdExDSUQsIGNvbnN0IFN0cmluZyYgdXNlckRl
ZmF1bHRMYW5ndWFnZUNvZGUsIExvY2FsZU5hbWVUb0xDSURQdHIgbG9jYWxlTmFtZVRvTENJRCwg
U3RyaW5nJiBsb2NhbGUpCi17Ci0gICAgU3RyaW5nIGxvY2FsZUxhbmd1YWdlQ29kZSA9IGV4dHJh
Y3RMYW5ndWFnZUNvZGUobG9jYWxlKTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobG9jYWxl
TGFuZ3VhZ2VDb2RlLCB1c2VyRGVmYXVsdExhbmd1YWdlQ29kZSkpCi0gICAgICAgIHJldHVybiB1
c2VyRGVmYXVsdExDSUQ7Ci0gICAgcmV0dXJuIGxvY2FsZU5hbWVUb0xDSUQobG9jYWxlLmNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDApOwotfQotCi1zdGF0aWMgTENJRCBMQ0lERnJv
bUxvY2FsZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKLXsKLSAgICAvLyBMb2NhbGVOYW1l
VG9MQ0lEKCkgaXMgYXZhaWxhYmxlIHNpbmNlIFdpbmRvd3MgVmlzdGEuCi0gICAgTG9jYWxlTmFt
ZVRvTENJRFB0ciBsb2NhbGVOYW1lVG9MQ0lEID0gcmVpbnRlcnByZXRfY2FzdDxMb2NhbGVOYW1l
VG9MQ0lEUHRyPig6OkdldFByb2NBZGRyZXNzKDo6R2V0TW9kdWxlSGFuZGxlKEwia2VybmVsMzIi
KSwgIkxvY2FsZU5hbWVUb0xDSUQiKSk7Ci0gICAgaWYgKCFsb2NhbGVOYW1lVG9MQ0lEKQotICAg
ICAgICByZXR1cm4gTE9DQUxFX1VTRVJfREVGQVVMVDsKLQotICAgIC8vIEFjY29yZGluZyB0byBN
U0ROLCA5IGlzIGVub3VnaCBmb3IgTE9DQUxFX1NJU082MzlMQU5HTkFNRS4KLSAgICBjb25zdCBz
aXplX3QgbGFuZ3VhZ2VDb2RlQnVmZmVyU2l6ZSA9IDk7Ci0gICAgV0NIQVIgbG93ZXJjYXNlTGFu
Z3VhZ2VDb2RlW2xhbmd1YWdlQ29kZUJ1ZmZlclNpemVdOwotICAgIDo6R2V0TG9jYWxlSW5mbyhM
T0NBTEVfVVNFUl9ERUZBVUxULCBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FLCBsb3dlcmNhc2VMYW5n
dWFnZUNvZGUsIGxhbmd1YWdlQ29kZUJ1ZmZlclNpemUpOwotICAgIFN0cmluZyB1c2VyRGVmYXVs
dExhbmd1YWdlQ29kZSA9IFN0cmluZyhsb3dlcmNhc2VMYW5ndWFnZUNvZGUpOwotCi0gICAgTENJ
RCBsY2lkID0gTENJREZyb21Mb2NhbGVJbnRlcm5hbChMT0NBTEVfVVNFUl9ERUZBVUxULCB1c2Vy
RGVmYXVsdExhbmd1YWdlQ29kZSwgbG9jYWxlTmFtZVRvTENJRCwgU3RyaW5nKGxvY2FsZSkpOwot
ICAgIGlmICghbGNpZCkKLSAgICAgICAgbGNpZCA9IExDSURGcm9tTG9jYWxlSW50ZXJuYWwoTE9D
QUxFX1VTRVJfREVGQVVMVCwgdXNlckRlZmF1bHRMYW5ndWFnZUNvZGUsIGxvY2FsZU5hbWVUb0xD
SUQsIGRlZmF1bHRMYW5ndWFnZSgpKTsKLSAgICByZXR1cm4gbGNpZDsKLX0KLQotUGFzc093blB0
cjxMb2NhbGU+IExvY2FsZTo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQotewot
ICAgIHJldHVybiBMb2NhbGVXaW46OmNyZWF0ZShMQ0lERnJvbUxvY2FsZShsb2NhbGUpKTsKLX0K
LQotLy8gV2luZG93cyBkb2Vzbid0IGhhdmUgYW4gQVBJIHRvIHBhcnNlIGxvY2FsZS1zcGVjaWZp
YyBkYXRlIHN0cmluZywKLS8vIGFuZCBHZXREYXRlRm9ybWF0KCkgYW5kIEdldERhdGVGb3JtYXRF
eCgpIGRvbid0IHN1cHBvcnQgeWVhcnMgb2xkZXIKLS8vIHRoYW4gMTYwMCwgd2hpY2ggd2Ugc2hv
dWxkIHN1cHBvcnQgYWNjb3JkaW5nIHRvIHRoZSBIVE1MCi0vLyBzdGFuZGFyZC4gU28sIHdlIG9i
dGFpbiB0aGUgZGF0ZSBmb3JtYXQgZnJvbSB0aGUgc3lzdGVtLCBidXQgd2UKLS8vIGZvcm1hdC9w
YXJzZSBhIGRhdGUgYnkgb3VyIG93biBjb2RlLgotCi1pbmxpbmUgTG9jYWxlV2luOjpMb2NhbGVX
aW4oTENJRCBsY2lkKQotICAgIDogbV9sY2lkKGxjaWQpCi0gICAgLCBtX2RpZEluaXRpYWxpemVO
dW1iZXJEYXRhKGZhbHNlKQotewotICAgIFNZU1RFTVRJTUUgc3lzdGVtVGltZTsKLSAgICBHZXRM
b2NhbFRpbWUoJnN5c3RlbVRpbWUpOwotICAgIG1fYmFzZVllYXIgPSBzeXN0ZW1UaW1lLndZZWFy
OwotCi0jaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKLSAgICBEV09SRCB2YWx1ZSA9IDA7Ci0g
ICAgZ2V0TG9jYWxlSW5mbyhMT0NBTEVfSUZJUlNUREFZT0ZXRUVLLCB2YWx1ZSk7Ci0gICAgLy8g
MDpNb25kYXksIC4uLiwgNjpTdW5kYXkuCi0gICAgLy8gV2UgbmVlZCAxIGZvciBNb25kYXksIDAg
Zm9yIFN1bmRheS4KLSAgICBtX2ZpcnN0RGF5T2ZXZWVrID0gKHZhbHVlICsgMSkgJSA3OwotI2Vu
ZGlmCi19Ci0KLVBhc3NPd25QdHI8TG9jYWxlV2luPiBMb2NhbGVXaW46OmNyZWF0ZShMQ0lEIGxj
aWQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbGVXaW4obGNpZCkpOwotfQotCi1M
b2NhbGVXaW46On5Mb2NhbGVXaW4oKQotewotfQotCi1TdHJpbmcgTG9jYWxlV2luOjpnZXRMb2Nh
bGVJbmZvU3RyaW5nKExDVFlQRSB0eXBlKQotewotICAgIGludCBidWZmZXJTaXplV2l0aE5VTCA9
IDo6R2V0TG9jYWxlSW5mbyhtX2xjaWQsIHR5cGUsIDAsIDApOwotICAgIGlmIChidWZmZXJTaXpl
V2l0aE5VTCA8PSAwKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgVmVjdG9yPFVDaGFy
PiBidWZmZXIoYnVmZmVyU2l6ZVdpdGhOVUwpOwotICAgIDo6R2V0TG9jYWxlSW5mbyhtX2xjaWQs
IHR5cGUsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlclNpemVXaXRoTlVMKTsKLSAgICBidWZmZXIuc2hy
aW5rKGJ1ZmZlclNpemVXaXRoTlVMIC0gMSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVm
ZmVyKTsKLX0KLQotdm9pZCBMb2NhbGVXaW46OmdldExvY2FsZUluZm8oTENUWVBFIHR5cGUsIERX
T1JEJiByZXN1bHQpCi17Ci0gICAgOjpHZXRMb2NhbGVJbmZvKG1fbGNpZCwgdHlwZSB8IExPQ0FM
RV9SRVRVUk5fTlVNQkVSLCByZWludGVycHJldF9jYXN0PExQV1NUUj4oJnJlc3VsdCksIHNpemVv
ZihEV09SRCkgLyBzaXplb2YoVENIQVIpKTsKLX0KLQotdm9pZCBMb2NhbGVXaW46OmVuc3VyZVNo
b3J0TW9udGhMYWJlbHMoKQotewotICAgIGlmICghbV9zaG9ydE1vbnRoTGFiZWxzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IExDVFlQRSB0eXBlc1sxMl0gPSB7Ci0gICAg
ICAgIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwKLSAgICAgICAgTE9DQUxFX1NBQkJSRVZNT05U
SE5BTUUyLAotICAgICAgICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsCi0gICAgICAgIExPQ0FM
RV9TQUJCUkVWTU9OVEhOQU1FNCwKLSAgICAgICAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LAot
ICAgICAgICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsCi0gICAgICAgIExPQ0FMRV9TQUJCUkVW
TU9OVEhOQU1FNywKLSAgICAgICAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LAotICAgICAgICBM
T0NBTEVfU0FCQlJFVk1PTlRITkFNRTksCi0gICAgICAgIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1F
MTAsCi0gICAgICAgIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsCi0gICAgICAgIExPQ0FMRV9T
QUJCUkVWTU9OVEhOQU1FMTIsCi0gICAgfTsKLSAgICBtX3Nob3J0TW9udGhMYWJlbHMucmVzZXJ2
ZUNhcGFjaXR5KFdURl9BUlJBWV9MRU5HVEgodHlwZXMpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh0eXBlcyk7ICsraSkgewotICAgICAgICBtX3Nob3J0
TW9udGhMYWJlbHMuYXBwZW5kKGdldExvY2FsZUluZm9TdHJpbmcodHlwZXNbaV0pKTsKLSAgICAg
ICAgaWYgKG1fc2hvcnRNb250aExhYmVscy5sYXN0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBtX3Nob3J0TW9udGhMYWJlbHMuc2hyaW5rKDApOwotICAgICAgICAgICAgbV9zaG9ydE1vbnRo
TGFiZWxzLnJlc2VydmVDYXBhY2l0eShXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhOYW1lKSk7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG0gPSAwOyBtIDwgV1RGX0FSUkFZX0xFTkdUSChX
VEY6Om1vbnRoTmFtZSk7ICsrbSkKLSAgICAgICAgICAgICAgICBtX3Nob3J0TW9udGhMYWJlbHMu
YXBwZW5kKFdURjo6bW9udGhOYW1lW21dKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVG9rZW5p
emVkIGRhdGUgZm9ybWF0Ci0KLXN0cnVjdCBEYXRlRm9ybWF0VG9rZW4gewotICAgIGVudW0gVHlw
ZSB7Ci0gICAgICAgIExpdGVyYWwsCi0gICAgICAgIERheTEsCi0gICAgICAgIERheTIsCi0gICAg
ICAgIE1vbnRoMSwKLSAgICAgICAgTW9udGgyLAotICAgICAgICBNb250aDMsCi0gICAgICAgIE1v
bnRoNCwKLSAgICAgICAgWWVhcjEsCi0gICAgICAgIFllYXIyLAotICAgICAgICBZZWFyNCwKLSAg
ICB9OwotICAgIFR5cGUgdHlwZTsKLSAgICBTdHJpbmcgZGF0YTsgLy8gVGhpcyBpcyB2YWxpZCBv
bmx5IGlmIHR5cGU9PUxpdGVyYWwuCi0KLSAgICBEYXRlRm9ybWF0VG9rZW4oVHlwZSB0eXBlKQot
ICAgICAgICA6IHR5cGUodHlwZSkKLSAgICB7IH0KLQotICAgIERhdGVGb3JtYXRUb2tlbihjb25z
dCBTdHJpbmcmIGRhdGEpCi0gICAgICAgIDogdHlwZShMaXRlcmFsKQotICAgICAgICAsIGRhdGEo
ZGF0YSkKLSAgICB7IH0KLQotICAgIERhdGVGb3JtYXRUb2tlbihjb25zdCBEYXRlRm9ybWF0VG9r
ZW4mIHRva2VuKQotICAgICAgICA6IHR5cGUodG9rZW4udHlwZSkKLSAgICAgICAgLCBkYXRhKHRv
a2VuLmRhdGEpCi0gICAgeyB9Ci19OwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNFcmFTeW1ib2wo
VUNoYXIgbGV0dGVyKSB7IHJldHVybiBsZXR0ZXIgPT0gJ2cnOyB9Ci1zdGF0aWMgaW5saW5lIGJv
b2wgaXNZZWFyU3ltYm9sKFVDaGFyIGxldHRlcikgeyByZXR1cm4gbGV0dGVyID09ICd5JzsgfQot
c3RhdGljIGlubGluZSBib29sIGlzTW9udGhTeW1ib2woVUNoYXIgbGV0dGVyKSB7IHJldHVybiBs
ZXR0ZXIgPT0gJ00nOyB9Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNEYXlTeW1ib2woVUNoYXIgbGV0
dGVyKSB7IHJldHVybiBsZXR0ZXIgPT0gJ2QnOyB9Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb3VudENv
bnRpbnVvdXNMZXR0ZXJzKGNvbnN0IFN0cmluZyYgZm9ybWF0LCB1bnNpZ25lZCBpbmRleCkKLXsK
LSAgICB1bnNpZ25lZCBjb3VudCA9IDE7Ci0gICAgVUNoYXIgcmVmZXJlbmNlID0gZm9ybWF0W2lu
ZGV4XTsKLSAgICB3aGlsZSAoaW5kZXggKyAxIDwgZm9ybWF0Lmxlbmd0aCgpKSB7Ci0gICAgICAg
IGlmIChmb3JtYXRbKytpbmRleF0gIT0gcmVmZXJlbmNlKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICsrY291bnQ7Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHZv
aWQgY29tbWl0TGl0ZXJhbFRva2VuKFN0cmluZ0J1aWxkZXImIGxpdGVyYWxCdWZmZXIsIFZlY3Rv
cjxEYXRlRm9ybWF0VG9rZW4+JiB0b2tlbnMpCi17Ci0gICAgaWYgKGxpdGVyYWxCdWZmZXIubGVu
Z3RoKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIHRva2Vucy5hcHBlbmQoRGF0ZUZvcm1h
dFRva2VuKGxpdGVyYWxCdWZmZXIudG9TdHJpbmcoKSkpOwotICAgIGxpdGVyYWxCdWZmZXIuY2xl
YXIoKTsKLX0KLQotLy8gU2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFy
eS9kZDMxNzc4Nyh2PXZzLjg1KS5hc3B4Ci1zdGF0aWMgVmVjdG9yPERhdGVGb3JtYXRUb2tlbj4g
cGFyc2VEYXRlRm9ybWF0KGNvbnN0IFN0cmluZyBmb3JtYXQpCi17Ci0gICAgVmVjdG9yPERhdGVG
b3JtYXRUb2tlbj4gdG9rZW5zOwotICAgIFN0cmluZ0J1aWxkZXIgbGl0ZXJhbEJ1ZmZlcjsKLSAg
ICBib29sIGluUXVvdGUgPSBmYWxzZTsKLSAgICBib29sIGxhc3RRdW90ZUNhbkJlTGl0ZXJhbCA9
IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtYXQubGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICBVQ2hhciBjaCA9IGZvcm1hdFtpXTsKLSAgICAgICAgaWYgKGluUXVvdGUp
IHsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnXCcnKSB7Ci0gICAgICAgICAgICAgICAgaW5RdW90
ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIEFTU0VSVChpKTsKLSAgICAgICAgICAgICAgICBp
ZiAobGFzdFF1b3RlQ2FuQmVMaXRlcmFsICYmIGZvcm1hdFtpIC0gMV0gPT0gJ1wnJykgewotICAg
ICAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZCgnXCcnKTsKLSAgICAgICAgICAg
ICAgICAgICAgbGFzdFF1b3RlQ2FuQmVMaXRlcmFsID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGxhc3RRdW90ZUNhbkJlTGl0ZXJhbCA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVu
ZChjaCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChj
aCA9PSAnXCcnKSB7Ci0gICAgICAgICAgICBpblF1b3RlID0gdHJ1ZTsKLSAgICAgICAgICAgIGlm
IChsYXN0UXVvdGVDYW5CZUxpdGVyYWwgJiYgaSA+IDAgJiYgZm9ybWF0W2kgLSAxXSA9PSAnXCcn
KSB7Ci0gICAgICAgICAgICAgICAgbGl0ZXJhbEJ1ZmZlci5hcHBlbmQoY2gpOwotICAgICAgICAg
ICAgICAgIGxhc3RRdW90ZUNhbkJlTGl0ZXJhbCA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgbGFzdFF1b3RlQ2FuQmVMaXRlcmFsID0gdHJ1ZTsKLSAgICAgICAg
fSBlbHNlIGlmIChpc1llYXJTeW1ib2woY2gpKSB7Ci0gICAgICAgICAgICBjb21taXRMaXRlcmFs
VG9rZW4obGl0ZXJhbEJ1ZmZlciwgdG9rZW5zKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50
ID0gY291bnRDb250aW51b3VzTGV0dGVycyhmb3JtYXQsIGkpOwotICAgICAgICAgICAgaSArPSBj
b3VudCAtIDE7Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gMSkKLSAgICAgICAgICAgICAgICB0
b2tlbnMuYXBwZW5kKERhdGVGb3JtYXRUb2tlbihEYXRlRm9ybWF0VG9rZW46OlllYXIxKSk7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChjb3VudCA9PSAyKQotICAgICAgICAgICAgICAgIHRva2Vucy5h
cHBlbmQoRGF0ZUZvcm1hdFRva2VuKERhdGVGb3JtYXRUb2tlbjo6WWVhcjIpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0b2tlbnMuYXBwZW5kKERhdGVGb3JtYXRUb2tlbihE
YXRlRm9ybWF0VG9rZW46OlllYXI0KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNNb250aFN5bWJv
bChjaCkpIHsKLSAgICAgICAgICAgIGNvbW1pdExpdGVyYWxUb2tlbihsaXRlcmFsQnVmZmVyLCB0
b2tlbnMpOwotICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBjb3VudENvbnRpbnVvdXNMZXR0
ZXJzKGZvcm1hdCwgaSk7Ci0gICAgICAgICAgICBpICs9IGNvdW50IC0gMTsKLSAgICAgICAgICAg
IGlmIChjb3VudCA9PSAxKQotICAgICAgICAgICAgICAgIHRva2Vucy5hcHBlbmQoRGF0ZUZvcm1h
dFRva2VuKERhdGVGb3JtYXRUb2tlbjo6TW9udGgxKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChj
b3VudCA9PSAyKQotICAgICAgICAgICAgICAgIHRva2Vucy5hcHBlbmQoRGF0ZUZvcm1hdFRva2Vu
KERhdGVGb3JtYXRUb2tlbjo6TW9udGgyKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjb3VudCA9
PSAzKQotICAgICAgICAgICAgICAgIHRva2Vucy5hcHBlbmQoRGF0ZUZvcm1hdFRva2VuKERhdGVG
b3JtYXRUb2tlbjo6TW9udGgzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
dG9rZW5zLmFwcGVuZChEYXRlRm9ybWF0VG9rZW4oRGF0ZUZvcm1hdFRva2VuOjpNb250aDQpKTsK
LSAgICAgICAgfSBlbHNlIGlmIChpc0RheVN5bWJvbChjaCkpIHsKLSAgICAgICAgICAgIGNvbW1p
dExpdGVyYWxUb2tlbihsaXRlcmFsQnVmZmVyLCB0b2tlbnMpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgY291bnQgPSBjb3VudENvbnRpbnVvdXNMZXR0ZXJzKGZvcm1hdCwgaSk7Ci0gICAgICAgICAg
ICBpICs9IGNvdW50IC0gMTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSAxKQotICAgICAgICAg
ICAgICAgIHRva2Vucy5hcHBlbmQoRGF0ZUZvcm1hdFRva2VuKERhdGVGb3JtYXRUb2tlbjo6RGF5
MSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRva2Vucy5hcHBlbmQoRGF0
ZUZvcm1hdFRva2VuKERhdGVGb3JtYXRUb2tlbjo6RGF5MikpOwotICAgICAgICB9IGVsc2UgaWYg
KGlzRXJhU3ltYm9sKGNoKSkgewotICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgZXJhLgotICAg
ICAgICAgICAgLy8gSFRNTDUgZGF0ZSBzdXBwb3J0cyBvbmx5IEEuRC4KLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBsaXRlcmFsQnVmZmVyLmFwcGVuZChjaCk7Ci0gICAgfQotICAgIGNvbW1p
dExpdGVyYWxUb2tlbihsaXRlcmFsQnVmZmVyLCB0b2tlbnMpOwotICAgIHJldHVybiB0b2tlbnM7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBhcnNpbmcKLQotYm9v
bCBMb2NhbGVXaW46OmlzTG9jYWxpemVkRGlnaXQoVUNoYXIgY2gpCi17Ci0gICAgU3RyaW5nIG5v
cm1hbGl6ZWREaWdpdCA9IGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKFN0cmluZygmY2gsIDEp
KTsKLSAgICBpZiAobm9ybWFsaXplZERpZ2l0Lmxlbmd0aCgpICE9IDEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gaXNBU0NJSURpZ2l0KG5vcm1hbGl6ZWREaWdpdFswXSk7Ci19
Ci0KLS8vIFJldHVybnMgLTEgaWYgcGFyc2luZyBmYWlscy4KLWludCBMb2NhbGVXaW46OnBhcnNl
TnVtYmVyKGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkJiBpbmRleCkKLXsKLSAgICB1bnNp
Z25lZCBkaWdpdHNTdGFydCA9IGluZGV4OwotICAgIHdoaWxlIChpbmRleCA8IGlucHV0Lmxlbmd0
aCgpICYmIGlzQVNDSUlEaWdpdChpbnB1dFtpbmRleF0pKQotICAgICAgICBpbmRleCsrOwotICAg
IGlmIChkaWdpdHNTdGFydCAhPSBpbmRleCkgewotICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0g
ICAgICAgIGludCBudW1iZXIgPSBpbnB1dC5zdWJzdHJpbmcoZGlnaXRzU3RhcnQsIGluZGV4IC0g
ZGlnaXRzU3RhcnQpLnRvSW50KCZvayk7Ci0gICAgICAgIHJldHVybiBvayA/IG51bWJlciA6IC0x
OwotICAgIH0KLQotICAgIHdoaWxlIChpbmRleCA8IGlucHV0Lmxlbmd0aCgpICYmIGlzTG9jYWxp
emVkRGlnaXQoaW5wdXRbaW5kZXhdKSkKLSAgICAgICAgaW5kZXgrKzsKLSAgICBpZiAoZGlnaXRz
U3RhcnQgPT0gaW5kZXgpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBib29sIG9rID0gZmFsc2U7
Ci0gICAgaW50IG51bWJlciA9IGNvbnZlcnRGcm9tTG9jYWxpemVkTnVtYmVyKGlucHV0LnN1YnN0
cmluZyhkaWdpdHNTdGFydCwgaW5kZXggLSBkaWdpdHNTdGFydCkpLnRvSW50KCZvayk7Ci0gICAg
cmV0dXJuIG9rID8gbnVtYmVyIDogLTE7Ci19Ci0KLS8vIFJldHVybnMgMC1iYXNlZCBtb250aCBu
dW1iZXIuIFJldHVybnMgLTEgaWYgcGFyc2luZyBmYWlscy4KLWludCBMb2NhbGVXaW46OnBhcnNl
TnVtYmVyT3JNb250aChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCYgaW5kZXgpCi17Ci0g
ICAgaW50IHJlc3VsdCA9IHBhcnNlTnVtYmVyKGlucHV0LCBpbmRleCk7Ci0gICAgaWYgKHJlc3Vs
dCA+PSAwKSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPCAxIHx8IHJlc3VsdCA+IDEyKQotICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXR1cm4gcmVzdWx0IC0gMTsKLSAgICB9Ci0gICAg
Zm9yICh1bnNpZ25lZCBtID0gMDsgbSA8IG1fbW9udGhMYWJlbHMuc2l6ZSgpOyArK20pIHsKLSAg
ICAgICAgdW5zaWduZWQgbGFiZWxMZW5ndGggPSBtX21vbnRoTGFiZWxzW21dLmxlbmd0aCgpOwot
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaW5wdXQuc3Vic3RyaW5nKGluZGV4LCBsYWJl
bExlbmd0aCksIG1fbW9udGhMYWJlbHNbbV0pKSB7Ci0gICAgICAgICAgICBpbmRleCArPSBsYWJl
bExlbmd0aDsKLSAgICAgICAgICAgIHJldHVybiBtOwotICAgICAgICB9Ci0gICAgfQotICAgIGZv
ciAodW5zaWduZWQgbSA9IDA7IG0gPCBtX3Nob3J0TW9udGhMYWJlbHMuc2l6ZSgpOyArK20pIHsK
LSAgICAgICAgdW5zaWduZWQgbGFiZWxMZW5ndGggPSBtX3Nob3J0TW9udGhMYWJlbHNbbV0ubGVu
Z3RoKCk7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpbnB1dC5zdWJzdHJpbmcoaW5k
ZXgsIGxhYmVsTGVuZ3RoKSwgbV9zaG9ydE1vbnRoTGFiZWxzW21dKSkgewotICAgICAgICAgICAg
aW5kZXggKz0gbGFiZWxMZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4gbTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWRvdWJsZSBMb2NhbGVXaW46OnBhcnNlRGF0ZVRp
bWUoY29uc3QgU3RyaW5nJiBpbnB1dCwgRGF0ZUNvbXBvbmVudHM6OlR5cGUgdHlwZSkKLXsKLSAg
ICBpZiAodHlwZSAhPSBEYXRlQ29tcG9uZW50czo6RGF0ZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgZW5zdXJlU2hvcnREYXRl
VG9rZW5zKCk7Ci0gICAgcmV0dXJuIHBhcnNlRGF0ZShtX3Nob3J0RGF0ZVRva2VucywgbV9iYXNl
WWVhciwgaW5wdXQpOwotfQotCi1kb3VibGUgTG9jYWxlV2luOjpwYXJzZURhdGUoY29uc3QgU3Ry
aW5nJiBmb3JtYXQsIGludCBiYXNlWWVhciwgY29uc3QgU3RyaW5nJiBpbnB1dCkKLXsKLSAgICBy
ZXR1cm4gcGFyc2VEYXRlKHBhcnNlRGF0ZUZvcm1hdChmb3JtYXQpLCBiYXNlWWVhciwgaW5wdXQp
OwotfQotCi1kb3VibGUgTG9jYWxlV2luOjpwYXJzZURhdGUoY29uc3QgVmVjdG9yPERhdGVGb3Jt
YXRUb2tlbj4mIHRva2VucywgaW50IGJhc2VZZWFyLCBjb25zdCBTdHJpbmcmIGlucHV0KQotewot
ICAgIGVuc3VyZVNob3J0TW9udGhMYWJlbHMoKTsKLSAgICBlbnN1cmVNb250aExhYmVscygpOwot
ICAgIGNvbnN0IGRvdWJsZSBOYU4gPSBudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KTsKLSAgICB1bnNpZ25lZCBpbnB1dEluZGV4ID0gMDsKLSAgICBpbnQgZGF5ID0gLTEsIG1vbnRo
ID0gLTEsIHllYXIgPSAtMTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW5zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHN3aXRjaCAodG9rZW5zW2ldLnR5cGUpIHsKLSAgICAgICAg
Y2FzZSBEYXRlRm9ybWF0VG9rZW46OkxpdGVyYWw6IHsKLSAgICAgICAgICAgIFN0cmluZyBkYXRh
ID0gdG9rZW5zW2ldLmRhdGE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsaXRlcmFsTGVuZ3RoID0g
ZGF0YS5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHJpbmcoaW5wdXRJbmRl
eCwgbGl0ZXJhbExlbmd0aCkgPT0gZGF0YSkKLSAgICAgICAgICAgICAgICBpbnB1dEluZGV4ICs9
IGxpdGVyYWxMZW5ndGg7Ci0gICAgICAgICAgICAvLyBHbyBhaGVhZCBldmVuIGlmIHRoZSBpbnB1
dCBkb2Vzbid0IGhhdmUgdGhpcyBzdHJpbmcuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6RGF5MToKLSAgICAgICAgY2FzZSBEYXRl
Rm9ybWF0VG9rZW46OkRheTI6Ci0gICAgICAgICAgICBkYXkgPSBwYXJzZU51bWJlcihpbnB1dCwg
aW5wdXRJbmRleCk7Ci0gICAgICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RGF0ZUZvcm1hdFRva2VuOjpNb250aDE6Ci0gICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpN
b250aDI6Ci0gICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpNb250aDM6Ci0gICAgICAgIGNh
c2UgRGF0ZUZvcm1hdFRva2VuOjpNb250aDQ6Ci0gICAgICAgICAgICBtb250aCA9IHBhcnNlTnVt
YmVyT3JNb250aChpbnB1dCwgaW5wdXRJbmRleCk7Ci0gICAgICAgICAgICBpZiAobW9udGggPCAw
IHx8IG1vbnRoID4gMTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6WWVhcjE6IHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gaW5wdXRJbmRleDsKLSAgICAgICAgICAgIHllYXIgPSBw
YXJzZU51bWJlcihpbnB1dCwgaW5wdXRJbmRleCk7Ci0gICAgICAgICAgICBpZiAoeWVhciA8PSAw
KQotICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgICAgICBpZiAoaW5wdXRJbmRl
eCAtIG9sZEluZGV4ID09IDEpIHsKLSAgICAgICAgICAgICAgICBpbnQgc2hvcnRZZWFyID0gYmFz
ZVllYXIgJSAxMDsKLSAgICAgICAgICAgICAgICBpbnQgZGVjYWRlID0gYmFzZVllYXIgLSBzaG9y
dFllYXI7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3J0WWVhciA+PSA1KQotICAgICAgICAgICAg
ICAgICAgICB5ZWFyICs9IHNob3J0WWVhciAtIDQgPD0geWVhciA/IGRlY2FkZSA6IGRlY2FkZSAr
IDEwOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgeWVhciArPSBz
aG9ydFllYXIgKyA1ID49IHllYXIgPyBkZWNhZGUgOiBkZWNhZGUgLSAxMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRGF0ZUZvcm1h
dFRva2VuOjpZZWFyMjogewotICAgICAgICAgICAgdW5zaWduZWQgb2xkSW5kZXggPSBpbnB1dElu
ZGV4OwotICAgICAgICAgICAgeWVhciA9IHBhcnNlTnVtYmVyKGlucHV0LCBpbnB1dEluZGV4KTsK
LSAgICAgICAgICAgIGlmICh5ZWFyIDw9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsK
LSAgICAgICAgICAgIGlmIChpbnB1dEluZGV4IC0gb2xkSW5kZXggPT0gMikgewotICAgICAgICAg
ICAgICAgIGludCBzaG9ydFllYXIgPSBiYXNlWWVhciAlIDEwMDsKLSAgICAgICAgICAgICAgICBp
bnQgY2VudHVyeSA9IGJhc2VZZWFyIC0gc2hvcnRZZWFyOwotICAgICAgICAgICAgICAgIGlmIChz
aG9ydFllYXIgPj0gNTApCi0gICAgICAgICAgICAgICAgICAgIHllYXIgKz0gc2hvcnRZZWFyIC0g
NDkgPD0geWVhciA/IGNlbnR1cnkgOiBjZW50dXJ5ICsgMTAwOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgeWVhciArPSBzaG9ydFllYXIgKyA1MCA+PSB5ZWFyID8g
Y2VudHVyeSA6IGNlbnR1cnkgLSAxMDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6WWVhcjQ6Ci0gICAg
ICAgICAgICB5ZWFyID0gcGFyc2VOdW1iZXIoaW5wdXQsIGlucHV0SW5kZXgpOwotICAgICAgICAg
ICAgaWYgKHllYXIgPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHllYXIgPD0gMCB8fCBtb250aCA8
IDAgfHwgZGF5IDw9IDApCi0gICAgICAgIHJldHVybiBOYU47Ci0gICAgcmV0dXJuIGRhdGVUb0Rh
eXNGcm9tMTk3MCh5ZWFyLCBtb250aCwgZGF5KSAqIG1zUGVyRGF5OwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JtYXR0aW5nCi0KLXZvaWQgTG9jYWxlV2luOjpl
bnN1cmVTaG9ydERhdGVUb2tlbnMoKQotewotICAgIGlmICghbV9zaG9ydERhdGVUb2tlbnMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG9ydERhdGVUb2tlbnMgPSBwYXJzZURh
dGVGb3JtYXQoZ2V0TG9jYWxlSW5mb1N0cmluZyhMT0NBTEVfU1NIT1JUREFURSkpOwotfQotCi1z
dGF0aWMgU3RyaW5nIHN1YnN0aXR1dGVMYWJlbHNJbnRvRm9ybWF0KGNvbnN0IFZlY3RvcjxEYXRl
Rm9ybWF0VG9rZW4+JiB0b2tlbnMsIGNvbnN0IFN0cmluZyYgeWVhclRleHQsIGNvbnN0IFN0cmlu
ZyYgbW9udGhUZXh0LCBjb25zdCBTdHJpbmcmIGRheVRleHQpCi17Ci0gICAgU3RyaW5nIG5vbkVt
cHR5RGF5VGV4dCA9IGRheVRleHQuaXNFbXB0eSgpID8gIkRheSIgOiBkYXlUZXh0OwotICAgIFN0
cmluZyBub25FbXB0eU1vbnRoVGV4dCA9IG1vbnRoVGV4dC5pc0VtcHR5KCkgPyAiTW9udGgiIDog
bW9udGhUZXh0OwotICAgIFN0cmluZyBub25FbXB0eVllYXJUZXh0ID0geWVhclRleHQuaXNFbXB0
eSgpID8gIlllYXIiIDogeWVhclRleHQ7Ci0gICAgU3RyaW5nQnVpbGRlciBidWZmZXI7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2Vucy5zaXplKCk7ICsraSkgewotICAgICAgICBz
d2l0Y2ggKHRva2Vuc1tpXS50eXBlKSB7Ci0gICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpM
aXRlcmFsOgotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCh0b2tlbnNbaV0uZGF0YSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46OkRheTE6Ci0gICAg
ICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpEYXkyOgotICAgICAgICAgICAgYnVmZmVyLmFwcGVu
ZChub25FbXB0eURheVRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGF0
ZUZvcm1hdFRva2VuOjpNb250aDE6Ci0gICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpNb250
aDI6Ci0gICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpNb250aDM6Ci0gICAgICAgIGNhc2Ug
RGF0ZUZvcm1hdFRva2VuOjpNb250aDQ6Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKG5vbkVt
cHR5TW9udGhUZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERhdGVGb3Jt
YXRUb2tlbjo6WWVhcjE6Ci0gICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpZZWFyMjoKLSAg
ICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46OlllYXI0OgotICAgICAgICAgICAgYnVmZmVyLmFw
cGVuZChub25FbXB0eVllYXJUZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIExvY2FsZVdp
bjo6ZGF0ZUZvcm1hdFRleHQoKQotewotICAgIGVuc3VyZVNob3J0RGF0ZVRva2VucygpOwotICAg
IHJldHVybiBzdWJzdGl0dXRlTGFiZWxzSW50b0Zvcm1hdChtX3Nob3J0RGF0ZVRva2VucywgZGF0
ZUZvcm1hdFllYXJUZXh0KCksIGRhdGVGb3JtYXRNb250aFRleHQoKSwgZGF0ZUZvcm1hdERheUlu
TW9udGhUZXh0KCkpOwotfQotCi1TdHJpbmcgTG9jYWxlV2luOjpkYXRlRm9ybWF0VGV4dChjb25z
dCBTdHJpbmcmIGZvcm1hdCwgY29uc3QgU3RyaW5nJiB5ZWFyVGV4dCwgY29uc3QgU3RyaW5nJiBt
b250aFRleHQsIGNvbnN0IFN0cmluZyYgZGF5VGV4dCkKLXsKLSAgICByZXR1cm4gc3Vic3RpdHV0
ZUxhYmVsc0ludG9Gb3JtYXQocGFyc2VEYXRlRm9ybWF0KGZvcm1hdCksIHllYXJUZXh0LCBtb250
aFRleHQsIGRheVRleHQpOwotfQotCi12b2lkIExvY2FsZVdpbjo6ZW5zdXJlTW9udGhMYWJlbHMo
KQotewotICAgIGlmICghbV9tb250aExhYmVscy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb25zdCBMQ1RZUEUgdHlwZXNbMTJdID0gewotICAgICAgICBMT0NBTEVfU01PTlRITkFN
RTEsCi0gICAgICAgIExPQ0FMRV9TTU9OVEhOQU1FMiwKLSAgICAgICAgTE9DQUxFX1NNT05USE5B
TUUzLAotICAgICAgICBMT0NBTEVfU01PTlRITkFNRTQsCi0gICAgICAgIExPQ0FMRV9TTU9OVEhO
QU1FNSwKLSAgICAgICAgTE9DQUxFX1NNT05USE5BTUU2LAotICAgICAgICBMT0NBTEVfU01PTlRI
TkFNRTcsCi0gICAgICAgIExPQ0FMRV9TTU9OVEhOQU1FOCwKLSAgICAgICAgTE9DQUxFX1NNT05U
SE5BTUU5LAotICAgICAgICBMT0NBTEVfU01PTlRITkFNRTEwLAotICAgICAgICBMT0NBTEVfU01P
TlRITkFNRTExLAotICAgICAgICBMT0NBTEVfU01PTlRITkFNRTEyLAotICAgIH07Ci0gICAgbV9t
b250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoV1RGX0FSUkFZX0xFTkdUSCh0eXBlcykpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHR5cGVzKTsgKytpKSB7
Ci0gICAgICAgIG1fbW9udGhMYWJlbHMuYXBwZW5kKGdldExvY2FsZUluZm9TdHJpbmcodHlwZXNb
aV0pKTsKLSAgICAgICAgaWYgKG1fbW9udGhMYWJlbHMubGFzdCgpLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgbV9tb250aExhYmVscy5zaHJpbmsoMCk7Ci0gICAgICAgICAgICBtX21vbnRoTGFi
ZWxzLnJlc2VydmVDYXBhY2l0eShXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhGdWxsTmFtZSkp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBtID0gMDsgbSA8IFdURl9BUlJBWV9MRU5HVEgo
V1RGOjptb250aEZ1bGxOYW1lKTsgKyttKQotICAgICAgICAgICAgICAgIG1fbW9udGhMYWJlbHMu
YXBwZW5kKFdURjo6bW9udGhGdWxsTmFtZVttXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTG9jYWxlV2luOjplbnN1cmVXZWVrRGF5U2hvcnRMYWJl
bHMoKQotewotICAgIGlmICghbV93ZWVrRGF5U2hvcnRMYWJlbHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgY29uc3QgTENUWVBFIHR5cGVzWzddID0gewotICAgICAgICBMT0NBTEVf
U0FCQlJFVkRBWU5BTUU3LCAvLyBTdW5kYXkKLSAgICAgICAgTE9DQUxFX1NBQkJSRVZEQVlOQU1F
MSwgLy8gTW9uZGF5Ci0gICAgICAgIExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsCi0gICAgICAgIExP
Q0FMRV9TQUJCUkVWREFZTkFNRTMsCi0gICAgICAgIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsCi0g
ICAgICAgIExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsCi0gICAgICAgIExPQ0FMRV9TQUJCUkVWREFZ
TkFNRTYKLSAgICB9OwotICAgIG1fd2Vla0RheVNob3J0TGFiZWxzLnJlc2VydmVDYXBhY2l0eShX
VEZfQVJSQVlfTEVOR1RIKHR5cGVzKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdU
Rl9BUlJBWV9MRU5HVEgodHlwZXMpOyArK2kpIHsKLSAgICAgICAgbV93ZWVrRGF5U2hvcnRMYWJl
bHMuYXBwZW5kKGdldExvY2FsZUluZm9TdHJpbmcodHlwZXNbaV0pKTsKLSAgICAgICAgaWYgKG1f
d2Vla0RheVNob3J0TGFiZWxzLmxhc3QoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fd2Vl
a0RheVNob3J0TGFiZWxzLnNocmluaygwKTsKLSAgICAgICAgICAgIG1fd2Vla0RheVNob3J0TGFi
ZWxzLnJlc2VydmVDYXBhY2l0eShXVEZfQVJSQVlfTEVOR1RIKFdURjo6d2Vla2RheU5hbWUpKTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgdyA9IDA7IHcgPCBXVEZfQVJSQVlfTEVOR1RIKFdU
Rjo6d2Vla2RheU5hbWUpOyArK3cpIHsKLSAgICAgICAgICAgICAgICAvLyB3ZWVrZGF5TmFtZSBz
dGFydHMgd2l0aCBNb25kYXkuCi0gICAgICAgICAgICAgICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMu
YXBwZW5kKFdURjo6d2Vla2RheU5hbWVbKHcgKyA2KSAlIDddKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotI2lmIEVOQUJMRShDQUxF
TkRBUl9QSUNLRVIpIHx8IEVOQUJMRShJTlBVVF9NVUxUSVBMRV9GSUVMRFNfVUkpCi1jb25zdCBW
ZWN0b3I8U3RyaW5nPiYgTG9jYWxlV2luOjptb250aExhYmVscygpCi17Ci0gICAgZW5zdXJlTW9u
dGhMYWJlbHMoKTsKLSAgICByZXR1cm4gbV9tb250aExhYmVsczsKLX0KLSNlbmRpZgotCi0jaWYg
RU5BQkxFKENBTEVOREFSX1BJQ0tFUikKLWNvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVXaW46
OndlZWtEYXlTaG9ydExhYmVscygpCi17Ci0gICAgZW5zdXJlV2Vla0RheVNob3J0TGFiZWxzKCk7
Ci0gICAgcmV0dXJuIG1fd2Vla0RheVNob3J0TGFiZWxzOwotfQotCi11bnNpZ25lZCBMb2NhbGVX
aW46OmZpcnN0RGF5T2ZXZWVrKCkKLXsKLSAgICByZXR1cm4gbV9maXJzdERheU9mV2VlazsKLX0K
LQotYm9vbCBMb2NhbGVXaW46OmlzUlRMKCkKLXsKLSAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlv
biBkaXIgPSBXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbihtb250aExhYmVscygpWzBdWzBdKTsKLSAg
ICByZXR1cm4gZGlyID09IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQgfHwgZGlyID09IFdURjo6
VW5pY29kZTo6UmlnaHRUb0xlZnRBcmFiaWM7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShJTlBV
VF9NVUxUSVBMRV9GSUVMRFNfVUkpCi1zdGF0aWMgU3RyaW5nIGNvbnZlcnRXaW5kb3dzRGF0ZUZv
cm1hdFRvTERNTChjb25zdCBWZWN0b3I8RGF0ZUZvcm1hdFRva2VuPiYgdG9rZW5zKQotewotICAg
IFN0cmluZ0J1aWxkZXIgYnVmZmVyOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b2tl
bnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgc3dpdGNoICh0b2tlbnNbaV0udHlwZSkgewotICAg
ICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6TGl0ZXJhbDoKLSAgICAgICAgICAgIERhdGVUaW1l
Rm9ybWF0OjpxdW90ZUFuZEFwcGVuZExpdGVyYWwodG9rZW5zW2ldLmRhdGEsIGJ1ZmZlcik7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6RGF5MjoK
LSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oRGF0ZVRpbWVGb3Jt
YXQ6OkZpZWxkVHlwZURheU9mTW9udGgpKTsKLSAgICAgICAgICAgIC8vIEZhbGx0aHJvdWdoLgot
ICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6RGF5MToKLSAgICAgICAgICAgIGJ1ZmZlci5h
cHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZURheU9mTW9u
dGgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2Vu
OjpNb250aDQ6Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aCkpOwotICAgICAgICAgICAgLy8gRmFsbHRocm91
Z2guCi0gICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpNb250aDM6Ci0gICAgICAgICAgICBi
dWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVN
b250aCkpOwotICAgICAgICAgICAgLy8gRmFsbHRocm91Z2guCi0gICAgICAgIGNhc2UgRGF0ZUZv
cm1hdFRva2VuOjpNb250aDI6Ci0gICAgICAgICAgICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0
PGNoYXI+KERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVNb250aCkpOwotICAgICAgICAgICAgLy8g
RmFsbHRocm91Z2guCi0gICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpNb250aDE6Ci0gICAg
ICAgICAgICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KERhdGVUaW1lRm9ybWF0OjpG
aWVsZFR5cGVNb250aCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEYXRl
Rm9ybWF0VG9rZW46OlllYXI0OgotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2Fz
dDxjaGFyPihEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVhcikpOwotICAgICAgICAgICAgYnVm
ZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVh
cikpOwotICAgICAgICAgICAgLy8gRmFsbHRocm91Z2guCi0gICAgICAgIGNhc2UgRGF0ZUZvcm1h
dFRva2VuOjpZZWFyMjoKLSAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hh
cj4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXIpKTsKLSAgICAgICAgICAgIC8vIEZhbGx0
aHJvdWdoLgotICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6WWVhcjE6Ci0gICAgICAgICAg
ICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVZZWFyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlIG1hcENoYXJhY3RlclRvRGF0ZVRpbWVGaWVsZFR5cGUoVUNoYXIgY2gpCi17Ci0gICAgc3dp
dGNoIChjaCkgewotICAgIGNhc2UgJ2gnOgotICAgICAgICByZXR1cm4gRGF0ZVRpbWVGb3JtYXQ6
OkZpZWxkVHlwZUhvdXIxMjsKLQotICAgIGNhc2UgJ0gnOgotICAgICAgICByZXR1cm4gRGF0ZVRp
bWVGb3JtYXQ6OkZpZWxkVHlwZUhvdXIyMzsKLQotICAgIGNhc2UgJ20nOgotICAgICAgICByZXR1
cm4gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1pbnV0ZTsKLQotICAgIGNhc2UgJ3MnOgotICAg
ICAgICByZXR1cm4gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVNlY29uZDsKLQotICAgIGNhc2Ug
J3QnOgotICAgICAgICByZXR1cm4gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZDsKLQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTGl0
ZXJhbDsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgY2xhc3MgdXNlZCBmb3IgY29udmVydGluZyBXaW5k
b3dzIHRpbWUgcGF0dGVybiBmb3JtYXRbMV0gaW50byBMRE1MWzJdCi0vLyB0aW1lIGZvcm1hdCBz
dHJpbmcuCi0vLyBbMV0gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dp
bmRvd3MvZGVza3RvcC9kZDMxODE0OCh2PXZzLjg1KS5hc3B4Ci0vLyBbMl0gTERNTCBodHRwOi8v
dW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtNi5odG1sI0RhdGVfRm9ybWF0X1BhdHRlcm5z
Ci1zdGF0aWMgU3RyaW5nIGNvbnZlcnRXaW5kb3dzVGltZUZvcm1hdFRvTERNTChjb25zdCBTdHJp
bmcmIHdpbmRvd3NUaW1lRm9ybWF0KQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAg
ICBpbnQgY291bnRlciA9IDA7Ci0gICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZSBsYXN0Rmll
bGRUeXBlID0gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxpdGVyYWw7Ci0gICAgZm9yICh1bnNp
Z25lZCBpbmRleCA9IDA7IGluZGV4IDwgd2luZG93c1RpbWVGb3JtYXQubGVuZ3RoKCk7ICsraW5k
ZXgpIHsKLSAgICAgICAgVUNoYXIgY29uc3QgY2ggPSB3aW5kb3dzVGltZUZvcm1hdFtpbmRleF07
Ci0gICAgICAgIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlID0gbWFwQ2hhcmFj
dGVyVG9EYXRlVGltZUZpZWxkVHlwZShjaCk7Ci0gICAgICAgIGlmIChmaWVsZFR5cGUgPT0gRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxpdGVyYWwpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZChjaCk7Ci0gICAgICAgIGVsc2UgaWYgKGZpZWxkVHlwZSA9PSBsYXN0RmllbGRUeXBlKSB7Ci0g
ICAgICAgICAgICArK2NvdW50ZXI7Ci0gICAgICAgICAgICBpZiAoY291bnRlciA9PSAyICYmIGxh
c3RGaWVsZFR5cGUgIT0gRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVBlcmlvZCkKLSAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4obGFzdEZpZWxkVHlwZSkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGxhc3RGaWVsZFR5cGUgIT0gRGF0
ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZUxpdGVyYWwpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+KGxhc3RGaWVsZFR5cGUpKTsKLSAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihmaWVsZFR5cGUpKTsKLSAgICAgICAgICAg
IGNvdW50ZXIgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGxhc3RGaWVsZFR5cGUgPSBmaWVsZFR5
cGU7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBM
b2NhbGVXaW46OmRhdGVGb3JtYXQoKQotewotICAgIGlmICghbV9kYXRlRm9ybWF0LmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gbV9kYXRlRm9ybWF0OwotICAgIGVuc3VyZVNob3J0RGF0ZVRva2Vu
cygpOwotICAgIG1fZGF0ZUZvcm1hdCA9IGNvbnZlcnRXaW5kb3dzRGF0ZUZvcm1hdFRvTERNTCht
X3Nob3J0RGF0ZVRva2Vucyk7Ci0gICAgcmV0dXJuIG1fZGF0ZUZvcm1hdDsKLX0KLQotU3RyaW5n
IExvY2FsZVdpbjo6ZGF0ZUZvcm1hdChjb25zdCBTdHJpbmcmIHdpbmRvd3NGb3JtYXQpCi17Ci0g
ICAgcmV0dXJuIGNvbnZlcnRXaW5kb3dzRGF0ZUZvcm1hdFRvTERNTChwYXJzZURhdGVGb3JtYXQo
d2luZG93c0Zvcm1hdCkpOwotfQotCi1TdHJpbmcgTG9jYWxlV2luOjptb250aEZvcm1hdCgpCi17
Ci0gICAgaWYgKCFtX21vbnRoRm9ybWF0LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbV9tb250
aEZvcm1hdDsKLSAgICBtX21vbnRoRm9ybWF0ID0gY29udmVydFdpbmRvd3NEYXRlRm9ybWF0VG9M
RE1MKHBhcnNlRGF0ZUZvcm1hdChnZXRMb2NhbGVJbmZvU3RyaW5nKExPQ0FMRV9TWUVBUk1PTlRI
KSkpOwotICAgIHJldHVybiBtX21vbnRoRm9ybWF0OwotfQotCi1TdHJpbmcgTG9jYWxlV2luOjp0
aW1lRm9ybWF0KCkKLXsKLSAgICBpZiAobV90aW1lRm9ybWF0V2l0aFNlY29uZHMuaXNOdWxsKCkp
Ci0gICAgICAgIG1fdGltZUZvcm1hdFdpdGhTZWNvbmRzID0gY29udmVydFdpbmRvd3NUaW1lRm9y
bWF0VG9MRE1MKGdldExvY2FsZUluZm9TdHJpbmcoTE9DQUxFX1NUSU1FRk9STUFUKSk7Ci0gICAg
cmV0dXJuIG1fdGltZUZvcm1hdFdpdGhTZWNvbmRzOwotfQotCi1TdHJpbmcgTG9jYWxlV2luOjpz
aG9ydFRpbWVGb3JtYXQoKQotewotICAgIGlmICghbV90aW1lRm9ybWF0V2l0aG91dFNlY29uZHMu
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBtX3RpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsKLSAg
ICBTdHJpbmcgZm9ybWF0ID0gZ2V0TG9jYWxlSW5mb1N0cmluZyhMT0NBTEVfU1NIT1JUVElNRSk7
Ci0gICAgLy8gVmlzdGEgb3Igb2xkZXIgV2luZG93cyBkb2Vzbid0IHN1cHBvcnQgTE9DQUxFX1NT
SE9SVFRJTUUuCi0gICAgaWYgKGZvcm1hdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9ybWF0ID0g
dGltZUZvcm1hdCgpOwotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGdldExvY2FsZUluZm9TdHJpbmcoTE9DQUxFX1NUSU1FKSk7Ci0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCJzcyIpOwotICAgICAgICBzaXplX3QgcG9zID0gZm9ybWF0LnJldmVy
c2VGaW5kKGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChwb3MgIT0gbm90Rm91bmQp
Ci0gICAgICAgICAgICBmb3JtYXQucmVtb3ZlKHBvcywgYnVpbGRlci5sZW5ndGgoKSk7Ci0gICAg
fQotICAgIG1fdGltZUZvcm1hdFdpdGhvdXRTZWNvbmRzID0gY29udmVydFdpbmRvd3NUaW1lRm9y
bWF0VG9MRE1MKGZvcm1hdCk7Ci0gICAgcmV0dXJuIG1fdGltZUZvcm1hdFdpdGhvdXRTZWNvbmRz
OwotfQotCi1jb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlV2luOjpzaG9ydE1vbnRoTGFiZWxz
KCkKLXsKLSAgICBlbnN1cmVTaG9ydE1vbnRoTGFiZWxzKCk7Ci0gICAgcmV0dXJuIG1fc2hvcnRN
b250aExhYmVsczsKLX0KLQotY29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZVdpbjo6c3RhbmRB
bG9uZU1vbnRoTGFiZWxzKCkKLXsKLSAgICAvLyBXaW5kb3dzIGRvZXNuJ3QgcHJvdmlkZSBhIHdh
eSB0byBnZXQgc3RhbmQtYWxvbmUgbW9udGggbGFiZWxzLgotICAgIHJldHVybiBtb250aExhYmVs
cygpOwotfQotCi1jb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlV2luOjpzaG9ydFN0YW5kQWxv
bmVNb250aExhYmVscygpCi17Ci0gICAgLy8gV2luZG93cyBkb2Vzbid0IHByb3ZpZGUgYSB3YXkg
dG8gZ2V0IHN0YW5kLWFsb25lIG1vbnRoIGxhYmVscy4KLSAgICByZXR1cm4gc2hvcnRNb250aExh
YmVscygpOwotfQotCi1jb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlV2luOjp0aW1lQU1QTUxh
YmVscygpCi17Ci0gICAgaWYgKG1fdGltZUFNUE1MYWJlbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKGdldExvY2FsZUluZm9TdHJpbmcoTE9DQUxFX1MxMTU5
KSk7Ci0gICAgICAgIG1fdGltZUFNUE1MYWJlbHMuYXBwZW5kKGdldExvY2FsZUluZm9TdHJpbmco
TE9DQUxFX1MyMzU5KSk7Ci0gICAgfQotICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwotfQot
I2VuZGlmCi0KLXZvaWQgTG9jYWxlV2luOjppbml0aWFsaXplTG9jYWxlRGF0YSgpCi17Ci0gICAg
aWYgKG1fZGlkSW5pdGlhbGl6ZU51bWJlckRhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZl
Y3RvcjxTdHJpbmcsIERlY2ltYWxTeW1ib2xzU2l6ZT4gc3ltYm9sczsKLSAgICBlbnVtIERpZ2l0
U3Vic3RpdHV0aW9uIHsKLSAgICAgICAgRGlnaXRTdWJzdGl0dXRpb25Db250ZXh0ID0gMCwKLSAg
ICAgICAgRGlnaXRTdWJzdGl0dXRpb24wdG85ID0gMSwKLSAgICAgICAgRGlnaXRTdWJzdGl0dXRp
b25OYXRpdmUgPSAyLAotICAgIH07Ci0gICAgRFdPUkQgZGlnaXRTdWJzdGl0dXRpb24gPSBEaWdp
dFN1YnN0aXR1dGlvbjB0bzk7Ci0gICAgZ2V0TG9jYWxlSW5mbyhMT0NBTEVfSURJR0lUU1VCU1RJ
VFVUSU9OLCBkaWdpdFN1YnN0aXR1dGlvbik7Ci0gICAgaWYgKGRpZ2l0U3Vic3RpdHV0aW9uID09
IERpZ2l0U3Vic3RpdHV0aW9uMHRvOSkgewotICAgICAgICBzeW1ib2xzLmFwcGVuZCgiMCIpOwot
ICAgICAgICBzeW1ib2xzLmFwcGVuZCgiMSIpOwotICAgICAgICBzeW1ib2xzLmFwcGVuZCgiMiIp
OwotICAgICAgICBzeW1ib2xzLmFwcGVuZCgiMyIpOwotICAgICAgICBzeW1ib2xzLmFwcGVuZCgi
NCIpOwotICAgICAgICBzeW1ib2xzLmFwcGVuZCgiNSIpOwotICAgICAgICBzeW1ib2xzLmFwcGVu
ZCgiNiIpOwotICAgICAgICBzeW1ib2xzLmFwcGVuZCgiNyIpOwotICAgICAgICBzeW1ib2xzLmFw
cGVuZCgiOCIpOwotICAgICAgICBzeW1ib2xzLmFwcGVuZCgiOSIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFN0cmluZyBkaWdpdHMgPSBnZXRMb2NhbGVJbmZvU3RyaW5nKExPQ0FMRV9TTkFUSVZF
RElHSVRTKTsKLSAgICAgICAgQVNTRVJUKGRpZ2l0cy5sZW5ndGgoKSA+PSAxMCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDsgKytpKQotICAgICAgICAgICAgc3ltYm9scy5h
cHBlbmQoZGlnaXRzLnN1YnN0cmluZyhpLCAxKSk7Ci0gICAgfQotICAgIEFTU0VSVChzeW1ib2xz
LnNpemUoKSA9PSBEZWNpbWFsU2VwYXJhdG9ySW5kZXgpOwotICAgIHN5bWJvbHMuYXBwZW5kKGdl
dExvY2FsZUluZm9TdHJpbmcoTE9DQUxFX1NERUNJTUFMKSk7Ci0gICAgQVNTRVJUKHN5bWJvbHMu
c2l6ZSgpID09IEdyb3VwU2VwYXJhdG9ySW5kZXgpOwotICAgIHN5bWJvbHMuYXBwZW5kKGdldExv
Y2FsZUluZm9TdHJpbmcoTE9DQUxFX1NUSE9VU0FORCkpOwotICAgIEFTU0VSVChzeW1ib2xzLnNp
emUoKSA9PSBEZWNpbWFsU3ltYm9sc1NpemUpOwotCi0gICAgU3RyaW5nIG5lZ2F0aXZlU2lnbiA9
IGdldExvY2FsZUluZm9TdHJpbmcoTE9DQUxFX1NORUdBVElWRVNJR04pOwotICAgIGVudW0gTmVn
YXRpdmVGb3JtYXQgewotICAgICAgICBOZWdhdGl2ZUZvcm1hdFBhcmVudGhlc2lzID0gMCwKLSAg
ICAgICAgTmVnYXRpdmVGb3JtYXRTaWduUHJlZml4ID0gMSwKLSAgICAgICAgTmVnYXRpdmVGb3Jt
YXRTaWduU3BhY2VQcmVmaXggPSAyLAotICAgICAgICBOZWdhdGl2ZUZvcm1hdFNpZ25TdWZmaXgg
PSAzLAotICAgICAgICBOZWdhdGl2ZUZvcm1hdFNwYWNlU2lnblN1ZmZpeCA9IDQsCi0gICAgfTsK
LSAgICBEV09SRCBuZWdhdGl2ZUZvcm1hdCA9IE5lZ2F0aXZlRm9ybWF0U2lnblByZWZpeDsKLSAg
ICBnZXRMb2NhbGVJbmZvKExPQ0FMRV9JTkVHTlVNQkVSLCBuZWdhdGl2ZUZvcm1hdCk7Ci0gICAg
U3RyaW5nIG5lZ2F0aXZlUHJlZml4ID0gZW1wdHlTdHJpbmcoKTsKLSAgICBTdHJpbmcgbmVnYXRp
dmVTdWZmaXggPSBlbXB0eVN0cmluZygpOwotICAgIHN3aXRjaCAobmVnYXRpdmVGb3JtYXQpIHsK
LSAgICBjYXNlIE5lZ2F0aXZlRm9ybWF0UGFyZW50aGVzaXM6Ci0gICAgICAgIG5lZ2F0aXZlUHJl
Zml4ID0gIigiOwotICAgICAgICBuZWdhdGl2ZVN1ZmZpeCA9ICIpIjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBOZWdhdGl2ZUZvcm1hdFNpZ25TcGFjZVByZWZpeDoKLSAgICAgICAgbmVnYXRp
dmVQcmVmaXggPSBuZWdhdGl2ZVNpZ24gKyAiICI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TmVnYXRpdmVGb3JtYXRTaWduU3VmZml4OgotICAgICAgICBuZWdhdGl2ZVN1ZmZpeCA9IG5lZ2F0
aXZlU2lnbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOZWdhdGl2ZUZvcm1hdFNwYWNlU2ln
blN1ZmZpeDoKLSAgICAgICAgbmVnYXRpdmVTdWZmaXggPSAiICIgKyBuZWdhdGl2ZVNpZ247Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTmVnYXRpdmVGb3JtYXRTaWduUHJlZml4OiAvLyBGYWxs
IHRocm91Z2guCi0gICAgZGVmYXVsdDoKLSAgICAgICAgbmVnYXRpdmVQcmVmaXggPSBuZWdhdGl2
ZVNpZ247Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtX2RpZEluaXRpYWxpemVOdW1iZXJE
YXRhID0gdHJ1ZTsKLSAgICBzZXRMb2NhbGVEYXRhKHN5bWJvbHMsIGVtcHR5U3RyaW5nKCksIGVt
cHR5U3RyaW5nKCksIG5lZ2F0aXZlUHJlZml4LCBuZWdhdGl2ZVN1ZmZpeCk7Ci19Ci0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlV2luLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0NjcxNDQ1MmExYzRiNDY4MGM0NmZkZTk4NzBkM2JmZWFmYTU2Nzk3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvTG9jYWxlV2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgTG9jYWxlV2luX2gKLSNkZWZpbmUgTG9jYWxlV2luX2gKLQotI2luY2x1ZGUgIlBs
YXRmb3JtTG9jYWxlLmgiCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERhdGVDb21wb25lbnRzOwot
c3RydWN0IERhdGVGb3JtYXRUb2tlbjsKLQotY2xhc3MgTG9jYWxlV2luIDogcHVibGljIExvY2Fs
ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxlV2luPiBjcmVhdGUoTENJ
RCk7Ci0gICAgfkxvY2FsZVdpbigpOwotICAgIHZpcnR1YWwgZG91YmxlIHBhcnNlRGF0ZVRpbWUo
Y29uc3QgU3RyaW5nJiwgRGF0ZUNvbXBvbmVudHM6OlR5cGUpIE9WRVJSSURFOwotI2lmIEVOQUJM
RShDQUxFTkRBUl9QSUNLRVIpCi0gICAgdmlydHVhbCBTdHJpbmcgZGF0ZUZvcm1hdFRleHQoKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB3ZWVrRGF5U2hvcnRM
YWJlbHMoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGZpcnN0RGF5T2ZXZWVrKCkg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGlzUlRMKCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKSB8fCBFTkFCTEUoSU5QVVRfTVVMVElQTEVfRklFTERT
X1VJKQotICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG1vbnRoTGFiZWxzKCkgT1ZF
UlJJREU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoSU5QVVRfTVVMVElQTEVfRklFTERTX1VJKQotICAg
IHZpcnR1YWwgU3RyaW5nIGRhdGVGb3JtYXQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBtb250aEZvcm1hdCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIHRpbWVGb3JtYXQo
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBzaG9ydFRpbWVGb3JtYXQoKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzaG9ydE1vbnRoTGFiZWxzKCkg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RhbmRBbG9uZU1v
bnRoTGFiZWxzKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
c2hvcnRTdGFuZEFsb25lTW9udGhMYWJlbHMoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiB0aW1lQU1QTUxhYmVscygpIE9WRVJSSURFOwotI2VuZGlmCi0KLSAg
ICAvLyBGb3IgdGVzdGluZy4KLSAgICBkb3VibGUgcGFyc2VEYXRlKGNvbnN0IFN0cmluZyYgZm9y
bWF0LCBpbnQgYmFzZVllYXIsIGNvbnN0IFN0cmluZyYgaW5wdXQpOwotICAgIFN0cmluZyBmb3Jt
YXREYXRlKGNvbnN0IFN0cmluZyYgZm9ybWF0LCBpbnQgYmFzZVllYXIsIGludCB5ZWFyLCBpbnQg
bW9udGgsIGludCBkYXkpOwotICAgIHN0YXRpYyBTdHJpbmcgZGF0ZUZvcm1hdFRleHQoY29uc3Qg
U3RyaW5nJiBmb3JtYXQsIGNvbnN0IFN0cmluZyYgeWVhclRleHQsIGNvbnN0IFN0cmluZyYgbW9u
dGhUZXh0LCBjb25zdCBTdHJpbmcmIGRheVRleHQpOwotI2lmIEVOQUJMRShJTlBVVF9NVUxUSVBM
RV9GSUVMRFNfVUkpCi0gICAgc3RhdGljIFN0cmluZyBkYXRlRm9ybWF0KGNvbnN0IFN0cmluZyYp
OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgTG9jYWxlV2luKExDSUQpOwotICAg
IFN0cmluZyBnZXRMb2NhbGVJbmZvU3RyaW5nKExDVFlQRSk7Ci0gICAgdm9pZCBnZXRMb2NhbGVJ
bmZvKExDVFlQRSwgRFdPUkQmKTsKLSAgICB2b2lkIGVuc3VyZVNob3J0TW9udGhMYWJlbHMoKTsK
LSAgICB2b2lkIGVuc3VyZU1vbnRoTGFiZWxzKCk7Ci0gICAgdm9pZCBlbnN1cmVTaG9ydERhdGVU
b2tlbnMoKTsKLSAgICBib29sIGlzTG9jYWxpemVkRGlnaXQoVUNoYXIpOwotICAgIGludCBwYXJz
ZU51bWJlcihjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCYgaW5kZXgpOwotICAgIGludCBwYXJzZU51
bWJlck9yTW9udGgoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQmIGluZGV4KTsKLSAgICBkb3VibGUg
cGFyc2VEYXRlKGNvbnN0IFZlY3RvcjxEYXRlRm9ybWF0VG9rZW4+JiwgaW50IGJhc2VZZWFyLCBj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZE51bWJlcihpbnQsIFN0cmluZ0J1aWxkZXIm
KTsKLSAgICB2b2lkIGFwcGVuZFR3b0RpZ2l0c051bWJlcihpbnQsIFN0cmluZ0J1aWxkZXImKTsK
LSAgICB2b2lkIGFwcGVuZEZvdXJEaWdpdHNOdW1iZXIoaW50LCBTdHJpbmdCdWlsZGVyJik7Ci0g
ICAgU3RyaW5nIGZvcm1hdERhdGUoY29uc3QgVmVjdG9yPERhdGVGb3JtYXRUb2tlbj4mLCBpbnQg
YmFzZVllYXIsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpOwotI2lmIEVOQUJMRShDQUxF
TkRBUl9QSUNLRVIpCi0gICAgdm9pZCBlbnN1cmVXZWVrRGF5U2hvcnRMYWJlbHMoKTsKLSNlbmRp
ZgotICAgIC8vIExvY2FsZSBmdW5jdGlvbjoKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUxv
Y2FsZURhdGEoKSBPVkVSUklERTsKLQotICAgIExDSUQgbV9sY2lkOwotICAgIGludCBtX2Jhc2VZ
ZWFyOwotICAgIFZlY3RvcjxEYXRlRm9ybWF0VG9rZW4+IG1fc2hvcnREYXRlVG9rZW5zOwotICAg
IFZlY3RvcjxTdHJpbmc+IG1fc2hvcnRNb250aExhYmVsczsKLSAgICBWZWN0b3I8U3RyaW5nPiBt
X21vbnRoTGFiZWxzOwotI2lmIEVOQUJMRShJTlBVVF9NVUxUSVBMRV9GSUVMRFNfVUkpCi0gICAg
U3RyaW5nIG1fZGF0ZUZvcm1hdDsKLSAgICBTdHJpbmcgbV9tb250aEZvcm1hdDsKLSAgICBTdHJp
bmcgbV90aW1lRm9ybWF0V2l0aFNlY29uZHM7Ci0gICAgU3RyaW5nIG1fdGltZUZvcm1hdFdpdGhv
dXRTZWNvbmRzOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fdGltZUFNUE1MYWJlbHM7Ci0jZW5kaWYK
LSNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQotICAgIFZlY3RvcjxTdHJpbmc+IG1fd2Vla0Rh
eVNob3J0TGFiZWxzOwotICAgIHVuc2lnbmVkIG1fZmlyc3REYXlPZldlZWs7Ci0jZW5kaWYKLSAg
ICBib29sIG1fZGlkSW5pdGlhbGl6ZU51bWJlckRhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
d2luL0xvY2FsZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9Mb2Nh
bGVXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2ZWZjMjU3ODA1OTY0NDk2ZGRmNDQyMmIwZTU4MWM5MGFj
OThiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dp
bi9Mb2NhbGVXaW4uY3BwCkBAIC0wLDAgKzEsODI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkxvY2FsZVdpbi5oIgorCisjaW5jbHVkZSAiRGF0ZUNvbXBvbmVudHMuaCIKKyNpZiBF
TkFCTEUoSU5QVVRfTVVMVElQTEVfRklFTERTX1VJKQorI2luY2x1ZGUgIkRhdGVUaW1lRm9ybWF0
LmgiCisjZW5kaWYKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0
cmluZ3MuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIExDSUQgKFdJTkFQSSogTG9jYWxlTmFtZVRvTENJ
RFB0cikoTFBDV1NUUiwgRFdPUkQpOworCitzdGF0aWMgU3RyaW5nIGV4dHJhY3RMYW5ndWFnZUNv
ZGUoY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7CisgICAgc2l6ZV90IGRhc2hQb3NpdGlvbiA9IGxv
Y2FsZS5maW5kKCctJyk7CisgICAgaWYgKGRhc2hQb3NpdGlvbiA9PSBub3RGb3VuZCkKKyAgICAg
ICAgcmV0dXJuIGxvY2FsZTsKKyAgICByZXR1cm4gbG9jYWxlLmxlZnQoZGFzaFBvc2l0aW9uKTsK
K30KKworc3RhdGljIExDSUQgTENJREZyb21Mb2NhbGVJbnRlcm5hbChMQ0lEIHVzZXJEZWZhdWx0
TENJRCwgY29uc3QgU3RyaW5nJiB1c2VyRGVmYXVsdExhbmd1YWdlQ29kZSwgTG9jYWxlTmFtZVRv
TENJRFB0ciBsb2NhbGVOYW1lVG9MQ0lELCBTdHJpbmcmIGxvY2FsZSkKK3sKKyAgICBTdHJpbmcg
bG9jYWxlTGFuZ3VhZ2VDb2RlID0gZXh0cmFjdExhbmd1YWdlQ29kZShsb2NhbGUpOworICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShsb2NhbGVMYW5ndWFnZUNvZGUsIHVzZXJEZWZhdWx0TGFuZ3Vh
Z2VDb2RlKSkKKyAgICAgICAgcmV0dXJuIHVzZXJEZWZhdWx0TENJRDsKKyAgICByZXR1cm4gbG9j
YWxlTmFtZVRvTENJRChsb2NhbGUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCk7
Cit9CisKK3N0YXRpYyBMQ0lEIExDSURGcm9tTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxlKQoreworICAgIC8vIExvY2FsZU5hbWVUb0xDSUQoKSBpcyBhdmFpbGFibGUgc2luY2UgV2lu
ZG93cyBWaXN0YS4KKyAgICBMb2NhbGVOYW1lVG9MQ0lEUHRyIGxvY2FsZU5hbWVUb0xDSUQgPSBy
ZWludGVycHJldF9jYXN0PExvY2FsZU5hbWVUb0xDSURQdHI+KDo6R2V0UHJvY0FkZHJlc3MoOjpH
ZXRNb2R1bGVIYW5kbGUoTCJrZXJuZWwzMiIpLCAiTG9jYWxlTmFtZVRvTENJRCIpKTsKKyAgICBp
ZiAoIWxvY2FsZU5hbWVUb0xDSUQpCisgICAgICAgIHJldHVybiBMT0NBTEVfVVNFUl9ERUZBVUxU
OworCisgICAgLy8gQWNjb3JkaW5nIHRvIE1TRE4sIDkgaXMgZW5vdWdoIGZvciBMT0NBTEVfU0lT
TzYzOUxBTkdOQU1FLgorICAgIGNvbnN0IHNpemVfdCBsYW5ndWFnZUNvZGVCdWZmZXJTaXplID0g
OTsKKyAgICBXQ0hBUiBsb3dlcmNhc2VMYW5ndWFnZUNvZGVbbGFuZ3VhZ2VDb2RlQnVmZmVyU2l6
ZV07CisgICAgOjpHZXRMb2NhbGVJbmZvKExPQ0FMRV9VU0VSX0RFRkFVTFQsIExPQ0FMRV9TSVNP
NjM5TEFOR05BTUUsIGxvd2VyY2FzZUxhbmd1YWdlQ29kZSwgbGFuZ3VhZ2VDb2RlQnVmZmVyU2l6
ZSk7CisgICAgU3RyaW5nIHVzZXJEZWZhdWx0TGFuZ3VhZ2VDb2RlID0gU3RyaW5nKGxvd2VyY2Fz
ZUxhbmd1YWdlQ29kZSk7CisKKyAgICBMQ0lEIGxjaWQgPSBMQ0lERnJvbUxvY2FsZUludGVybmFs
KExPQ0FMRV9VU0VSX0RFRkFVTFQsIHVzZXJEZWZhdWx0TGFuZ3VhZ2VDb2RlLCBsb2NhbGVOYW1l
VG9MQ0lELCBTdHJpbmcobG9jYWxlKSk7CisgICAgaWYgKCFsY2lkKQorICAgICAgICBsY2lkID0g
TENJREZyb21Mb2NhbGVJbnRlcm5hbChMT0NBTEVfVVNFUl9ERUZBVUxULCB1c2VyRGVmYXVsdExh
bmd1YWdlQ29kZSwgbG9jYWxlTmFtZVRvTENJRCwgZGVmYXVsdExhbmd1YWdlKCkpOworICAgIHJl
dHVybiBsY2lkOworfQorCitQYXNzT3duUHRyPExvY2FsZT4gTG9jYWxlOjpjcmVhdGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbGUpCit7CisgICAgcmV0dXJuIExvY2FsZVdpbjo6Y3JlYXRlKExD
SURGcm9tTG9jYWxlKGxvY2FsZSkpOworfQorCisvLyBXaW5kb3dzIGRvZXNuJ3QgaGF2ZSBhbiBB
UEkgdG8gcGFyc2UgbG9jYWxlLXNwZWNpZmljIGRhdGUgc3RyaW5nLAorLy8gYW5kIEdldERhdGVG
b3JtYXQoKSBhbmQgR2V0RGF0ZUZvcm1hdEV4KCkgZG9uJ3Qgc3VwcG9ydCB5ZWFycyBvbGRlcgor
Ly8gdGhhbiAxNjAwLCB3aGljaCB3ZSBzaG91bGQgc3VwcG9ydCBhY2NvcmRpbmcgdG8gdGhlIEhU
TUwKKy8vIHN0YW5kYXJkLiBTbywgd2Ugb2J0YWluIHRoZSBkYXRlIGZvcm1hdCBmcm9tIHRoZSBz
eXN0ZW0sIGJ1dCB3ZQorLy8gZm9ybWF0L3BhcnNlIGEgZGF0ZSBieSBvdXIgb3duIGNvZGUuCisK
K2lubGluZSBMb2NhbGVXaW46OkxvY2FsZVdpbihMQ0lEIGxjaWQpCisgICAgOiBtX2xjaWQobGNp
ZCkKKyAgICAsIG1fZGlkSW5pdGlhbGl6ZU51bWJlckRhdGEoZmFsc2UpCit7CisgICAgU1lTVEVN
VElNRSBzeXN0ZW1UaW1lOworICAgIEdldExvY2FsVGltZSgmc3lzdGVtVGltZSk7CisgICAgbV9i
YXNlWWVhciA9IHN5c3RlbVRpbWUud1llYXI7CisKKyNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VS
KQorICAgIERXT1JEIHZhbHVlID0gMDsKKyAgICBnZXRMb2NhbGVJbmZvKExPQ0FMRV9JRklSU1RE
QVlPRldFRUssIHZhbHVlKTsKKyAgICAvLyAwOk1vbmRheSwgLi4uLCA2OlN1bmRheS4KKyAgICAv
LyBXZSBuZWVkIDEgZm9yIE1vbmRheSwgMCBmb3IgU3VuZGF5LgorICAgIG1fZmlyc3REYXlPZldl
ZWsgPSAodmFsdWUgKyAxKSAlIDc7CisjZW5kaWYKK30KKworUGFzc093blB0cjxMb2NhbGVXaW4+
IExvY2FsZVdpbjo6Y3JlYXRlKExDSUQgbGNpZCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IExvY2FsZVdpbihsY2lkKSk7Cit9CisKK0xvY2FsZVdpbjo6fkxvY2FsZVdpbigpCit7Cit9CisK
K1N0cmluZyBMb2NhbGVXaW46OmdldExvY2FsZUluZm9TdHJpbmcoTENUWVBFIHR5cGUpCit7Cisg
ICAgaW50IGJ1ZmZlclNpemVXaXRoTlVMID0gOjpHZXRMb2NhbGVJbmZvKG1fbGNpZCwgdHlwZSwg
MCwgMCk7CisgICAgaWYgKGJ1ZmZlclNpemVXaXRoTlVMIDw9IDApCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZmZXJTaXplV2l0aE5VTCk7Cisg
ICAgOjpHZXRMb2NhbGVJbmZvKG1fbGNpZCwgdHlwZSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyU2l6
ZVdpdGhOVUwpOworICAgIGJ1ZmZlci5zaHJpbmsoYnVmZmVyU2l6ZVdpdGhOVUwgLSAxKTsKKyAg
ICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOworfQorCit2b2lkIExvY2FsZVdpbjo6Z2V0
TG9jYWxlSW5mbyhMQ1RZUEUgdHlwZSwgRFdPUkQmIHJlc3VsdCkKK3sKKyAgICA6OkdldExvY2Fs
ZUluZm8obV9sY2lkLCB0eXBlIHwgTE9DQUxFX1JFVFVSTl9OVU1CRVIsIHJlaW50ZXJwcmV0X2Nh
c3Q8TFBXU1RSPigmcmVzdWx0KSwgc2l6ZW9mKERXT1JEKSAvIHNpemVvZihUQ0hBUikpOworfQor
Cit2b2lkIExvY2FsZVdpbjo6ZW5zdXJlU2hvcnRNb250aExhYmVscygpCit7CisgICAgaWYgKCFt
X3Nob3J0TW9udGhMYWJlbHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgY29uc3Qg
TENUWVBFIHR5cGVzWzEyXSA9IHsKKyAgICAgICAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLAor
ICAgICAgICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsCisgICAgICAgIExPQ0FMRV9TQUJCUkVW
TU9OVEhOQU1FMywKKyAgICAgICAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LAorICAgICAgICBM
T0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsCisgICAgICAgIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1F
NiwKKyAgICAgICAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LAorICAgICAgICBMT0NBTEVfU0FC
QlJFVk1PTlRITkFNRTgsCisgICAgICAgIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwKKyAgICAg
ICAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwKKyAgICAgICAgTE9DQUxFX1NBQkJSRVZNT05U
SE5BTUUxMSwKKyAgICAgICAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwKKyAgICB9OworICAg
IG1fc2hvcnRNb250aExhYmVscy5yZXNlcnZlQ2FwYWNpdHkoV1RGX0FSUkFZX0xFTkdUSCh0eXBl
cykpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHR5cGVz
KTsgKytpKSB7CisgICAgICAgIG1fc2hvcnRNb250aExhYmVscy5hcHBlbmQoZ2V0TG9jYWxlSW5m
b1N0cmluZyh0eXBlc1tpXSkpOworICAgICAgICBpZiAobV9zaG9ydE1vbnRoTGFiZWxzLmxhc3Qo
KS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fc2hvcnRNb250aExhYmVscy5zaHJpbmsoMCk7
CisgICAgICAgICAgICBtX3Nob3J0TW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KFdURl9BUlJB
WV9MRU5HVEgoV1RGOjptb250aE5hbWUpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbSA9
IDA7IG0gPCBXVEZfQVJSQVlfTEVOR1RIKFdURjo6bW9udGhOYW1lKTsgKyttKQorICAgICAgICAg
ICAgICAgIG1fc2hvcnRNb250aExhYmVscy5hcHBlbmQoV1RGOjptb250aE5hbWVbbV0pOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBUb2tlbml6ZWQgZGF0ZSBmb3JtYXQKKworc3RydWN0IERhdGVG
b3JtYXRUb2tlbiB7CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgTGl0ZXJhbCwKKyAgICAgICAg
RGF5MSwKKyAgICAgICAgRGF5MiwKKyAgICAgICAgTW9udGgxLAorICAgICAgICBNb250aDIsCisg
ICAgICAgIE1vbnRoMywKKyAgICAgICAgTW9udGg0LAorICAgICAgICBZZWFyMSwKKyAgICAgICAg
WWVhcjIsCisgICAgICAgIFllYXI0LAorICAgIH07CisgICAgVHlwZSB0eXBlOworICAgIFN0cmlu
ZyBkYXRhOyAvLyBUaGlzIGlzIHZhbGlkIG9ubHkgaWYgdHlwZT09TGl0ZXJhbC4KKworICAgIERh
dGVGb3JtYXRUb2tlbihUeXBlIHR5cGUpCisgICAgICAgIDogdHlwZSh0eXBlKQorICAgIHsgfQor
CisgICAgRGF0ZUZvcm1hdFRva2VuKGNvbnN0IFN0cmluZyYgZGF0YSkKKyAgICAgICAgOiB0eXBl
KExpdGVyYWwpCisgICAgICAgICwgZGF0YShkYXRhKQorICAgIHsgfQorCisgICAgRGF0ZUZvcm1h
dFRva2VuKGNvbnN0IERhdGVGb3JtYXRUb2tlbiYgdG9rZW4pCisgICAgICAgIDogdHlwZSh0b2tl
bi50eXBlKQorICAgICAgICAsIGRhdGEodG9rZW4uZGF0YSkKKyAgICB7IH0KK307CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc0VyYVN5bWJvbChVQ2hhciBsZXR0ZXIpIHsgcmV0dXJuIGxldHRlciA9
PSAnZyc7IH0KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1llYXJTeW1ib2woVUNoYXIgbGV0dGVyKSB7
IHJldHVybiBsZXR0ZXIgPT0gJ3knOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgaXNNb250aFN5bWJv
bChVQ2hhciBsZXR0ZXIpIHsgcmV0dXJuIGxldHRlciA9PSAnTSc7IH0KK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc0RheVN5bWJvbChVQ2hhciBsZXR0ZXIpIHsgcmV0dXJuIGxldHRlciA9PSAnZCc7IH0K
Kworc3RhdGljIHVuc2lnbmVkIGNvdW50Q29udGludW91c0xldHRlcnMoY29uc3QgU3RyaW5nJiBm
b3JtYXQsIHVuc2lnbmVkIGluZGV4KQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gMTsKKyAgICBV
Q2hhciByZWZlcmVuY2UgPSBmb3JtYXRbaW5kZXhdOworICAgIHdoaWxlIChpbmRleCArIDEgPCBm
b3JtYXQubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKGZvcm1hdFsrK2luZGV4XSAhPSByZWZlcmVu
Y2UpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgKytjb3VudDsKKyAgICB9CisgICAgcmV0
dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBjb21taXRMaXRlcmFsVG9rZW4oU3RyaW5nQnVp
bGRlciYgbGl0ZXJhbEJ1ZmZlciwgVmVjdG9yPERhdGVGb3JtYXRUb2tlbj4mIHRva2VucykKK3sK
KyAgICBpZiAobGl0ZXJhbEJ1ZmZlci5sZW5ndGgoKSA8PSAwKQorICAgICAgICByZXR1cm47Cisg
ICAgdG9rZW5zLmFwcGVuZChEYXRlRm9ybWF0VG9rZW4obGl0ZXJhbEJ1ZmZlci50b1N0cmluZygp
KSk7CisgICAgbGl0ZXJhbEJ1ZmZlci5jbGVhcigpOworfQorCisvLyBTZWUgaHR0cDovL21zZG4u
bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2RkMzE3Nzg3KHY9dnMuODUpLmFzcHgKK3N0YXRp
YyBWZWN0b3I8RGF0ZUZvcm1hdFRva2VuPiBwYXJzZURhdGVGb3JtYXQoY29uc3QgU3RyaW5nIGZv
cm1hdCkKK3sKKyAgICBWZWN0b3I8RGF0ZUZvcm1hdFRva2VuPiB0b2tlbnM7CisgICAgU3RyaW5n
QnVpbGRlciBsaXRlcmFsQnVmZmVyOworICAgIGJvb2wgaW5RdW90ZSA9IGZhbHNlOworICAgIGJv
b2wgbGFzdFF1b3RlQ2FuQmVMaXRlcmFsID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZvcm1hdC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFVDaGFyIGNoID0gZm9ybWF0
W2ldOworICAgICAgICBpZiAoaW5RdW90ZSkgeworICAgICAgICAgICAgaWYgKGNoID09ICdcJycp
IHsKKyAgICAgICAgICAgICAgICBpblF1b3RlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGkpOworICAgICAgICAgICAgICAgIGlmIChsYXN0UXVvdGVDYW5CZUxpdGVyYWwgJiYgZm9y
bWF0W2kgLSAxXSA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIu
YXBwZW5kKCdcJycpOworICAgICAgICAgICAgICAgICAgICBsYXN0UXVvdGVDYW5CZUxpdGVyYWwg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbGFz
dFF1b3RlQ2FuQmVMaXRlcmFsID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIGxpdGVyYWxCdWZmZXIuYXBwZW5kKGNoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoID09ICdcJycpIHsKKyAgICAgICAgICAgIGluUXVv
dGUgPSB0cnVlOworICAgICAgICAgICAgaWYgKGxhc3RRdW90ZUNhbkJlTGl0ZXJhbCAmJiBpID4g
MCAmJiBmb3JtYXRbaSAtIDFdID09ICdcJycpIHsKKyAgICAgICAgICAgICAgICBsaXRlcmFsQnVm
ZmVyLmFwcGVuZChjaCk7CisgICAgICAgICAgICAgICAgbGFzdFF1b3RlQ2FuQmVMaXRlcmFsID0g
ZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBsYXN0UXVvdGVDYW5C
ZUxpdGVyYWwgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGlzWWVhclN5bWJvbChjaCkpIHsK
KyAgICAgICAgICAgIGNvbW1pdExpdGVyYWxUb2tlbihsaXRlcmFsQnVmZmVyLCB0b2tlbnMpOwor
ICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBjb3VudENvbnRpbnVvdXNMZXR0ZXJzKGZvcm1h
dCwgaSk7CisgICAgICAgICAgICBpICs9IGNvdW50IC0gMTsKKyAgICAgICAgICAgIGlmIChjb3Vu
dCA9PSAxKQorICAgICAgICAgICAgICAgIHRva2Vucy5hcHBlbmQoRGF0ZUZvcm1hdFRva2VuKERh
dGVGb3JtYXRUb2tlbjo6WWVhcjEpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDIp
CisgICAgICAgICAgICAgICAgdG9rZW5zLmFwcGVuZChEYXRlRm9ybWF0VG9rZW4oRGF0ZUZvcm1h
dFRva2VuOjpZZWFyMikpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRva2Vu
cy5hcHBlbmQoRGF0ZUZvcm1hdFRva2VuKERhdGVGb3JtYXRUb2tlbjo6WWVhcjQpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpc01vbnRoU3ltYm9sKGNoKSkgeworICAgICAgICAgICAgY29tbWl0TGl0
ZXJhbFRva2VuKGxpdGVyYWxCdWZmZXIsIHRva2Vucyk7CisgICAgICAgICAgICB1bnNpZ25lZCBj
b3VudCA9IGNvdW50Q29udGludW91c0xldHRlcnMoZm9ybWF0LCBpKTsKKyAgICAgICAgICAgIGkg
Kz0gY291bnQgLSAxOworICAgICAgICAgICAgaWYgKGNvdW50ID09IDEpCisgICAgICAgICAgICAg
ICAgdG9rZW5zLmFwcGVuZChEYXRlRm9ybWF0VG9rZW4oRGF0ZUZvcm1hdFRva2VuOjpNb250aDEp
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDIpCisgICAgICAgICAgICAgICAgdG9r
ZW5zLmFwcGVuZChEYXRlRm9ybWF0VG9rZW4oRGF0ZUZvcm1hdFRva2VuOjpNb250aDIpKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDMpCisgICAgICAgICAgICAgICAgdG9rZW5zLmFw
cGVuZChEYXRlRm9ybWF0VG9rZW4oRGF0ZUZvcm1hdFRva2VuOjpNb250aDMpKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0b2tlbnMuYXBwZW5kKERhdGVGb3JtYXRUb2tlbihE
YXRlRm9ybWF0VG9rZW46Ok1vbnRoNCkpOworICAgICAgICB9IGVsc2UgaWYgKGlzRGF5U3ltYm9s
KGNoKSkgeworICAgICAgICAgICAgY29tbWl0TGl0ZXJhbFRva2VuKGxpdGVyYWxCdWZmZXIsIHRv
a2Vucyk7CisgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGNvdW50Q29udGludW91c0xldHRl
cnMoZm9ybWF0LCBpKTsKKyAgICAgICAgICAgIGkgKz0gY291bnQgLSAxOworICAgICAgICAgICAg
aWYgKGNvdW50ID09IDEpCisgICAgICAgICAgICAgICAgdG9rZW5zLmFwcGVuZChEYXRlRm9ybWF0
VG9rZW4oRGF0ZUZvcm1hdFRva2VuOjpEYXkxKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgdG9rZW5zLmFwcGVuZChEYXRlRm9ybWF0VG9rZW4oRGF0ZUZvcm1hdFRva2VuOjpE
YXkyKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXNFcmFTeW1ib2woY2gpKSB7CisgICAgICAgICAg
ICAvLyBKdXN0IGlnbm9yZSBlcmEuCisgICAgICAgICAgICAvLyBIVE1MNSBkYXRlIHN1cHBvcnRz
IG9ubHkgQS5ELgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxpdGVyYWxCdWZmZXIuYXBw
ZW5kKGNoKTsKKyAgICB9CisgICAgY29tbWl0TGl0ZXJhbFRva2VuKGxpdGVyYWxCdWZmZXIsIHRv
a2Vucyk7CisgICAgcmV0dXJuIHRva2VuczsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gUGFyc2luZworCitib29sIExvY2FsZVdpbjo6aXNMb2NhbGl6ZWREaWdpdChV
Q2hhciBjaCkKK3sKKyAgICBTdHJpbmcgbm9ybWFsaXplZERpZ2l0ID0gY29udmVydEZyb21Mb2Nh
bGl6ZWROdW1iZXIoU3RyaW5nKCZjaCwgMSkpOworICAgIGlmIChub3JtYWxpemVkRGlnaXQubGVu
Z3RoKCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpc0FTQ0lJRGln
aXQobm9ybWFsaXplZERpZ2l0WzBdKTsKK30KKworLy8gUmV0dXJucyAtMSBpZiBwYXJzaW5nIGZh
aWxzLgoraW50IExvY2FsZVdpbjo6cGFyc2VOdW1iZXIoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5z
aWduZWQmIGluZGV4KQoreworICAgIHVuc2lnbmVkIGRpZ2l0c1N0YXJ0ID0gaW5kZXg7CisgICAg
d2hpbGUgKGluZGV4IDwgaW5wdXQubGVuZ3RoKCkgJiYgaXNBU0NJSURpZ2l0KGlucHV0W2luZGV4
XSkpCisgICAgICAgIGluZGV4Kys7CisgICAgaWYgKGRpZ2l0c1N0YXJ0ICE9IGluZGV4KSB7Cisg
ICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICAgICAgaW50IG51bWJlciA9IGlucHV0LnN1YnN0
cmluZyhkaWdpdHNTdGFydCwgaW5kZXggLSBkaWdpdHNTdGFydCkudG9JbnQoJm9rKTsKKyAgICAg
ICAgcmV0dXJuIG9rID8gbnVtYmVyIDogLTE7CisgICAgfQorCisgICAgd2hpbGUgKGluZGV4IDwg
aW5wdXQubGVuZ3RoKCkgJiYgaXNMb2NhbGl6ZWREaWdpdChpbnB1dFtpbmRleF0pKQorICAgICAg
ICBpbmRleCsrOworICAgIGlmIChkaWdpdHNTdGFydCA9PSBpbmRleCkKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBpbnQgbnVtYmVyID0gY29udmVydEZyb21M
b2NhbGl6ZWROdW1iZXIoaW5wdXQuc3Vic3RyaW5nKGRpZ2l0c1N0YXJ0LCBpbmRleCAtIGRpZ2l0
c1N0YXJ0KSkudG9JbnQoJm9rKTsKKyAgICByZXR1cm4gb2sgPyBudW1iZXIgOiAtMTsKK30KKwor
Ly8gUmV0dXJucyAwLWJhc2VkIG1vbnRoIG51bWJlci4gUmV0dXJucyAtMSBpZiBwYXJzaW5nIGZh
aWxzLgoraW50IExvY2FsZVdpbjo6cGFyc2VOdW1iZXJPck1vbnRoKGNvbnN0IFN0cmluZyYgaW5w
dXQsIHVuc2lnbmVkJiBpbmRleCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gcGFyc2VOdW1iZXIoaW5w
dXQsIGluZGV4KTsKKyAgICBpZiAocmVzdWx0ID49IDApIHsKKyAgICAgICAgaWYgKHJlc3VsdCA8
IDEgfHwgcmVzdWx0ID4gMTIpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVy
biByZXN1bHQgLSAxOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIG0gPSAwOyBtIDwgbV9tb250
aExhYmVscy5zaXplKCk7ICsrbSkgeworICAgICAgICB1bnNpZ25lZCBsYWJlbExlbmd0aCA9IG1f
bW9udGhMYWJlbHNbbV0ubGVuZ3RoKCk7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShp
bnB1dC5zdWJzdHJpbmcoaW5kZXgsIGxhYmVsTGVuZ3RoKSwgbV9tb250aExhYmVsc1ttXSkpIHsK
KyAgICAgICAgICAgIGluZGV4ICs9IGxhYmVsTGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIG07
CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBtID0gMDsgbSA8IG1fc2hvcnRN
b250aExhYmVscy5zaXplKCk7ICsrbSkgeworICAgICAgICB1bnNpZ25lZCBsYWJlbExlbmd0aCA9
IG1fc2hvcnRNb250aExhYmVsc1ttXS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGlucHV0LnN1YnN0cmluZyhpbmRleCwgbGFiZWxMZW5ndGgpLCBtX3Nob3J0TW9udGhM
YWJlbHNbbV0pKSB7CisgICAgICAgICAgICBpbmRleCArPSBsYWJlbExlbmd0aDsKKyAgICAgICAg
ICAgIHJldHVybiBtOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworZG91
YmxlIExvY2FsZVdpbjo6cGFyc2VEYXRlVGltZShjb25zdCBTdHJpbmcmIGlucHV0LCBEYXRlQ29t
cG9uZW50czo6VHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlICE9IERhdGVDb21wb25lbnRzOjpE
YXRlKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKKyAgICBlbnN1cmVTaG9ydERhdGVUb2tlbnMoKTsKKyAgICByZXR1cm4gcGFyc2VEYXRl
KG1fc2hvcnREYXRlVG9rZW5zLCBtX2Jhc2VZZWFyLCBpbnB1dCk7Cit9CisKK2RvdWJsZSBMb2Nh
bGVXaW46OnBhcnNlRGF0ZShjb25zdCBTdHJpbmcmIGZvcm1hdCwgaW50IGJhc2VZZWFyLCBjb25z
dCBTdHJpbmcmIGlucHV0KQoreworICAgIHJldHVybiBwYXJzZURhdGUocGFyc2VEYXRlRm9ybWF0
KGZvcm1hdCksIGJhc2VZZWFyLCBpbnB1dCk7Cit9CisKK2RvdWJsZSBMb2NhbGVXaW46OnBhcnNl
RGF0ZShjb25zdCBWZWN0b3I8RGF0ZUZvcm1hdFRva2VuPiYgdG9rZW5zLCBpbnQgYmFzZVllYXIs
IGNvbnN0IFN0cmluZyYgaW5wdXQpCit7CisgICAgZW5zdXJlU2hvcnRNb250aExhYmVscygpOwor
ICAgIGVuc3VyZU1vbnRoTGFiZWxzKCk7CisgICAgY29uc3QgZG91YmxlIE5hTiA9IG51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIHVuc2lnbmVkIGlucHV0SW5kZXggPSAw
OworICAgIGludCBkYXkgPSAtMSwgbW9udGggPSAtMSwgeWVhciA9IC0xOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0b2tlbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgc3dpdGNoICh0
b2tlbnNbaV0udHlwZSkgeworICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6TGl0ZXJhbDog
eworICAgICAgICAgICAgU3RyaW5nIGRhdGEgPSB0b2tlbnNbaV0uZGF0YTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGxpdGVyYWxMZW5ndGggPSBkYXRhLmxlbmd0aCgpOworICAgICAgICAgICAgaWYg
KGlucHV0LnN1YnN0cmluZyhpbnB1dEluZGV4LCBsaXRlcmFsTGVuZ3RoKSA9PSBkYXRhKQorICAg
ICAgICAgICAgICAgIGlucHV0SW5kZXggKz0gbGl0ZXJhbExlbmd0aDsKKyAgICAgICAgICAgIC8v
IEdvIGFoZWFkIGV2ZW4gaWYgdGhlIGlucHV0IGRvZXNuJ3QgaGF2ZSB0aGlzIHN0cmluZy4KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2Vu
OjpEYXkxOgorICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6RGF5MjoKKyAgICAgICAgICAg
IGRheSA9IHBhcnNlTnVtYmVyKGlucHV0LCBpbnB1dEluZGV4KTsKKyAgICAgICAgICAgIGlmIChk
YXkgPCAxIHx8IGRheSA+IDMxKQorICAgICAgICAgICAgICAgIHJldHVybiBOYU47CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46Ok1vbnRoMToKKyAgICAg
ICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46Ok1vbnRoMjoKKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0
VG9rZW46Ok1vbnRoMzoKKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46Ok1vbnRoNDoKKyAg
ICAgICAgICAgIG1vbnRoID0gcGFyc2VOdW1iZXJPck1vbnRoKGlucHV0LCBpbnB1dEluZGV4KTsK
KyAgICAgICAgICAgIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTmFOOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0ZUZvcm1h
dFRva2VuOjpZZWFyMTogeworICAgICAgICAgICAgdW5zaWduZWQgb2xkSW5kZXggPSBpbnB1dElu
ZGV4OworICAgICAgICAgICAgeWVhciA9IHBhcnNlTnVtYmVyKGlucHV0LCBpbnB1dEluZGV4KTsK
KyAgICAgICAgICAgIGlmICh5ZWFyIDw9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsK
KyAgICAgICAgICAgIGlmIChpbnB1dEluZGV4IC0gb2xkSW5kZXggPT0gMSkgeworICAgICAgICAg
ICAgICAgIGludCBzaG9ydFllYXIgPSBiYXNlWWVhciAlIDEwOworICAgICAgICAgICAgICAgIGlu
dCBkZWNhZGUgPSBiYXNlWWVhciAtIHNob3J0WWVhcjsKKyAgICAgICAgICAgICAgICBpZiAoc2hv
cnRZZWFyID49IDUpCisgICAgICAgICAgICAgICAgICAgIHllYXIgKz0gc2hvcnRZZWFyIC0gNCA8
PSB5ZWFyID8gZGVjYWRlIDogZGVjYWRlICsgMTA7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB5ZWFyICs9IHNob3J0WWVhciArIDUgPj0geWVhciA/IGRlY2FkZSA6
IGRlY2FkZSAtIDEwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46OlllYXIyOiB7CisgICAgICAgICAgICB1
bnNpZ25lZCBvbGRJbmRleCA9IGlucHV0SW5kZXg7CisgICAgICAgICAgICB5ZWFyID0gcGFyc2VO
dW1iZXIoaW5wdXQsIGlucHV0SW5kZXgpOworICAgICAgICAgICAgaWYgKHllYXIgPD0gMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAgaWYgKGlucHV0SW5kZXggLSBv
bGRJbmRleCA9PSAyKSB7CisgICAgICAgICAgICAgICAgaW50IHNob3J0WWVhciA9IGJhc2VZZWFy
ICUgMTAwOworICAgICAgICAgICAgICAgIGludCBjZW50dXJ5ID0gYmFzZVllYXIgLSBzaG9ydFll
YXI7CisgICAgICAgICAgICAgICAgaWYgKHNob3J0WWVhciA+PSA1MCkKKyAgICAgICAgICAgICAg
ICAgICAgeWVhciArPSBzaG9ydFllYXIgLSA0OSA8PSB5ZWFyID8gY2VudHVyeSA6IGNlbnR1cnkg
KyAxMDA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB5ZWFyICs9
IHNob3J0WWVhciArIDUwID49IHllYXIgPyBjZW50dXJ5IDogY2VudHVyeSAtIDEwMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRGF0
ZUZvcm1hdFRva2VuOjpZZWFyNDoKKyAgICAgICAgICAgIHllYXIgPSBwYXJzZU51bWJlcihpbnB1
dCwgaW5wdXRJbmRleCk7CisgICAgICAgICAgICBpZiAoeWVhciA8PSAwKQorICAgICAgICAgICAg
ICAgIHJldHVybiBOYU47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAoeWVhciA8PSAwIHx8IG1vbnRoIDwgMCB8fCBkYXkgPD0gMCkKKyAgICAgICAgcmV0dXJu
IE5hTjsKKyAgICByZXR1cm4gZGF0ZVRvRGF5c0Zyb20xOTcwKHllYXIsIG1vbnRoLCBkYXkpICog
bXNQZXJEYXk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvcm1h
dHRpbmcKKwordm9pZCBMb2NhbGVXaW46OmVuc3VyZVNob3J0RGF0ZVRva2VucygpCit7CisgICAg
aWYgKCFtX3Nob3J0RGF0ZVRva2Vucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X3Nob3J0RGF0ZVRva2VucyA9IHBhcnNlRGF0ZUZvcm1hdChnZXRMb2NhbGVJbmZvU3RyaW5nKExP
Q0FMRV9TU0hPUlREQVRFKSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgc3Vic3RpdHV0ZUxhYmVsc0lu
dG9Gb3JtYXQoY29uc3QgVmVjdG9yPERhdGVGb3JtYXRUb2tlbj4mIHRva2VucywgY29uc3QgU3Ry
aW5nJiB5ZWFyVGV4dCwgY29uc3QgU3RyaW5nJiBtb250aFRleHQsIGNvbnN0IFN0cmluZyYgZGF5
VGV4dCkKK3sKKyAgICBTdHJpbmcgbm9uRW1wdHlEYXlUZXh0ID0gZGF5VGV4dC5pc0VtcHR5KCkg
PyAiRGF5IiA6IGRheVRleHQ7CisgICAgU3RyaW5nIG5vbkVtcHR5TW9udGhUZXh0ID0gbW9udGhU
ZXh0LmlzRW1wdHkoKSA/ICJNb250aCIgOiBtb250aFRleHQ7CisgICAgU3RyaW5nIG5vbkVtcHR5
WWVhclRleHQgPSB5ZWFyVGV4dC5pc0VtcHR5KCkgPyAiWWVhciIgOiB5ZWFyVGV4dDsKKyAgICBT
dHJpbmdCdWlsZGVyIGJ1ZmZlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW5z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIHN3aXRjaCAodG9rZW5zW2ldLnR5cGUpIHsKKyAgICAg
ICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46OkxpdGVyYWw6CisgICAgICAgICAgICBidWZmZXIuYXBw
ZW5kKHRva2Vuc1tpXS5kYXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERh
dGVGb3JtYXRUb2tlbjo6RGF5MToKKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46OkRheTI6
CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKG5vbkVtcHR5RGF5VGV4dCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46Ok1vbnRoMToKKyAgICAgICAg
Y2FzZSBEYXRlRm9ybWF0VG9rZW46Ok1vbnRoMjoKKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9r
ZW46Ok1vbnRoMzoKKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46Ok1vbnRoNDoKKyAgICAg
ICAgICAgIGJ1ZmZlci5hcHBlbmQobm9uRW1wdHlNb250aFRleHQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpZZWFyMToKKyAgICAgICAgY2FzZSBE
YXRlRm9ybWF0VG9rZW46OlllYXIyOgorICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6WWVh
cjQ6CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKG5vbkVtcHR5WWVhclRleHQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmlu
ZygpOworfQorCitTdHJpbmcgTG9jYWxlV2luOjpkYXRlRm9ybWF0VGV4dCgpCit7CisgICAgZW5z
dXJlU2hvcnREYXRlVG9rZW5zKCk7CisgICAgcmV0dXJuIHN1YnN0aXR1dGVMYWJlbHNJbnRvRm9y
bWF0KG1fc2hvcnREYXRlVG9rZW5zLCBkYXRlRm9ybWF0WWVhclRleHQoKSwgZGF0ZUZvcm1hdE1v
bnRoVGV4dCgpLCBkYXRlRm9ybWF0RGF5SW5Nb250aFRleHQoKSk7Cit9CisKK1N0cmluZyBMb2Nh
bGVXaW46OmRhdGVGb3JtYXRUZXh0KGNvbnN0IFN0cmluZyYgZm9ybWF0LCBjb25zdCBTdHJpbmcm
IHllYXJUZXh0LCBjb25zdCBTdHJpbmcmIG1vbnRoVGV4dCwgY29uc3QgU3RyaW5nJiBkYXlUZXh0
KQoreworICAgIHJldHVybiBzdWJzdGl0dXRlTGFiZWxzSW50b0Zvcm1hdChwYXJzZURhdGVGb3Jt
YXQoZm9ybWF0KSwgeWVhclRleHQsIG1vbnRoVGV4dCwgZGF5VGV4dCk7Cit9CisKK3ZvaWQgTG9j
YWxlV2luOjplbnN1cmVNb250aExhYmVscygpCit7CisgICAgaWYgKCFtX21vbnRoTGFiZWxzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IExDVFlQRSB0eXBlc1sxMl0gPSB7
CisgICAgICAgIExPQ0FMRV9TTU9OVEhOQU1FMSwKKyAgICAgICAgTE9DQUxFX1NNT05USE5BTUUy
LAorICAgICAgICBMT0NBTEVfU01PTlRITkFNRTMsCisgICAgICAgIExPQ0FMRV9TTU9OVEhOQU1F
NCwKKyAgICAgICAgTE9DQUxFX1NNT05USE5BTUU1LAorICAgICAgICBMT0NBTEVfU01PTlRITkFN
RTYsCisgICAgICAgIExPQ0FMRV9TTU9OVEhOQU1FNywKKyAgICAgICAgTE9DQUxFX1NNT05USE5B
TUU4LAorICAgICAgICBMT0NBTEVfU01PTlRITkFNRTksCisgICAgICAgIExPQ0FMRV9TTU9OVEhO
QU1FMTAsCisgICAgICAgIExPQ0FMRV9TTU9OVEhOQU1FMTEsCisgICAgICAgIExPQ0FMRV9TTU9O
VEhOQU1FMTIsCisgICAgfTsKKyAgICBtX21vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eShXVEZf
QVJSQVlfTEVOR1RIKHR5cGVzKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9B
UlJBWV9MRU5HVEgodHlwZXMpOyArK2kpIHsKKyAgICAgICAgbV9tb250aExhYmVscy5hcHBlbmQo
Z2V0TG9jYWxlSW5mb1N0cmluZyh0eXBlc1tpXSkpOworICAgICAgICBpZiAobV9tb250aExhYmVs
cy5sYXN0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX21vbnRoTGFiZWxzLnNocmluaygw
KTsKKyAgICAgICAgICAgIG1fbW9udGhMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KFdURl9BUlJBWV9M
RU5HVEgoV1RGOjptb250aEZ1bGxOYW1lKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG0g
PSAwOyBtIDwgV1RGX0FSUkFZX0xFTkdUSChXVEY6Om1vbnRoRnVsbE5hbWUpOyArK20pCisgICAg
ICAgICAgICAgICAgbV9tb250aExhYmVscy5hcHBlbmQoV1RGOjptb250aEZ1bGxOYW1lW21dKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMb2NhbGVX
aW46OmVuc3VyZVdlZWtEYXlTaG9ydExhYmVscygpCit7CisgICAgaWYgKCFtX3dlZWtEYXlTaG9y
dExhYmVscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBMQ1RZUEUgdHlw
ZXNbN10gPSB7CisgICAgICAgIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIC8vIFN1bmRheQorICAg
ICAgICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAvLyBNb25kYXkKKyAgICAgICAgTE9DQUxFX1NB
QkJSRVZEQVlOQU1FMiwKKyAgICAgICAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywKKyAgICAgICAg
TE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwKKyAgICAgICAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwK
KyAgICAgICAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNgorICAgIH07CisgICAgbV93ZWVrRGF5U2hv
cnRMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KFdURl9BUlJBWV9MRU5HVEgodHlwZXMpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh0eXBlcyk7ICsraSkgewor
ICAgICAgICBtX3dlZWtEYXlTaG9ydExhYmVscy5hcHBlbmQoZ2V0TG9jYWxlSW5mb1N0cmluZyh0
eXBlc1tpXSkpOworICAgICAgICBpZiAobV93ZWVrRGF5U2hvcnRMYWJlbHMubGFzdCgpLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMuc2hyaW5rKDApOworICAg
ICAgICAgICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KFdURl9BUlJBWV9M
RU5HVEgoV1RGOjp3ZWVrZGF5TmFtZSkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB3ID0g
MDsgdyA8IFdURl9BUlJBWV9MRU5HVEgoV1RGOjp3ZWVrZGF5TmFtZSk7ICsrdykgeworICAgICAg
ICAgICAgICAgIC8vIHdlZWtkYXlOYW1lIHN0YXJ0cyB3aXRoIE1vbmRheS4KKyAgICAgICAgICAg
ICAgICBtX3dlZWtEYXlTaG9ydExhYmVscy5hcHBlbmQoV1RGOjp3ZWVrZGF5TmFtZVsodyArIDYp
ICUgN10pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorfQorCisjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikgfHwgRU5BQkxFKElOUFVUX01V
TFRJUExFX0ZJRUxEU19VSSkKK2NvbnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVXaW46Om1vbnRo
TGFiZWxzKCkKK3sKKyAgICBlbnN1cmVNb250aExhYmVscygpOworICAgIHJldHVybiBtX21vbnRo
TGFiZWxzOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQorY29uc3Qg
VmVjdG9yPFN0cmluZz4mIExvY2FsZVdpbjo6d2Vla0RheVNob3J0TGFiZWxzKCkKK3sKKyAgICBl
bnN1cmVXZWVrRGF5U2hvcnRMYWJlbHMoKTsKKyAgICByZXR1cm4gbV93ZWVrRGF5U2hvcnRMYWJl
bHM7Cit9CisKK3Vuc2lnbmVkIExvY2FsZVdpbjo6Zmlyc3REYXlPZldlZWsoKQoreworICAgIHJl
dHVybiBtX2ZpcnN0RGF5T2ZXZWVrOworfQorCitib29sIExvY2FsZVdpbjo6aXNSVEwoKQorewor
ICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGRpciA9IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9u
KG1vbnRoTGFiZWxzKClbMF1bMF0pOworICAgIHJldHVybiBkaXIgPT0gV1RGOjpVbmljb2RlOjpS
aWdodFRvTGVmdCB8fCBkaXIgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdEFyYWJpYzsKK30K
KyNlbmRpZgorCisjaWYgRU5BQkxFKElOUFVUX01VTFRJUExFX0ZJRUxEU19VSSkKK3N0YXRpYyBT
dHJpbmcgY29udmVydFdpbmRvd3NEYXRlRm9ybWF0VG9MRE1MKGNvbnN0IFZlY3RvcjxEYXRlRm9y
bWF0VG9rZW4+JiB0b2tlbnMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWZmZXI7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2Vucy5zaXplKCk7ICsraSkgeworICAgICAgICBzd2l0
Y2ggKHRva2Vuc1tpXS50eXBlKSB7CisgICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpMaXRl
cmFsOgorICAgICAgICAgICAgRGF0ZVRpbWVGb3JtYXQ6OnF1b3RlQW5kQXBwZW5kTGl0ZXJhbCh0
b2tlbnNbaV0uZGF0YSwgYnVmZmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgRGF0ZUZvcm1hdFRva2VuOjpEYXkyOgorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0
aWNfY2FzdDxjaGFyPihEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZNb250aCkpOworICAg
ICAgICAgICAgLy8gRmFsbHRocm91Z2guCisgICAgICAgIGNhc2UgRGF0ZUZvcm1hdFRva2VuOjpE
YXkxOgorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlRGF5T2ZNb250aCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46Ok1vbnRoNDoKKyAgICAgICAgICAgIGJ1ZmZlci5h
cHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoKSk7
CisgICAgICAgICAgICAvLyBGYWxsdGhyb3VnaC4KKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9r
ZW46Ok1vbnRoMzoKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4o
RGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoKSk7CisgICAgICAgICAgICAvLyBGYWxsdGhy
b3VnaC4KKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46Ok1vbnRoMjoKKyAgICAgICAgICAg
IGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlw
ZU1vbnRoKSk7CisgICAgICAgICAgICAvLyBGYWxsdGhyb3VnaC4KKyAgICAgICAgY2FzZSBEYXRl
Rm9ybWF0VG9rZW46Ok1vbnRoMToKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nh
c3Q8Y2hhcj4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZU1vbnRoKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIERhdGVGb3JtYXRUb2tlbjo6WWVhcjQ6CisgICAgICAgICAg
ICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5
cGVZZWFyKSk7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVZZWFyKSk7CisgICAgICAgICAgICAvLyBGYWxsdGhyb3Vn
aC4KKyAgICAgICAgY2FzZSBEYXRlRm9ybWF0VG9rZW46OlllYXIyOgorICAgICAgICAgICAgYnVm
ZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlWWVh
cikpOworICAgICAgICAgICAgLy8gRmFsbHRocm91Z2guCisgICAgICAgIGNhc2UgRGF0ZUZvcm1h
dFRva2VuOjpZZWFyMToKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hh
cj4oRGF0ZVRpbWVGb3JtYXQ6OkZpZWxkVHlwZVllYXIpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKK30KKworc3Rh
dGljIERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgbWFwQ2hhcmFjdGVyVG9EYXRlVGltZUZpZWxk
VHlwZShVQ2hhciBjaCkKK3sKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAnaCc6CisgICAg
ICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjEyOworCisgICAgY2FzZSAn
SCc6CisgICAgICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlSG91cjIzOworCisg
ICAgY2FzZSAnbSc6CisgICAgICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTWlu
dXRlOworCisgICAgY2FzZSAncyc6CisgICAgICAgIHJldHVybiBEYXRlVGltZUZvcm1hdDo6Rmll
bGRUeXBlU2Vjb25kOworCisgICAgY2FzZSAndCc6CisgICAgICAgIHJldHVybiBEYXRlVGltZUZv
cm1hdDo6RmllbGRUeXBlUGVyaW9kOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIERh
dGVUaW1lRm9ybWF0OjpGaWVsZFR5cGVMaXRlcmFsOworICAgIH0KK30KKworLy8gVGhpcyBjbGFz
cyB1c2VkIGZvciBjb252ZXJ0aW5nIFdpbmRvd3MgdGltZSBwYXR0ZXJuIGZvcm1hdFsxXSBpbnRv
IExETUxbMl0KKy8vIHRpbWUgZm9ybWF0IHN0cmluZy4KKy8vIFsxXSBodHRwOi8vbXNkbi5taWNy
b3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2RkMzE4MTQ4KHY9dnMuODUp
LmFzcHgKKy8vIFsyXSBMRE1MIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS02
Lmh0bWwjRGF0ZV9Gb3JtYXRfUGF0dGVybnMKK3N0YXRpYyBTdHJpbmcgY29udmVydFdpbmRvd3NU
aW1lRm9ybWF0VG9MRE1MKGNvbnN0IFN0cmluZyYgd2luZG93c1RpbWVGb3JtYXQpCit7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGludCBjb3VudGVyID0gMDsKKyAgICBEYXRlVGlt
ZUZvcm1hdDo6RmllbGRUeXBlIGxhc3RGaWVsZFR5cGUgPSBEYXRlVGltZUZvcm1hdDo6RmllbGRU
eXBlTGl0ZXJhbDsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB3aW5kb3dz
VGltZUZvcm1hdC5sZW5ndGgoKTsgKytpbmRleCkgeworICAgICAgICBVQ2hhciBjb25zdCBjaCA9
IHdpbmRvd3NUaW1lRm9ybWF0W2luZGV4XTsKKyAgICAgICAgRGF0ZVRpbWVGb3JtYXQ6OkZpZWxk
VHlwZSBmaWVsZFR5cGUgPSBtYXBDaGFyYWN0ZXJUb0RhdGVUaW1lRmllbGRUeXBlKGNoKTsKKyAg
ICAgICAgaWYgKGZpZWxkVHlwZSA9PSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTGl0ZXJhbCkK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNoKTsKKyAgICAgICAgZWxzZSBpZiAoZmllbGRU
eXBlID09IGxhc3RGaWVsZFR5cGUpIHsKKyAgICAgICAgICAgICsrY291bnRlcjsKKyAgICAgICAg
ICAgIGlmIChjb3VudGVyID09IDIgJiYgbGFzdEZpZWxkVHlwZSAhPSBEYXRlVGltZUZvcm1hdDo6
RmllbGRUeXBlUGVyaW9kKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19j
YXN0PFVDaGFyPihsYXN0RmllbGRUeXBlKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAobGFzdEZpZWxkVHlwZSAhPSBEYXRlVGltZUZvcm1hdDo6RmllbGRUeXBlTGl0ZXJhbCkK
KyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4obGFzdEZp
ZWxkVHlwZSkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8VUNoYXI+
KGZpZWxkVHlwZSkpOworICAgICAgICAgICAgY291bnRlciA9IDE7CisgICAgICAgIH0KKyAgICAg
ICAgbGFzdEZpZWxkVHlwZSA9IGZpZWxkVHlwZTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKworU3RyaW5nIExvY2FsZVdpbjo6ZGF0ZUZvcm1hdCgpCit7CisgICAg
aWYgKCFtX2RhdGVGb3JtYXQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX2RhdGVGb3JtYXQ7
CisgICAgZW5zdXJlU2hvcnREYXRlVG9rZW5zKCk7CisgICAgbV9kYXRlRm9ybWF0ID0gY29udmVy
dFdpbmRvd3NEYXRlRm9ybWF0VG9MRE1MKG1fc2hvcnREYXRlVG9rZW5zKTsKKyAgICByZXR1cm4g
bV9kYXRlRm9ybWF0OworfQorCitTdHJpbmcgTG9jYWxlV2luOjpkYXRlRm9ybWF0KGNvbnN0IFN0
cmluZyYgd2luZG93c0Zvcm1hdCkKK3sKKyAgICByZXR1cm4gY29udmVydFdpbmRvd3NEYXRlRm9y
bWF0VG9MRE1MKHBhcnNlRGF0ZUZvcm1hdCh3aW5kb3dzRm9ybWF0KSk7Cit9CisKK1N0cmluZyBM
b2NhbGVXaW46Om1vbnRoRm9ybWF0KCkKK3sKKyAgICBpZiAoIW1fbW9udGhGb3JtYXQuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBtX21vbnRoRm9ybWF0OworICAgIG1fbW9udGhGb3JtYXQgPSBj
b252ZXJ0V2luZG93c0RhdGVGb3JtYXRUb0xETUwocGFyc2VEYXRlRm9ybWF0KGdldExvY2FsZUlu
Zm9TdHJpbmcoTE9DQUxFX1NZRUFSTU9OVEgpKSk7CisgICAgcmV0dXJuIG1fbW9udGhGb3JtYXQ7
Cit9CisKK1N0cmluZyBMb2NhbGVXaW46OnRpbWVGb3JtYXQoKQoreworICAgIGlmIChtX3RpbWVG
b3JtYXRXaXRoU2Vjb25kcy5pc051bGwoKSkKKyAgICAgICAgbV90aW1lRm9ybWF0V2l0aFNlY29u
ZHMgPSBjb252ZXJ0V2luZG93c1RpbWVGb3JtYXRUb0xETUwoZ2V0TG9jYWxlSW5mb1N0cmluZyhM
T0NBTEVfU1RJTUVGT1JNQVQpKTsKKyAgICByZXR1cm4gbV90aW1lRm9ybWF0V2l0aFNlY29uZHM7
Cit9CisKK1N0cmluZyBMb2NhbGVXaW46OnNob3J0VGltZUZvcm1hdCgpCit7CisgICAgaWYgKCFt
X3RpbWVGb3JtYXRXaXRob3V0U2Vjb25kcy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fdGlt
ZUZvcm1hdFdpdGhvdXRTZWNvbmRzOworICAgIFN0cmluZyBmb3JtYXQgPSBnZXRMb2NhbGVJbmZv
U3RyaW5nKExPQ0FMRV9TU0hPUlRUSU1FKTsKKyAgICAvLyBWaXN0YSBvciBvbGRlciBXaW5kb3dz
IGRvZXNuJ3Qgc3VwcG9ydCBMT0NBTEVfU1NIT1JUVElNRS4KKyAgICBpZiAoZm9ybWF0LmlzRW1w
dHkoKSkgeworICAgICAgICBmb3JtYXQgPSB0aW1lRm9ybWF0KCk7CisgICAgICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZ2V0TG9jYWxlSW5mb1N0cmlu
ZyhMT0NBTEVfU1RJTUUpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoInNzIik7CisgICAgICAg
IHNpemVfdCBwb3MgPSBmb3JtYXQucmV2ZXJzZUZpbmQoYnVpbGRlci50b1N0cmluZygpKTsKKyAg
ICAgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgIGZvcm1hdC5yZW1vdmUocG9z
LCBidWlsZGVyLmxlbmd0aCgpKTsKKyAgICB9CisgICAgbV90aW1lRm9ybWF0V2l0aG91dFNlY29u
ZHMgPSBjb252ZXJ0V2luZG93c1RpbWVGb3JtYXRUb0xETUwoZm9ybWF0KTsKKyAgICByZXR1cm4g
bV90aW1lRm9ybWF0V2l0aG91dFNlY29uZHM7Cit9CisKK2NvbnN0IFZlY3RvcjxTdHJpbmc+JiBM
b2NhbGVXaW46OnNob3J0TW9udGhMYWJlbHMoKQoreworICAgIGVuc3VyZVNob3J0TW9udGhMYWJl
bHMoKTsKKyAgICByZXR1cm4gbV9zaG9ydE1vbnRoTGFiZWxzOworfQorCitjb25zdCBWZWN0b3I8
U3RyaW5nPiYgTG9jYWxlV2luOjpzdGFuZEFsb25lTW9udGhMYWJlbHMoKQoreworICAgIC8vIFdp
bmRvd3MgZG9lc24ndCBwcm92aWRlIGEgd2F5IHRvIGdldCBzdGFuZC1hbG9uZSBtb250aCBsYWJl
bHMuCisgICAgcmV0dXJuIG1vbnRoTGFiZWxzKCk7Cit9CisKK2NvbnN0IFZlY3RvcjxTdHJpbmc+
JiBMb2NhbGVXaW46OnNob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzKCkKK3sKKyAgICAvLyBXaW5k
b3dzIGRvZXNuJ3QgcHJvdmlkZSBhIHdheSB0byBnZXQgc3RhbmQtYWxvbmUgbW9udGggbGFiZWxz
LgorICAgIHJldHVybiBzaG9ydE1vbnRoTGFiZWxzKCk7Cit9CisKK2NvbnN0IFZlY3RvcjxTdHJp
bmc+JiBMb2NhbGVXaW46OnRpbWVBTVBNTGFiZWxzKCkKK3sKKyAgICBpZiAobV90aW1lQU1QTUxh
YmVscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV90aW1lQU1QTUxhYmVscy5hcHBlbmQoZ2V0TG9j
YWxlSW5mb1N0cmluZyhMT0NBTEVfUzExNTkpKTsKKyAgICAgICAgbV90aW1lQU1QTUxhYmVscy5h
cHBlbmQoZ2V0TG9jYWxlSW5mb1N0cmluZyhMT0NBTEVfUzIzNTkpKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fdGltZUFNUE1MYWJlbHM7Cit9CisjZW5kaWYKKwordm9pZCBMb2NhbGVXaW46OmluaXRp
YWxpemVMb2NhbGVEYXRhKCkKK3sKKyAgICBpZiAobV9kaWRJbml0aWFsaXplTnVtYmVyRGF0YSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFN0cmluZywgRGVjaW1hbFN5bWJvbHNTaXpl
PiBzeW1ib2xzOworICAgIGVudW0gRGlnaXRTdWJzdGl0dXRpb24geworICAgICAgICBEaWdpdFN1
YnN0aXR1dGlvbkNvbnRleHQgPSAwLAorICAgICAgICBEaWdpdFN1YnN0aXR1dGlvbjB0bzkgPSAx
LAorICAgICAgICBEaWdpdFN1YnN0aXR1dGlvbk5hdGl2ZSA9IDIsCisgICAgfTsKKyAgICBEV09S
RCBkaWdpdFN1YnN0aXR1dGlvbiA9IERpZ2l0U3Vic3RpdHV0aW9uMHRvOTsKKyAgICBnZXRMb2Nh
bGVJbmZvKExPQ0FMRV9JRElHSVRTVUJTVElUVVRJT04sIGRpZ2l0U3Vic3RpdHV0aW9uKTsKKyAg
ICBpZiAoZGlnaXRTdWJzdGl0dXRpb24gPT0gRGlnaXRTdWJzdGl0dXRpb24wdG85KSB7CisgICAg
ICAgIHN5bWJvbHMuYXBwZW5kKCIwIik7CisgICAgICAgIHN5bWJvbHMuYXBwZW5kKCIxIik7Cisg
ICAgICAgIHN5bWJvbHMuYXBwZW5kKCIyIik7CisgICAgICAgIHN5bWJvbHMuYXBwZW5kKCIzIik7
CisgICAgICAgIHN5bWJvbHMuYXBwZW5kKCI0Iik7CisgICAgICAgIHN5bWJvbHMuYXBwZW5kKCI1
Iik7CisgICAgICAgIHN5bWJvbHMuYXBwZW5kKCI2Iik7CisgICAgICAgIHN5bWJvbHMuYXBwZW5k
KCI3Iik7CisgICAgICAgIHN5bWJvbHMuYXBwZW5kKCI4Iik7CisgICAgICAgIHN5bWJvbHMuYXBw
ZW5kKCI5Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGRpZ2l0cyA9IGdldExvY2Fs
ZUluZm9TdHJpbmcoTE9DQUxFX1NOQVRJVkVESUdJVFMpOworICAgICAgICBBU1NFUlQoZGlnaXRz
Lmxlbmd0aCgpID49IDEwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwOyAr
K2kpCisgICAgICAgICAgICBzeW1ib2xzLmFwcGVuZChkaWdpdHMuc3Vic3RyaW5nKGksIDEpKTsK
KyAgICB9CisgICAgQVNTRVJUKHN5bWJvbHMuc2l6ZSgpID09IERlY2ltYWxTZXBhcmF0b3JJbmRl
eCk7CisgICAgc3ltYm9scy5hcHBlbmQoZ2V0TG9jYWxlSW5mb1N0cmluZyhMT0NBTEVfU0RFQ0lN
QUwpKTsKKyAgICBBU1NFUlQoc3ltYm9scy5zaXplKCkgPT0gR3JvdXBTZXBhcmF0b3JJbmRleCk7
CisgICAgc3ltYm9scy5hcHBlbmQoZ2V0TG9jYWxlSW5mb1N0cmluZyhMT0NBTEVfU1RIT1VTQU5E
KSk7CisgICAgQVNTRVJUKHN5bWJvbHMuc2l6ZSgpID09IERlY2ltYWxTeW1ib2xzU2l6ZSk7CisK
KyAgICBTdHJpbmcgbmVnYXRpdmVTaWduID0gZ2V0TG9jYWxlSW5mb1N0cmluZyhMT0NBTEVfU05F
R0FUSVZFU0lHTik7CisgICAgZW51bSBOZWdhdGl2ZUZvcm1hdCB7CisgICAgICAgIE5lZ2F0aXZl
Rm9ybWF0UGFyZW50aGVzaXMgPSAwLAorICAgICAgICBOZWdhdGl2ZUZvcm1hdFNpZ25QcmVmaXgg
PSAxLAorICAgICAgICBOZWdhdGl2ZUZvcm1hdFNpZ25TcGFjZVByZWZpeCA9IDIsCisgICAgICAg
IE5lZ2F0aXZlRm9ybWF0U2lnblN1ZmZpeCA9IDMsCisgICAgICAgIE5lZ2F0aXZlRm9ybWF0U3Bh
Y2VTaWduU3VmZml4ID0gNCwKKyAgICB9OworICAgIERXT1JEIG5lZ2F0aXZlRm9ybWF0ID0gTmVn
YXRpdmVGb3JtYXRTaWduUHJlZml4OworICAgIGdldExvY2FsZUluZm8oTE9DQUxFX0lORUdOVU1C
RVIsIG5lZ2F0aXZlRm9ybWF0KTsKKyAgICBTdHJpbmcgbmVnYXRpdmVQcmVmaXggPSBlbXB0eVN0
cmluZygpOworICAgIFN0cmluZyBuZWdhdGl2ZVN1ZmZpeCA9IGVtcHR5U3RyaW5nKCk7CisgICAg
c3dpdGNoIChuZWdhdGl2ZUZvcm1hdCkgeworICAgIGNhc2UgTmVnYXRpdmVGb3JtYXRQYXJlbnRo
ZXNpczoKKyAgICAgICAgbmVnYXRpdmVQcmVmaXggPSAiKCI7CisgICAgICAgIG5lZ2F0aXZlU3Vm
Zml4ID0gIikiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5lZ2F0aXZlRm9ybWF0U2lnblNw
YWNlUHJlZml4OgorICAgICAgICBuZWdhdGl2ZVByZWZpeCA9IG5lZ2F0aXZlU2lnbiArICIgIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOZWdhdGl2ZUZvcm1hdFNpZ25TdWZmaXg6CisgICAg
ICAgIG5lZ2F0aXZlU3VmZml4ID0gbmVnYXRpdmVTaWduOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIE5lZ2F0aXZlRm9ybWF0U3BhY2VTaWduU3VmZml4OgorICAgICAgICBuZWdhdGl2ZVN1ZmZp
eCA9ICIgIiArIG5lZ2F0aXZlU2lnbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOZWdhdGl2
ZUZvcm1hdFNpZ25QcmVmaXg6IC8vIEZhbGwgdGhyb3VnaC4KKyAgICBkZWZhdWx0OgorICAgICAg
ICBuZWdhdGl2ZVByZWZpeCA9IG5lZ2F0aXZlU2lnbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIG1fZGlkSW5pdGlhbGl6ZU51bWJlckRhdGEgPSB0cnVlOworICAgIHNldExvY2FsZURhdGEo
c3ltYm9scywgZW1wdHlTdHJpbmcoKSwgZW1wdHlTdHJpbmcoKSwgbmVnYXRpdmVQcmVmaXgsIG5l
Z2F0aXZlU3VmZml4KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC93aW4vTG9jYWxlV2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dp
bi9Mb2NhbGVXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjcxNDQ1MmExYzRiNDY4MGM0NmZkZTk4NzBkM2Jm
ZWFmYTU2Nzk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vTG9jYWxlV2luLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExvY2FsZVdpbl9oCisj
ZGVmaW5lIExvY2FsZVdpbl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybUxvY2FsZS5oIgorI2luY2x1
ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEYXRlQ29tcG9uZW50czsKK3N0cnVjdCBEYXRlRm9ybWF0VG9rZW47
CisKK2NsYXNzIExvY2FsZVdpbiA6IHB1YmxpYyBMb2NhbGUgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPExvY2FsZVdpbj4gY3JlYXRlKExDSUQpOworICAgIH5Mb2NhbGVXaW4oKTsK
KyAgICB2aXJ0dWFsIGRvdWJsZSBwYXJzZURhdGVUaW1lKGNvbnN0IFN0cmluZyYsIERhdGVDb21w
b25lbnRzOjpUeXBlKSBPVkVSUklERTsKKyNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQorICAg
IHZpcnR1YWwgU3RyaW5nIGRhdGVGb3JtYXRUZXh0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgd2Vla0RheVNob3J0TGFiZWxzKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBmaXJzdERheU9mV2VlaygpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBpc1JUTCgpIE9WRVJSSURFOworI2VuZGlmCisjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tF
UikgfHwgRU5BQkxFKElOUFVUX01VTFRJUExFX0ZJRUxEU19VSSkKKyAgICB2aXJ0dWFsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBtb250aExhYmVscygpIE9WRVJSSURFOworI2VuZGlmCisjaWYgRU5B
QkxFKElOUFVUX01VTFRJUExFX0ZJRUxEU19VSSkKKyAgICB2aXJ0dWFsIFN0cmluZyBkYXRlRm9y
bWF0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgbW9udGhGb3JtYXQoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0aW1lRm9ybWF0KCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBTdHJpbmcgc2hvcnRUaW1lRm9ybWF0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgc2hvcnRNb250aExhYmVscygpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHN0YW5kQWxvbmVNb250aExhYmVscygpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNob3J0U3RhbmRBbG9uZU1vbnRoTGFi
ZWxzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdGltZUFN
UE1MYWJlbHMoKSBPVkVSUklERTsKKyNlbmRpZgorCisgICAgLy8gRm9yIHRlc3RpbmcuCisgICAg
ZG91YmxlIHBhcnNlRGF0ZShjb25zdCBTdHJpbmcmIGZvcm1hdCwgaW50IGJhc2VZZWFyLCBjb25z
dCBTdHJpbmcmIGlucHV0KTsKKyAgICBTdHJpbmcgZm9ybWF0RGF0ZShjb25zdCBTdHJpbmcmIGZv
cm1hdCwgaW50IGJhc2VZZWFyLCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KTsKKyAgICBz
dGF0aWMgU3RyaW5nIGRhdGVGb3JtYXRUZXh0KGNvbnN0IFN0cmluZyYgZm9ybWF0LCBjb25zdCBT
dHJpbmcmIHllYXJUZXh0LCBjb25zdCBTdHJpbmcmIG1vbnRoVGV4dCwgY29uc3QgU3RyaW5nJiBk
YXlUZXh0KTsKKyNpZiBFTkFCTEUoSU5QVVRfTVVMVElQTEVfRklFTERTX1VJKQorICAgIHN0YXRp
YyBTdHJpbmcgZGF0ZUZvcm1hdChjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IExvY2FsZVdpbihMQ0lEKTsKKyAgICBTdHJpbmcgZ2V0TG9jYWxlSW5mb1N0
cmluZyhMQ1RZUEUpOworICAgIHZvaWQgZ2V0TG9jYWxlSW5mbyhMQ1RZUEUsIERXT1JEJik7Cisg
ICAgdm9pZCBlbnN1cmVTaG9ydE1vbnRoTGFiZWxzKCk7CisgICAgdm9pZCBlbnN1cmVNb250aExh
YmVscygpOworICAgIHZvaWQgZW5zdXJlU2hvcnREYXRlVG9rZW5zKCk7CisgICAgYm9vbCBpc0xv
Y2FsaXplZERpZ2l0KFVDaGFyKTsKKyAgICBpbnQgcGFyc2VOdW1iZXIoY29uc3QgU3RyaW5nJiwg
dW5zaWduZWQmIGluZGV4KTsKKyAgICBpbnQgcGFyc2VOdW1iZXJPck1vbnRoKGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkJiBpbmRleCk7CisgICAgZG91YmxlIHBhcnNlRGF0ZShjb25zdCBWZWN0b3I8
RGF0ZUZvcm1hdFRva2VuPiYsIGludCBiYXNlWWVhciwgY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBhcHBlbmROdW1iZXIoaW50LCBTdHJpbmdCdWlsZGVyJik7CisgICAgdm9pZCBhcHBlbmRUd29E
aWdpdHNOdW1iZXIoaW50LCBTdHJpbmdCdWlsZGVyJik7CisgICAgdm9pZCBhcHBlbmRGb3VyRGln
aXRzTnVtYmVyKGludCwgU3RyaW5nQnVpbGRlciYpOworICAgIFN0cmluZyBmb3JtYXREYXRlKGNv
bnN0IFZlY3RvcjxEYXRlRm9ybWF0VG9rZW4+JiwgaW50IGJhc2VZZWFyLCBpbnQgeWVhciwgaW50
IG1vbnRoLCBpbnQgZGF5KTsKKyNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQorICAgIHZvaWQg
ZW5zdXJlV2Vla0RheVNob3J0TGFiZWxzKCk7CisjZW5kaWYKKyAgICAvLyBMb2NhbGUgZnVuY3Rp
b246CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVMb2NhbGVEYXRhKCkgT1ZFUlJJREU7CisK
KyAgICBMQ0lEIG1fbGNpZDsKKyAgICBpbnQgbV9iYXNlWWVhcjsKKyAgICBWZWN0b3I8RGF0ZUZv
cm1hdFRva2VuPiBtX3Nob3J0RGF0ZVRva2VuczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3Nob3J0
TW9udGhMYWJlbHM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9tb250aExhYmVsczsKKyNpZiBFTkFC
TEUoSU5QVVRfTVVMVElQTEVfRklFTERTX1VJKQorICAgIFN0cmluZyBtX2RhdGVGb3JtYXQ7Cisg
ICAgU3RyaW5nIG1fbW9udGhGb3JtYXQ7CisgICAgU3RyaW5nIG1fdGltZUZvcm1hdFdpdGhTZWNv
bmRzOworICAgIFN0cmluZyBtX3RpbWVGb3JtYXRXaXRob3V0U2Vjb25kczsKKyAgICBWZWN0b3I8
U3RyaW5nPiBtX3RpbWVBTVBNTGFiZWxzOworI2VuZGlmCisjaWYgRU5BQkxFKENBTEVOREFSX1BJ
Q0tFUikKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3dlZWtEYXlTaG9ydExhYmVsczsKKyAgICB1bnNp
Z25lZCBtX2ZpcnN0RGF5T2ZXZWVrOworI2VuZGlmCisgICAgYm9vbCBtX2RpZEluaXRpYWxpemVO
dW1iZXJEYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCg==
</data>
<flag name="review"
          id="184998"
          type_id="1"
          status="+"
          setter="haraken"
    />
          </attachment>
      

    </bug>

</bugzilla>