<?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>20319</bug_id>
          
          <creation_ts>2008-08-07 11:21:43 -0700</creation_ts>
          <short_desc>Rename Marquee to RenderMarquee and move to its own file</short_desc>
          <delta_ts>2008-08-07 14:56:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>dino</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>88052</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-08-07 11:21:43 -0700</bug_when>
    <thetext>Marquee code is currently in RenderLayer. It should be moved to its own file and renamed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88064</commentid>
    <comment_count>1</comment_count>
      <attachid>22699</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-08-07 14:17:17 -0700</bug_when>
    <thetext>Created attachment 22699
Patch with changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88065</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-08-07 14:56:00 -0700</bug_when>
    <thetext>Committed r35627
	M	WebCore/GNUmakefile.am
	M	WebCore/html/HTMLMarqueeElement.cpp
	M	WebCore/rendering/RenderLayer.cpp
	M	WebCore/rendering/RenderBlock.cpp
	A	WebCore/rendering/RenderMarquee.h
	M	WebCore/rendering/RenderLayer.h
	A	WebCore/rendering/RenderMarquee.cpp
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/WebCore.pro
	M	WebCore/ChangeLog
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCoreSources.bkl
r35627 = 6a1316d3ba8f6ceef0effdc837577cd656ad8947 (trunk)
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22699</attachid>
            <date>2008-08-07 14:17:17 -0700</date>
            <delta_ts>2008-08-07 14:44:50 -0700</delta_ts>
            <desc>Patch with changelog</desc>
            <filename>render_marquee_patch.txt</filename>
            <type>text/plain</type>
            <size>36617</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTA5MGNkNC4uOTZlMDUwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAwOC0wOC0wNyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgTWFycXVlZSB0byBSZW5kZXJNYXJxdWVlIGFuZCBt
b3ZlIHRvIGl0cyBvd24gZmlsZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzE5CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
V2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAgICAqIGh0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c3R5
bGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXJxdWVlOjptYXJxdWVlU3BlZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6
ZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OmlzSG9yaXpvbnRh
bCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpjb21wdXRlUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWFycXVlZTo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJx
dWVlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OnVwZGF0ZU1hcnF1
ZWVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjp1cGRhdGVNYXJx
dWVlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpzcGVlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXJxdWVlOjpyZXZlcnNlRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1
ZWU6OnNldEVuZCk6CisKIDIwMDgtMDgtMDcgIEtldmluIE1jQ3VsbG91Z2ggIDxrbWNjdWxsb3Vn
aEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAzY2E5
OTY5Li44MWEyOGMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEwMjMsNiArMTAyMyw3IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgXAogCVdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwIFwK
IAlXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAgXAogCVdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJv
CmluZGV4IGE2YmQzYTYuLjFkNDIzZDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8K
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtODYwLDYgKzg2MCw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRl
ckxpc3RJdGVtLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwIFwKKyAg
ICByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIFwKICAgICByZW5kZXJp
bmcvUmVuZGVyUGFydC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5k
ZXggZjRhZGUyNi4uMDdlZWQ2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CkBAIC05NjI2LDYgKzk2MjYsMjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlck1hcnF1ZWUuY3BwIgorCQkJCT4KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2luMzIiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQlXaG9s
ZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcUmVuZGVyTWFycXVlZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyTWVkaWEuY3BwIgogCQkJCT4KIAkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMTE5MzI0My4uZGM0YTA1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTQxLDYgKzQxLDggQEAKIAkJMDZFODFFRUMwQUI1REE5NzAwQzg3ODM3
IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA2RTgxRUVCMEFCNURBOTcwMEM4NzgzNyAvKiBMb2Nh
bEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW0gKi87IH07CiAJCTA4RTRGRTQ2MEUyQkQ0MTQwMEY0
Q0FFMCAvKiBKU1NWR0xlbmd0aEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwOEU0RkU0NTBFMkJENDE0MDBGNENBRTAgLyogSlNTVkdMZW5n
dGhDdXN0b20uY3BwICovOyB9OwogCQkwQTQ4NDQ5OTBDQTQ0Q0IyMDBCN0JENDggLyogU29mdExp
bmtpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBB
NDg0NDk4MENBNDRDQjIwMEI3QkQ0OCAvKiBTb2Z0TGlua2luZy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNTYwMjhGMEU0Qjc2NTgwMDY1QjAz
OCAvKiBSZW5kZXJNYXJxdWVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjU2MDI4RDBFNEI3NjU4MDA2NUIwMzggLyogUmVuZGVyTWFycXVlZS5oICov
OyB9OworCQkwRjU2MDI5MDBFNEI3NjU4MDA2NUIwMzggLyogUmVuZGVyTWFycXVlZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU2MDI4RTBFNEI3
NjU4MDA2NUIwMzggLyogUmVuZGVyTWFycXVlZS5jcHAgKi87IH07CiAJCTE0MDI2NDVFMEFGREMx
OUIwMDU5MTlFMiAvKiBMb2dnaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQwMjY0NUQwQUZEQzE5QjAwNTkxOUUyIC8qIExvZ2dpbmdNYWMu
bW0gKi87IH07CiAJCTE0MDNCOTk3MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDNCOTk1MDlFQjEz
QUYwMDc5N0M3RiAvKiBET01XaW5kb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAzQjk5ODA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDNC
OTk2MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuY3BwICovOyB9OwpAQCAtNDUyNSw2ICs0
NTI3LDggQEAKIAkJMDZFODFFRUIwQUI1REE5NzAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBM
b2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4RTRGRTQ1MEUyQkQ0MTQwMEY0Q0FFMCAvKiBKU1NWR0xlbmd0aEN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0xlbmd0aEN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBBNDg0NDk4MENBNDRDQjIwMEI3QkQ0OCAv
KiBTb2Z0TGlua2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2Z0TGlu
a2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU2MDI4RDBFNEI3NjU4MDA2
NUIwMzggLyogUmVuZGVyTWFycXVlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJNYXJxdWVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTYwMjhF
MEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hcnF1ZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDAyNjQ1RDBBRkRDMTlCMDA1OTE5RTIgLyogTG9nZ2luZ01hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2dnaW5nTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAzQjkwQzA5RUIxMjQ1MDA3OTdDN0YgLyogRE9N
V2luZG93LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01XaW5kb3cuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAzQjk5NTA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2lu
ZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVdpbmRvdy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMwMjcsNiArMTMwMzEsOCBAQAogCQkJCUE4RUE3
QTRDMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0SXRlbS5oICovLAogCQkJCUE4RUE3QTRC
MEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0TWFya2VyLmNwcCAqLywKIAkJCQlBOEVBN0E0
QTBBMTkxQTUyMDBBOEVGNUYgLyogUmVuZGVyTGlzdE1hcmtlci5oICovLAorCQkJCTBGNTYwMjhF
MEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmNwcCAqLywKKwkJCQkwRjU2MDI4RDBF
NEI3NjU4MDA2NUIwMzggLyogUmVuZGVyTWFycXVlZS5oICovLAogCQkJCUU0QzI3OTU2MENGOTc0
MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi8sCiAJCQkJRTRDMjc5NTcwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggKi8sCiAJCQkJQUJEREZFNzMwQTVDNkU2RjAwQTNFMTFE
IC8qIFJlbmRlck1lbnVMaXN0LmNwcCAqLywKQEAgLTE1MzI2LDYgKzE1MzMyLDcgQEAKIAkJCQkz
MTI4OEU3MzBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTI4OEU3NTBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8q
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNTYwMjhGMEU0
Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3MTAw
LDYgKzE3MTA3LDcgQEAKIAkJCQkzMTI4OEU3NDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODNFMUM3NDBFNDkwNDJDMDAx
NDBCOUMgLyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ0MTUy
OTJGMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGNTYwMjkwMEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wg
Yi9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAppbmRleCAxM2M3YWFkLi4zODcxOGM1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAorKysgYi9XZWJDb3JlL1dlYkNvcmVT
b3VyY2VzLmJrbApAQCAtODEyLDYgKzgxMiw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlz
dCBvZiBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgV2ViQ29yZS4KICAgICAgICAgcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCiAgICAgICAgIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKICAg
ICAgICAgcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCisgICAgICAgIHJlbmRlcmluZy9S
ZW5kZXJNYXJxdWVlLmNwcAogICAgICAgICByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCiAg
ICAgICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCiAgICAgICAgIHJlbmRlcmluZy9SZW5k
ZXJQYXJ0LmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5j
cHAgYi9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAppbmRleCBjNzdiMTJhLi4w
ZmQ4ODA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcApAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggZGMz
ZmI2NC4uODQ0MDViZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCmluZGV4IGU5YjVjN2EuLmU1OWEwOTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
QEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFk
aWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxNYXJx
dWVlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtNjUsNiArNjQsNyBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiIAogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgi
CiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyTWFycXVlZS5oIgog
I2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTIzNTksNyArMjM1OSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnN0eWxlQ2hhbmdlZChSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiAKICAgICBpZiAobV9vYmpl
Y3QtPnN0eWxlKCktPm92ZXJmbG93WCgpID09IE9NQVJRVUVFICYmIG1fb2JqZWN0LT5zdHlsZSgp
LT5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNTk9ORSkgewogICAgICAgICBpZiAoIW1fbWFycXVlZSkK
LSAgICAgICAgICAgIG1fbWFycXVlZSA9IG5ldyBNYXJxdWVlKHRoaXMpOworICAgICAgICAgICAg
bV9tYXJxdWVlID0gbmV3IFJlbmRlck1hcnF1ZWUodGhpcyk7CiAgICAgICAgIG1fbWFycXVlZS0+
dXBkYXRlTWFycXVlZVN0eWxlKCk7CiAgICAgfQogICAgIGVsc2UgaWYgKG1fbWFycXVlZSkgewpA
QCAtMjQzNSwyNTggKzI0MzUsNCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdXNwZW5kTWFycXVlZXMo
KQogICAgICAgICBjdXJyLT5zdXNwZW5kTWFycXVlZXMoKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIE1hcnF1ZWUgaW1wbGVtZW50YXRpb24KLQotTWFycXVlZTo6TWFycXVlZShSZW5k
ZXJMYXllciogbCkKLSAgICA6IG1fbGF5ZXIobCksIG1fY3VycmVudExvb3AoMCkKLSAgICAsIG1f
dG90YWxMb29wcygwKQotICAgICwgbV90aW1lcih0aGlzLCAmTWFycXVlZTo6dGltZXJGaXJlZCkK
LSAgICAsIG1fc3RhcnQoMCksIG1fZW5kKDApLCBtX3NwZWVkKDApLCBtX3Jlc2V0KGZhbHNlKQot
ICAgICwgbV9zdXNwZW5kZWQoZmFsc2UpLCBtX3N0b3BwZWQoZmFsc2UpLCBtX2RpcmVjdGlvbihN
QVVUTykKLXsKLX0KLQotaW50IE1hcnF1ZWU6Om1hcnF1ZWVTcGVlZCgpIGNvbnN0Ci17Ci0gICAg
aW50IHJlc3VsdCA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm1hcnF1ZWVTcGVlZCgp
OwotICAgIE5vZGUqIGVsdCA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPmVsZW1lbnQoKTsKLSAgICBp
ZiAoZWx0ICYmIGVsdC0+aGFzVGFnTmFtZShtYXJxdWVlVGFnKSkgewotICAgICAgICBIVE1MTWFy
cXVlZUVsZW1lbnQqIG1hcnF1ZWVFbHQgPSBzdGF0aWNfY2FzdDxIVE1MTWFycXVlZUVsZW1lbnQq
PihlbHQpOwotICAgICAgICByZXN1bHQgPSBtYXgocmVzdWx0LCBtYXJxdWVlRWx0LT5taW5pbXVt
RGVsYXkoKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUVNYXJxdWVlRGlyZWN0
aW9uIE1hcnF1ZWU6OmRpcmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQg
dGhlIENTUzMgImF1dG8iIHZhbHVlIGZvciBkZXRlcm1pbmluZyB0aGUgZGlyZWN0aW9uIG9mIHRo
ZSBtYXJxdWVlLgotICAgIC8vIEZvciBub3cganVzdCBtYXAgTUFVVE8gdG8gTUJBQ0tXQVJECi0g
ICAgRU1hcnF1ZWVEaXJlY3Rpb24gcmVzdWx0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+bWFycXVlZURpcmVjdGlvbigpOwotICAgIFRleHREaXJlY3Rpb24gZGlyID0gbV9sYXllci0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBNQVVU
TykKLSAgICAgICAgcmVzdWx0ID0gTUJBQ0tXQVJEOwotICAgIGlmIChyZXN1bHQgPT0gTUZPUldB
UkQpCi0gICAgICAgIHJlc3VsdCA9IChkaXIgPT0gTFRSKSA/IE1SSUdIVCA6IE1MRUZUOwotICAg
IGlmIChyZXN1bHQgPT0gTUJBQ0tXQVJEKQotICAgICAgICByZXN1bHQgPSAoZGlyID09IExUUikg
PyBNTEVGVCA6IE1SSUdIVDsKLSAgICAKLSAgICAvLyBOb3cgd2UgaGF2ZSB0aGUgcmVhbCBkaXJl
Y3Rpb24uICBOZXh0IHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgaW5jcmVtZW50IGlzIG5lZ2F0aXZl
LgotICAgIC8vIElmIHNvLCB0aGVuIHdlIHJldmVyc2UgdGhlIGRpcmVjdGlvbi4KLSAgICBMZW5n
dGggaW5jcmVtZW50ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZUluY3Jl
bWVudCgpOwotICAgIGlmIChpbmNyZW1lbnQuaXNOZWdhdGl2ZSgpKQotICAgICAgICByZXN1bHQg
PSBzdGF0aWNfY2FzdDxFTWFycXVlZURpcmVjdGlvbj4oLXJlc3VsdCk7Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBNYXJxdWVlOjppc0hvcml6b250YWwoKSBjb25zdAotewot
ICAgIHJldHVybiBkaXJlY3Rpb24oKSA9PSBNTEVGVCB8fCBkaXJlY3Rpb24oKSA9PSBNUklHSFQ7
Ci19Ci0KLWludCBNYXJxdWVlOjpjb21wdXRlUG9zaXRpb24oRU1hcnF1ZWVEaXJlY3Rpb24gZGly
LCBib29sIHN0b3BBdENvbnRlbnRFZGdlKQotewotICAgIFJlbmRlck9iamVjdCogbyA9IG1fbGF5
ZXItPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHMgPSBvLT5zdHlsZSgpOwotICAgIGlm
IChpc0hvcml6b250YWwoKSkgewotICAgICAgICBib29sIGx0ciA9IHMtPmRpcmVjdGlvbigpID09
IExUUjsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gby0+Y2xpZW50V2lkdGgoKTsKLSAgICAg
ICAgaW50IGNvbnRlbnRXaWR0aCA9IGx0ciA/IG8tPnJpZ2h0bW9zdFBvc2l0aW9uKHRydWUsIGZh
bHNlKSA6IG8tPmxlZnRtb3N0UG9zaXRpb24odHJ1ZSwgZmFsc2UpOwotICAgICAgICBpZiAobHRy
KQotICAgICAgICAgICAgY29udGVudFdpZHRoICs9IChvLT5wYWRkaW5nUmlnaHQoKSAtIG8tPmJv
cmRlckxlZnQoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29udGVudFdpZHRoID0g
by0+d2lkdGgoKSAtIGNvbnRlbnRXaWR0aDsKLSAgICAgICAgICAgIGNvbnRlbnRXaWR0aCArPSAo
by0+cGFkZGluZ0xlZnQoKSAtIG8tPmJvcmRlclJpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChkaXIgPT0gTVJJR0hUKSB7Ci0gICAgICAgICAgICBpZiAoc3RvcEF0Q29udGVudEVkZ2Up
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1heCgwLCBsdHIgPyAoY29udGVudFdpZHRoIC0gY2xp
ZW50V2lkdGgpIDogKGNsaWVudFdpZHRoIC0gY29udGVudFdpZHRoKSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGx0ciA/IGNvbnRlbnRXaWR0aCA6IGNsaWVudFdp
ZHRoOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHN0b3BBdENv
bnRlbnRFZGdlKQotICAgICAgICAgICAgICAgIHJldHVybiBtaW4oMCwgbHRyID8gKGNvbnRlbnRX
aWR0aCAtIGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0aCAtIGNvbnRlbnRXaWR0aCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBsdHIgPyAtY2xpZW50V2lkdGgg
OiAtY29udGVudFdpZHRoOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBp
bnQgY29udGVudEhlaWdodCA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPmxvd2VzdFBvc2l0aW9uKHRy
dWUsIGZhbHNlKSAtIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGF5ZXItPnJlbmRl
cmVyKCktPmJvcmRlclRvcCgpICsgbV9sYXllci0+cmVuZGVyZXIoKS0+cGFkZGluZ0JvdHRvbSgp
OwotICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+Y2xpZW50
SGVpZ2h0KCk7Ci0gICAgICAgIGlmIChkaXIgPT0gTVVQKSB7Ci0gICAgICAgICAgICBpZiAoc3Rv
cEF0Q29udGVudEVkZ2UpCi0gICAgICAgICAgICAgICAgIHJldHVybiBtaW4oY29udGVudEhlaWdo
dCAtIGNsaWVudEhlaWdodCwgMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cmV0dXJuIC1jbGllbnRIZWlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoc3RvcEF0Q29udGVudEVkZ2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1heChj
b250ZW50SGVpZ2h0IC0gY2xpZW50SGVpZ2h0LCAwKTsKLSAgICAgICAgICAgIGVsc2UgCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQ7Ci0gICAgICAgIH0KLSAgICB9ICAgIAot
fQotCi12b2lkIE1hcnF1ZWU6OnN0YXJ0KCkKLXsKLSAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgp
IHx8IG1fbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm1hcnF1ZWVJbmNyZW1lbnQoKS5pc1pl
cm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbWF5IGVuZCB1cCBwcm9wYWdhdGlu
ZyBhIHNjcm9sbCBldmVudC4gSXQgaXMgaW1wb3J0YW50IHRoYXQgd2Ugc3VzcGVuZCBldmVudHMg
dW50aWwgCi0gICAgLy8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gc2luY2UgdGhleSBjb3VsZCBk
ZWxldGUgdGhlIGxheWVyLCBpbmNsdWRpbmcgdGhlIG1hcnF1ZWUuCi0gICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBtX2xheWVyLT5yZW5kZXJlcigpLT5kb2N1bWVudCgpLT52aWV3KCk7Ci0gICAg
aWYgKGZyYW1lVmlldykKLSAgICAgICAgZnJhbWVWaWV3LT5wYXVzZVNjaGVkdWxlZEV2ZW50cygp
OwotCi0gICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7Ci0gICAgICAgIGlmIChp
c0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KG1fc3Rh
cnQsIDAsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbGF5ZXIt
PnNjcm9sbFRvT2Zmc2V0KDAsIG1fc3RhcnQsIGZhbHNlLCBmYWxzZSk7Ci0gICAgfQotICAgIGVs
c2UgewotICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotICAgICAgICBtX3N0b3BwZWQgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICBtX3RpbWVyLnN0YXJ0UmVwZWF0aW5nKHNwZWVkKCkgKiAwLjAw
MSk7Ci0KLSAgICBpZiAoZnJhbWVWaWV3KQotICAgICAgICBmcmFtZVZpZXctPnJlc3VtZVNjaGVk
dWxlZEV2ZW50cygpOwotfQotCi12b2lkIE1hcnF1ZWU6OnN1c3BlbmQoKQotewotICAgIG1fdGlt
ZXIuc3RvcCgpOwotICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBNYXJxdWVlOjpz
dG9wKCkKLXsKLSAgICBtX3RpbWVyLnN0b3AoKTsKLSAgICBtX3N0b3BwZWQgPSB0cnVlOwotfQot
Ci12b2lkIE1hcnF1ZWU6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpCi17Ci0gICAgYm9vbCBhY3Rp
dmF0ZSA9IChtX3RvdGFsTG9vcHMgPD0gMCB8fCBtX2N1cnJlbnRMb29wIDwgbV90b3RhbExvb3Bz
KTsKLSAgICBpZiAoYWN0aXZhdGUpIHsKLSAgICAgICAgRU1hcnF1ZWVCZWhhdmlvciBiZWhhdmlv
ciA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm1hcnF1ZWVCZWhhdmlvcigpOwotICAg
ICAgICBtX3N0YXJ0ID0gY29tcHV0ZVBvc2l0aW9uKGRpcmVjdGlvbigpLCBiZWhhdmlvciA9PSBN
QUxURVJOQVRFKTsKLSAgICAgICAgbV9lbmQgPSBjb21wdXRlUG9zaXRpb24ocmV2ZXJzZURpcmVj
dGlvbigpLCBiZWhhdmlvciA9PSBNQUxURVJOQVRFIHx8IGJlaGF2aW9yID09IE1TTElERSk7Ci0g
ICAgICAgIGlmICghbV9zdG9wcGVkKQotICAgICAgICAgICAgc3RhcnQoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgTWFycXVlZTo6dXBkYXRlTWFycXVlZVN0eWxlKCkKLXsKLSAgICBSZW5kZXJTdHlsZSog
cyA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCk7Ci0gICAgCi0gICAgaWYgKG1fZGlyZWN0
aW9uICE9IHMtPm1hcnF1ZWVEaXJlY3Rpb24oKSB8fCAobV90b3RhbExvb3BzICE9IHMtPm1hcnF1
ZWVMb29wQ291bnQoKSAmJiBtX2N1cnJlbnRMb29wID49IG1fdG90YWxMb29wcykpCi0gICAgICAg
IG1fY3VycmVudExvb3AgPSAwOyAvLyBXaGVuIGRpcmVjdGlvbiBjaGFuZ2VzIG9yIG91ciBsb29w
Q291bnQgaXMgYSBzbWFsbGVyIG51bWJlciB0aGFuIG91ciBjdXJyZW50IGxvb3AsIHJlc2V0IG91
ciBsb29wLgotICAgIAotICAgIG1fdG90YWxMb29wcyA9IHMtPm1hcnF1ZWVMb29wQ291bnQoKTsK
LSAgICBtX2RpcmVjdGlvbiA9IHMtPm1hcnF1ZWVEaXJlY3Rpb24oKTsKLSAgICAKLSAgICBpZiAo
bV9sYXllci0+cmVuZGVyZXIoKS0+aXNIVE1MTWFycXVlZSgpKSB7Ci0gICAgICAgIC8vIEhhY2sg
Zm9yIFdpbklFLiAgSW4gV2luSUUsIGEgdmFsdWUgb2YgMCBvciBsb3dlciBmb3IgdGhlIGxvb3Ag
Y291bnQgZm9yIFNMSURFIG1lYW5zIHRvIG9ubHkgZG8KLSAgICAgICAgLy8gb25lIGxvb3AuCi0g
ICAgICAgIGlmIChtX3RvdGFsTG9vcHMgPD0gMCAmJiBzLT5tYXJxdWVlQmVoYXZpb3IoKSA9PSBN
U0xJREUpCi0gICAgICAgICAgICBtX3RvdGFsTG9vcHMgPSAxOwotICAgICAgICAKLSAgICAgICAg
Ly8gSGFjayBhbGVydDogU2V0IHRoZSB3aGl0ZS1zcGFjZSB2YWx1ZSB0byBub3dyYXAgZm9yIGhv
cml6b250YWwgbWFycXVlZXMgd2l0aCBpbmxpbmUgY2hpbGRyZW4sIHRodXMgZW5zdXJpbmcKLSAg
ICAgICAgLy8gYWxsIHRoZSB0ZXh0IGVuZHMgdXAgb24gb25lIGxpbmUgYnkgZGVmYXVsdC4gIExp
bWl0IHRoaXMgaGFjayB0byB0aGUgPG1hcnF1ZWU+IGVsZW1lbnQgdG8gZW11bGF0ZQotICAgICAg
ICAvLyBXaW5JRSdzIGJlaGF2aW9yLiAgU29tZW9uZSB1c2luZyBDU1MzIGNhbiB1c2Ugd2hpdGUt
c3BhY2U6IG5vd3JhcCBvbiB0aGVpciBvd24gdG8gZ2V0IHRoaXMgZWZmZWN0LgotICAgICAgICAv
LyBTZWNvbmQgaGFjayBhbGVydDogU2V0IHRoZSB0ZXh0LWFsaWduIGJhY2sgdG8gYXV0by4gIFdp
bklFIGNvbXBsZXRlbHkgaWdub3JlcyB0ZXh0LWFsaWduIG9uIHRoZQotICAgICAgICAvLyBtYXJx
dWVlIGVsZW1lbnQuCi0gICAgICAgIC8vIEZJWE1FOiBCcmluZyB0aGVzZSB1cCB3aXRoIHRoZSBD
U1MgV0cuCi0gICAgICAgIGlmIChpc0hvcml6b250YWwoKSAmJiBtX2xheWVyLT5yZW5kZXJlcigp
LT5jaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgICAgICBzLT5zZXRXaGl0ZVNwYWNlKE5PV1JB
UCk7Ci0gICAgICAgICAgICBzLT5zZXRUZXh0QWxpZ24oVEFBVVRPKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICAvLyBNYXJxdWVlIGhlaWdodCBoYWNrISEgTWFrZSBzdXJlIHRoYXQsIGlm
IGl0IGlzIGEgaG9yaXpvbnRhbCBtYXJxdWVlLCB0aGUgaGVpZ2h0IGF0dHJpYnV0ZSBpcyBvdmVy
cmlkZGVuIAotICAgIC8vIGlmIGl0IGlzIHNtYWxsZXIgdGhhbiB0aGUgZm9udCBzaXplLiBJZiBp
dCBpcyBhIHZlcnRpY2FsIG1hcnF1ZWUgYW5kIGhlaWdodCBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBk
ZWZhdWx0Ci0gICAgLy8gdG8gYSBtYXJxdWVlIG9mIDIwMHB4LgotICAgIGlmIChpc0hvcml6b250
YWwoKSkgewotICAgICAgICBpZiAocy0+aGVpZ2h0KCkuaXNGaXhlZCgpICYmIHMtPmhlaWdodCgp
LnZhbHVlKCkgPCBzLT5mb250U2l6ZSgpKQotICAgICAgICAgICAgcy0+c2V0SGVpZ2h0KExlbmd0
aChzLT5mb250U2l6ZSgpLEZpeGVkKSk7Ci0gICAgfSBlbHNlIGlmIChzLT5oZWlnaHQoKS5pc0F1
dG8oKSkgIC8vdmVydGljYWwgbWFycXVlZSB3aXRoIG5vIHNwZWNpZmllZCBoZWlnaHQKLSAgICAg
ICAgcy0+c2V0SGVpZ2h0KExlbmd0aCgyMDAsIEZpeGVkKSk7IAotICAgCi0gICAgaWYgKHNwZWVk
KCkgIT0gbWFycXVlZVNwZWVkKCkpIHsKLSAgICAgICAgbV9zcGVlZCA9IG1hcnF1ZWVTcGVlZCgp
OwotICAgICAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgbV90aW1lci5z
dGFydFJlcGVhdGluZyhzcGVlZCgpICogMC4wMDEpOwotICAgIH0KLSAgICAKLSAgICAvLyBDaGVj
ayB0aGUgbG9vcCBjb3VudCB0byBzZWUgaWYgd2Ugc2hvdWxkIG5vdyBzdG9wLgotICAgIGJvb2wg
YWN0aXZhdGUgPSAobV90b3RhbExvb3BzIDw9IDAgfHwgbV9jdXJyZW50TG9vcCA8IG1fdG90YWxM
b29wcyk7Ci0gICAgaWYgKGFjdGl2YXRlICYmICFtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAg
IG1fbGF5ZXItPnJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOwotICAgIGVsc2UgaWYg
KCFhY3RpdmF0ZSAmJiBtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdGltZXIuc3RvcCgp
OwotfQotCi12b2lkIE1hcnF1ZWU6OnRpbWVyRmlyZWQoVGltZXI8TWFycXVlZT4qKQotewotICAg
IGlmIChtX2xheWVyLT5yZW5kZXJlcigpLT5uZWVkc0xheW91dCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgaWYgKG1fcmVzZXQpIHsKLSAgICAgICAgbV9yZXNldCA9IGZhbHNlOwotICAg
ICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hP
ZmZzZXQobV9zdGFydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9s
bFRvWU9mZnNldChtX3N0YXJ0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBS
ZW5kZXJTdHlsZSogcyA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCk7Ci0gICAgCi0gICAg
aW50IGVuZFBvaW50ID0gbV9lbmQ7Ci0gICAgaW50IHJhbmdlID0gbV9lbmQgLSBtX3N0YXJ0Owot
ICAgIGludCBuZXdQb3M7Ci0gICAgaWYgKHJhbmdlID09IDApCi0gICAgICAgIG5ld1BvcyA9IG1f
ZW5kOwotICAgIGVsc2UgeyAgCi0gICAgICAgIGJvb2wgYWRkSW5jcmVtZW50ID0gZGlyZWN0aW9u
KCkgPT0gTVVQIHx8IGRpcmVjdGlvbigpID09IE1MRUZUOwotICAgICAgICBib29sIGlzUmV2ZXJz
ZWQgPSBzLT5tYXJxdWVlQmVoYXZpb3IoKSA9PSBNQUxURVJOQVRFICYmIG1fY3VycmVudExvb3Ag
JSAyOwotICAgICAgICBpZiAoaXNSZXZlcnNlZCkgewotICAgICAgICAgICAgLy8gV2UncmUgZ29p
bmcgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLgotICAgICAgICAgICAgZW5kUG9pbnQgPSBtX3N0
YXJ0OwotICAgICAgICAgICAgcmFuZ2UgPSAtcmFuZ2U7Ci0gICAgICAgICAgICBhZGRJbmNyZW1l
bnQgPSAhYWRkSW5jcmVtZW50OwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgcG9zaXRpdmUgPSBy
YW5nZSA+IDA7Ci0gICAgICAgIGludCBjbGllbnRTaXplID0gKGlzSG9yaXpvbnRhbCgpID8gbV9s
YXllci0+cmVuZGVyZXIoKS0+Y2xpZW50V2lkdGgoKSA6IG1fbGF5ZXItPnJlbmRlcmVyKCktPmNs
aWVudEhlaWdodCgpKTsKLSAgICAgICAgaW50IGluY3JlbWVudCA9IG1heCgxLCBhYnMobV9sYXll
ci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZUluY3JlbWVudCgpLmNhbGNWYWx1ZShjbGll
bnRTaXplKSkpOwotICAgICAgICBpbnQgY3VycmVudFBvcyA9IChpc0hvcml6b250YWwoKSA/IG1f
bGF5ZXItPnNjcm9sbFhPZmZzZXQoKSA6IG1fbGF5ZXItPnNjcm9sbFlPZmZzZXQoKSk7Ci0gICAg
ICAgIG5ld1BvcyA9ICBjdXJyZW50UG9zICsgKGFkZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1p
bmNyZW1lbnQpOwotICAgICAgICBpZiAocG9zaXRpdmUpCi0gICAgICAgICAgICBuZXdQb3MgPSBt
aW4obmV3UG9zLCBlbmRQb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1BvcyA9
IG1heChuZXdQb3MsIGVuZFBvaW50KTsKLSAgICB9Ci0KLSAgICBpZiAobmV3UG9zID09IGVuZFBv
aW50KSB7Ci0gICAgICAgIG1fY3VycmVudExvb3ArKzsKLSAgICAgICAgaWYgKG1fdG90YWxMb29w
cyA+IDAgJiYgbV9jdXJyZW50TG9vcCA+PSBtX3RvdGFsTG9vcHMpCi0gICAgICAgICAgICBtX3Rp
bWVyLnN0b3AoKTsKLSAgICAgICAgZWxzZSBpZiAocy0+bWFycXVlZUJlaGF2aW9yKCkgIT0gTUFM
VEVSTkFURSkKLSAgICAgICAgICAgIG1fcmVzZXQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQ
b3MpOwotICAgIGVsc2UKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4
IDJkNGFkZmMuLmFjMTM2YzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNTYsNiArNTYs
NyBAQCBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBQ
bGF0Zm9ybVNjcm9sbGJhcjsKIGNsYXNzIFJlbmRlckZyYW1lU2V0OworY2xhc3MgUmVuZGVyTWFy
cXVlZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclJlcGxpY2E7CiBjbGFzcyBS
ZW5kZXJTdHlsZTsKQEAgLTExNCw0OSArMTE1LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZml4
ZWQgOiAxOwogfTsKIAotCi0vLyBGSVhNRTogbW92ZSB0aGlzIHRvIGl0cyBvd24gZmlsZQotLy8g
VGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBhdXRvLXNjcm9sbGluZyBvZiBsYXllcnMgd2l0aCBvdmVy
ZmxvdzogbWFycXVlZS4KLWNsYXNzIE1hcnF1ZWUgewotcHVibGljOgotICAgIE1hcnF1ZWUoUmVu
ZGVyTGF5ZXIqKTsKLQotICAgIGludCBzcGVlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlZWQ7IH0K
LSAgICBpbnQgbWFycXVlZVNwZWVkKCkgY29uc3Q7Ci0KLSAgICBFTWFycXVlZURpcmVjdGlvbiBy
ZXZlcnNlRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RU1hcnF1ZWVEaXJl
Y3Rpb24+KC1kaXJlY3Rpb24oKSk7IH0KLSAgICBFTWFycXVlZURpcmVjdGlvbiBkaXJlY3Rpb24o
KSBjb25zdDsKLQotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7Ci0KLSAgICBpbnQgY29t
cHV0ZVBvc2l0aW9uKEVNYXJxdWVlRGlyZWN0aW9uLCBib29sIHN0b3BBdENsaWVudEVkZ2UpOwot
Ci0gICAgdm9pZCBzZXRFbmQoaW50IGVuZCkgeyBtX2VuZCA9IGVuZDsgfQotICAgIAotICAgIHZv
aWQgc3RhcnQoKTsKLSAgICB2b2lkIHN1c3BlbmQoKTsKLSAgICB2b2lkIHN0b3AoKTsKLQotICAg
IHZvaWQgdXBkYXRlTWFycXVlZVN0eWxlKCk7Ci0gICAgdm9pZCB1cGRhdGVNYXJxdWVlUG9zaXRp
b24oKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8TWFycXVlZT4qKTsK
LQotICAgIFJlbmRlckxheWVyKiBtX2xheWVyOwotICAgIGludCBtX2N1cnJlbnRMb29wOwotICAg
IGludCBtX3RvdGFsTG9vcHM7Ci0gICAgVGltZXI8TWFycXVlZT4gbV90aW1lcjsKLSAgICBpbnQg
bV9zdGFydDsKLSAgICBpbnQgbV9lbmQ7Ci0gICAgaW50IG1fc3BlZWQ7Ci0gICAgTGVuZ3RoIG1f
aGVpZ2h0OwotICAgIGJvb2wgbV9yZXNldDogMTsKLSAgICBib29sIG1fc3VzcGVuZGVkIDogMTsK
LSAgICBib29sIG1fc3RvcHBlZCA6IDE7Ci0gICAgRU1hcnF1ZWVEaXJlY3Rpb24gbV9kaXJlY3Rp
b24gOiA0OwotfTsKLQogY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xpZW50
IHsKIHB1YmxpYzoKICAgICBlbnVtIFNjcm9sbEJlaGF2aW9yIHsKQEAgLTIwNyw3ICsxNjUsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChSZW5kZXJTdHlsZSopOwogCi0gICAg
TWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZTsgfQorICAgIFJlbmRl
ck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWU7IH0KICAgICB2b2lk
IHN1c3BlbmRNYXJxdWVlcygpOwogCiAgICAgYm9vbCBpc092ZXJmbG93T25seSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNPdmVyZmxvd09ubHk7IH0KQEAgLTQ4MSw3ICs0MzksNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgYm9vbCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wg
bV9oYXNWaXNpYmxlRGVzY2VuZGFudCA6IDE7CiAKLSAgICBNYXJxdWVlKiBtX21hcnF1ZWU7IC8v
IFVzZWQgYnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3c6bWFycXVlZQorICAgIFJlbmRlck1hcnF1ZWUq
IG1fbWFycXVlZTsgLy8gVXNlZCBieSBsYXllcnMgd2l0aCBvdmVyZmxvdzptYXJxdWVlCiAgICAg
CiAgICAgLy8gQ2FjaGVkIG5vcm1hbCBmbG93IHZhbHVlcyBmb3IgYWJzb2x1dGUgcG9zaXRpb25l
ZCBlbGVtZW50cyB3aXRoIHN0YXRpYyBsZWZ0L3RvcCB2YWx1ZXMuCiAgICAgaW50IG1fc3RhdGlj
WDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOTZkMjZlYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1hcnF1ZWUuY3BwCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25z
IENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAqICAgUm9iZXJ0IE8n
Q2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24gPGRiYXJvbkBmYXMu
aGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVzaW5nZXJAd2ViLmRl
PgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICogICBSb2xhbmQgTWFp
bnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5kZT4KKyAqICAgSm9z
aCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNreSA8YnpiYXJza3lA
bWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiBlaXRo
ZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0CisgKiBo
dHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3dy5mc2Yu
b3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxlIGluc3Rl
YWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgorICog
dmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9mIHRob3Nl
IHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBhbGxvdyBv
dGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BM
LCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNpb25zIGFi
b3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIgcHJvdmlz
aW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1heSBiZS4K
KyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVu
dCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBvZiB0aGUg
TEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lu
Y2x1ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworUmVuZGVyTWFycXVl
ZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllciogbCkKKyAgICA6IG1fbGF5ZXIobCksIG1fY3Vy
cmVudExvb3AoMCkKKyAgICAsIG1fdG90YWxMb29wcygwKQorICAgICwgbV90aW1lcih0aGlzLCAm
UmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCkKKyAgICAsIG1fc3RhcnQoMCksIG1fZW5kKDApLCBt
X3NwZWVkKDApLCBtX3Jlc2V0KGZhbHNlKQorICAgICwgbV9zdXNwZW5kZWQoZmFsc2UpLCBtX3N0
b3BwZWQoZmFsc2UpLCBtX2RpcmVjdGlvbihNQVVUTykKK3sKK30KKworaW50IFJlbmRlck1hcnF1
ZWU6Om1hcnF1ZWVTcGVlZCgpIGNvbnN0Cit7CisgICAgaW50IHJlc3VsdCA9IG1fbGF5ZXItPnJl
bmRlcmVyKCktPnN0eWxlKCktPm1hcnF1ZWVTcGVlZCgpOworICAgIE5vZGUqIGVsdCA9IG1fbGF5
ZXItPnJlbmRlcmVyKCktPmVsZW1lbnQoKTsKKyAgICBpZiAoZWx0ICYmIGVsdC0+aGFzVGFnTmFt
ZShtYXJxdWVlVGFnKSkgeworICAgICAgICBIVE1MTWFycXVlZUVsZW1lbnQqIG1hcnF1ZWVFbHQg
PSBzdGF0aWNfY2FzdDxIVE1MTWFycXVlZUVsZW1lbnQqPihlbHQpOworICAgICAgICByZXN1bHQg
PSBtYXgocmVzdWx0LCBtYXJxdWVlRWx0LT5taW5pbXVtRGVsYXkoKSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0VNYXJxdWVlRGlyZWN0aW9uIFJlbmRlck1hcnF1ZWU6OmRpcmVj
dGlvbigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFN1cHBvcnQgdGhlIENTUzMgImF1dG8iIHZh
bHVlIGZvciBkZXRlcm1pbmluZyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBtYXJxdWVlLgorICAgIC8v
IEZvciBub3cganVzdCBtYXAgTUFVVE8gdG8gTUJBQ0tXQVJECisgICAgRU1hcnF1ZWVEaXJlY3Rp
b24gcmVzdWx0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZURpcmVjdGlv
bigpOworICAgIFRleHREaXJlY3Rpb24gZGlyID0gbV9sYXllci0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCk7CisgICAgaWYgKHJlc3VsdCA9PSBNQVVUTykKKyAgICAgICAgcmVzdWx0
ID0gTUJBQ0tXQVJEOworICAgIGlmIChyZXN1bHQgPT0gTUZPUldBUkQpCisgICAgICAgIHJlc3Vs
dCA9IChkaXIgPT0gTFRSKSA/IE1SSUdIVCA6IE1MRUZUOworICAgIGlmIChyZXN1bHQgPT0gTUJB
Q0tXQVJEKQorICAgICAgICByZXN1bHQgPSAoZGlyID09IExUUikgPyBNTEVGVCA6IE1SSUdIVDsK
KyAgICAKKyAgICAvLyBOb3cgd2UgaGF2ZSB0aGUgcmVhbCBkaXJlY3Rpb24uICBOZXh0IHdlIGNo
ZWNrIHRvIHNlZSBpZiB0aGUgaW5jcmVtZW50IGlzIG5lZ2F0aXZlLgorICAgIC8vIElmIHNvLCB0
aGVuIHdlIHJldmVyc2UgdGhlIGRpcmVjdGlvbi4KKyAgICBMZW5ndGggaW5jcmVtZW50ID0gbV9s
YXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZUluY3JlbWVudCgpOworICAgIGlmIChp
bmNyZW1lbnQuaXNOZWdhdGl2ZSgpKQorICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxFTWFy
cXVlZURpcmVjdGlvbj4oLXJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Ym9vbCBSZW5kZXJNYXJxdWVlOjppc0hvcml6b250YWwoKSBjb25zdAoreworICAgIHJldHVybiBk
aXJlY3Rpb24oKSA9PSBNTEVGVCB8fCBkaXJlY3Rpb24oKSA9PSBNUklHSFQ7Cit9CisKK2ludCBS
ZW5kZXJNYXJxdWVlOjpjb21wdXRlUG9zaXRpb24oRU1hcnF1ZWVEaXJlY3Rpb24gZGlyLCBib29s
IHN0b3BBdENvbnRlbnRFZGdlKQoreworICAgIFJlbmRlck9iamVjdCogbyA9IG1fbGF5ZXItPnJl
bmRlcmVyKCk7CisgICAgUmVuZGVyU3R5bGUqIHMgPSBvLT5zdHlsZSgpOworICAgIGlmIChpc0hv
cml6b250YWwoKSkgeworICAgICAgICBib29sIGx0ciA9IHMtPmRpcmVjdGlvbigpID09IExUUjsK
KyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gby0+Y2xpZW50V2lkdGgoKTsKKyAgICAgICAgaW50
IGNvbnRlbnRXaWR0aCA9IGx0ciA/IG8tPnJpZ2h0bW9zdFBvc2l0aW9uKHRydWUsIGZhbHNlKSA6
IG8tPmxlZnRtb3N0UG9zaXRpb24odHJ1ZSwgZmFsc2UpOworICAgICAgICBpZiAobHRyKQorICAg
ICAgICAgICAgY29udGVudFdpZHRoICs9IChvLT5wYWRkaW5nUmlnaHQoKSAtIG8tPmJvcmRlckxl
ZnQoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29udGVudFdpZHRoID0gby0+d2lk
dGgoKSAtIGNvbnRlbnRXaWR0aDsKKyAgICAgICAgICAgIGNvbnRlbnRXaWR0aCArPSAoby0+cGFk
ZGluZ0xlZnQoKSAtIG8tPmJvcmRlclJpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChk
aXIgPT0gTVJJR0hUKSB7CisgICAgICAgICAgICBpZiAoc3RvcEF0Q29udGVudEVkZ2UpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1heCgwLCBsdHIgPyAoY29udGVudFdpZHRoIC0gY2xpZW50V2lk
dGgpIDogKGNsaWVudFdpZHRoIC0gY29udGVudFdpZHRoKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGx0ciA/IGNvbnRlbnRXaWR0aCA6IGNsaWVudFdpZHRoOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHN0b3BBdENvbnRlbnRF
ZGdlKQorICAgICAgICAgICAgICAgIHJldHVybiBtaW4oMCwgbHRyID8gKGNvbnRlbnRXaWR0aCAt
IGNsaWVudFdpZHRoKSA6IChjbGllbnRXaWR0aCAtIGNvbnRlbnRXaWR0aCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBsdHIgPyAtY2xpZW50V2lkdGggOiAtY29u
dGVudFdpZHRoOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpbnQgY29u
dGVudEhlaWdodCA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPmxvd2VzdFBvc2l0aW9uKHRydWUsIGZh
bHNlKSAtIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGF5ZXItPnJlbmRlcmVyKCkt
PmJvcmRlclRvcCgpICsgbV9sYXllci0+cmVuZGVyZXIoKS0+cGFkZGluZ0JvdHRvbSgpOworICAg
ICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+Y2xpZW50SGVpZ2h0
KCk7CisgICAgICAgIGlmIChkaXIgPT0gTVVQKSB7CisgICAgICAgICAgICBpZiAoc3RvcEF0Q29u
dGVudEVkZ2UpCisgICAgICAgICAgICAgICAgIHJldHVybiBtaW4oY29udGVudEhlaWdodCAtIGNs
aWVudEhlaWdodCwgMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJu
IC1jbGllbnRIZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoc3RvcEF0Q29udGVudEVkZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1heChjb250ZW50
SGVpZ2h0IC0gY2xpZW50SGVpZ2h0LCAwKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQ7CisgICAgICAgIH0KKyAgICB9ICAgIAorfQorCit2
b2lkIFJlbmRlck1hcnF1ZWU6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgp
IHx8IG1fbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm1hcnF1ZWVJbmNyZW1lbnQoKS5pc1pl
cm8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbWF5IGVuZCB1cCBwcm9wYWdhdGlu
ZyBhIHNjcm9sbCBldmVudC4gSXQgaXMgaW1wb3J0YW50IHRoYXQgd2Ugc3VzcGVuZCBldmVudHMg
dW50aWwgCisgICAgLy8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gc2luY2UgdGhleSBjb3VsZCBk
ZWxldGUgdGhlIGxheWVyLCBpbmNsdWRpbmcgdGhlIG1hcnF1ZWUuCisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBtX2xheWVyLT5yZW5kZXJlcigpLT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAg
aWYgKGZyYW1lVmlldykKKyAgICAgICAgZnJhbWVWaWV3LT5wYXVzZVNjaGVkdWxlZEV2ZW50cygp
OworCisgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7CisgICAgICAgIGlmIChp
c0hvcml6b250YWwoKSkKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KG1fc3Rh
cnQsIDAsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbGF5ZXIt
PnNjcm9sbFRvT2Zmc2V0KDAsIG1fc3RhcnQsIGZhbHNlLCBmYWxzZSk7CisgICAgfQorICAgIGVs
c2UgeworICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOworICAgICAgICBtX3N0b3BwZWQgPSBm
YWxzZTsKKyAgICB9CisKKyAgICBtX3RpbWVyLnN0YXJ0UmVwZWF0aW5nKHNwZWVkKCkgKiAwLjAw
MSk7CisKKyAgICBpZiAoZnJhbWVWaWV3KQorICAgICAgICBmcmFtZVZpZXctPnJlc3VtZVNjaGVk
dWxlZEV2ZW50cygpOworfQorCit2b2lkIFJlbmRlck1hcnF1ZWU6OnN1c3BlbmQoKQoreworICAg
IG1fdGltZXIuc3RvcCgpOworICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKK30KKwordm9pZCBSZW5k
ZXJNYXJxdWVlOjpzdG9wKCkKK3sKKyAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICBtX3N0b3BwZWQg
PSB0cnVlOworfQorCit2b2lkIFJlbmRlck1hcnF1ZWU6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigp
Cit7CisgICAgYm9vbCBhY3RpdmF0ZSA9IChtX3RvdGFsTG9vcHMgPD0gMCB8fCBtX2N1cnJlbnRM
b29wIDwgbV90b3RhbExvb3BzKTsKKyAgICBpZiAoYWN0aXZhdGUpIHsKKyAgICAgICAgRU1hcnF1
ZWVCZWhhdmlvciBiZWhhdmlvciA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm1hcnF1
ZWVCZWhhdmlvcigpOworICAgICAgICBtX3N0YXJ0ID0gY29tcHV0ZVBvc2l0aW9uKGRpcmVjdGlv
bigpLCBiZWhhdmlvciA9PSBNQUxURVJOQVRFKTsKKyAgICAgICAgbV9lbmQgPSBjb21wdXRlUG9z
aXRpb24ocmV2ZXJzZURpcmVjdGlvbigpLCBiZWhhdmlvciA9PSBNQUxURVJOQVRFIHx8IGJlaGF2
aW9yID09IE1TTElERSk7CisgICAgICAgIGlmICghbV9zdG9wcGVkKQorICAgICAgICAgICAgc3Rh
cnQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVN0eWxl
KCkKK3sKKyAgICBSZW5kZXJTdHlsZSogcyA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCk7
CisgICAgCisgICAgaWYgKG1fZGlyZWN0aW9uICE9IHMtPm1hcnF1ZWVEaXJlY3Rpb24oKSB8fCAo
bV90b3RhbExvb3BzICE9IHMtPm1hcnF1ZWVMb29wQ291bnQoKSAmJiBtX2N1cnJlbnRMb29wID49
IG1fdG90YWxMb29wcykpCisgICAgICAgIG1fY3VycmVudExvb3AgPSAwOyAvLyBXaGVuIGRpcmVj
dGlvbiBjaGFuZ2VzIG9yIG91ciBsb29wQ291bnQgaXMgYSBzbWFsbGVyIG51bWJlciB0aGFuIG91
ciBjdXJyZW50IGxvb3AsIHJlc2V0IG91ciBsb29wLgorICAgIAorICAgIG1fdG90YWxMb29wcyA9
IHMtPm1hcnF1ZWVMb29wQ291bnQoKTsKKyAgICBtX2RpcmVjdGlvbiA9IHMtPm1hcnF1ZWVEaXJl
Y3Rpb24oKTsKKyAgICAKKyAgICBpZiAobV9sYXllci0+cmVuZGVyZXIoKS0+aXNIVE1MTWFycXVl
ZSgpKSB7CisgICAgICAgIC8vIEhhY2sgZm9yIFdpbklFLiAgSW4gV2luSUUsIGEgdmFsdWUgb2Yg
MCBvciBsb3dlciBmb3IgdGhlIGxvb3AgY291bnQgZm9yIFNMSURFIG1lYW5zIHRvIG9ubHkgZG8K
KyAgICAgICAgLy8gb25lIGxvb3AuCisgICAgICAgIGlmIChtX3RvdGFsTG9vcHMgPD0gMCAmJiBz
LT5tYXJxdWVlQmVoYXZpb3IoKSA9PSBNU0xJREUpCisgICAgICAgICAgICBtX3RvdGFsTG9vcHMg
PSAxOworICAgICAgICAKKyAgICAgICAgLy8gSGFjayBhbGVydDogU2V0IHRoZSB3aGl0ZS1zcGFj
ZSB2YWx1ZSB0byBub3dyYXAgZm9yIGhvcml6b250YWwgbWFycXVlZXMgd2l0aCBpbmxpbmUgY2hp
bGRyZW4sIHRodXMgZW5zdXJpbmcKKyAgICAgICAgLy8gYWxsIHRoZSB0ZXh0IGVuZHMgdXAgb24g
b25lIGxpbmUgYnkgZGVmYXVsdC4gIExpbWl0IHRoaXMgaGFjayB0byB0aGUgPG1hcnF1ZWU+IGVs
ZW1lbnQgdG8gZW11bGF0ZQorICAgICAgICAvLyBXaW5JRSdzIGJlaGF2aW9yLiAgU29tZW9uZSB1
c2luZyBDU1MzIGNhbiB1c2Ugd2hpdGUtc3BhY2U6IG5vd3JhcCBvbiB0aGVpciBvd24gdG8gZ2V0
IHRoaXMgZWZmZWN0LgorICAgICAgICAvLyBTZWNvbmQgaGFjayBhbGVydDogU2V0IHRoZSB0ZXh0
LWFsaWduIGJhY2sgdG8gYXV0by4gIFdpbklFIGNvbXBsZXRlbHkgaWdub3JlcyB0ZXh0LWFsaWdu
IG9uIHRoZQorICAgICAgICAvLyBtYXJxdWVlIGVsZW1lbnQuCisgICAgICAgIC8vIEZJWE1FOiBC
cmluZyB0aGVzZSB1cCB3aXRoIHRoZSBDU1MgV0cuCisgICAgICAgIGlmIChpc0hvcml6b250YWwo
KSAmJiBtX2xheWVyLT5yZW5kZXJlcigpLT5jaGlsZHJlbklubGluZSgpKSB7CisgICAgICAgICAg
ICBzLT5zZXRXaGl0ZVNwYWNlKE5PV1JBUCk7CisgICAgICAgICAgICBzLT5zZXRUZXh0QWxpZ24o
VEFBVVRPKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBNYXJxdWVlIGhlaWdodCBo
YWNrISEgTWFrZSBzdXJlIHRoYXQsIGlmIGl0IGlzIGEgaG9yaXpvbnRhbCBtYXJxdWVlLCB0aGUg
aGVpZ2h0IGF0dHJpYnV0ZSBpcyBvdmVycmlkZGVuIAorICAgIC8vIGlmIGl0IGlzIHNtYWxsZXIg
dGhhbiB0aGUgZm9udCBzaXplLiBJZiBpdCBpcyBhIHZlcnRpY2FsIG1hcnF1ZWUgYW5kIGhlaWdo
dCBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBkZWZhdWx0CisgICAgLy8gdG8gYSBtYXJxdWVlIG9mIDIw
MHB4LgorICAgIGlmIChpc0hvcml6b250YWwoKSkgeworICAgICAgICBpZiAocy0+aGVpZ2h0KCku
aXNGaXhlZCgpICYmIHMtPmhlaWdodCgpLnZhbHVlKCkgPCBzLT5mb250U2l6ZSgpKQorICAgICAg
ICAgICAgcy0+c2V0SGVpZ2h0KExlbmd0aChzLT5mb250U2l6ZSgpLEZpeGVkKSk7CisgICAgfSBl
bHNlIGlmIChzLT5oZWlnaHQoKS5pc0F1dG8oKSkgIC8vdmVydGljYWwgbWFycXVlZSB3aXRoIG5v
IHNwZWNpZmllZCBoZWlnaHQKKyAgICAgICAgcy0+c2V0SGVpZ2h0KExlbmd0aCgyMDAsIEZpeGVk
KSk7IAorICAgCisgICAgaWYgKHNwZWVkKCkgIT0gbWFycXVlZVNwZWVkKCkpIHsKKyAgICAgICAg
bV9zcGVlZCA9IG1hcnF1ZWVTcGVlZCgpOworICAgICAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgp
KQorICAgICAgICAgICAgbV90aW1lci5zdGFydFJlcGVhdGluZyhzcGVlZCgpICogMC4wMDEpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBDaGVjayB0aGUgbG9vcCBjb3VudCB0byBzZWUgaWYgd2Ugc2hv
dWxkIG5vdyBzdG9wLgorICAgIGJvb2wgYWN0aXZhdGUgPSAobV90b3RhbExvb3BzIDw9IDAgfHwg
bV9jdXJyZW50TG9vcCA8IG1fdG90YWxMb29wcyk7CisgICAgaWYgKGFjdGl2YXRlICYmICFtX3Rp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXItPnJlbmRlcmVyKCktPnNldE5lZWRzTGF5
b3V0KHRydWUpOworICAgIGVsc2UgaWYgKCFhY3RpdmF0ZSAmJiBtX3RpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fdGltZXIuc3RvcCgpOworfQorCit2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVy
RmlyZWQoVGltZXI8UmVuZGVyTWFycXVlZT4qKQoreworICAgIGlmIChtX2xheWVyLT5yZW5kZXJl
cigpLT5uZWVkc0xheW91dCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fcmVz
ZXQpIHsKKyAgICAgICAgbV9yZXNldCA9IGZhbHNlOworICAgICAgICBpZiAoaXNIb3Jpem9udGFs
KCkpCisgICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hPZmZzZXQobV9zdGFydCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWU9mZnNldChtX3N0YXJ0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSZW5kZXJTdHlsZSogcyA9IG1fbGF5
ZXItPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgCisgICAgaW50IGVuZFBvaW50ID0gbV9lbmQ7
CisgICAgaW50IHJhbmdlID0gbV9lbmQgLSBtX3N0YXJ0OworICAgIGludCBuZXdQb3M7CisgICAg
aWYgKHJhbmdlID09IDApCisgICAgICAgIG5ld1BvcyA9IG1fZW5kOworICAgIGVsc2UgeyAgCisg
ICAgICAgIGJvb2wgYWRkSW5jcmVtZW50ID0gZGlyZWN0aW9uKCkgPT0gTVVQIHx8IGRpcmVjdGlv
bigpID09IE1MRUZUOworICAgICAgICBib29sIGlzUmV2ZXJzZWQgPSBzLT5tYXJxdWVlQmVoYXZp
b3IoKSA9PSBNQUxURVJOQVRFICYmIG1fY3VycmVudExvb3AgJSAyOworICAgICAgICBpZiAoaXNS
ZXZlcnNlZCkgeworICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgaW4gdGhlIHJldmVyc2UgZGly
ZWN0aW9uLgorICAgICAgICAgICAgZW5kUG9pbnQgPSBtX3N0YXJ0OworICAgICAgICAgICAgcmFu
Z2UgPSAtcmFuZ2U7CisgICAgICAgICAgICBhZGRJbmNyZW1lbnQgPSAhYWRkSW5jcmVtZW50Owor
ICAgICAgICB9CisgICAgICAgIGJvb2wgcG9zaXRpdmUgPSByYW5nZSA+IDA7CisgICAgICAgIGlu
dCBjbGllbnRTaXplID0gKGlzSG9yaXpvbnRhbCgpID8gbV9sYXllci0+cmVuZGVyZXIoKS0+Y2xp
ZW50V2lkdGgoKSA6IG1fbGF5ZXItPnJlbmRlcmVyKCktPmNsaWVudEhlaWdodCgpKTsKKyAgICAg
ICAgaW50IGluY3JlbWVudCA9IG1heCgxLCBhYnMobV9sYXllci0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+bWFycXVlZUluY3JlbWVudCgpLmNhbGNWYWx1ZShjbGllbnRTaXplKSkpOworICAgICAgICBp
bnQgY3VycmVudFBvcyA9IChpc0hvcml6b250YWwoKSA/IG1fbGF5ZXItPnNjcm9sbFhPZmZzZXQo
KSA6IG1fbGF5ZXItPnNjcm9sbFlPZmZzZXQoKSk7CisgICAgICAgIG5ld1BvcyA9ICBjdXJyZW50
UG9zICsgKGFkZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1pbmNyZW1lbnQpOworICAgICAgICBp
ZiAocG9zaXRpdmUpCisgICAgICAgICAgICBuZXdQb3MgPSBtaW4obmV3UG9zLCBlbmRQb2ludCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1BvcyA9IG1heChuZXdQb3MsIGVuZFBvaW50
KTsKKyAgICB9CisKKyAgICBpZiAobmV3UG9zID09IGVuZFBvaW50KSB7CisgICAgICAgIG1fY3Vy
cmVudExvb3ArKzsKKyAgICAgICAgaWYgKG1fdG90YWxMb29wcyA+IDAgJiYgbV9jdXJyZW50TG9v
cCA+PSBtX3RvdGFsTG9vcHMpCisgICAgICAgICAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICAgICAg
ZWxzZSBpZiAocy0+bWFycXVlZUJlaGF2aW9yKCkgIT0gTUFMVEVSTkFURSkKKyAgICAgICAgICAg
IG1fcmVzZXQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNIb3Jpem9udGFsKCkpCisg
ICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOworICAgIGVsc2UKKyAgICAg
ICAgbV9sYXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5o
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ5ZDIwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNYXJxdWVlLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFBvcnRpb25zIGFyZSBDb3B5cmln
aHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKgorICog
T3RoZXIgY29udHJpYnV0b3JzOgorICogICBSb2JlcnQgTydDYWxsYWhhbiA8cm9jK0Bjcy5jbXUu
ZWR1PgorICogICBEYXZpZCBCYXJvbiA8ZGJhcm9uQGZhcy5oYXJ2YXJkLmVkdT4KKyAqICAgQ2hy
aXN0aWFuIEJpZXNpbmdlciA8Y2JpZXNpbmdlckB3ZWIuZGU+CisgKiAgIFJhbmRhbGwgSmVzdXAg
PHJqZXN1cEB3Z2F0ZS5jb20+CisgKiAgIFJvbGFuZCBNYWlueiA8cm9sYW5kLm1haW56QGluZm9y
bWF0aWsubWVkLnVuaS1naWVzc2VuLmRlPgorICogICBKb3NoIFNvcmVmIDx0aW1lbGVzc0BtYWMu
Y29tPgorICogICBCb3JpcyBaYmFyc2t5IDxiemJhcnNreUBtaXQuZWR1PgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkg
YmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
TVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZl
cnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwK
KyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwg
b3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElm
IHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBv
bmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhl
IE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICog
dmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNp
b24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3
aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBN
UEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxl
dGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVy
c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBH
UEwuCisgKi8KKworI2lmbmRlZiBSZW5kZXJNYXJxdWVlX2gKKyNkZWZpbmUgUmVuZGVyTWFycXVl
ZV9oCisKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyTGF5ZXI7CisKKy8vIFRoaXMgY2xhc3Mg
aGFuZGxlcyB0aGUgYXV0by1zY3JvbGxpbmcgb2YgbGF5ZXJzIHdpdGggb3ZlcmZsb3c6IG1hcnF1
ZWUuCitjbGFzcyBSZW5kZXJNYXJxdWVlIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJNYXJxdWVlKFJl
bmRlckxheWVyKik7CisKKyAgICBpbnQgc3BlZWQoKSBjb25zdCB7IHJldHVybiBtX3NwZWVkOyB9
CisgICAgaW50IG1hcnF1ZWVTcGVlZCgpIGNvbnN0OworCisgICAgRU1hcnF1ZWVEaXJlY3Rpb24g
cmV2ZXJzZURpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVNYXJxdWVlRGly
ZWN0aW9uPigtZGlyZWN0aW9uKCkpOyB9CisgICAgRU1hcnF1ZWVEaXJlY3Rpb24gZGlyZWN0aW9u
KCkgY29uc3Q7CisKKyAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OworCisgICAgaW50IGNv
bXB1dGVQb3NpdGlvbihFTWFycXVlZURpcmVjdGlvbiwgYm9vbCBzdG9wQXRDbGllbnRFZGdlKTsK
KworICAgIHZvaWQgc2V0RW5kKGludCBlbmQpIHsgbV9lbmQgPSBlbmQ7IH0KKyAgICAKKyAgICB2
b2lkIHN0YXJ0KCk7CisgICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCBzdG9wKCk7CisKKyAg
ICB2b2lkIHVwZGF0ZU1hcnF1ZWVTdHlsZSgpOworICAgIHZvaWQgdXBkYXRlTWFycXVlZVBvc2l0
aW9uKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPFJlbmRlck1hcnF1
ZWU+Kik7CisKKyAgICBSZW5kZXJMYXllciogbV9sYXllcjsKKyAgICBpbnQgbV9jdXJyZW50TG9v
cDsKKyAgICBpbnQgbV90b3RhbExvb3BzOworICAgIFRpbWVyPFJlbmRlck1hcnF1ZWU+IG1fdGlt
ZXI7CisgICAgaW50IG1fc3RhcnQ7CisgICAgaW50IG1fZW5kOworICAgIGludCBtX3NwZWVkOwor
ICAgIExlbmd0aCBtX2hlaWdodDsKKyAgICBib29sIG1fcmVzZXQ6IDE7CisgICAgYm9vbCBtX3N1
c3BlbmRlZCA6IDE7CisgICAgYm9vbCBtX3N0b3BwZWQgOiAxOworICAgIEVNYXJxdWVlRGlyZWN0
aW9uIG1fZGlyZWN0aW9uIDogNDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFJlbmRlck1hcnF1ZWVfaAo=
</data>
<flag name="review"
          id="10059"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>