<?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>130616</bug_id>
          
          <creation_ts>2014-03-21 14:00:50 -0700</creation_ts>
          <short_desc>Merge VTTScanner Code</short_desc>
          <delta_ts>2014-03-21 14:27:14 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>bunhere</cc>
    
    <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>philipj</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>993312</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-21 14:00:50 -0700</bug_when>
    <thetext>This patch merges the VTTScanner implementation from Blink to WebKit:

1. Introduce VTTScanner - a parser helper for various VTT parsing needs
        https://chromium.googlesource.com/chromium/blink/+/f1ceb058d574a1174b524c57f67350510a942071
        http://crbug.com/75273002
	
	fs@opera.com

2. Remove position argument from VTTParser::collectTimeStamp
        https://chromium.googlesource.com/chromium/blink/+/3e2c67969486e86347b328c72c67cacabfe6f4a1
        http://crbug.com/134173002

	fs@opera.com

3. Use VTTScanner for VTT cue settings parsing
        https://chromium.googlesource.com/chromium/blink/+/5962b7bbb001838f3fc7f24817637528b86bfd9b
        http://crbug.com/134153002

	fs@opera.com

4. Use VTTScanner for VTT region settings parsing
        https://chromium.googlesource.com/chromium/blink/+/6c81f51438013edca920a19fc6a31026fc562af2
        http://crbug.com/137033002

	fs@opera.com

5. Make VTTRegion::setRegionSettings use VTTScanner
        https://chromium.googlesource.com/chromium/blink/+/fa286dca17a291da3ae8be80111e2264de6d5cfd
        http://crbug.com/140503004

	fs@opera.com

6. Rework float value/percentage scanning for VTTRegion
        https://chromium.googlesource.com/chromium/blink/+/8f33b63aabcce7dd21dd15288d45c4eb37c02001
        http://crbug.com/139343006

	fs@opera.com

7.  Rework end-of-value field handling in VTTRegion::parseSettingValue
        https://chromium.googlesource.com/chromium/blink/+/1872b54b908fac525f1ad9d6f15174b11e27c8af
        http://crbug.com/143983002

	fs@opera.com

8. Pass a VTTScanner to VTTRegion::parseSettingValue
        https://chromium.googlesource.com/chromium/blink/+/e6494b3359e2077bd8772d86ab1fb709acf4c398
        http://crbug.com/144893002

	fs@opera.com</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993313</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-03-21 14:01:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/16394988&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993316</commentid>
    <comment_count>2</comment_count>
      <attachid>227489</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-21 14:09:46 -0700</bug_when>
    <thetext>Created attachment 227489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993323</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-21 14:27:14 -0700</bug_when>
    <thetext>Committed r166097: &lt;http://trac.webkit.org/changeset/166097&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227489</attachid>
            <date>2014-03-21 14:09:46 -0700</date>
            <delta_ts>2014-03-21 14:23:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130616-20140321140924.patch</filename>
            <type>text/plain</type>
            <size>66285</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE0LTAzLTIxICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIFZUVFNjYW5uZXIg
Q29kZSBmcm9tIEJsaW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzA2MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNZXJnZWQgZnJvbSBCbGluayAocGF0Y2ggYnkgZnNAb3BlcmEuY29tKToKKyAgICAg
ICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvZjFj
ZWIwNThkNTc0YTExNzRiNTI0YzU3ZjY3MzUwNTEwYTk0MjA3MQorICAgICAgICBodHRwOi8vY3Ji
dWcuY29tLzc1MjczMDAyCisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9ibGluay8rLzNlMmM2Nzk2OTQ4NmU4NjM0N2IzMjhjNzJjNjdjYWNhYmZlNmY0
YTEKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS8xMzQxNzMwMDIKKyAgICAgICAgaHR0cHM6Ly9j
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvNTk2MmI3YmJiMDAxODM4
ZjNmYzdmMjQ4MTc2Mzc1MjhiODZiZmQ5YgorICAgICAgICBodHRwOi8vY3JidWcuY29tLzEzNDE1
MzAwMgorICAgICAgICBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
YmxpbmsvKy82YzgxZjUxNDM4MDEzZWRjYTkyMGExOWZjNmEzMTAyNmZjNTYyYWYyCisgICAgICAg
IGh0dHA6Ly9jcmJ1Zy5jb20vMTM3MDMzMDAyCisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL2ZhMjg2ZGNhMTdhMjkxZGEzYWU4YmU4MDEx
MWUyMjY0ZGU2ZDVjZmQKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS8xNDA1MDMwMDQKKyAgICAg
ICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvOGYz
M2I2M2FhYmNjZTdkZDIxZGQxNTI4OGQ0NWM0ZWIzN2MwMjAwMQorICAgICAgICBodHRwOi8vY3Ji
dWcuY29tLzEzOTM0MzAwNgorICAgICAgICBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vYmxpbmsvKy8xODcyYjU0YjkwOGZhYzUyNWYxYWQ5ZDZmMTUxNzRiMTFlMjdj
OGFmCisgICAgICAgIGh0dHA6Ly9jcmJ1Zy5jb20vMTQzOTgzMDAyCisgICAgICAgIGh0dHBzOi8v
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL2U2NDk0YjMzNTllMjA3
N2JkODc3MmQ4NmFiMWZiNzA5YWNmNGMzOTgKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS8xNDQ4
OTMwMDIKKyAKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6Cisg
ICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL3Ry
YWNrL1BhcnNpbmdVdGlsaXRpZXMuaDogQWRkZWQuCisgICAgICAgIChza2lwRXhhY3RseSk6Cisg
ICAgICAgIChza2lwVW50aWwpOgorICAgICAgICAoc2tpcFdoaWxlKToKKyAgICAgICAgKiBodG1s
L3RyYWNrL1ZUVEN1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWVFRDdWU6Om1hcmtGdXR1cmVB
bmRQYXN0Tm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6VlRUQ3VlOjpzZXR0aW5nTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY2FuUGVyY2VudGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpWVFRD
dWU6OnNldEN1ZVNldHRpbmdzKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1ZUVEN1ZS5oOgorICAg
ICAgICAqIGh0bWwvdHJhY2svVlRUUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZUVFJl
Z2lvbjo6c2V0UmVnaW9uU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6VlRUUmVnaW9uOjpz
Y2FuU2V0dGluZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VkRW50aXJlUnVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZUVFJlZ2lvbjo6cGFyc2VTZXR0aW5nVmFsdWUpOgorICAgICAgICAq
IGh0bWwvdHJhY2svVlRUUmVnaW9uLmg6CisgICAgICAgICogaHRtbC90cmFjay9WVFRTY2FubmVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWVFRTY2FubmVyOjpWVFRTY2FubmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlZUVFNjYW5uZXI6OnNjYW4pOgorICAgICAgICAoV2ViQ29yZTo6
VlRUU2Nhbm5lcjo6c2NhblJ1bik6CisgICAgICAgIChXZWJDb3JlOjpWVFRTY2FubmVyOjpza2lw
UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlZUVFNjYW5uZXI6OmV4dHJhY3RTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6VlRUU2Nhbm5lcjo6cmVzdE9mSW5wdXRBc1N0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpWVFRTY2FubmVyOjpzY2FuRGlnaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlZU
VFNjYW5uZXI6OnNjYW5GbG9hdCk6CisgICAgICAgICogaHRtbC90cmFjay9WVFRTY2FubmVyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VlRUU2Nhbm5lcjo6UnVuOjpSdW4pOgorICAgICAg
ICAoV2ViQ29yZTo6VlRUU2Nhbm5lcjo6UnVuOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpW
VFRTY2FubmVyOjpSdW46OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpWVFRTY2FubmVyOjpSdW46
OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6VlRUU2Nhbm5lcjo6aXNBdCk6CisgICAgICAg
IChXZWJDb3JlOjpWVFRTY2FubmVyOjppc0F0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlZUVFNj
YW5uZXI6Om1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlZUVFNjYW5uZXI6OnBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlZUVFNjYW5uZXI6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpW
VFRTY2FubmVyOjpMQ2hhclByZWRpY2F0ZUFkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VlRU
U2Nhbm5lcjo6UnVuOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6VlRUU2Nhbm5lcjo6c2Nh
bik6CisgICAgICAgIChXZWJDb3JlOjpWVFRTY2FubmVyOjpza2lwV2hpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6VlRUU2Nhbm5lcjo6c2tpcFVudGlsKToKKyAgICAgICAgKFdlYkNvcmU6OlZUVFNj
YW5uZXI6OmNvbGxlY3RXaGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpWVFRTY2FubmVyOjpjb2xs
ZWN0VW50aWwpOgorICAgICAgICAoV2ViQ29yZTo6VlRUU2Nhbm5lcjo6c2Vla1RvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZUVFNjYW5uZXI6OmN1cnJlbnRDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlZUVFNjYW5uZXI6OmFkdmFuY2UpOgorICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6cGFyc2VGbG9hdFBlcmNlbnRh
Z2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJj
ZW50YWdlVmFsdWVQYWlyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBhcnNlcjo6Y29sbGVj
dFRpbWluZ3NBbmRTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OmNv
bGxlY3RUaW1lU3RhbXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUVHJlZUJ1aWxkZXI6OmNv
bnN0cnVjdFRyZWVGcm9tVG9rZW4pOgorICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2Vy
Lmg6CisKIDIwMTQtMDMtMjEgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUHNldWRvIHR5cGUgY2xlYW51cCBwYXJ0IDI6IHNwbGl0IHBzZXVkbyBlbGVt
ZW50cyBwYXJzaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTY2MDc5KQor
KysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI3NDIs
NiArMjc0Miw3IEBAIGlmIChFTkFCTEVfVklERU9fVFJBQ0spCiAgICAgICAgIGh0bWwvdHJhY2sv
VmlkZW9UcmFjay5jcHAKICAgICAgICAgaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHAKICAg
ICAgICAgaHRtbC90cmFjay9WVFRDdWUuY3BwCisgICAgICAgIGh0bWwvdHJhY2svVlRUU2Nhbm5l
ci5jcHAKICAgICAgICAgaHRtbC90cmFjay9XZWJWVFRFbGVtZW50LmNwcAogICAgICAgICBodG1s
L3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKICAgICAgICAgaHRtbC90cmFjay9XZWJWVFRUb2tlbml6
ZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE2NjA3
OSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTM2OTQsNiArMzY5NCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9JbmJhbmRXZWJWVFRUZXh0VHJhY2suaCBcCiAJU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svTG9hZGFibGVUZXh0VHJhY2suaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Q
YXJzaW5nVXRpbGl0aWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaCBcCiAJU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwIFwKQEAgLTM3MTgsNiArMzcxOSw4
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRl
b1RyYWNrTGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmggXAorCVNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVlRUU2Nhbm5lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRU
U2Nhbm5lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVEVsZW1lbnQuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVEVsZW1lbnQuaCBcCiAJU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTY2MDc5
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTU4NDksNiArMTU4NDksNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caHRtbFx0cmFja1xUcmFja0Jhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caHRtbFx0cmFja1xUcmFja0V2ZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGh0bWxcdHJhY2tcVlRUQ3VlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGh0bWxcdHJhY2tcVlRUU2Nhbm5lci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxodG1sXHRyYWNrXFdlYlZUVFBhcnNlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxodG1sXHRyYWNrXFdlYlZUVFRva2VuaXplci5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xnZW5lcmljXEFjdGl2ZURPTUNhbGxiYWNrLmNwcCIgLz4K
QEAgLTIwNTkxLDYgKzIwNTkyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxc
dHJhY2tcSW5iYW5kVGV4dFRyYWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
dG1sXHRyYWNrXEluYmFuZFdlYlZUVFRleHRUcmFjay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caHRtbFx0cmFja1xMb2FkYWJsZVRleHRUcmFjay5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xQYXJzaW5nVXRpbGl0aWVzLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHRyYWNrXFRleHRUcmFjay5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xUZXh0VHJhY2tDdWUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcVGV4dFRyYWNrQ3VlTGlzdC5oIiAvPgpAQCAt
MjA1OTgsNiArMjA2MDAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFj
a1xUcmFja0Jhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tc
VHJhY2tFdmVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xW
VFRDdWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcVlRUU2Nh
bm5lci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xXZWJWVFRQ
YXJzZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcV2ViVlRU
VG9rZW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcV2ViVlRU
VG9rZW5pemVyLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNjYwNzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHdv
cmtpbmcgY29weSkKQEAgLTQyMDAsNiArNDIwMCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxodG1sXHRyYWNrXFZUVEN1ZS5jcHAiPgogICAgICAgPEZpbHRlcj5odG1sXHRyYWNrPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1s
XHRyYWNrXFZUVFNjYW5uZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aHRtbFx0cmFjazwvRmlsdGVy
PgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFx0cmFj
a1xXZWJWVFRQYXJzZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+aHRtbFx0cmFjazwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgpAQCAtMTEyNDIsNiArMTEyNDUsOSBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caHRtbFx0cmFja1xMb2FkYWJsZVRleHRUcmFjay5oIj4KICAgICAgIDxGaWx0
ZXI+aHRtbFx0cmFjazwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caHRtbFx0cmFja1xQYXJzaW5nVXRpbGl0aWVzLmgiPgorICAgICAgPEZpbHRl
cj5odG1sXHRyYWNrPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxodG1sXHRyYWNrXFRleHRUcmFjay5oIj4KICAgICAgIDxGaWx0ZXI+aHRtbFx0
cmFjazwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMTEyNjMsNiArMTEyNjksOSBAQAog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFx0cmFja1xWVFRDdWUuaCI+CiAgICAgICA8
RmlsdGVyPmh0bWxcdHJhY2s8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGh0bWxcdHJhY2tcVlRUU2Nhbm5lci5oIj4KKyAgICAgIDxGaWx0ZXI+
aHRtbFx0cmFjazwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caHRtbFx0cmFja1xXZWJWVFRQYXJzZXIuaCI+CiAgICAgICA8RmlsdGVyPmh0bWxc
dHJhY2s8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NjA3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjI5Niw2ICsyMjk2LDkgQEAKIAkJN0E3NEVDQkExMDE4MzlBNjAwQkY5
MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0RUNCODEwMTgzOUE1MDBCRjkzOUUgLyogSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCAqLzsgfTsKIAkJN0E3NEVDQkIxMDE4MzlBNjAwQkY5
MzlFIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3NEVDQjkxMDE4MzlBNjAwQkY5MzlFIC8qIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5oICovOyB9OwogCQk3QTc0RUNCRDEwMTgzOURBMDBCRjkzOUUg
LyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3NEVDQkMxMDE4MzlEQTAwQkY5MzlFIC8qIEpT
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCAqLzsgfTsKKwkJN0E5Mzg2ODQxOERDQzE0
NTAwQjgyNjNEIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBOTM4NjgxMThEQ0MxNDUwMEI4MjYzRCAvKiBQYXJzaW5n
VXRpbGl0aWVzLmggKi87IH07CisJCTdBOTM4Njg1MThEQ0MxNDUwMEI4MjYzRCAvKiBWVFRTY2Fu
bmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdB
OTM4NjgyMThEQ0MxNDUwMEI4MjYzRCAvKiBWVFRTY2FubmVyLmNwcCAqLzsgfTsKKwkJN0E5Mzg2
ODYxOERDQzE0NTAwQjgyNjNEIC8qIFZUVFNjYW5uZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBOTM4NjgzMThEQ0MxNDUwMEI4MjYzRCAvKiBWVFRT
Y2FubmVyLmggKi87IH07CiAJCTdBQUJBMjU5MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FBQkEy
NTcxNEJDNjEzMzAwQUE5QTExIC8qIERPTUVkaXRvci5jcHAgKi87IH07CiAJCTdBQUJBMjVBMTRC
QzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdBQUJBMjU4MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3Iu
aCAqLzsgfTsKIAkJN0FCMEIxQzAxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0FCMEIxQkUxMjExQTYyMjAwQTc2OTQwIC8qIEluc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwICov
OyB9OwpAQCAtOTMwMSw2ICs5MzA0LDkgQEAKIAkJN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8q
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTc0RUNCQzEw
MTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTkzODY4MTE4RENDMTQ1
MDBCODI2M0QgLyogUGFyc2luZ1V0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYXJzaW5nVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdBOTM4NjgyMThEQ0MxNDUwMEI4MjYzRCAvKiBWVFRTY2FubmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUVFNjYW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3QTkzODY4MzE4RENDMTQ1MDBCODI2M0QgLyogVlRUU2Nhbm5lci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVFRTY2FubmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NRWRpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBQkEyNTgxNEJDNjEzMzAwQUE5QTExIC8q
IERPTUVkaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01FZGl0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCMEIxQkUxMjExQTYyMjAwQTc2OTQw
IC8qIEluc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTI1Miw2ICsxOTI1OCw3IEBACiAJCUIxQUQ0RTc3MTNBMTJBNzIwMDg0
NkIyNyAvKiB0cmFjayAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJN0E5Mzg2ODExOERDQzE0NTAwQjgyNjNEIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCAqLywK
IAkJCQk3QTQ1MDMyRDE4REI3MTcyMDAzNzdCMzQgLyogQnVmZmVyZWRMaW5lUmVhZGVyLmNwcCAq
LywKIAkJCQk3QTQ1MDMyRTE4REI3MTcyMDAzNzdCMzQgLyogQnVmZmVyZWRMaW5lUmVhZGVyLmgg
Ki8sCiAJCQkJQkU4OEUwQ0MxNzE1RDJBMjAwNjU4RDk4IC8qIEF1ZGlvVHJhY2suY3BwICovLApA
QCAtMTkzMDcsNiArMTkzMTQsOCBAQAogCQkJCUJFMjA1MDc2MThBNDU4NDYwMDgwNjQ3RSAvKiBW
VFRDdWUuY3BwICovLAogCQkJCUJFMjA1MDc3MThBNDU4NDYwMDgwNjQ3RSAvKiBWVFRDdWUuaCAq
LywKIAkJCQlCRTIwNTA3ODE4QTQ1ODQ2MDA4MDY0N0UgLyogVlRUQ3VlLmlkbCAqLywKKwkJCQk3
QTkzODY4MjE4RENDMTQ1MDBCODI2M0QgLyogVlRUU2Nhbm5lci5jcHAgKi8sCisJCQkJN0E5Mzg2
ODMxOERDQzE0NTAwQjgyNjNEIC8qIFZUVFNjYW5uZXIuaCAqLywKIAkJCQlGMTIxNzFGMzE2QThC
QzYzMDAwMDUzQ0EgLyogV2ViVlRURWxlbWVudC5jcHAgKi8sCiAJCQkJRjEyMTcxRjQxNkE4QkM2
MzAwMDA1M0NBIC8qIFdlYlZUVEVsZW1lbnQuaCAqLywKIAkJCQk1RDIxQTgwMDEzRUNFNURGMDBC
QjcwNjQgLyogV2ViVlRUUGFyc2VyLmNwcCAqLywKQEAgLTIzOTE1LDYgKzIzOTI0LDcgQEAKIAkJ
CQlBODcxREUyQjBBMTUyQUM4MDBCMTJBNjggLyogSFRNTEZyYW1lRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRGRkUzMUQwQUUxOTYzMzAwMTM2QkY1IC8qIEhUTUxGcmFtZUVsZW1lbnRC
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0UyNDFGRjBCMkI0RTQwMDBDNzMyQTEgLyogSFRN
TEZyYW1lT3duZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QTkzODY4NDE4RENDMTQ1
MDBCODI2M0QgLyogUGFyc2luZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURF
MjgwQTE1MkFDODAwQjEyQTY4IC8qIEhUTUxGcmFtZVNldEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4NzFERTJEMEExNTJBQzgwMEIxMkE2OCAvKiBIVE1MSGVhZEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4RUE3Q0I4MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MSGVhZGluZ0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjU1NjUsNiArMjU1NzUsNyBAQAogCQkJCTY1NjUz
RjJFMEQ5NzI3RDIwMENBOTcyMyAvKiBTVkdBbHRHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI0RDkxMkI4MTNDQTlBNjkwMEQyMTkxNSAvKiBTVkdBbHRHbHlwaEl0ZW1FbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk3NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5n
bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdBOTM4Njg2MThEQ0MxNDUwMEI4MjYzRCAvKiBWVFRT
Y2FubmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk3QTBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg3Qjg0OTYxMjcy
Q0VDODAwQTE0NDE3IC8qIFNWR0FuaW1hdGVkQW5nbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
NTc5NzA5MTI3ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRlZEJvb2xlYW4uaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY1NjcsNiArMjY1NzgsNyBAQAogCQkJCUZEMzE2MDg3MTJCMDI2RjcwMEMxQTM1
OSAvKiBBdWRpb1Jlc2FtcGxlcktlcm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDhDNDZF
QjE1NDYwOEU3MDBBNTkxMEMgLyogQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEQTc5ODI0MTcwQTI1ODMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJN0E5Mzg2ODUxOERDQzE0NTAwQjgyNjNEIC8qIFZUVFNjYW5u
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNzk4MjcxNzBBMjc5MTAwRDQ1QzU1IC8qIEF1
ZGlvU2Vzc2lvbklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENTRERTRCMTc0NjlDNkQwMDVF
NUIzNiAvKiBBdWRpb1Nlc3Npb25NYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdDNTlCNTMx
N0Y0QUMxNTAwMEZCQ0JCIC8qIEF1ZGlvU3RyZWFtVHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1BhcnNpbmdVdGlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1BhcnNpbmdVdGlsaXRpZXMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svUGFyc2luZ1V0aWxpdGllcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhcnNpbmdVdGlsaXRpZXNf
aAorI2RlZmluZSBQYXJzaW5nVXRpbGl0aWVzX2gKKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5
cGU+Citib29sIHNraXBFeGFjdGx5KGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENo
YXJUeXBlKiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKK3sKKyAgICBpZiAocG9zaXRpb24gPCBl
bmQgJiYgKnBvc2l0aW9uID09IGRlbGltaXRlcikgeworICAgICAgICArK3Bvc2l0aW9uOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyVHlwZSwgYm9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoQ2hhclR5cGUpPgor
Ym9vbCBza2lwRXhhY3RseShjb25zdCBDaGFyVHlwZSomIHBvc2l0aW9uLCBjb25zdCBDaGFyVHlw
ZSogZW5kKQoreworICAgIGlmIChwb3NpdGlvbiA8IGVuZCAmJiBjaGFyYWN0ZXJQcmVkaWNhdGUo
KnBvc2l0aW9uKSkgeworICAgICAgICArK3Bvc2l0aW9uOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlw
ZT4KK3ZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJU
eXBlKiBlbmQsIENoYXJUeXBlIGRlbGltaXRlcikKK3sKKyAgICB3aGlsZSAocG9zaXRpb24gPCBl
bmQgJiYgKnBvc2l0aW9uICE9IGRlbGltaXRlcikKKyAgICAgICAgKytwb3NpdGlvbjsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJU
eXBlKT4KK3ZvaWQgc2tpcFVudGlsKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENo
YXJUeXBlKiBlbmQpCit7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmICFjaGFyYWN0ZXJQ
cmVkaWNhdGUoKnBvc2l0aW9uKSkKKyAgICAgICAgKytwb3NpdGlvbjsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclR5cGUsIGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKENoYXJUeXBlKT4KK3Zv
aWQgc2tpcFdoaWxlKGNvbnN0IENoYXJUeXBlKiYgcG9zaXRpb24sIGNvbnN0IENoYXJUeXBlKiBl
bmQpCit7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmIGNoYXJhY3RlclByZWRpY2F0ZSgq
cG9zaXRpb24pKQorICAgICAgICArK3Bvc2l0aW9uOworfQorCisjZW5kaWYKKwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcAkocmV2aXNpb24gMTY2MDc5KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
Niw3IEBACiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRUcmFjay5oIgogI2luY2x1
ZGUgIlRleHRUcmFja0N1ZUxpc3QuaCIKKyNpbmNsdWRlICJWVFRTY2FubmVyLmgiCiAjaW5jbHVk
ZSAiV2ViVlRURWxlbWVudC5oIgogI2luY2x1ZGUgIldlYlZUVFBhcnNlci5oIgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC02OTQsMTAgKzY5NSw4IEBAIHZvaWQgVlRUQ3VlOjptYXJr
RnV0dXJlQW5kUGFzdE5vZGVzKENvbnQKICAgICAKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gcm9v
dC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGNoaWxk
LCByb290KSkgewogICAgICAgICBpZiAoY2hpbGQtPm5vZGVOYW1lKCkgPT0gdGltZXN0YW1wVGFn
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICBTdHJp
bmcgdGltZXN0YW1wID0gY2hpbGQtPm5vZGVWYWx1ZSgpOwogICAgICAgICAgICAgZG91YmxlIGN1
cnJlbnRUaW1lc3RhbXA7Ci0gICAgICAgICAgICBib29sIGNoZWNrID0gV2ViVlRUUGFyc2VyOjpj
b2xsZWN0VGltZVN0YW1wKHRpbWVzdGFtcCwgcG9zaXRpb24sIGN1cnJlbnRUaW1lc3RhbXApOwor
ICAgICAgICAgICAgYm9vbCBjaGVjayA9IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChj
aGlsZC0+bm9kZVZhbHVlKCksIGN1cnJlbnRUaW1lc3RhbXApOwogICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChjaGVjaywgY2hlY2spOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoY3Vy
cmVudFRpbWVzdGFtcCA+IG1vdmllVGltZSkKQEAgLTgzMiwzNyArODMxLDMyIEBAIHN0ZDo6cGFp
cjxkb3VibGUsIGRvdWJsZT4gVlRUQ3VlOjpnZXRQb3MKICAgICByZXR1cm4gY29vcmRpbmF0ZXM7
CiB9CiAKLVZUVEN1ZTo6Q3VlU2V0dGluZyBWVFRDdWU6OnNldHRpbmdOYW1lKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK1ZUVEN1ZTo6Q3VlU2V0dGluZyBWVFRDdWU6OnNldHRpbmdOYW1lKFZUVFNjYW5u
ZXImIGlucHV0KQogewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBT
dHJpbmcsIHZlcnRpY2FsS2V5d29yZCwgKEFTQ0lJTGl0ZXJhbCgidmVydGljYWwiKSkpOwotICAg
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGxpbmVLZXl3b3Jk
LCAoQVNDSUlMaXRlcmFsKCJsaW5lIikpKTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgU3RyaW5nLCBwb3NpdGlvbktleXdvcmQsIChBU0NJSUxpdGVyYWwoInBvc2l0
aW9uIikpKTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5n
LCBzaXplS2V5d29yZCwgKEFTQ0lJTGl0ZXJhbCgic2l6ZSIpKSk7Ci0gICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgYWxpZ25LZXl3b3JkLCAoQVNDSUlMaXRl
cmFsKCJhbGlnbiIpKSk7CisgICAgQ3VlU2V0dGluZyBwYXJzZWRTZXR0aW5nID0gTm9uZTsKKyAg
ICBpZiAoaW5wdXQuc2NhbigidmVydGljYWwiKSkKKyAgICAgICAgcGFyc2VkU2V0dGluZyA9IFZl
cnRpY2FsOworICAgIGVsc2UgaWYgKGlucHV0LnNjYW4oImxpbmUiKSkKKyAgICAgICAgcGFyc2Vk
U2V0dGluZyA9IExpbmU7CisgICAgZWxzZSBpZiAoaW5wdXQuc2NhbigicG9zaXRpb24iKSkKKyAg
ICAgICAgcGFyc2VkU2V0dGluZyA9IFBvc2l0aW9uOworICAgIGVsc2UgaWYgKGlucHV0LnNjYW4o
InNpemUiKSkKKyAgICAgICAgcGFyc2VkU2V0dGluZyA9IFNpemU7CisgICAgZWxzZSBpZiAoaW5w
dXQuc2NhbigiYWxpZ24iKSkKKyAgICAgICAgcGFyc2VkU2V0dGluZyA9IEFsaWduOwogI2lmIEVO
QUJMRShXRUJWVFRfUkVHSU9OUykKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCByZWdpb25JZEtleXdvcmQsIChBU0NJSUxpdGVyYWwoInJlZ2lvbiIpKSk7
Ci0jZW5kaWYKLQotICAgIGlmIChuYW1lID09IHZlcnRpY2FsS2V5d29yZCkKLSAgICAgICAgcmV0
dXJuIFZlcnRpY2FsOwotICAgIGlmIChuYW1lID09IGxpbmVLZXl3b3JkKQotICAgICAgICByZXR1
cm4gTGluZTsKLSAgICBpZiAobmFtZSA9PSBwb3NpdGlvbktleXdvcmQpCi0gICAgICAgIHJldHVy
biBQb3NpdGlvbjsKLSAgICBpZiAobmFtZSA9PSBzaXplS2V5d29yZCkKLSAgICAgICAgcmV0dXJu
IFNpemU7Ci0gICAgaWYgKG5hbWUgPT0gYWxpZ25LZXl3b3JkKQotICAgICAgICByZXR1cm4gQWxp
Z247Ci0jaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQotICAgIGlmIChuYW1lID09IHJlZ2lvbklk
S2V5d29yZCkKLSAgICAgICAgcmV0dXJuIFJlZ2lvbklkOworICAgIGVsc2UgaWYgKGlucHV0LnNj
YW4oInJlZ2lvbiIpKQorICAgICAgICBwYXJzZWRTZXR0aW5nID0gUmVnaW9uSWQ7CiAjZW5kaWYK
KyAgICAvLyBWZXJpZnkgdGhhdCBhICc6JyBmb2xsb3dzLgorICAgIGlmIChwYXJzZWRTZXR0aW5n
ICE9IE5vbmUgJiYgaW5wdXQuc2NhbignOicpKQorICAgICAgICByZXR1cm4gcGFyc2VkU2V0dGlu
ZzsKIAogICAgIHJldHVybiBOb25lOwogfQogCiAvLyBVc2VkIGZvciAncG9zaXRpb24nIGFuZCAn
c2l6ZScuCi1zdGF0aWMgYm9vbCBzY2FuUGVyY2VudGFnZShjb25zdCBTdHJpbmcmIGlucHV0LCB1
bnNpZ25lZCYgcG9zaXRpb24sIGludCYgbnVtYmVyKQorc3RhdGljIGJvb2wgc2NhblBlcmNlbnRh
Z2UoVlRUU2Nhbm5lciYgaW5wdXQsIGNvbnN0IFZUVFNjYW5uZXI6OlJ1biYgdmFsdWVSdW4sIGlu
dCYgbnVtYmVyKQogewogICAgIC8vIDEuIElmIHZhbHVlIGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJz
IG90aGVyIHRoYW4gVSswMDI1IFBFUkNFTlQgU0lHTgogICAgIC8vICAgIGNoYXJhY3RlcnMgKCUp
IGFuZCBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBVKzAwMzAgRElHSVQgWkVSTyAoMCkgdG8KQEAg
LTg3MCw5ICs4NjQsNyBAQCBzdGF0aWMgYm9vbCBzY2FuUGVyY2VudGFnZShjb25zdCBTdHJpbmcm
CiAgICAgLy8gMi4gSWYgdmFsdWUgZG9lcyBub3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFj
dGVyIGluIHRoZSByYW5nZSBVKzAwMzAKICAgICAvLyAgICBESUdJVCBaRVJPICgwKSB0byBVKzAw
MzkgRElHSVQgTklORSAoOSksIHRoZW4ganVtcCB0byB0aGUgc3RlcAogICAgIC8vICAgIGxhYmVs
ZWQgbmV4dCBzZXR0aW5nLgotICAgIGlmICghV2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzVG9J
bnQoaW5wdXQsIHBvc2l0aW9uLCBudW1iZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQorICAgIGlmICghaW5wdXQuc2NhbkRpZ2l0
cyhudW1iZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyAzLiBJZiBhbnkgY2hh
cmFjdGVyIGluIHZhbHVlIG90aGVyIHRoYW4gdGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEgVSswMDI1
CkBAIC04ODAsOSArODcyLDcgQEAgc3RhdGljIGJvb2wgc2NhblBlcmNlbnRhZ2UoY29uc3QgU3Ry
aW5nJgogICAgIC8vICAgIHNldHRpbmcuCiAgICAgLy8gNC4gSWYgdGhlIGxhc3QgY2hhcmFjdGVy
IGluIHZhbHVlIGlzIG5vdCBhIFUrMDAyNSBQRVJDRU5UIFNJR04gY2hhcmFjdGVyCiAgICAgLy8g
ICAgKCUpLCB0aGVuIGp1bXAgdG8gdGhlIHN0ZXAgbGFiZWxlZCBuZXh0IHNldHRpbmcuCi0gICAg
aWYgKGlucHV0W3Bvc2l0aW9uKytdICE9ICclJykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmICFXZWJWVFRQYXJzZXI6OmlzVmFsaWRT
ZXR0aW5nRGVsaW1pdGVyKGlucHV0W3Bvc2l0aW9uXSkpCisgICAgaWYgKCFpbnB1dC5zY2FuKCcl
JykgfHwgIWlucHV0LmlzQXQodmFsdWVSdW4uZW5kKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyA1LiBJZ25vcmluZyB0aGUgdHJhaWxpbmcgcGVyY2VudCBzaWduLCBpbnRlcnBy
ZXQgdmFsdWUgYXMgYW4gaW50ZWdlciwKQEAgLTg5MiwxOCArODgyLDE2IEBAIHN0YXRpYyBib29s
IHNjYW5QZXJjZW50YWdlKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbnVtYmVyID49IDAgJiYg
bnVtYmVyIDw9IDEwMDsKIH0KIAotdm9pZCBWVFRDdWU6OnNldEN1ZVNldHRpbmdzKGNvbnN0IFN0
cmluZyYgaW5wdXQpCit2b2lkIFZUVEN1ZTo6c2V0Q3VlU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBp
bnB1dFN0cmluZykKIHsKLSAgICBtX3NldHRpbmdzID0gaW5wdXQ7Ci0gICAgdW5zaWduZWQgcG9z
aXRpb24gPSAwOworICAgIFZUVFNjYW5uZXIgaW5wdXQoaW5wdXRTdHJpbmcpOwogCi0gICAgd2hp
bGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKCkpIHsKKyAgICB3aGlsZSAoIWlucHV0LmlzQXRF
bmQoKSkgewogCiAgICAgICAgIC8vIFRoZSBXZWJWVFQgY3VlIHNldHRpbmdzIHBhcnQgb2YgYSBX
ZWJWVFQgY3VlIGNvbnNpc3RzIG9mIHplcm8gb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGNvbXBv
bmVudHMsIGluIGFueSBvcmRlciwgCi0gICAgICAgIC8vIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3Ro
ZXIgYnkgb25lIG9yIG1vcmUgVSswMDIwIFNQQUNFIGNoYXJhY3RlcnMgb3IgVSswMDA5IENIQVJB
Q1RFUiBUQUJVTEFUSU9OICh0YWIpIGNoYXJhY3RlcnMuIAotICAgICAgICB3aGlsZSAocG9zaXRp
b24gPCBpbnB1dC5sZW5ndGgoKSAmJiBXZWJWVFRQYXJzZXI6OmlzVmFsaWRTZXR0aW5nRGVsaW1p
dGVyKGlucHV0W3Bvc2l0aW9uXSkpCi0gICAgICAgICAgICBwb3NpdGlvbisrOwotICAgICAgICBp
ZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKCkpCisgICAgICAgIC8vIHNlcGFyYXRlZCBmcm9t
IGVhY2ggb3RoZXIgYnkgb25lIG9yIG1vcmUgVSswMDIwIFNQQUNFIGNoYXJhY3RlcnMgb3IgVSsw
MDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OICh0YWIpIGNoYXJhY3RlcnMuCisgICAgICAgIGlucHV0
LnNraXBXaGlsZTxXZWJWVFRQYXJzZXI6OmlzVmFsaWRTZXR0aW5nRGVsaW1pdGVyPigpOworICAg
ICAgICBpZiAoaW5wdXQuaXNBdEVuZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
Ly8gV2hlbiB0aGUgdXNlciBhZ2VudCBpcyB0byBwYXJzZSB0aGUgV2ViVlRUIHNldHRpbmdzIGdp
dmVuIGJ5IGEgc3RyaW5nIGlucHV0IGZvciBhIHRleHQgdHJhY2sgY3VlIGN1ZSwgCkBAIC05MTIs
MjAgKzkwMCwxMSBAQCB2b2lkIFZUVEN1ZTo6c2V0Q3VlU2V0dGluZ3MoY29uc3QgU3RyaW5nCiAg
ICAgICAgIC8vIDIuIEZvciBlYWNoIHRva2VuIHNldHRpbmcgaW4gdGhlIGxpc3Qgc2V0dGluZ3Ms
IHJ1biB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzOgogICAgICAgICAvLyAgICAxLiBJZiBzZXR0aW5n
IGRvZXMgbm90IGNvbnRhaW4gYSBVKzAwM0EgQ09MT04gY2hhcmFjdGVyICg6KSwgb3IgaWYgdGhl
IGZpcnN0IFUrMDAzQSBDT0xPTiBjaGFyYWN0ZXIgKDopIAogICAgICAgICAvLyAgICAgICBpbiBz
ZXR0aW5nIGlzIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgb2Ygc2V0dGluZywg
dGhlbiBqdW1wIHRvIHRoZSBzdGVwIGxhYmVsZWQgbmV4dCBzZXR0aW5nLgotICAgICAgICB1bnNp
Z25lZCBlbmRPZlNldHRpbmcgPSBwb3NpdGlvbjsKLSAgICAgICAgU3RyaW5nIHNldHRpbmcgPSBX
ZWJWVFRQYXJzZXI6OmNvbGxlY3RXb3JkKGlucHV0LCAmZW5kT2ZTZXR0aW5nKTsKLSAgICAgICAg
Q3VlU2V0dGluZyBuYW1lOwotICAgICAgICBzaXplX3QgY29sb25PZmZzZXQgPSBzZXR0aW5nLmZp
bmQoJzonLCAxKTsKLSAgICAgICAgaWYgKGNvbG9uT2Zmc2V0ID09IG5vdEZvdW5kIHx8ICFjb2xv
bk9mZnNldCB8fCBjb2xvbk9mZnNldCA9PSBzZXR0aW5nLmxlbmd0aCgpIC0gMSkKLSAgICAgICAg
ICAgIGdvdG8gTmV4dFNldHRpbmc7Ci0KLSAgICAgICAgLy8gMi4gTGV0IG5hbWUgYmUgdGhlIGxl
YWRpbmcgc3Vic3RyaW5nIG9mIHNldHRpbmcgdXAgdG8gYW5kIGV4Y2x1ZGluZyB0aGUgZmlyc3Qg
VSswMDNBIENPTE9OIGNoYXJhY3RlciAoOikgaW4gdGhhdCBzdHJpbmcuCi0gICAgICAgIG5hbWUg
PSBzZXR0aW5nTmFtZShzZXR0aW5nLnN1YnN0cmluZygwLCBjb2xvbk9mZnNldCkpOworICAgICAg
ICAvLyAgICAyLiBMZXQgbmFtZSBiZSB0aGUgbGVhZGluZyBzdWJzdHJpbmcgb2Ygc2V0dGluZyB1
cCB0byBhbmQgZXhjbHVkaW5nIHRoZSBmaXJzdCBVKzAwM0EgQ09MT04gY2hhcmFjdGVyICg6KSBp
biB0aGF0IHN0cmluZy4KKyAgICAgICAgQ3VlU2V0dGluZyBuYW1lID0gc2V0dGluZ05hbWUoaW5w
dXQpOwogCiAgICAgICAgIC8vIDMuIExldCB2YWx1ZSBiZSB0aGUgdHJhaWxpbmcgc3Vic3RyaW5n
IG9mIHNldHRpbmcgc3RhcnRpbmcgZnJvbSB0aGUgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGFmdGVy
IHRoZSBmaXJzdCBVKzAwM0EgQ09MT04gY2hhcmFjdGVyICg6KSBpbiB0aGF0IHN0cmluZy4KLSAg
ICAgICAgcG9zaXRpb24gKz0gY29sb25PZmZzZXQgKyAxOwotICAgICAgICBpZiAocG9zaXRpb24g
Pj0gaW5wdXQubGVuZ3RoKCkpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVlRUU2Nhbm5l
cjo6UnVuIHZhbHVlUnVuID0gaW5wdXQuY29sbGVjdFVudGlsPFdlYlZUVFBhcnNlcjo6aXNWYWxp
ZFNldHRpbmdEZWxpbWl0ZXI+KCk7CiAKICAgICAgICAgLy8gNC4gUnVuIHRoZSBhcHByb3ByaWF0
ZSBzdWJzdGVwcyB0aGF0IGFwcGx5IGZvciB0aGUgdmFsdWUgb2YgbmFtZSwgYXMgZm9sbG93czoK
ICAgICAgICAgc3dpdGNoIChuYW1lKSB7CkBAIC05MzMsMTMgKzkxMiwxMiBAQCB2b2lkIFZUVEN1
ZTo6c2V0Q3VlU2V0dGluZ3MoY29uc3QgU3RyaW5nCiAgICAgICAgICAgICAvLyBJZiBuYW1lIGlz
IGEgY2FzZS1zZW5zaXRpdmUgbWF0Y2ggZm9yICJ2ZXJ0aWNhbCIKICAgICAgICAgICAgIC8vIDEu
IElmIHZhbHVlIGlzIGEgY2FzZS1zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSBzdHJpbmcgInJsIiwg
dGhlbiBsZXQgY3VlJ3MgdGV4dCB0cmFjayBjdWUgd3JpdGluZyBkaXJlY3Rpb24gCiAgICAgICAg
ICAgICAvLyAgICBiZSB2ZXJ0aWNhbCBncm93aW5nIGxlZnQuCi0gICAgICAgICAgICBTdHJpbmcg
d3JpdGluZ0RpcmVjdGlvbiA9IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdvcmQoaW5wdXQsICZwb3Np
dGlvbik7Ci0gICAgICAgICAgICBpZiAod3JpdGluZ0RpcmVjdGlvbiA9PSB2ZXJ0aWNhbEdyb3dp
bmdMZWZ0S2V5d29yZCgpKQorICAgICAgICAgICAgaWYgKGlucHV0LnNjYW5SdW4odmFsdWVSdW4s
IHZlcnRpY2FsR3Jvd2luZ0xlZnRLZXl3b3JkKCkpKQogICAgICAgICAgICAgICAgIG1fd3JpdGlu
Z0RpcmVjdGlvbiA9IFZlcnRpY2FsR3Jvd2luZ0xlZnQ7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdmFsdWUgaXMgYSBjYXNlLXNlbnNpdGl2ZSBtYXRjaCBm
b3IgdGhlIHN0cmluZyAibHIiLCB0aGVuIGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSB3cml0aW5n
IAogICAgICAgICAgICAgLy8gICAgZGlyZWN0aW9uIGJlIHZlcnRpY2FsIGdyb3dpbmcgcmlnaHQu
Ci0gICAgICAgICAgICBlbHNlIGlmICh3cml0aW5nRGlyZWN0aW9uID09IHZlcnRpY2FsR3Jvd2lu
Z1JpZ2h0S2V5d29yZCgpKQorICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXQuc2NhblJ1bih2YWx1
ZVJ1biwgdmVydGljYWxHcm93aW5nUmlnaHRLZXl3b3JkKCkpKQogICAgICAgICAgICAgICAgIG1f
d3JpdGluZ0RpcmVjdGlvbiA9IFZlcnRpY2FsR3Jvd2luZ1JpZ2h0OwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTk0OCwxMCArOTI2LDEyIEBAIHZvaWQgVlRUQ3VlOjpzZXRDdWVT
ZXR0aW5ncyhjb25zdCBTdHJpbmcKICAgICAgICAgICAgIC8vIDEuIElmIHZhbHVlIGNvbnRhaW5z
IGFueSBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gVSswMDJEIEhZUEhFTi1NSU5VUyBjaGFyYWN0ZXJz
ICgtKSwgVSswMDI1IFBFUkNFTlQgU0lHTiAKICAgICAgICAgICAgIC8vICAgIGNoYXJhY3RlcnMg
KCUpLCBhbmQgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDMwIERJR0lUIFpFUk8gKDApIHRv
IFUrMDAzOSBESUdJVCBOSU5FICg5KSwgdGhlbiBqdW1wCiAgICAgICAgICAgICAvLyAgICB0byB0
aGUgc3RlcCBsYWJlbGVkIG5leHQgc2V0dGluZy4KLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIg
bGluZVBvc2l0aW9uQnVpbGRlcjsKLSAgICAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0
Lmxlbmd0aCgpICYmIChpbnB1dFtwb3NpdGlvbl0gPT0gJy0nIHx8IGlucHV0W3Bvc2l0aW9uXSA9
PSAnJScgfHwgaXNBU0NJSURpZ2l0KGlucHV0W3Bvc2l0aW9uXSkpKQotICAgICAgICAgICAgICAg
IGxpbmVQb3NpdGlvbkJ1aWxkZXIuYXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKLSAgICAgICAg
ICAgIGlmIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmICFXZWJWVFRQYXJzZXI6OmlzVmFs
aWRTZXR0aW5nRGVsaW1pdGVyKGlucHV0W3Bvc2l0aW9uXSkpCisgICAgICAgICAgICBib29sIGlz
TmVnYXRpdmUgPSBpbnB1dC5zY2FuKCctJyk7CisgICAgICAgICAgICBpbnQgbGluZVBvc2l0aW9u
OworICAgICAgICAgICAgdW5zaWduZWQgbnVtRGlnaXRzID0gaW5wdXQuc2NhbkRpZ2l0cyhsaW5l
UG9zaXRpb24pOworICAgICAgICAgICAgYm9vbCBpc1BlcmNlbnRhZ2UgPSBpbnB1dC5zY2FuKCcl
Jyk7CisKKyAgICAgICAgICAgIGlmICghaW5wdXQuaXNBdCh2YWx1ZVJ1bi5lbmQoKSkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIC8vIDIuIElmIHZhbHVlIGRvZXMgbm90
IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBpbiB0aGUgcmFuZ2UgVSswMDMwIERJR0lU
IFpFUk8gKDApIHRvIFUrMDAzOSBESUdJVCAKQEAgLTk2MCw0MyArOTQwLDM4IEBAIHZvaWQgVlRU
Q3VlOjpzZXRDdWVTZXR0aW5ncyhjb25zdCBTdHJpbmcKICAgICAgICAgICAgIC8vICAgIGp1bXAg
dG8gdGhlIHN0ZXAgbGFiZWxlZCBuZXh0IHNldHRpbmcuCiAgICAgICAgICAgICAvLyA0LiBJZiBh
bnkgY2hhcmFjdGVyIGluIHZhbHVlIG90aGVyIHRoYW4gdGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEg
VSswMDI1IFBFUkNFTlQgU0lHTiBjaGFyYWN0ZXIgKCUpLCB0aGVuCiAgICAgICAgICAgICAvLyAg
ICBqdW1wIHRvIHRoZSBzdGVwIGxhYmVsZWQgbmV4dCBzZXR0aW5nLgotICAgICAgICAgICAgU3Ry
aW5nIGxpbmVQb3NpdGlvbiA9IGxpbmVQb3NpdGlvbkJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICAg
ICAgICAgIGlmIChsaW5lUG9zaXRpb24uZmluZCgnLScsIDEpICE9IG5vdEZvdW5kIHx8IGxpbmVQ
b3NpdGlvbi5yZXZlcnNlRmluZCgiJSIsIGxpbmVQb3NpdGlvbi5sZW5ndGgoKSAtIDIpICE9IG5v
dEZvdW5kKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgICAgICAvLyA1LiBJZiB0
aGUgZmlyc3QgY2hhcmFjdGVyIGluIHZhbHVlIGlzIGEgVSswMDJEIEhZUEhFTi1NSU5VUyBjaGFy
YWN0ZXIgKC0pIGFuZCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdmFsdWUgaXMgYSAKICAgICAgICAg
ICAgIC8vICAgIFUrMDAyNSBQRVJDRU5UIFNJR04gY2hhcmFjdGVyICglKSwgdGhlbiBqdW1wIHRv
IHRoZSBzdGVwIGxhYmVsZWQgbmV4dCBzZXR0aW5nLgotICAgICAgICAgICAgaWYgKGxpbmVQb3Np
dGlvblswXSA9PSAnLScgJiYgbGluZVBvc2l0aW9uW2xpbmVQb3NpdGlvbi5sZW5ndGgoKSAtIDFd
ID09ICclJykKKyAgICAgICAgICAgIGlmICghbnVtRGlnaXRzIHx8IChpc1BlcmNlbnRhZ2UgJiYg
aXNOZWdhdGl2ZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIC8vIDYu
IElnbm9yaW5nIHRoZSB0cmFpbGluZyBwZXJjZW50IHNpZ24sIGlmIGFueSwgaW50ZXJwcmV0IHZh
bHVlIGFzIGEgKHBvdGVudGlhbGx5IHNpZ25lZCkgaW50ZWdlciwgYW5kIAogICAgICAgICAgICAg
Ly8gICAgbGV0IG51bWJlciBiZSB0aGF0IG51bWJlci4gCi0gICAgICAgICAgICAvLyBOT1RFOiB0
b0ludCBpZ25vcmVzIHRyYWlsaW5nIG5vbi1kaWdpdCBjaGFyYWN0ZXJzLCBzdWNoIGFzICclJy4K
LSAgICAgICAgICAgIGJvb2wgdmFsaWROdW1iZXI7Ci0gICAgICAgICAgICBpbnQgbnVtYmVyID0g
bGluZVBvc2l0aW9uLnRvSW50KCZ2YWxpZE51bWJlcik7Ci0gICAgICAgICAgICBpZiAoIXZhbGlk
TnVtYmVyKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgICAgICAvLyA3LiBJZiB0
aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdmFsdWUgaXMgYSBVKzAwMjUgUEVSQ0VOVCBTSUdOIGNoYXJh
Y3RlciAoJSksIGJ1dCBudW1iZXIgaXMgbm90IGluIHRoZSByYW5nZSAKICAgICAgICAgICAgIC8v
ICAgIDAg4omkIG51bWJlciDiiaQgMTAwLCB0aGVuIGp1bXAgdG8gdGhlIHN0ZXAgbGFiZWxlZCBu
ZXh0IHNldHRpbmcuCiAgICAgICAgICAgICAvLyA4LiBMZXQgY3VlJ3MgdGV4dCB0cmFjayBjdWUg
bGluZSBwb3NpdGlvbiBiZSBudW1iZXIuCiAgICAgICAgICAgICAvLyA5LiBJZiB0aGUgbGFzdCBj
aGFyYWN0ZXIgaW4gdmFsdWUgaXMgYSBVKzAwMjUgUEVSQ0VOVCBTSUdOIGNoYXJhY3RlciAoJSks
IHRoZW4gbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIAogICAgICAgICAgICAgLy8gICAgc25hcC10
by1saW5lcyBmbGFnIGJlIGZhbHNlLiBPdGhlcndpc2UsIGxldCBpdCBiZSB0cnVlLgotICAgICAg
ICAgICAgaWYgKGxpbmVQb3NpdGlvbltsaW5lUG9zaXRpb24ubGVuZ3RoKCkgLSAxXSA9PSAnJScp
IHsKLSAgICAgICAgICAgICAgICBpZiAobnVtYmVyIDwgMCB8fCBudW1iZXIgPiAxMDApCisgICAg
ICAgICAgICBpZiAoaXNQZXJjZW50YWdlKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVQb3Np
dGlvbiA8IDAgfHwgbGluZVBvc2l0aW9uID4gMTAwKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgICAgIC8vIDEwIC0gSWYgJyUnIHRoZW4gc2V0IHNuYXAtdG8tbGlu
ZXMgZmxhZyB0byBmYWxzZS4KICAgICAgICAgICAgICAgICBtX3NuYXBUb0xpbmVzID0gZmFsc2U7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc05lZ2F0aXZlKQor
ICAgICAgICAgICAgICAgICAgICBsaW5lUG9zaXRpb24gPSAtbGluZVBvc2l0aW9uOworCisgICAg
ICAgICAgICAgICAgbV9zbmFwVG9MaW5lcyA9IHRydWU7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIG1fbGluZVBvc2l0aW9uID0gbnVtYmVyOworICAgICAgICAgICAgbV9saW5lUG9zaXRp
b24gPSBsaW5lUG9zaXRpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIFBvc2l0aW9uOiB7CiAgICAgICAgICAgICBpbnQgbnVtYmVyOwogICAgICAgICAgICAg
Ly8gU3RlcHMgMSAtIDYuCi0gICAgICAgICAgICBpZiAoIXNjYW5QZXJjZW50YWdlKGlucHV0LCBw
b3NpdGlvbiwgbnVtYmVyKSkgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghc2NhblBlcmNl
bnRhZ2UoaW5wdXQsIHZhbHVlUnVuLCBudW1iZXIpKSAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICAvLyA3LiBMZXQgY3VlJ3MgdGV4dCB0cmFjayBjdWUg
dGV4dCBwb3NpdGlvbiBiZSBudW1iZXIuCkBAIC0xMDA2LDcgKzk4MSw3IEBAIHZvaWQgVlRUQ3Vl
OjpzZXRDdWVTZXR0aW5ncyhjb25zdCBTdHJpbmcKICAgICAgICAgY2FzZSBTaXplOiB7CiAgICAg
ICAgICAgICBpbnQgbnVtYmVyOwogICAgICAgICAgICAgLy8gU3RlcHMgMSAtIDYuCi0gICAgICAg
ICAgICBpZiAoIXNjYW5QZXJjZW50YWdlKGlucHV0LCBwb3NpdGlvbiwgbnVtYmVyKSkgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghc2NhblBlcmNlbnRhZ2UoaW5wdXQsIHZhbHVlUnVuLCBu
dW1iZXIpKSAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICAvLyA3LiBMZXQgY3VlJ3MgdGV4dCB0cmFjayBjdWUgc2l6ZSBiZSBudW1iZXIuCkBAIC0xMDE0
LDQwICs5ODksMzggQEAgdm9pZCBWVFRDdWU6OnNldEN1ZVNldHRpbmdzKGNvbnN0IFN0cmluZwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBbGlnbjogewotICAg
ICAgICAgICAgU3RyaW5nIGN1ZUFsaWdubWVudCA9IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdvcmQo
aW5wdXQsICZwb3NpdGlvbik7Ci0KICAgICAgICAgICAgIC8vIDEuIElmIHZhbHVlIGlzIGEgY2Fz
ZS1zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSBzdHJpbmcgInN0YXJ0IiwgdGhlbiBsZXQgY3VlJ3Mg
dGV4dCB0cmFjayBjdWUgYWxpZ25tZW50IGJlIHN0YXJ0IGFsaWdubWVudC4KLSAgICAgICAgICAg
IGlmIChjdWVBbGlnbm1lbnQgPT0gc3RhcnRLZXl3b3JkKCkpCisgICAgICAgICAgICBpZiAoaW5w
dXQuc2NhblJ1bih2YWx1ZVJ1biwgc3RhcnRLZXl3b3JkKCkpKQogICAgICAgICAgICAgICAgIG1f
Y3VlQWxpZ25tZW50ID0gU3RhcnQ7CiAKICAgICAgICAgICAgIC8vIDIuIElmIHZhbHVlIGlzIGEg
Y2FzZS1zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSBzdHJpbmcgIm1pZGRsZSIsIHRoZW4gbGV0IGN1
ZSdzIHRleHQgdHJhY2sgY3VlIGFsaWdubWVudCBiZSBtaWRkbGUgYWxpZ25tZW50LgotICAgICAg
ICAgICAgZWxzZSBpZiAoY3VlQWxpZ25tZW50ID09IG1pZGRsZUtleXdvcmQoKSkKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlucHV0LnNjYW5SdW4odmFsdWVSdW4sIG1pZGRsZUtleXdvcmQoKSkpCiAg
ICAgICAgICAgICAgICAgbV9jdWVBbGlnbm1lbnQgPSBNaWRkbGU7CiAKICAgICAgICAgICAgIC8v
IDMuIElmIHZhbHVlIGlzIGEgY2FzZS1zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSBzdHJpbmcgImVu
ZCIsIHRoZW4gbGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIGFsaWdubWVudCBiZSBlbmQgYWxpZ25t
ZW50LgotICAgICAgICAgICAgZWxzZSBpZiAoY3VlQWxpZ25tZW50ID09IGVuZEtleXdvcmQoKSkK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0LnNjYW5SdW4odmFsdWVSdW4sIGVuZEtleXdvcmQo
KSkpCiAgICAgICAgICAgICAgICAgbV9jdWVBbGlnbm1lbnQgPSBFbmQ7CiAKICAgICAgICAgICAg
IC8vIDQuIElmIHZhbHVlIGlzIGEgY2FzZS1zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSBzdHJpbmcg
ImxlZnQiLCB0aGVuIGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBhbGlnbm1lbnQgYmUgbGVmdCBh
bGlnbm1lbnQuCi0gICAgICAgICAgICBlbHNlIGlmIChjdWVBbGlnbm1lbnQgPT0gbGVmdEtleXdv
cmQoKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0LnNjYW5SdW4odmFsdWVSdW4sIGxlZnRL
ZXl3b3JkKCkpKQogICAgICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0gTGVmdDsKIAogICAg
ICAgICAgICAgLy8gNS4gSWYgdmFsdWUgaXMgYSBjYXNlLXNlbnNpdGl2ZSBtYXRjaCBmb3IgdGhl
IHN0cmluZyAicmlnaHQiLCB0aGVuIGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBhbGlnbm1lbnQg
YmUgcmlnaHQgYWxpZ25tZW50LgotICAgICAgICAgICAgZWxzZSBpZiAoY3VlQWxpZ25tZW50ID09
IHJpZ2h0S2V5d29yZCgpKQorICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXQuc2NhblJ1bih2YWx1
ZVJ1biwgcmlnaHRLZXl3b3JkKCkpKQogICAgICAgICAgICAgICAgIG1fY3VlQWxpZ25tZW50ID0g
UmlnaHQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2lmIEVOQUJMRShXRUJWVFRf
UkVHSU9OUykKICAgICAgICAgY2FzZSBSZWdpb25JZDoKLSAgICAgICAgICAgIG1fcmVnaW9uSWQg
PSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RXb3JkKGlucHV0LCAmcG9zaXRpb24pOworICAgICAgICAg
ICAgbV9yZWdpb25JZCA9IGlucHV0LmV4dHJhY3RTdHJpbmcodmFsdWVSdW4pOwogICAgICAgICAg
ICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgY2FzZSBOb25lOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotTmV4dFNldHRpbmc6Ci0gICAgICAgIHBvc2l0aW9uID0gZW5kT2ZTZXR0
aW5nOworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGVudGlyZSBydW4gaXMgY29uc3VtZWQuCisg
ICAgICAgIGlucHV0LnNraXBSdW4odmFsdWVSdW4pOwogICAgIH0KICNpZiBFTkFCTEUoV0VCVlRU
X1JFR0lPTlMpCiAgICAgLy8gSWYgY3VlJ3MgbGluZSBwb3NpdGlvbiBpcyBub3QgYXV0byBvciBj
dWUncyBzaXplIGlzIG5vdCAxMDAgb3IgY3VlJ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVlRUQ3VlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9W
VFRDdWUuaAkocmV2aXNpb24gMTY2MDc5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9W
VFRDdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBjbGFzcyBEb2N1bWVudEZy
YWdtZW50OwogY2xhc3MgSFRNTFNwYW5FbGVtZW50OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKIGNsYXNzIFZUVEN1ZTsKK2NsYXNzIFZUVFNjYW5uZXI7CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTg5LDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IFJlZ2lvbklkCiAjZW5kaWYKICAgICB9OwotICAgIEN1ZVNldHRpbmcgc2V0dGluZ05hbWUoY29u
c3QgU3RyaW5nJik7CisgICAgQ3VlU2V0dGluZyBzZXR0aW5nTmFtZShWVFRTY2FubmVyJik7CiAK
ICAgICBTdHJpbmcgbV9jb250ZW50OwogICAgIFN0cmluZyBtX3NldHRpbmdzOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRSZWdpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUUmVnaW9uLmNwcAkocmV2aXNpb24gMTY2MDc5KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRSZWdpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckVs
ZW1lbnQuaCIKICNpbmNsdWRlICJWVFRDdWUuaCIKKyNpbmNsdWRlICJWVFRTY2FubmVyLmgiCiAj
aW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApA
QCAtMjE2LDgzICsyMTcsMTAwIEBAIHZvaWQgVlRUUmVnaW9uOjp1cGRhdGVQYXJhbWV0ZXJzRnJv
bVJlZ2kKICAgICBzZXRTY3JvbGwocmVnaW9uLT5zY3JvbGwoKSwgQVNTRVJUX05PX0VYQ0VQVElP
Tik7CiB9CiAKLXZvaWQgVlRUUmVnaW9uOjpzZXRSZWdpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcm
IGlucHV0KQordm9pZCBWVFRSZWdpb246OnNldFJlZ2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYg
aW5wdXRTdHJpbmcpCiB7Ci0gICAgbV9zZXR0aW5ncyA9IGlucHV0OwotICAgIHVuc2lnbmVkIHBv
c2l0aW9uID0gMDsKKyAgICBtX3NldHRpbmdzID0gaW5wdXRTdHJpbmc7CisgICAgVlRUU2Nhbm5l
ciBpbnB1dChpbnB1dFN0cmluZyk7CiAKLSAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5n
dGgoKSkgewotICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiBXZWJW
VFRQYXJzZXI6OmlzVmFsaWRTZXR0aW5nRGVsaW1pdGVyKGlucHV0W3Bvc2l0aW9uXSkpCi0gICAg
ICAgICAgICBwb3NpdGlvbisrOwotCi0gICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dC5sZW5n
dGgoKSkKKyAgICB3aGlsZSAoIWlucHV0LmlzQXRFbmQoKSkgeworICAgICAgICBpbnB1dC5za2lw
V2hpbGU8V2ViVlRUUGFyc2VyOjppc1ZhbGlkU2V0dGluZ0RlbGltaXRlcj4oKTsKKyAgICAgICAg
aWYgKGlucHV0LmlzQXRFbmQoKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHBhcnNl
U2V0dGluZyhpbnB1dCwgJnBvc2l0aW9uKTsKKyAgICAgICAgLy8gU2NhbiB0aGUgbmFtZSBwYXJ0
LgorICAgICAgICBSZWdpb25TZXR0aW5nIG5hbWUgPSBzY2FuU2V0dGluZ05hbWUoaW5wdXQpOwor
CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgYSAnPScuCisgICAgICAg
IGlmIChuYW1lID09IE5vbmUgfHwgIWlucHV0LnNjYW4oJz0nKSkgeworICAgICAgICAgICAgaW5w
dXQuc2tpcFVudGlsPFdlYlZUVFBhcnNlcjo6aXNBU3BhY2U+KCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNjYW4gdGhlIHZhbHVlIHBhcnQuCisgICAg
ICAgIHBhcnNlU2V0dGluZ1ZhbHVlKG5hbWUsIGlucHV0KTsKICAgICB9CiB9CiAKLVZUVFJlZ2lv
bjo6UmVnaW9uU2V0dGluZyBWVFRSZWdpb246OmdldFNldHRpbmdGcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgc2V0dGluZykKK1ZUVFJlZ2lvbjo6UmVnaW9uU2V0dGluZyBWVFRSZWdpb246OnNjYW5T
ZXR0aW5nTmFtZShWVFRTY2FubmVyJiBpbnB1dCkKIHsKLSAgICBERVBSRUNBVEVEX0RFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBpZEtleXdvcmQsICgiaWQiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVpZ2h0S2V5d29yZCwgKCJoZWlnaHQiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Ci0gICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgd2lkdGhLZXl3b3JkLCAoIndpZHRo
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHJlZ2lvbkFuY2hvcktleXdv
cmQsICgicmVnaW9uYW5jaG9yIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IHZpZXdwb3J0QW5jaG9yS2V5d29yZCwgKCJ2aWV3cG9ydGFuY2hvciIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgQXRvbWljU3RyaW5nLCBzY3JvbGxLZXl3b3JkLCAoInNjcm9sbCIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLQotICAgIGlmIChzZXR0aW5nID09IGlkS2V5
d29yZCkKKyAgICBpZiAoaW5wdXQuc2NhbigiaWQiKSkKICAgICAgICAgcmV0dXJuIElkOwotICAg
IGlmIChzZXR0aW5nID09IGhlaWdodEtleXdvcmQpCisgICAgaWYgKGlucHV0LnNjYW4oImhlaWdo
dCIpKQogICAgICAgICByZXR1cm4gSGVpZ2h0OwotICAgIGlmIChzZXR0aW5nID09IHdpZHRoS2V5
d29yZCkKKyAgICBpZiAoaW5wdXQuc2Nhbigid2lkdGgiKSkKICAgICAgICAgcmV0dXJuIFdpZHRo
OwotICAgIGlmIChzZXR0aW5nID09IHZpZXdwb3J0QW5jaG9yS2V5d29yZCkKKyAgICBpZiAoaW5w
dXQuc2Nhbigidmlld3BvcnRhbmNob3IiKSkKICAgICAgICAgcmV0dXJuIFZpZXdwb3J0QW5jaG9y
OwotICAgIGlmIChzZXR0aW5nID09IHJlZ2lvbkFuY2hvcktleXdvcmQpCisgICAgaWYgKGlucHV0
LnNjYW4oInJlZ2lvbmFuY2hvciIpKQogICAgICAgICByZXR1cm4gUmVnaW9uQW5jaG9yOwotICAg
IGlmIChzZXR0aW5nID09IHNjcm9sbEtleXdvcmQpCisgICAgaWYgKGlucHV0LnNjYW4oInNjcm9s
bCIpKQogICAgICAgICByZXR1cm4gU2Nyb2xsOwogCiAgICAgcmV0dXJuIE5vbmU7CiB9CiAKLXZv
aWQgVlRUUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1ZShSZWdpb25TZXR0aW5nIHNldHRpbmcsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VkRW50aXJlUnVuKGNv
bnN0IFZUVFNjYW5uZXImIGlucHV0LCBjb25zdCBWVFRTY2FubmVyOjpSdW4mIHJ1bikKK3sKKyAg
ICByZXR1cm4gaW5wdXQuaXNBdChydW4uZW5kKCkpOyAKK30KKwordm9pZCBWVFRSZWdpb246OnBh
cnNlU2V0dGluZ1ZhbHVlKFJlZ2lvblNldHRpbmcgc2V0dGluZywgVlRUU2Nhbm5lciYgaW5wdXQp
CiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmlu
Zywgc2Nyb2xsVXBWYWx1ZUtleXdvcmQsICgidXAiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7CiAKKyAgICBWVFRTY2FubmVyOjpSdW4gdmFsdWVSdW4gPSBpbnB1dC5jb2xs
ZWN0VW50aWw8V2ViVlRUUGFyc2VyOjppc0FTcGFjZT4oKTsKKwogICAgIHN3aXRjaCAoc2V0dGlu
ZykgewotICAgIGNhc2UgSWQ6Ci0gICAgICAgIGlmICh2YWx1ZS5maW5kKCItLT4iKSA9PSBub3RG
b3VuZCkKLSAgICAgICAgICAgIG1faWQgPSB2YWx1ZTsKKyAgICBjYXNlIElkOiB7CisgICAgICAg
IFN0cmluZyBzdHJpbmdWYWx1ZSA9IGlucHV0LmV4dHJhY3RTdHJpbmcodmFsdWVSdW4pOworICAg
ICAgICBpZiAoc3RyaW5nVmFsdWUuZmluZCgiLS0+IikgPT0gbm90Rm91bmQpCisgICAgICAgICAg
ICBtX2lkID0gc3RyaW5nVmFsdWU7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFdp
ZHRoOiB7CiAgICAgICAgIGZsb2F0IGZsb2F0V2lkdGg7Ci0gICAgICAgIGlmIChXZWJWVFRQYXJz
ZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUodmFsdWUsIGZsb2F0V2lkdGgpKQorICAgICAg
ICBpZiAoV2ViVlRUUGFyc2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlKGlucHV0LCBmbG9h
dFdpZHRoKSAmJiBwYXJzZWRFbnRpcmVSdW4oaW5wdXQsIHZhbHVlUnVuKSkKICAgICAgICAgICAg
IG1fd2lkdGggPSBmbG9hdFdpZHRoOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBMT0coTWVk
aWEsICJWVFRSZWdpb246OnBhcnNlU2V0dGluZ1ZhbHVlLCBpbnZhbGlkIFdpZHRoIik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhlaWdodDogewotICAgICAgICB1bnNpZ25lZCBw
b3NpdGlvbiA9IDA7CiAgICAgICAgIGludCBudW1iZXI7Ci0gICAgICAgIGlmIChXZWJWVFRQYXJz
ZXI6OmNvbGxlY3REaWdpdHNUb0ludCh2YWx1ZSwgcG9zaXRpb24sIG51bWJlcikgJiYgcG9zaXRp
b24gPT0gdmFsdWUubGVuZ3RoKCkpCisgICAgICAgIGlmIChpbnB1dC5zY2FuRGlnaXRzKG51bWJl
cikgJiYgcGFyc2VkRW50aXJlUnVuKGlucHV0LCB2YWx1ZVJ1bikpCiAgICAgICAgICAgICBtX2hl
aWdodEluTGluZXMgPSBudW1iZXI7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIExPRyhNZWRp
YSwgIlZUVFJlZ2lvbjo6cGFyc2VTZXR0aW5nVmFsdWUsIGludmFsaWQgSGVpZ2h0Iik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIFJlZ2lvbkFuY2hvcjoKLSAgICAgICAgaWYgKCFX
ZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWlyKHZhbHVlLCAnLCcsIG1f
cmVnaW9uQW5jaG9yKSkKKyAgICBjYXNlIFJlZ2lvbkFuY2hvcjogeworICAgICAgICBGbG9hdFBv
aW50IGFuY2hvcjsKKyAgICAgICAgaWYgKFdlYlZUVFBhcnNlcjo6cGFyc2VGbG9hdFBlcmNlbnRh
Z2VWYWx1ZVBhaXIoaW5wdXQsICcsJywgYW5jaG9yKSAmJiBwYXJzZWRFbnRpcmVSdW4oaW5wdXQs
IHZhbHVlUnVuKSkKKyAgICAgICAgICAgIG1fcmVnaW9uQW5jaG9yID0gYW5jaG9yOworICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBMT0coTWVkaWEsICJWVFRSZWdpb246OnBhcnNlU2V0dGluZ1Zh
bHVlLCBpbnZhbGlkIFJlZ2lvbkFuY2hvciIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFZp
ZXdwb3J0QW5jaG9yOgotICAgICAgICBpZiAoIVdlYlZUVFBhcnNlcjo6cGFyc2VGbG9hdFBlcmNl
bnRhZ2VWYWx1ZVBhaXIodmFsdWUsICcsJywgbV92aWV3cG9ydEFuY2hvcikpCisgICAgfQorICAg
IGNhc2UgVmlld3BvcnRBbmNob3I6IHsKKyAgICAgICAgRmxvYXRQb2ludCBhbmNob3I7CisgICAg
ICAgIGlmIChXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWlyKGlucHV0
LCAnLCcsIGFuY2hvcikgJiYgcGFyc2VkRW50aXJlUnVuKGlucHV0LCB2YWx1ZVJ1bikpCisgICAg
ICAgICAgICBtX3ZpZXdwb3J0QW5jaG9yID0gYW5jaG9yOworICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBMT0coTWVkaWEsICJWVFRSZWdpb246OnBhcnNlU2V0dGluZ1ZhbHVlLCBpbnZhbGlkIFZp
ZXdwb3J0QW5jaG9yIik7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFNjcm9sbDoK
LSAgICAgICAgaWYgKHZhbHVlID09IHNjcm9sbFVwVmFsdWVLZXl3b3JkKQorICAgICAgICBpZiAo
aW5wdXQuc2NhblJ1bih2YWx1ZVJ1biwgc2Nyb2xsVXBWYWx1ZUtleXdvcmQpKQogICAgICAgICAg
ICAgbV9zY3JvbGwgPSB0cnVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBMT0coTWVkaWEs
ICJWVFRSZWdpb246OnBhcnNlU2V0dGluZ1ZhbHVlLCBpbnZhbGlkIFNjcm9sbCIpOwpAQCAtMzAw
LDIyICszMTgsMTAgQEAgdm9pZCBWVFRSZWdpb246OnBhcnNlU2V0dGluZ1ZhbHVlKFJlZ2lvbgog
ICAgIGNhc2UgTm9uZToKICAgICAgICAgYnJlYWs7CiAgICAgfQotfQotCi12b2lkIFZUVFJlZ2lv
bjo6cGFyc2VTZXR0aW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkKiBwb3NpdGlvbikK
LXsKLSAgICBTdHJpbmcgc2V0dGluZyA9IFdlYlZUVFBhcnNlcjo6Y29sbGVjdFdvcmQoaW5wdXQs
IHBvc2l0aW9uKTsKLQotICAgIHNpemVfdCBlcXVhbE9mZnNldCA9IHNldHRpbmcuZmluZCgnPScs
IDEpOwotICAgIGlmIChlcXVhbE9mZnNldCA9PSBub3RGb3VuZCB8fCAhZXF1YWxPZmZzZXQgfHwg
ZXF1YWxPZmZzZXQgPT0gc2V0dGluZy5sZW5ndGgoKSAtIDEpCi0gICAgICAgIHJldHVybjsKIAot
ICAgIFJlZ2lvblNldHRpbmcgbmFtZSA9IGdldFNldHRpbmdGcm9tU3RyaW5nKHNldHRpbmcuc3Vi
c3RyaW5nKDAsIGVxdWFsT2Zmc2V0KSk7Ci0gICAgU3RyaW5nIHZhbHVlID0gc2V0dGluZy5zdWJz
dHJpbmcoZXF1YWxPZmZzZXQgKyAxLCBzZXR0aW5nLmxlbmd0aCgpIC0gMSk7Ci0KLSAgICBwYXJz
ZVNldHRpbmdWYWx1ZShuYW1lLCB2YWx1ZSk7CisgICAgaW5wdXQuc2tpcFJ1bih2YWx1ZVJ1bik7
CiB9Ci0gICAgCisKIGNvbnN0IEF0b21pY1N0cmluZyYgVlRUUmVnaW9uOjp0ZXh0VHJhY2tDdWVD
b250YWluZXJTY3JvbGxpbmdDbGFzcygpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgdHJhY2tSZWdpb25DdWVDb250YWluZXJTY3JvbGxp
bmdDbGFzcywgKCJzY3JvbGxpbmciLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVFJlZ2lvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUUmVnaW9uLmgJKHJldmlzaW9uIDE2
NjA3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUUmVnaW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1M
RGl2RWxlbWVudDsKIGNsYXNzIFZUVEN1ZUJveDsKK2NsYXNzIFZUVFNjYW5uZXI7CiAKIGNsYXNz
IFZUVFJlZ2lvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFZUVFJlZ2lvbj4sIHB1YmxpYyBDb250ZXh0
RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CiBwdWJsaWM6CkBAIC0xMTYsMTAgKzExNyw5IEBAIHByaXZh
dGU6CiAgICAgICAgIFNjcm9sbAogICAgIH07CiAKLSAgICBSZWdpb25TZXR0aW5nIGdldFNldHRp
bmdGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworICAgIFJlZ2lvblNldHRpbmcgc2NhblNldHRp
bmdOYW1lKFZUVFNjYW5uZXImKTsKIAotICAgIHZvaWQgcGFyc2VTZXR0aW5nVmFsdWUoUmVnaW9u
U2V0dGluZywgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwYXJzZVNldHRpbmcoY29uc3QgU3Ry
aW5nJiwgdW5zaWduZWQqKTsKKyAgICB2b2lkIHBhcnNlU2V0dGluZ1ZhbHVlKFJlZ2lvblNldHRp
bmcsIFZUVFNjYW5uZXImKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHRleHRU
cmFja0N1ZUNvbnRhaW5lclNoYWRvd1BzZXVkb0lkKCk7CiAgICAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgdGV4dFRyYWNrQ3VlQ29udGFpbmVyU2Nyb2xsaW5nQ2xhc3MoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUU2Nhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRTY2FubmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUU2Nhbm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIE9wZXJhIFNvZnR3YXJl
IEFTQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgT3BlcmEgU29mdHdhcmUgQVNBIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlZUVFNjYW5uZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWVFRTY2FubmVy
OjpWVFRTY2FubmVyKGNvbnN0IFN0cmluZyYgbGluZSkKKyAgICA6IG1faXM4Qml0KGxpbmUuaXM4
Qml0KCkpCit7CisgICAgaWYgKG1faXM4Qml0KSB7CisgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJz
OCA9IGxpbmUuY2hhcmFjdGVyczgoKTsKKyAgICAgICAgbV9lbmQuY2hhcmFjdGVyczggPSBtX2Rh
dGEuY2hhcmFjdGVyczggKyBsaW5lLmxlbmd0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
ZGF0YS5jaGFyYWN0ZXJzMTYgPSBsaW5lLmNoYXJhY3RlcnMxNigpOworICAgICAgICBtX2VuZC5j
aGFyYWN0ZXJzMTYgPSBtX2RhdGEuY2hhcmFjdGVyczE2ICsgbGluZS5sZW5ndGgoKTsKKyAgICB9
Cit9CisKK2Jvb2wgVlRUU2Nhbm5lcjo6c2NhbihjaGFyIGMpCit7CisgICAgaWYgKCFtYXRjaChj
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFkdmFuY2UoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBWVFRTY2FubmVyOjpzY2FuKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgY2hhcmFjdGVyc0NvdW50KQoreworICAgIHVuc2lnbmVkIG1hdGNoTGVuZ3RoID0gbV9p
czhCaXQgPyBtX2VuZC5jaGFyYWN0ZXJzOCAtIG1fZGF0YS5jaGFyYWN0ZXJzOCA6IG1fZW5kLmNo
YXJhY3RlcnMxNiAtIG1fZGF0YS5jaGFyYWN0ZXJzMTY7CisgICAgaWYgKG1hdGNoTGVuZ3RoIDwg
Y2hhcmFjdGVyc0NvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBtYXRjaGVk
OworICAgIGlmIChtX2lzOEJpdCkKKyAgICAgICAgbWF0Y2hlZCA9IFdURjo6ZXF1YWwobV9kYXRh
LmNoYXJhY3RlcnM4LCBjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzQ291bnQpOworICAgIGVsc2UKKyAg
ICAgICAgbWF0Y2hlZCA9IFdURjo6ZXF1YWwobV9kYXRhLmNoYXJhY3RlcnMxNiwgY2hhcmFjdGVy
cywgY2hhcmFjdGVyc0NvdW50KTsKKyAgICBpZiAobWF0Y2hlZCkKKyAgICAgICAgYWR2YW5jZShj
aGFyYWN0ZXJzQ291bnQpOworICAgIHJldHVybiBtYXRjaGVkOworfQorCitib29sIFZUVFNjYW5u
ZXI6OnNjYW5SdW4oY29uc3QgUnVuJiBydW4sIGNvbnN0IFN0cmluZyYgdG9NYXRjaCkKK3sKKyAg
ICBBU1NFUlQocnVuLnN0YXJ0KCkgPT0gcG9zaXRpb24oKSk7CisgICAgQVNTRVJUKHJ1bi5zdGFy
dCgpIDw9IGVuZCgpKTsKKyAgICBBU1NFUlQocnVuLmVuZCgpID49IHJ1bi5zdGFydCgpKTsKKyAg
ICBBU1NFUlQocnVuLmVuZCgpIDw9IGVuZCgpKTsKKyAgICBzaXplX3QgbWF0Y2hMZW5ndGggPSBy
dW4ubGVuZ3RoKCk7CisgICAgaWYgKHRvTWF0Y2gubGVuZ3RoKCkgPiBtYXRjaExlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgbWF0Y2hlZDsKKyAgICBpZiAobV9pczhCaXQp
CisgICAgICAgIG1hdGNoZWQgPSBXVEY6OmVxdWFsKHRvTWF0Y2guaW1wbCgpLCBtX2RhdGEuY2hh
cmFjdGVyczgsIG1hdGNoTGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIG1hdGNoZWQgPSBXVEY6
OmVxdWFsKHRvTWF0Y2guaW1wbCgpLCBtX2RhdGEuY2hhcmFjdGVyczE2LCBtYXRjaExlbmd0aCk7
CisgICAgaWYgKG1hdGNoZWQpCisgICAgICAgIHNlZWtUbyhydW4uZW5kKCkpOworICAgIHJldHVy
biBtYXRjaGVkOworfQorCit2b2lkIFZUVFNjYW5uZXI6OnNraXBSdW4oY29uc3QgUnVuJiBydW4p
Cit7CisgICAgQVNTRVJUKHJ1bi5zdGFydCgpIDw9IGVuZCgpKTsKKyAgICBBU1NFUlQocnVuLmVu
ZCgpID49IHJ1bi5zdGFydCgpKTsKKyAgICBBU1NFUlQocnVuLmVuZCgpIDw9IGVuZCgpKTsKKyAg
ICBzZWVrVG8ocnVuLmVuZCgpKTsKK30KKworU3RyaW5nIFZUVFNjYW5uZXI6OmV4dHJhY3RTdHJp
bmcoY29uc3QgUnVuJiBydW4pCit7CisgICAgQVNTRVJUKHJ1bi5zdGFydCgpID09IHBvc2l0aW9u
KCkpOworICAgIEFTU0VSVChydW4uc3RhcnQoKSA8PSBlbmQoKSk7CisgICAgQVNTRVJUKHJ1bi5l
bmQoKSA+PSBydW4uc3RhcnQoKSk7CisgICAgQVNTRVJUKHJ1bi5lbmQoKSA8PSBlbmQoKSk7Cisg
ICAgU3RyaW5nIHM7CisgICAgaWYgKG1faXM4Qml0KQorICAgICAgICBzID0gU3RyaW5nKG1fZGF0
YS5jaGFyYWN0ZXJzOCwgcnVuLmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAgIHMgPSBTdHJp
bmcobV9kYXRhLmNoYXJhY3RlcnMxNiwgcnVuLmxlbmd0aCgpKTsKKyAgICBzZWVrVG8ocnVuLmVu
ZCgpKTsKKyAgICByZXR1cm4gczsKK30KKworU3RyaW5nIFZUVFNjYW5uZXI6OnJlc3RPZklucHV0
QXNTdHJpbmcoKQoreworICAgIFJ1biByZXN0KHBvc2l0aW9uKCksIGVuZCgpLCBtX2lzOEJpdCk7
CisgICAgcmV0dXJuIGV4dHJhY3RTdHJpbmcocmVzdCk7Cit9CisKK3Vuc2lnbmVkIFZUVFNjYW5u
ZXI6OnNjYW5EaWdpdHMoaW50JiBudW1iZXIpCit7CisgICAgUnVuIHJ1bk9mRGlnaXRzID0gY29s
bGVjdFdoaWxlPGlzQVNDSUlEaWdpdD4oKTsKKyAgICBpZiAocnVuT2ZEaWdpdHMuaXNFbXB0eSgp
KSB7CisgICAgICAgIG51bWJlciA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBi
b29sIHZhbGlkTnVtYmVyOworICAgIHNpemVfdCBudW1EaWdpdHMgPSBydW5PZkRpZ2l0cy5sZW5n
dGgoKTsKKyAgICBpZiAobV9pczhCaXQpCisgICAgICAgIG51bWJlciA9IGNoYXJhY3RlcnNUb0lu
dFN0cmljdChtX2RhdGEuY2hhcmFjdGVyczgsIG51bURpZ2l0cywgJnZhbGlkTnVtYmVyKTsKKyAg
ICBlbHNlCisgICAgICAgIG51bWJlciA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChtX2RhdGEuY2hh
cmFjdGVyczE2LCBudW1EaWdpdHMsICZ2YWxpZE51bWJlcik7CisKKyAgICAvLyBTaW5jZSB3ZSBr
bm93IHRoYXQgc2NhbkRpZ2l0cyBvbmx5IHNjYW5uZWQgdmFsaWQgKEFTQ0lJKSBkaWdpdHMgKGFu
ZAorICAgIC8vIGhlbmNlIHRoYXQncyB3aGF0IGdvdCBwYXNzZWQgdG8gY2hhcmFjdGVyc1RvSW50
KCkpLCB0aGUgcmVtYWluaW5nCisgICAgLy8gZmFpbHVyZSBtb2RlIGZvciBjaGFyYWN0ZXJzVG9J
bnQoKSBpcyBvdmVyZmxvdywgc28gaWYgfHZhbGlkTnVtYmVyfCBpcworICAgIC8vIG5vdCB0cnVl
LCB0aGVuIHNldCB8bnVtYmVyfCB0byB0aGUgbWF4aW11bSBpbnQgdmFsdWUuCisgICAgaWYgKCF2
YWxpZE51bWJlcikKKyAgICAgICAgbnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKTsKKyAgICAvLyBDb25zdW1lIHRoZSBkaWdpdHMuCisgICAgc2Vla1RvKHJ1bk9mRGlnaXRz
LmVuZCgpKTsKKyAgICByZXR1cm4gbnVtRGlnaXRzOworfQorCitib29sIFZUVFNjYW5uZXI6OnNj
YW5GbG9hdChmbG9hdCYgbnVtYmVyKQoreworICAgIFJ1biBpbnRlZ2VyUnVuID0gY29sbGVjdFdo
aWxlPGlzQVNDSUlEaWdpdD4oKTsKKyAgICBzZWVrVG8oaW50ZWdlclJ1bi5lbmQoKSk7CisgICAg
UnVuIGRlY2ltYWxSdW4ocG9zaXRpb24oKSwgcG9zaXRpb24oKSwgbV9pczhCaXQpOworICAgIGlm
IChzY2FuKCcuJykpIHsKKyAgICAgICAgZGVjaW1hbFJ1biA9IGNvbGxlY3RXaGlsZTxpc0FTQ0lJ
RGlnaXQ+KCk7CisgICAgICAgIHNlZWtUbyhkZWNpbWFsUnVuLmVuZCgpKTsKKyAgICB9CisKKyAg
ICAvLyBBdCBsZWFzdCBvbmUgZGlnaXQgcmVxdWlyZWQuCisgICAgaWYgKGludGVnZXJSdW4uaXNF
bXB0eSgpICYmIGRlY2ltYWxSdW4uaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFJlc3RvcmUgdG8g
c3RhcnRpbmcgcG9zaXRpb24uCisgICAgICAgIHNlZWtUbyhpbnRlZ2VyUnVuLnN0YXJ0KCkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc2l6ZV90IGxlbmd0aE9mRmxvYXQg
PSBSdW4oaW50ZWdlclJ1bi5zdGFydCgpLCBwb3NpdGlvbigpLCBtX2lzOEJpdCkubGVuZ3RoKCk7
CisgICAgYm9vbCB2YWxpZE51bWJlcjsKKyAgICBpZiAobV9pczhCaXQpCisgICAgICAgIG51bWJl
ciA9IGNoYXJhY3RlcnNUb0Zsb2F0KGludGVnZXJSdW4uc3RhcnQoKSwgbGVuZ3RoT2ZGbG9hdCwg
JnZhbGlkTnVtYmVyKTsKKyAgICBlbHNlCisgICAgICAgIG51bWJlciA9IGNoYXJhY3RlcnNUb0Zs
b2F0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihpbnRlZ2VyUnVuLnN0YXJ0KCkpLCBs
ZW5ndGhPZkZsb2F0LCAmdmFsaWROdW1iZXIpOworCisgICAgaWYgKCF2YWxpZE51bWJlcikKKyAg
ICAgICAgbnVtYmVyID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVFNj
YW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVFNjYW5u
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUU2Nhbm5l
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDEzLCBPcGVyYSBTb2Z0d2FyZSBBU0EuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE9wZXJhIFNvZnR3YXJlIEFTQSBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgVlRUU2Nhbm5lcl9oCisjZGVmaW5lIFZUVFNjYW5uZXJfaAorCisjaW5jbHVkZSAiUGFy
c2luZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIEhlbHBlciBjbGFzcyBmb3IgInNjYW5uaW5nIiBhbiBpbnB1
dCBzdHJpbmcgYW5kIHBlcmZvcm1pbmcgcGFyc2luZyBvZgorLy8gIm1pY3JvLXN5bnRheCItbGlr
ZSBjb25zdHJ1Y3RzLgorLy8KKy8vIFRoZXJlJ3MgdHdvIHByaW1hcnkgb3BlcmF0aW9uczogbWF0
Y2ggYW5kIHNjYW4uCisvLworLy8gVGhlICdtYXRjaCcgb3BlcmF0aW9uIG1hdGNoZXMgYW4gZXhw
bGljaXRseSBvciBpbXBsaWNpdGx5IHNwZWNpZmllZCBzZXF1ZW5jZQorLy8gYWdhaW5zdCB0aGUg
Y2hhcmFjdGVycyBhaGVhZCBvZiB0aGUgY3VycmVudCBpbnB1dCBwb2ludGVyLCBhbmQgcmV0dXJu
cyB0cnVlCisvLyBpZiB0aGUgc2VxdWVuY2UgY2FuIGJlIG1hdGNoZWQuCisvLworLy8gVGhlICdz
Y2FuJyBvcGVyYXRpb24gcGVyZm9ybXMgYSAnbWF0Y2gnLCBhbmQgaWYgdGhlIG1hdGNoIGlzIHN1
Y2Nlc3NmdWwgaXQKKy8vIGFkdmFuY2UgdGhlIGlucHV0IHBvaW50ZXIgcGFzdCB0aGUgbWF0Y2hl
ZCBzZXF1ZW5jZS4KK2NsYXNzIFZUVFNjYW5uZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFZUVFNjYW5uZXIpOworcHVibGljOgorICAgIGV4cGxpY2l0IFZUVFNjYW5uZXIoY29uc3QgU3Ry
aW5nJiBsaW5lKTsKKworICAgIHR5cGVkZWYgY29uc3QgTENoYXIqIFBvc2l0aW9uOworCisgICAg
Y2xhc3MgUnVuIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJ1bihQb3NpdGlvbiBzdGFydCwgUG9z
aXRpb24gZW5kLCBib29sIGlzOEJpdCkKKyAgICAgICAgICAgIDogbV9zdGFydChzdGFydCksIG1f
ZW5kKGVuZCksIG1faXM4Qml0KGlzOEJpdCkgeyB9CisKKyAgICAgICAgUG9zaXRpb24gc3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgICAgIFBvc2l0aW9uIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kOyB9CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydCA9PSBtX2VuZDsgfQorICAgICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBwcml2YXRlOgorICAgICAgICBQb3NpdGlvbiBtX3N0YXJ0OworICAgICAgICBQb3NpdGlv
biBtX2VuZDsKKyAgICAgICAgYm9vbCBtX2lzOEJpdDsKKyAgICB9OworCisgICAgLy8gQ2hlY2sg
aWYgdGhlIGlucHV0IHBvaW50ZXIgcG9pbnRzIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCisg
ICAgYm9vbCBpc0F0KFBvc2l0aW9uIGNoZWNrUG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIHBvc2l0
aW9uKCkgPT0gY2hlY2tQb3NpdGlvbjsgfQorICAgIC8vIENoZWNrIGlmIHRoZSBpbnB1dCBwb2lu
dGVyIHBvaW50cyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4KKyAgICBib29sIGlzQXRFbmQoKSBj
b25zdCB7IHJldHVybiBwb3NpdGlvbigpID09IGVuZCgpOyB9CisgICAgLy8gTWF0Y2ggdGhlIGNo
YXJhY3RlciB8Y3wgYWdhaW5zdCB0aGUgY2hhcmFjdGVyIGF0IHRoZSBpbnB1dCBwb2ludGVyICh+
bG9va2FoZWFkKS4KKyAgICBib29sIG1hdGNoKGNoYXIgYykgY29uc3QgeyByZXR1cm4gIWlzQXRF
bmQoKSAmJiBjdXJyZW50Q2hhcigpID09IGM7IH0KKyAgICAvLyBTY2FuIHRoZSBjaGFyYWN0ZXIg
fGN8LgorICAgIGJvb2wgc2NhbihjaGFyKTsKKyAgICAvLyBTY2FuIHRoZSBmaXJzdCB8Y2hhcmFj
dGVyc0NvdW50fCBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmcgfGNoYXJhY3RlcnN8LgorICAgIGJv
b2wgc2Nhbihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGNoYXJhY3RlcnNDb3VudCk7
CisKKyAgICAvLyBTY2FuIHRoZSBsaXRlcmFsIHxjaGFyYWN0ZXJzfC4KKyAgICB0ZW1wbGF0ZTx1
bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgYm9vbCBzY2FuKGNvbnN0IGNoYXIgKCZjaGFy
YWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKTsKKworICAgIC8vIFNraXAgKGFkdmFuY2UgdGhlIGlu
cHV0IHBvaW50ZXIpIGFzIGxvbmcgYXMgdGhlIHNwZWNpZmllZAorICAgIC8vIHxjaGFyYWN0ZXJQ
cmVkaWNhdGV8IHJldHVybnMgdHJ1ZSwgYW5kIHRoZSBpbnB1dCBwb2ludGVyIGlzIG5vdCBwYXNz
ZWQKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSBpbnB1dC4KKyAgICB0ZW1wbGF0ZTxib29sIGNoYXJh
Y3RlclByZWRpY2F0ZShVQ2hhcik+CisgICAgdm9pZCBza2lwV2hpbGUoKTsKKworICAgIC8vIExp
a2Ugc2tpcFdoaWxlLCBidXQgdXNpbmcgYSBuZWdhdGVkIHByZWRpY2F0ZS4KKyAgICB0ZW1wbGF0
ZTxib29sIGNoYXJhY3RlclByZWRpY2F0ZShVQ2hhcik+CisgICAgdm9pZCBza2lwVW50aWwoKTsK
KworICAgIC8vIFJldHVybiB0aGUgcnVuIG9mIGNoYXJhY3RlcnMgZm9yIHdoaWNoIHRoZSBzcGVj
aWZpZWQKKyAgICAvLyB8Y2hhcmFjdGVyUHJlZGljYXRlfCByZXR1cm5zIHRydWUuIFRoZSBzdGFy
dCBvZiB0aGUgcnVuIHdpbGwgYmUgdGhlCisgICAgLy8gY3VycmVudCBpbnB1dCBwb2ludGVyLgor
ICAgIHRlbXBsYXRlPGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKFVDaGFyKT4KKyAgICBSdW4gY29s
bGVjdFdoaWxlKCk7CisKKyAgICAvLyBMaWtlIGNvbGxlY3RXaGlsZSwgYnV0IHVzaW5nIGEgbmVn
YXRlZCBwcmVkaWNhdGUuCisgICAgdGVtcGxhdGU8Ym9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoVUNo
YXIpPgorICAgIFJ1biBjb2xsZWN0VW50aWwoKTsKKworICAgIC8vIFNjYW4gdGhlIHN0cmluZyB8
dG9NYXRjaHwsIHVzaW5nIHRoZSBzcGVjaWZpZWQgfHJ1bnwgYXMgdGhlIHNlcXVlbmNlIHRvCisg
ICAgLy8gbWF0Y2ggYWdhaW5zdC4KKyAgICBib29sIHNjYW5SdW4oY29uc3QgUnVuJiwgY29uc3Qg
U3RyaW5nJiB0b01hdGNoKTsKKworICAgIC8vIFNraXAgdG8gdGhlIGVuZCBvZiB0aGUgc3BlY2lm
aWVkIHxydW58LgorICAgIHZvaWQgc2tpcFJ1bihjb25zdCBSdW4mKTsKKworICAgIC8vIFJldHVy
biB0aGUgU3RyaW5nIG1hZGUgdXAgb2YgdGhlIGNoYXJhY3RlcnMgaW4gfHJ1bnwsIGFuZCBhZHZh
bmNlIHRoZQorICAgIC8vIGlucHV0IHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgcnVuLgorICAg
IFN0cmluZyBleHRyYWN0U3RyaW5nKGNvbnN0IFJ1biYpOworCisgICAgLy8gUmV0dXJuIGEgU3Ry
aW5nIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJlc3Qgb2YgdGhlIGlucHV0IChiZXR3ZWVuIGlucHV0
CisgICAgLy8gcG9pbnRlciBhbmQgZW5kIG9mIGlucHV0KSwgYW5kIGFkdmFuY2UgdGhlIGlucHV0
IHBvaW50ZXIgYWNjb3JkaW5nbHkuCisgICAgU3RyaW5nIHJlc3RPZklucHV0QXNTdHJpbmcoKTsK
KworICAgIC8vIFNjYW4gYSBzZXQgb2YgQVNDSUkgZGlnaXRzIGZyb20gdGhlIGlucHV0LiBSZXR1
cm4gdGhlIG51bWJlciBvZiBkaWdpdHMKKyAgICAvLyBzY2FubmVkLCBhbmQgc2V0IHxudW1iZXJ8
IHRvIHRoZSBjb21wdXRlZCB2YWx1ZS4gSWYgdGhlIGRpZ2l0cyBtYWtlIHVwIGEKKyAgICAvLyBu
dW1iZXIgdGhhdCBkb2VzIG5vdCBmaXQgdGhlICdpbnQnIHR5cGUsIHxudW1iZXJ8IGlzIHNldCB0
byBJTlRfTUFYLgorICAgIC8vIE5vdGU6IERvZXMgbm90IGhhbmRsZSBzaWduLgorICAgIHVuc2ln
bmVkIHNjYW5EaWdpdHMoaW50JiBudW1iZXIpOworCisgICAgLy8gU2NhbiBhIGZsb2F0aW5nIHBv
aW50IHZhbHVlIG9uIG9uZSBvZiB0aGUgZm9ybXM6IFxkK1wuPyBcZCtcLlxkKyBcLlxkKworICAg
IGJvb2wgc2NhbkZsb2F0KGZsb2F0JiBudW1iZXIpOworCitwcm90ZWN0ZWQ6CisgICAgUG9zaXRp
b24gcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuY2hhcmFjdGVyczg7IH0KKyAgICBQ
b3NpdGlvbiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5jaGFyYWN0ZXJzODsgfQorICAgIHZv
aWQgc2Vla1RvKFBvc2l0aW9uKTsKKyAgICBVQ2hhciBjdXJyZW50Q2hhcigpIGNvbnN0OworICAg
IHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBhbW91bnQgPSAxKTsKKyAgICAvLyBBZGFwdCBhIFVDaGFy
LXByZWRpY2F0ZSB0byBhbiBMQ2hhci1wcmVkaWNhdGUuCisgICAgLy8gKEZvciB1c2Ugd2l0aCBz
a2lwV2hpbGUvVW50aWwgZnJvbSBQYXJzaW5nVXRpbGl0aWVzLmgpLgorICAgIHRlbXBsYXRlPGJv
b2wgY2hhcmFjdGVyUHJlZGljYXRlKFVDaGFyKT4KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgTENo
YXJQcmVkaWNhdGVBZGFwdGVyKExDaGFyIGMpIHsgcmV0dXJuIGNoYXJhY3RlclByZWRpY2F0ZShj
KTsgfQorICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4OworICAg
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2OworICAgIH0gbV9kYXRhOworICAgIHVuaW9u
IHsKKyAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4OworICAgICAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVyczE2OworICAgIH0gbV9lbmQ7CisgICAgYm9vbCBtX2lzOEJpdDsKK307CisK
K2lubGluZSBzaXplX3QgVlRUU2Nhbm5lcjo6UnVuOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlm
IChtX2lzOEJpdCkKKyAgICAgICAgcmV0dXJuIG1fZW5kIC0gbV9zdGFydDsKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1fZW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUNoYXIqPihtX3N0YXJ0KTsKK30KKwordGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVy
c0NvdW50PgoraW5saW5lIGJvb2wgVlRUU2Nhbm5lcjo6c2Nhbihjb25zdCBjaGFyICgmY2hhcmFj
dGVycylbY2hhcmFjdGVyc0NvdW50XSkKK3sKKyAgICByZXR1cm4gc2NhbihyZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIGNoYXJhY3RlcnNDb3VudCAtIDEpOworfQor
Cit0ZW1wbGF0ZTxib29sIGNoYXJhY3RlclByZWRpY2F0ZShVQ2hhcik+CitpbmxpbmUgdm9pZCBW
VFRTY2FubmVyOjpza2lwV2hpbGUoKQoreworICAgIGlmIChtX2lzOEJpdCkKKyAgICAgICAgOjpz
a2lwV2hpbGU8TENoYXIsIExDaGFyUHJlZGljYXRlQWRhcHRlcjxjaGFyYWN0ZXJQcmVkaWNhdGU+
ID4obV9kYXRhLmNoYXJhY3RlcnM4LCBtX2VuZC5jaGFyYWN0ZXJzOCk7CisgICAgZWxzZQorICAg
ICAgICA6OnNraXBXaGlsZTxVQ2hhciwgY2hhcmFjdGVyUHJlZGljYXRlPihtX2RhdGEuY2hhcmFj
dGVyczE2LCBtX2VuZC5jaGFyYWN0ZXJzMTYpOworfQorCit0ZW1wbGF0ZTxib29sIGNoYXJhY3Rl
clByZWRpY2F0ZShVQ2hhcik+CitpbmxpbmUgdm9pZCBWVFRTY2FubmVyOjpza2lwVW50aWwoKQor
eworICAgIGlmIChtX2lzOEJpdCkKKyAgICAgICAgOjpza2lwVW50aWw8TENoYXIsIExDaGFyUHJl
ZGljYXRlQWRhcHRlcjxjaGFyYWN0ZXJQcmVkaWNhdGU+ID4obV9kYXRhLmNoYXJhY3RlcnM4LCBt
X2VuZC5jaGFyYWN0ZXJzOCk7CisgICAgZWxzZQorICAgICAgICA6OnNraXBVbnRpbDxVQ2hhciwg
Y2hhcmFjdGVyUHJlZGljYXRlPihtX2RhdGEuY2hhcmFjdGVyczE2LCBtX2VuZC5jaGFyYWN0ZXJz
MTYpOworfQorCit0ZW1wbGF0ZTxib29sIGNoYXJhY3RlclByZWRpY2F0ZShVQ2hhcik+Citpbmxp
bmUgVlRUU2Nhbm5lcjo6UnVuIFZUVFNjYW5uZXI6OmNvbGxlY3RXaGlsZSgpCit7CisgICAgaWYg
KG1faXM4Qml0KSB7CisgICAgICAgIGNvbnN0IExDaGFyKiBjdXJyZW50ID0gbV9kYXRhLmNoYXJh
Y3RlcnM4OworICAgICAgICA6OnNraXBXaGlsZTxMQ2hhciwgTENoYXJQcmVkaWNhdGVBZGFwdGVy
PGNoYXJhY3RlclByZWRpY2F0ZT4gPihjdXJyZW50LCBtX2VuZC5jaGFyYWN0ZXJzOCk7CisgICAg
ICAgIHJldHVybiBSdW4ocG9zaXRpb24oKSwgY3VycmVudCwgbV9pczhCaXQpOworICAgIH0KKyAg
ICBjb25zdCBVQ2hhciogY3VycmVudCA9IG1fZGF0YS5jaGFyYWN0ZXJzMTY7CisgICAgOjpza2lw
V2hpbGU8VUNoYXIsIGNoYXJhY3RlclByZWRpY2F0ZT4oY3VycmVudCwgbV9lbmQuY2hhcmFjdGVy
czE2KTsKKyAgICByZXR1cm4gUnVuKHBvc2l0aW9uKCksIHJlaW50ZXJwcmV0X2Nhc3Q8UG9zaXRp
b24+KGN1cnJlbnQpLCBtX2lzOEJpdCk7Cit9CisKK3RlbXBsYXRlPGJvb2wgY2hhcmFjdGVyUHJl
ZGljYXRlKFVDaGFyKT4KK2lubGluZSBWVFRTY2FubmVyOjpSdW4gVlRUU2Nhbm5lcjo6Y29sbGVj
dFVudGlsKCkKK3sKKyAgICBpZiAobV9pczhCaXQpIHsKKyAgICAgICAgY29uc3QgTENoYXIqIGN1
cnJlbnQgPSBtX2RhdGEuY2hhcmFjdGVyczg7CisgICAgICAgIDo6c2tpcFVudGlsPExDaGFyLCBM
Q2hhclByZWRpY2F0ZUFkYXB0ZXI8Y2hhcmFjdGVyUHJlZGljYXRlPiA+KGN1cnJlbnQsIG1fZW5k
LmNoYXJhY3RlcnM4KTsKKyAgICAgICAgcmV0dXJuIFJ1bihwb3NpdGlvbigpLCBjdXJyZW50LCBt
X2lzOEJpdCk7CisgICAgfQorICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50ID0gbV9kYXRhLmNoYXJh
Y3RlcnMxNjsKKyAgICA6OnNraXBVbnRpbDxVQ2hhciwgY2hhcmFjdGVyUHJlZGljYXRlPihjdXJy
ZW50LCBtX2VuZC5jaGFyYWN0ZXJzMTYpOworICAgIHJldHVybiBSdW4ocG9zaXRpb24oKSwgcmVp
bnRlcnByZXRfY2FzdDxQb3NpdGlvbj4oY3VycmVudCksIG1faXM4Qml0KTsKK30KKworaW5saW5l
IHZvaWQgVlRUU2Nhbm5lcjo6c2Vla1RvKFBvc2l0aW9uIHBvc2l0aW9uKQoreworICAgIEFTU0VS
VChwb3NpdGlvbiA8PSBlbmQoKSk7CisgICAgbV9kYXRhLmNoYXJhY3RlcnM4ID0gcG9zaXRpb247
Cit9CisKK2lubGluZSBVQ2hhciBWVFRTY2FubmVyOjpjdXJyZW50Q2hhcigpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHBvc2l0aW9uKCkgPCBlbmQoKSk7CisgICAgcmV0dXJuIG1faXM4Qml0ID8gKm1f
ZGF0YS5jaGFyYWN0ZXJzOCA6ICptX2RhdGEuY2hhcmFjdGVyczE2OworfQorCitpbmxpbmUgdm9p
ZCBWVFRTY2FubmVyOjphZHZhbmNlKHVuc2lnbmVkIGFtb3VudCkKK3sKKyAgICBBU1NFUlQocG9z
aXRpb24oKSA8IGVuZCgpKTsKKyAgICBpZiAobV9pczhCaXQpCisgICAgICAgIG1fZGF0YS5jaGFy
YWN0ZXJzOCArPSBhbW91bnQ7CisgICAgZWxzZQorICAgICAgICBtX2RhdGEuY2hhcmFjdGVyczE2
ICs9IGFtb3VudDsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svV2ViVlRUUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1dlYlZUVFBhcnNlci5jcHAJKHJldmlzaW9uIDE2NjA4MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiAr
MzgsNyBAQAogCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgorI2luY2x1ZGUgIlZUVFNjYW5uZXIuaCIKICNpbmNsdWRlICJXZWJWVFRFbGVtZW50
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDY3ICs0OSwxNiBAQCBjb25zdCBkb3Vi
bGUgc2Vjb25kc1Blck1pbGxpc2Vjb25kID0gMC4wCiBjb25zdCBjaGFyKiBmaWxlSWRlbnRpZmll
ciA9ICJXRUJWVFQiOwogY29uc3QgdW5zaWduZWQgZmlsZUlkZW50aWZpZXJMZW5ndGggPSA2Owog
Ci1zdGF0aWMgdW5zaWduZWQgc2NhbkRpZ2l0cyhjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25l
ZCYgcG9zaXRpb24pCi17Ci0gICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9uOwot
ICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmIGlzQVNDSUlEaWdpdChpbnB1
dFtwb3NpdGlvbl0pKQotICAgICAgICBwb3NpdGlvbisrOwotICAgIHJldHVybiBwb3NpdGlvbiAt
IHN0YXJ0UG9zaXRpb247Ci19Ci0gICAgCi11bnNpZ25lZCBXZWJWVFRQYXJzZXI6OmNvbGxlY3RE
aWdpdHNUb0ludChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCYgcG9zaXRpb24sIGludCYg
bnVtYmVyKQotewotICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICB1
bnNpZ25lZCBudW1EaWdpdHMgPSBzY2FuRGlnaXRzKGlucHV0LCBwb3NpdGlvbik7Ci0gICAgaWYg
KCFudW1EaWdpdHMpIHsKLSAgICAgICAgbnVtYmVyID0gMDsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgYm9vbCB2YWxpZE51bWJlcjsKLSAgICBpZiAoaW5wdXQuaXM4Qml0KCkpCi0g
ICAgICAgIG51bWJlciA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChpbnB1dC5jaGFyYWN0ZXJzOCgp
ICsgc3RhcnRQb3NpdGlvbiwgbnVtRGlnaXRzLCAmdmFsaWROdW1iZXIpOwotICAgIGVsc2UKLSAg
ICAgICAgbnVtYmVyID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGlucHV0LmNoYXJhY3RlcnMxNigp
ICsgc3RhcnRQb3NpdGlvbiwgbnVtRGlnaXRzLCAmdmFsaWROdW1iZXIpOwotCi0gICAgLy8gU2lu
Y2Ugd2Uga25vdyB0aGF0IHNjYW5EaWdpdHMgb25seSBzY2FubmVkIHZhbGlkIChBU0NJSSkgZGln
aXRzIChhbmQKLSAgICAvLyBoZW5jZSB0aGF0J3Mgd2hhdCBnb3QgcGFzc2VkIHRvIGNoYXJhY3Rl
cnNUb0ludCgpKSwgdGhlIHJlbWFpbmluZwotICAgIC8vIGZhaWx1cmUgbW9kZSBmb3IgY2hhcmFj
dGVyc1RvSW50KCkgaXMgb3ZlcmZsb3csIHNvIGlmIHx2YWxpZE51bWJlcnwgaXMKLSAgICAvLyBu
b3QgdHJ1ZSwgdGhlbiBzZXQgfG51bWJlcnwgdG8gdGhlIG1heGltdW0gaW50IHZhbHVlLgotICAg
IGlmICghdmFsaWROdW1iZXIpCi0gICAgICAgIG51bWJlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCk7Ci0gICAgcmV0dXJuIG51bURpZ2l0czsKLX0KLQotU3RyaW5nIFdlYlZUVFBh
cnNlcjo6Y29sbGVjdFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0aW9u
KQotewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nOwotICAgIHdoaWxlICgqcG9zaXRpb24gPCBp
bnB1dC5sZW5ndGgoKSAmJiAhaXNBU3BhY2UoaW5wdXRbKnBvc2l0aW9uXSkpCi0gICAgICAgIHN0
cmluZy5hcHBlbmQoaW5wdXRbKCpwb3NpdGlvbikrK10pOwotICAgIHJldHVybiBzdHJpbmcudG9T
dHJpbmcoKTsKLX0KLQogI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKLWJvb2wgV2ViVlRUUGFy
c2VyOjpwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIGZsb2F0
JiBwZXJjZW50YWdlKQorYm9vbCBXZWJWVFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFs
dWUoVlRUU2Nhbm5lciYgdmFsdWVTY2FubmVyLCBmbG9hdCYgcGVyY2VudGFnZSkKIHsKLSAgICAv
LyAnJScgbXVzdCBiZSBwcmVzZW50IGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBzZXR0aW5nIHZhbHVl
LgotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwgdmFsdWVbdmFsdWUubGVuZ3RoKCkgLSAxXSAh
PSAnJScpCisgICAgZmxvYXQgbnVtYmVyOworICAgIGlmICghdmFsdWVTY2FubmVyLnNjYW5GbG9h
dChudW1iZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBwb3NpdGlv
biA9IDA7Ci0gICAgdW5zaWduZWQgZGlnaXRzQmVmb3JlRG90ID0gc2NhbkRpZ2l0cyh2YWx1ZSwg
cG9zaXRpb24pOwotICAgIHVuc2lnbmVkIGRpZ2l0c0FmdGVyRG90ID0gMDsKLSAgICBpZiAodmFs
dWVbcG9zaXRpb25dID09ICcuJykgewotICAgICAgICBwb3NpdGlvbisrOwotCi0gICAgICAgIGRp
Z2l0c0FmdGVyRG90ID0gc2NhbkRpZ2l0cyh2YWx1ZSwgcG9zaXRpb24pOwotICAgIH0KLQotICAg
IC8vIEF0IGxlYXN0IG9uZSBkaWdpdCBpcyByZXF1aXJlZAotICAgIGlmICghZGlnaXRzQmVmb3Jl
RG90ICYmICFkaWdpdHNBZnRlckRvdCkKKyAgICAvLyAnJScgbXVzdCBiZSBwcmVzZW50IGFuZCBh
dCB0aGUgZW5kIG9mIHRoZSBzZXR0aW5nIHZhbHVlLgorICAgIGlmICghdmFsdWVTY2FubmVyLnNj
YW4oJyUnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZmxvYXQgbnVtYmVyID0gdmFs
dWUudG9GbG9hdCgpOwogICAgIGlmIChudW1iZXIgPCAwIHx8IG51bWJlciA+IDEwMCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMTYsMjEgKzY2LDE3IEBAIGJvb2wgV2ViVlRUUGFyc2Vy
OjpwYXJzZUZsb2F0UGVyY2VudGFnZVYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJW
VFRQYXJzZXI6OnBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWVQYWlyKGNvbnN0IFN0cmluZyYgdmFs
dWUsIGNoYXIgZGVsaW1pdGVyLCBGbG9hdFBvaW50JiB2YWx1ZVBhaXIpCitib29sIFdlYlZUVFBh
cnNlcjo6cGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIoVlRUU2Nhbm5lciYgdmFsdWVTY2Fu
bmVyLCBjaGFyIGRlbGltaXRlciwgRmxvYXRQb2ludCYgdmFsdWVQYWlyKQogewotICAgIC8vIFRo
ZSBkZWxpbWl0ZXIgY2FuJ3QgYmUgdGhlIGZpcnN0IG9yIHNlY29uZCB2YWx1ZSBiZWNhdXNlIGEg
cGFpciBvZgotICAgIC8vIHBlcmNlbnRhZ2VzICh4JSx5JSkgaW1wbGllcyB0aGF0IGF0IGxlYXN0
IHRoZSBmaXJzdCB0d28gY2hhcmFjdGVycwotICAgIC8vIGFyZSB0aGUgZmlyc3QgcGVyY2VudGFn
ZSB2YWx1ZS4KLSAgICBzaXplX3QgZGVsaW1pdGVyT2Zmc2V0ID0gdmFsdWUuZmluZChkZWxpbWl0
ZXIsIDIpOwotICAgIGlmIChkZWxpbWl0ZXJPZmZzZXQgPT0gbm90Rm91bmQgfHwgZGVsaW1pdGVy
T2Zmc2V0ID09IHZhbHVlLmxlbmd0aCgpIC0gMSkKKyAgICBmbG9hdCBmaXJzdENvb3JkOworICAg
IGlmICghcGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZSh2YWx1ZVNjYW5uZXIsIGZpcnN0Q29vcmQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmbG9hdCBmaXJzdENvb3JkOwotICAgIGlm
ICghcGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZSh2YWx1ZS5zdWJzdHJpbmcoMCwgZGVsaW1pdGVy
T2Zmc2V0KSwgZmlyc3RDb29yZCkpCisgICAgaWYgKCF2YWx1ZVNjYW5uZXIuc2NhbihkZWxpbWl0
ZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmbG9hdCBzZWNvbmRDb29yZDsKLSAg
ICBpZiAoIXBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUodmFsdWUuc3Vic3RyaW5nKGRlbGltaXRl
ck9mZnNldCArIDEsIHZhbHVlLmxlbmd0aCgpIC0gMSksIHNlY29uZENvb3JkKSkKKyAgICBpZiAo
IXBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUodmFsdWVTY2FubmVyLCBzZWNvbmRDb29yZCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHZhbHVlUGFpciA9IEZsb2F0UG9pbnQoZmlyc3RD
b29yZCwgc2Vjb25kQ29vcmQpOwpAQCAtMzI1LDM1ICsyNzEsMzIgQEAgV2ViVlRUUGFyc2VyOjpQ
YXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6YwogCiBXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2Vi
VlRUUGFyc2VyOjpjb2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGNvbnN0IFN0cmluZyYgbGluZSkK
IHsKKyAgICBWVFRTY2FubmVyIGlucHV0KGxpbmUpOworCiAgICAgLy8gQ29sbGVjdCBXZWJWVFQg
Y3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzLiAoNS4zIFdlYlZUVCBjdWUgdGltaW5ncyBhbmQgc2V0
dGluZ3MgcGFyc2luZy4pCiAgICAgLy8gU3RlcHMgMSAtIDMgLSBMZXQgaW5wdXQgYmUgdGhlIHN0
cmluZyBiZWluZyBwYXJzZWQgYW5kIHBvc2l0aW9uIGJlIGEgcG9pbnRlciBpbnRvIGlucHV0Ci0g
ICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwotICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUsIHBvc2l0
aW9uKTsKKyAgICBpbnB1dC5za2lwV2hpbGU8aXNBU3BhY2U+KCk7CiAKICAgICAvLyBTdGVwcyA0
IC0gNSAtIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wLiBJZiB0aGF0IGZhaWxzLCB0aGVuIGFi
b3J0IGFuZCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBsZXQgY3VlJ3MgdGV4dCB0cmFjayBj
dWUgc3RhcnQgdGltZSBiZSB0aGUgY29sbGVjdGVkIHRpbWUuCi0gICAgaWYgKCFjb2xsZWN0VGlt
ZVN0YW1wKGxpbmUsIHBvc2l0aW9uLCBtX2N1cnJlbnRTdGFydFRpbWUpKQotICAgICAgICByZXR1
cm4gQmFkQ3VlOwotICAgIGlmIChwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpKQorICAgIGlmICgh
Y29sbGVjdFRpbWVTdGFtcChpbnB1dCwgbV9jdXJyZW50U3RhcnRUaW1lKSkKICAgICAgICAgcmV0
dXJuIEJhZEN1ZTsKICAgICAKLSAgICBza2lwV2hpdGVTcGFjZShsaW5lLCBwb3NpdGlvbik7Cisg
ICAgaW5wdXQuc2tpcFdoaWxlPGlzQVNwYWNlPigpOwogCiAgICAgLy8gU3RlcHMgNiAtIDkgLSBJ
ZiB0aGUgbmV4dCB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBub3QgIi0tPiIsIGFib3J0IGFuZCByZXR1
cm4gZmFpbHVyZS4KLSAgICBpZiAobGluZS5maW5kKCItLT4iLCBwb3NpdGlvbikgPT0gbm90Rm91
bmQpCi0gICAgICAgIHJldHVybiBCYWRDdWU7Ci0gICAgcG9zaXRpb24gKz0gMzsKLSAgICBpZiAo
cG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSkKKyAgICBpZiAoIWlucHV0LnNjYW4oIi0tPiIpKQog
ICAgICAgICByZXR1cm4gQmFkQ3VlOwogICAgIAotICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUsIHBv
c2l0aW9uKTsKKyAgICBpbnB1dC5za2lwV2hpbGU8aXNBU3BhY2U+KCk7CiAKICAgICAvLyBTdGVw
cyAxMCAtIDExIC0gQ29sbGVjdCBhIFdlYlZUVCB0aW1lc3RhbXAuIElmIHRoYXQgZmFpbHMsIHRo
ZW4gYWJvcnQgYW5kIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGxldCBjdWUncyB0ZXh0IHRy
YWNrIGN1ZSBlbmQgdGltZSBiZSB0aGUgY29sbGVjdGVkIHRpbWUuCi0gICAgaWYgKCFjb2xsZWN0
VGltZVN0YW1wKGxpbmUsIHBvc2l0aW9uLCBtX2N1cnJlbnRFbmRUaW1lKSkKKyAgICBpZiAoIWNv
bGxlY3RUaW1lU3RhbXAoaW5wdXQsIG1fY3VycmVudEVuZFRpbWUpKQogICAgICAgICByZXR1cm4g
QmFkQ3VlOwotICAgIHNraXBXaGl0ZVNwYWNlKGxpbmUsIHBvc2l0aW9uKTsKKworICAgIGlucHV0
LnNraXBXaGlsZTxpc0FTcGFjZT4oKTsKIAogICAgIC8vIFN0ZXAgMTIgLSBQYXJzZSB0aGUgV2Vi
VlRUIHNldHRpbmdzIGZvciB0aGUgY3VlIChjb25kdWN0ZWQgaW4gVGV4dFRyYWNrQ3VlKS4KLSAg
ICBtX2N1cnJlbnRTZXR0aW5ncyA9IGxpbmUuc3Vic3RyaW5nKHBvc2l0aW9uLCBsaW5lLmxlbmd0
aCgpLTEpOworICAgIG1fY3VycmVudFNldHRpbmdzID0gaW5wdXQucmVzdE9mSW5wdXRBc1N0cmlu
ZygpOwogICAgIHJldHVybiBDdWVUZXh0OwogfQogCkBAIC00ODksNyArNDMyLDEzIEBAIHZvaWQg
V2ViVlRUUGFyc2VyOjpjcmVhdGVOZXdSZWdpb24oY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFdl
YlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmIGxpbmUsIHVuc2lnbmVk
JiBwb3NpdGlvbiwgZG91YmxlJiB0aW1lU3RhbXApCitib29sIFdlYlZUVFBhcnNlcjo6Y29sbGVj
dFRpbWVTdGFtcChjb25zdCBTdHJpbmcmIGxpbmUsIGRvdWJsZSYgdGltZVN0YW1wKQoreworICAg
IFZUVFNjYW5uZXIgaW5wdXQobGluZSk7CisgICAgcmV0dXJuIGNvbGxlY3RUaW1lU3RhbXAoaW5w
dXQsIHRpbWVTdGFtcCk7Cit9CisKK2Jvb2wgV2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltZVN0YW1w
KFZUVFNjYW5uZXImIGlucHV0LCBkb3VibGUmIHRpbWVTdGFtcCkKIHsKICAgICAvLyBDb2xsZWN0
IGEgV2ViVlRUIHRpbWVzdGFtcCAoNS4zIFdlYlZUVCBjdWUgdGltaW5ncyBhbmQgc2V0dGluZ3Mg
cGFyc2luZy4pCiAgICAgLy8gU3RlcHMgMSAtIDQgLSBJbml0aWFsIGNoZWNrcywgbGV0IG1vc3Qg
c2lnbmlmaWNhbnQgdW5pdHMgYmUgbWludXRlcy4KQEAgLTQ5OSwyNSArNDQ4LDIxIEBAIGJvb2wg
V2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltZVN0YW1wKGNvbnMKICAgICAvLyBTdGVwcyA1IC0gNyAt
IENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIDAtOS4KICAgICAvLyBJ
ZiBub3QgMiBjaGFyYWN0ZXJzIG9yIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiA1OSwgaW50ZXJwcmV0
IGFzIGhvdXJzLgogICAgIGludCB2YWx1ZTE7Ci0gICAgdW5zaWduZWQgdmFsdWUxRGlnaXRzID0g
Y29sbGVjdERpZ2l0c1RvSW50KGxpbmUsIHBvc2l0aW9uLCB2YWx1ZTEpOworICAgIHVuc2lnbmVk
IHZhbHVlMURpZ2l0cyA9IGlucHV0LnNjYW5EaWdpdHModmFsdWUxKTsKICAgICBpZiAoIXZhbHVl
MURpZ2l0cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICh2YWx1ZTFEaWdpdHMgIT0g
MiB8fCB2YWx1ZTEgPiA1OSkKICAgICAgICAgbW9kZSA9IGhvdXJzOwogCiAgICAgLy8gU3RlcHMg
OCAtIDExIC0gQ29sbGVjdCB0aGUgbmV4dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJzonIChtdXN0
IGJlIDIgY2hhcnMpLgotICAgIGlmIChwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVb
cG9zaXRpb24rK10gIT0gJzonKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW50IHZhbHVl
MjsKLSAgICBpZiAoY29sbGVjdERpZ2l0c1RvSW50KGxpbmUsIHBvc2l0aW9uLCB2YWx1ZTIpICE9
IDIpCisgICAgaWYgKCFpbnB1dC5zY2FuKCc6JykgfHwgaW5wdXQuc2NhbkRpZ2l0cyh2YWx1ZTIp
ICE9IDIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFN0ZXAgMTIgLSBEZXRlY3Qg
d2hldGhlciB0aGlzIHRpbWVzdGFtcCBpbmNsdWRlcyBob3Vycy4KICAgICBpbnQgdmFsdWUzOwot
ICAgIGlmIChtb2RlID09IGhvdXJzIHx8IChwb3NpdGlvbiA8IGxpbmUubGVuZ3RoKCkgJiYgbGlu
ZVtwb3NpdGlvbl0gPT0gJzonKSkgewotICAgICAgICBpZiAocG9zaXRpb24gPj0gbGluZS5sZW5n
dGgoKSB8fCBsaW5lW3Bvc2l0aW9uKytdICE9ICc6JykKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKGNvbGxlY3REaWdpdHNUb0ludChsaW5lLCBwb3NpdGlvbiwgdmFsdWUz
KSAhPSAyKQorICAgIGlmIChtb2RlID09IGhvdXJzIHx8IGlucHV0Lm1hdGNoKCc6JykpIHsKKyAg
ICAgICAgaWYgKCFpbnB1dC5zY2FuKCc6JykgfHwgaW5wdXQuc2NhbkRpZ2l0cyh2YWx1ZTMpICE9
IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmFs
dWUzID0gdmFsdWUyOwpAQCAtNTI2LDEwICs0NzEsOCBAQCBib29sIFdlYlZUVFBhcnNlcjo6Y29s
bGVjdFRpbWVTdGFtcChjb25zCiAgICAgfQogCiAgICAgLy8gU3RlcHMgMTMgLSAxNyAtIENvbGxl
Y3QgbmV4dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJy4nIChtdXN0IGJlIDMgY2hhcnMpLgotICAg
IGlmIChwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbcG9zaXRpb24rK10gIT0gJy4n
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW50IHZhbHVlNDsKLSAgICBpZiAoY29sbGVj
dERpZ2l0c1RvSW50KGxpbmUsIHBvc2l0aW9uLCB2YWx1ZTQpICE9IDMpCisgICAgaWYgKCFpbnB1
dC5zY2FuKCcuJykgfHwgaW5wdXQuc2NhbkRpZ2l0cyh2YWx1ZTQpICE9IDMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAodmFsdWUyID4gNTkgfHwgdmFsdWUzID4gNTkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTYzMSwxMCArNTc0LDkgQEAgdm9pZCBXZWJWVFRUcmVlQnVpbGRl
cjo6Y29uc3RydWN0VHJlZUZybwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXZWJW
VFRUb2tlblR5cGVzOjpUaW1lc3RhbXBUYWc6IHsKLSAgICAgICAgdW5zaWduZWQgcG9zaXRpb24g
PSAwOwogICAgICAgICBTdHJpbmcgY2hhcmFjdGVyc1N0cmluZyA9IG1fdG9rZW4uY2hhcmFjdGVy
cygpOwogICAgICAgICBkb3VibGUgcGFyc2VkVGltZVN0YW1wOwotICAgICAgICBpZiAoV2ViVlRU
UGFyc2VyOjpjb2xsZWN0VGltZVN0YW1wKGNoYXJhY3RlcnNTdHJpbmcsIHBvc2l0aW9uLCBwYXJz
ZWRUaW1lU3RhbXApKQorICAgICAgICBpZiAoV2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltZVN0YW1w
KGNoYXJhY3RlcnNTdHJpbmcsIHBhcnNlZFRpbWVTdGFtcCkpCiAgICAgICAgICAgICBtX2N1cnJl
bnROb2RlLT5wYXJzZXJBcHBlbmRDaGlsZChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNyZWF0ZShk
b2N1bWVudCwgInRpbWVzdGFtcCIsIGNoYXJhY3RlcnNTdHJpbmcpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtNjQzLDEyICs1ODUsNiBAQCB2b2lkIFdlYlZUVFRyZWVCdWlsZGVyOjpjb25z
dHJ1Y3RUcmVlRnJvCiAgICAgfQogfQogCi12b2lkIFdlYlZUVFBhcnNlcjo6c2tpcFdoaXRlU3Bh
Y2UoY29uc3QgU3RyaW5nJiBsaW5lLCB1bnNpZ25lZCYgcG9zaXRpb24pCi17Ci0gICAgd2hpbGUg
KHBvc2l0aW9uIDwgbGluZS5sZW5ndGgoKSAmJiBpc0FTcGFjZShsaW5lW3Bvc2l0aW9uXSkpCi0g
ICAgICAgIHBvc2l0aW9uKys7Ci19Ci0KIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgJKHJldmlzaW9uIDE2NjA4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYg
KzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBWVFRTY2FubmVyOwogCiBjbGFzcyBXZWJWVFRQYXJz
ZXJDbGllbnQgewogcHVibGljOgpAQCAtMTE5LDI1ICsxMjAsMjMgQEAgcHVibGljOgogICAgICAg
ICAgICAgfHwgdGFnTmFtZSA9PSBydFRhZzsKICAgICB9CiAKLSAgICBzdGF0aWMgaW5saW5lIGJv
b2wgaXNBU3BhY2UoY2hhciBjKQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FTcGFjZShVQ2hh
ciBjKQogICAgIHsKICAgICAgICAgLy8gV2ViVlRUIHNwYWNlIGNoYXJhY3RlcnMgYXJlIFUrMDAy
MCBTUEFDRSwgVSswMDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OICh0YWIpLCBVKzAwMEEgTElORSBG
RUVEIChMRiksIFUrMDAwQyBGT1JNIEZFRUQgKEZGKSwgYW5kIFUrMDAwRCBDQVJSSUFHRSBSRVRV
Uk4gICAgKENSKS4KICAgICAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09
ICdcbicgfHwgYyA9PSAnXGYnIHx8IGMgPT0gJ1xyJzsKICAgICB9Ci0gICAgc3RhdGljIGlubGlu
ZSBib29sIGlzVmFsaWRTZXR0aW5nRGVsaW1pdGVyKGNoYXIgYykKKyAgICBzdGF0aWMgaW5saW5l
IGJvb2wgaXNWYWxpZFNldHRpbmdEZWxpbWl0ZXIoVUNoYXIgYykKICAgICB7CiAgICAgICAgIC8v
IC4uLiBhIFdlYlZUVCBjdWUgY29uc2lzdHMgb2YgemVybyBvciBtb3JlIG9mIHRoZSBmb2xsb3dp
bmcgY29tcG9uZW50cywgaW4gYW55IG9yZGVyLCBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5
IG9uZSBvciBtb3JlIAogICAgICAgICAvLyBVKzAwMjAgU1BBQ0UgY2hhcmFjdGVycyBvciBVKzAw
MDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKHRhYikgY2hhcmFjdGVycy4KICAgICAgICAgcmV0dXJu
IGMgPT0gJyAnIHx8IGMgPT0gJ1x0JzsKICAgICB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNvbGxl
Y3REaWdpdHNUb0ludChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCYgcG9zaXRpb24sIGludCYgbnVt
YmVyKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RXb3JkKGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkKik7Ci0gICAgc3RhdGljIGJvb2wgY29sbGVjdFRpbWVTdGFtcChjb25zdCBTdHJpbmcmLCB1
bnNpZ25lZCYsIGRvdWJsZSYpOworICAgIHN0YXRpYyBib29sIGNvbGxlY3RUaW1lU3RhbXAoY29u
c3QgU3RyaW5nJiwgZG91YmxlJik7CiAKICNpZiBFTkFCTEUoV0VCVlRUX1JFR0lPTlMpCiAgICAg
Ly8gVXNlZnVsIGZ1bmN0aW9ucyBmb3IgcGFyc2luZyBwZXJjZW50YWdlIHNldHRpbmdzLgotICAg
IHN0YXRpYyBib29sIHBhcnNlRmxvYXRQZXJjZW50YWdlVmFsdWUoY29uc3QgU3RyaW5nJiwgZmxv
YXQmKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUZsb2F0UGVyY2VudGFnZVZhbHVlUGFpcihjb25z
dCBTdHJpbmcmLCBjaGFyLCBGbG9hdFBvaW50Jik7CisgICAgc3RhdGljIGJvb2wgcGFyc2VGbG9h
dFBlcmNlbnRhZ2VWYWx1ZShWVFRTY2FubmVyJiB2YWx1ZVNjYW5uZXIsIGZsb2F0Jik7CisgICAg
c3RhdGljIGJvb2wgcGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZVBhaXIoVlRUU2Nhbm5lciYgdmFs
dWVTY2FubmVyLCBjaGFyLCBGbG9hdFBvaW50Jik7CiAjZW5kaWYKIAogICAgIC8vIElucHV0IGRh
dGEgdG8gdGhlIHBhcnNlciB0byBwYXJzZS4KQEAgLTE3Niw3ICsxNzUsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY3JlYXRlTmV3UmVnaW9uKGNvbnN0IFN0cmluZyYgaGVhZGVyVmFsdWUpOwogI2Vu
ZGlmCiAKLSAgICBzdGF0aWMgdm9pZCBza2lwV2hpdGVTcGFjZShjb25zdCBTdHJpbmcmLCB1bnNp
Z25lZCYpOworICAgIHN0YXRpYyBib29sIGNvbGxlY3RUaW1lU3RhbXAoVlRUU2Nhbm5lciYgaW5w
dXQsIGRvdWJsZSYgdGltZVN0YW1wKTsKIAogICAgIEJ1ZmZlcmVkTGluZVJlYWRlciBtX2xpbmVS
ZWFkZXI7CiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsK
</data>
<flag name="review"
          id="251738"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>