<?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>176677</bug_id>
          
          <creation_ts>2017-09-10 15:35:25 -0700</creation_ts>
          <short_desc>WSL Substitution should probably wrap type variables of substituted types rather than just wrapping the whole type</short_desc>
          <delta_ts>2018-10-13 16:50:42 -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>WebGPU</component>
          <version>WebKit 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>
          
          <blocked>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1347302</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-10 15:35:25 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347303</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-10 15:39:06 -0700</bug_when>
    <thetext>I think that Substitution should do something akin to CheckWrapped, but instead of throwing errors, it should just wrap the bad thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347515</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-11 11:44:05 -0700</bug_when>
    <thetext>*** Bug 176678 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347516</commentid>
    <comment_count>3</comment_count>
      <attachid>320449</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-11 11:46:10 -0700</bug_when>
    <thetext>Created attachment 320449
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347538</commentid>
    <comment_count>4</comment_count>
      <attachid>320454</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-11 12:19:07 -0700</bug_when>
    <thetext>Created attachment 320454
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347611</commentid>
    <comment_count>5</comment_count>
      <attachid>320454</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-11 14:20:23 -0700</bug_when>
    <thetext>Comment on attachment 320454
the patch

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

&gt; Tools/WebGPUShadingLanguageRI/AutoWrapper.js:45
&gt; +        return TypeRef.wrap(node);

This should be VariableRef.wrap</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347680</commentid>
    <comment_count>6</comment_count>
      <attachid>320454</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-09-11 15:41:13 -0700</bug_when>
    <thetext>Comment on attachment 320454
the patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347696</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-11 16:00:18 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/221888/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353774</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 13:01:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694498&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468942</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 16:50:42 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/143</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320449</attachid>
            <date>2017-09-11 11:46:10 -0700</date>
            <delta_ts>2017-09-11 12:19:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20770</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTg2OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDcyIEBACisyMDE3LTA5LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIFN1YnN0aXR1dGlvbiBzaG91bGQgcHJvYmFibHkgd3JhcCB0eXBlIHZhcmlh
YmxlcyBvZiBzdWJzdGl0dXRlZCB0eXBlcyByYXRoZXIgdGhhbiBqdXN0IHdyYXBwaW5nIHRoZSB3
aG9sZSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzY2NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgYWRkcyBhIGNoZWNrZXIgdGhhdCB2ZXJpZmllcyB0aGF0IGFsbCB0eXBl
IHJlZmVyZW5jZXMgYW5kIHZhcmlhYmxlIHJlZmVyZW5jZXMgYXJlIHdyYXBwZWQuCisgICAgICAg
IAorICAgICAgICBUaGVuIHRoaXMgZml4ZXMgZXJyb3JzIGZvdW5kIGJ5IHRoYXQgY2hlY2tlciBi
eSBtYWtpbmcgU3Vic3RpdHV0aW9uIGF1dG8td3JhcCByZXBsYWNlbWVudHMgcmF0aGVyIHRoYW4K
KyAgICAgICAgbWFudWFsbHkgd3JhcHBpbmcgdGhlIG91dGVyIHR5cGUgKGZvciB0eXBlcykgYW5k
IGNsb25pbmcgKGZvciB2YWx1ZXMpLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0F1dG9XcmFwcGVy
LmpzOiBBZGRlZC4KKyAgICAgICAgKEF1dG9XcmFwcGVyLnByb3RvdHlwZS52aXNpdFZhcmlhYmxl
UmVmKToKKyAgICAgICAgKEF1dG9XcmFwcGVyLnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOgorICAg
ICAgICAoQXV0b1dyYXBwZXIucHJvdG90eXBlLnZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRlcik6
CisgICAgICAgIChBdXRvV3JhcHBlci5wcm90b3R5cGUudmlzaXRGdW5jUGFyYW1ldGVyKToKKyAg
ICAgICAgKEF1dG9XcmFwcGVyLnByb3RvdHlwZS52aXNpdFZhcmlhYmxlRGVjbCk6CisgICAgICAg
IChBdXRvV3JhcHBlci5wcm90b3R5cGUudmlzaXRTdHJ1Y3RUeXBlKToKKyAgICAgICAgKEF1dG9X
cmFwcGVyLnByb3RvdHlwZS52aXNpdE5hdGl2ZVR5cGUpOgorICAgICAgICAoQXV0b1dyYXBwZXIp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrV3JhcHBlZC5qczoKKyAg
ICAgICAgKGNoZWNrRXhwcmVzc2lvbldyYXBwZWQpOgorICAgICAgICAoY2hlY2tQcm9ncmFtV3Jh
cHBlZCk6CisgICAgICAgIChjaGVja1dyYXBwZWQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRXhwcmVzc2lvbkZpbmRlci5qczogQWRkZWQuCisgICAgICAgIChFeHByZXNzaW9u
RmluZGVyKToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0RnVuYyk6
CisgICAgICAgIChFeHByZXNzaW9uRmluZGVyLnByb3RvdHlwZS52aXNpdEZ1bmNQYXJhbWV0ZXIp
OgorICAgICAgICAoRXhwcmVzc2lvbkZpbmRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0QXNz
aWdubWVudCk6CisgICAgICAgIChFeHByZXNzaW9uRmluZGVyLnByb3RvdHlwZS52aXNpdENhbGxF
eHByZXNzaW9uKToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0UmV0
dXJuKToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0V2hpbGVMb29w
KToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0RG9XaGlsZUxvb3Ap
OgorICAgICAgICAoRXhwcmVzc2lvbkZpbmRlci5wcm90b3R5cGUudmlzaXRJZlN0YXRlbWVudCk6
CisgICAgICAgIChFeHByZXNzaW9uRmluZGVyLnByb3RvdHlwZS52aXNpdEZvckxvb3ApOgorICAg
ICAgICAoRXhwcmVzc2lvbkZpbmRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qczoKKyAg
ICAgICAgKE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTm9kZS5qczoKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLnN1YnN0aXR1dGVUb1VuaWZp
Y2F0aW9uKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUuY2xvbmUp
OiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanM6
CisgICAgICAgIChwcmVwYXJlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
dHJ1Y3RMYXlvdXRCdWlsZGVyLmpzOgorICAgICAgICAoU3RydWN0TGF5b3V0QnVpbGRlci5wcm90
b3R5cGUudmlzaXRSZWZlcmVuY2VUeXBlKToKKyAgICAgICAgKFN0cnVjdExheW91dEJ1aWxkZXIu
cHJvdG90eXBlLnZpc2l0RmllbGQpOgorICAgICAgICAoU3RydWN0TGF5b3V0QnVpbGRlcik6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0aW9uLmpzOgorICAgICAg
ICAoU3Vic3RpdHV0aW9uKToKKyAgICAgICAgKFN1YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRU
eXBlUmVmKToKKyAgICAgICAgKFN1YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRWYXJpYWJsZVJl
Zik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChURVNUX2NoYWlu
Q29uc3RleHByKToKKyAgICAgICAgKFRFU1RfY2hhaW5HZW5lcmljKToKKyAgICAgICAgKFRFU1Rf
Y2hhaW5TdHJ1Y3QpOgorICAgICAgICAoVEVTVF9jaGFpblN0cnVjdEludmFsaWQpOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanM6CisgICAgICAgIChWaXNpdG9y
LnByb3RvdHlwZS52aXNpdE5hdGl2ZVR5cGVJbnN0YW5jZSk6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvV3JhcENoZWNrZXIuanM6CisgICAgICAgIChXcmFwQ2hlY2tlci5wcm90
b3R5cGUuX2ZvdW5kVW53cmFwcGVkLm9yaWdpblN0cmluZyk6CisgICAgICAgIChXcmFwQ2hlY2tl
ci5wcm90b3R5cGUuX2ZvdW5kVW53cmFwcGVkKToKKyAgICAgICAgKFdyYXBDaGVja2VyKToKKwog
MjAxNy0wOS0xMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVHVy
biBvbiBleGNlcHRpb24gc2NvcGUgdmVyaWZpY2F0aW9uIGZvciBKU0MgdGVzdHMuCkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAgbG9hZCgiQWRkcmVzc1NwYWNlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUuanMi
KTsKIGxvYWQoIkFycmF5VHlwZS5qcyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOworbG9hZCgi
QXV0b1dyYXBwZXIuanMiKTsKIGxvYWQoIkJsb2NrLmpzIik7CiBsb2FkKCJCb29sTGl0ZXJhbC5q
cyIpOwogbG9hZCgiQnJlYWsuanMiKTsKQEAgLTYzLDYgKzY0LDcgQEAgbG9hZCgiRUJ1ZmZlckJ1
aWxkZXIuanMiKTsKIGxvYWQoIkVQdHIuanMiKTsKIGxvYWQoIkV2YWx1YXRpb25Db21tb24uanMi
KTsKIGxvYWQoIkV2YWx1YXRvci5qcyIpOworbG9hZCgiRXhwcmVzc2lvbkZpbmRlci5qcyIpOwog
bG9hZCgiRmllbGQuanMiKTsKIGxvYWQoIkZvckxvb3AuanMiKTsKIGxvYWQoIkZ1bmMuanMiKTsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0F1dG9XcmFwcGVyLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0F1dG9XcmFwcGVyLmpzCShu
b25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0F1dG9XcmFwcGVy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgQXV0b1dyYXBw
ZXIgZXh0ZW5kcyBSZXdyaXRlciB7CisgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICAgIAorICAgIHZpc2l0VHlwZVJlZihub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICAgIAorICAgIHZpc2l0Q29u
c3RleHByVHlwZVBhcmFtZXRlcihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhcmlhYmxl
UmVmLndyYXAobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0RnVuY1BhcmFtZXRlcihub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVSZWYud3JhcChub2RlKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXRWYXJpYWJsZURlY2wobm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYXJp
YWJsZVJlZi53cmFwKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFN0cnVjdFR5cGUobm9k
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBUeXBlUmVmLndyYXAobm9kZSk7CisgICAgfQorICAg
IAorICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVS
ZWYud3JhcChub2RlKTsKKyAgICB9Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DaGVja1dyYXBwZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ2hlY2tXcmFwcGVkLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja1dyYXBwZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDEwICsyNCwxMyBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLS8vIEZJWE1FOiBUaGlzIGRvZXNu
J3Qgd29yayBvbiBQcm9ncmFtLCBzbyB3ZSBjYW4ndCBjYWxsIGl0IGZyb20gcHJlcGFyZS4KLS8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2NzgKLQotZnVuY3Rp
b24gY2hlY2tXcmFwcGVkKG5vZGUpCitmdW5jdGlvbiBjaGVja0V4cHJlc3Npb25XcmFwcGVkKG5v
ZGUpCiB7CiAgICAgbm9kZS52aXNpdChuZXcgV3JhcENoZWNrZXIobm9kZSkpOwogfQorCitmdW5j
dGlvbiBjaGVja1Byb2dyYW1XcmFwcGVkKG5vZGUpCit7CisgICAgbm9kZS52aXNpdChuZXcgRXhw
cmVzc2lvbkZpbmRlcihjaGVja0V4cHJlc3Npb25XcmFwcGVkKSk7Cit9CisKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24gMjIxODY2KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMTU3LDcgKzE1Nyw3IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB7
CiAgICAgICAgIGxldCBzdHJ1Y3RUeXBlID0gbm9kZS5zdHJ1Y3QudmlzaXQodGhpcykudW5pZnlO
b2RlOwogICAgICAgICAKLSAgICAgICAgbm9kZS5zdHJ1Y3RUeXBlID0gc3RydWN0VHlwZTsKKyAg
ICAgICAgbm9kZS5zdHJ1Y3RUeXBlID0gVHlwZVJlZi53cmFwKHN0cnVjdFR5cGUpOwogICAgICAg
ICAKICAgICAgICAgbGV0IHVuZGVybHlpbmdTdHJ1Y3QgPSBzdHJ1Y3RUeXBlOwogICAgICAgICAK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXhwcmVzc2lvbkZp
bmRlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9F
eHByZXNzaW9uRmluZGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisK
Ky8vIFRoaXMgZmluZHMgdHlwZSBhbmQgdmFsdWUgZXhwcmVzc2lvbnMsIGJ1dCBza2lwcyB0eXBl
IGFuZCB2YWx1ZSBkZWNsYXJhdGlvbnMuCitjbGFzcyBFeHByZXNzaW9uRmluZGVyIGV4dGVuZHMg
VmlzaXRvciB7CisgICAgY29uc3RydWN0b3IoY2FsbGJhY2spCisgICAgeworICAgICAgICBzdXBl
cigpOworICAgICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIH0KKyAgICAKKyAg
ICB2aXNpdEZ1bmMobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUucmV0
dXJuVHlwZSk7CisgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIgb2Ygbm9kZS50eXBlUGFy
YW1ldGVycykKKyAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIudmlzaXQodGhpcyk7CisgICAgICAg
IGZvciAobGV0IHBhcmFtZXRlciBvZiBub2RlLnBhcmFtZXRlcnMpCisgICAgICAgICAgICBwYXJh
bWV0ZXIudmlzaXQodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0RnVuY1BhcmFtZXRlcihu
b2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZS50eXBlKTsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpCisgICAgeworICAgICAg
ICB0aGlzLl9jYWxsYmFjayhub2RlLnR5cGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEFzc2ln
bm1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUpOworICAgIH0K
KyAgICAKKyAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAgICAgICB0aGlz
Ll9jYWxsYmFjayhub2RlKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRSZXR1cm4obm9kZSkKKyAg
ICB7CisgICAgICAgIGlmIChub2RlLnZhbHVlKQorICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2so
bm9kZS52YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0V2hpbGVMb29wKG5vZGUpCisgICAg
eworICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlLmNvbmRpdGlvbmFsKTsKKyAgICAgICAgbm9k
ZS5ib2R5LnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdERvV2hpbGVMb29wKG5v
ZGUpCisgICAgeworICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIHRoaXMu
X2NhbGxiYWNrKG5vZGUuY29uZGl0aW9uYWwpOworICAgIH0KKyAgICAKKyAgICB2aXNpdElmU3Rh
dGVtZW50KG5vZGUpCisgICAgeworICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlLmNvbmRpdGlv
bmFsKTsKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOworICAgICAgICBpZiAobm9kZS5l
bHNlQm9keSkKKyAgICAgICAgICAgIG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcyk7CisgICAgfQor
ICAgIAorICAgIHZpc2l0Rm9yTG9vcChub2RlKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6
YXRpb24gaXMgYSBzdGF0ZW1lbnQsIG5vdCBhbiBleHByZXNzaW9uLiBJZiBpdCdzIGFuIGFzc2ln
bm1lbnQgb3IgdmFyaWFibGVEZWNsLCB3ZSdsbAorICAgICAgICAvLyBjYXRjaCBpdCBhbmQgcmVk
aXJlY3QgdG8gdGhlIGNhbGxiYWNrLgorICAgICAgICBpZiAobm9kZS5pbml0aWFsaXphdGlvbikK
KyAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6YXRpb24udmlzaXQodGhpcyk7CisgICAgICAgIAor
ICAgICAgICBpZiAobm9kZS5jb25kaXRpb24pCisgICAgICAgICAgICB0aGlzLl9jYWxsYmFjayhu
b2RlLmNvbmRpdGlvbik7CisgICAgICAgIGlmIChub2RlLmluY3JlbWVudCkKKyAgICAgICAgICAg
IHRoaXMuX2NhbGxiYWNrKG5vZGUuaW5jcmVtZW50KTsKKyAgICAgICAgCisgICAgICAgIG5vZGUu
Ym9keS52aXNpdCh0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRWYXJpYWJsZURlY2wobm9k
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUudHlwZSk7CisgICAgICAgIGlm
IChub2RlLmluaXRpYWxpemVyKQorICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZS5pbml0
aWFsaXplcik7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9OYXRpdmVGdW5jSW5zdGFuY2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTmF0aXZlRnVuY0luc3RhbmNlLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVGdW5jSW5zdGFuY2UuanMJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAgY2xhc3MgTmF0aXZlRnVuY0luc3RhbmNlIGV4dGVu
ZHMgRnVuYyB7CiAgICAgY29uc3RydWN0b3IoZnVuYywgcmV0dXJuVHlwZSwgcGFyYW1ldGVycywg
aXNDYXN0KQogICAgIHsKICAgICAgICAgc3VwZXIoZnVuYy5vcmlnaW4sIGZ1bmMubmFtZSwgcmV0
dXJuVHlwZSwgW10sIHBhcmFtZXRlcnMsIGlzQ2FzdCk7CisgICAgICAgIHRoaXMuX2Z1bmMgPSBm
dW5jOwogICAgIH0KICAgICAKICAgICBnZXQgZnVuYygpIHsgcmV0dXJuIHRoaXMuX2Z1bmM7IH0K
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkocmV2aXNpb24gMjIxODY2
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDkgKzEwOSw0IEBAIGNsYXNzIE5vZGUgewogICAgICAgICAgICAgcGFyYW1ldGVy
cywKICAgICAgICAgICAgIHBhcmFtZXRlcnMubWFwKHR5cGUgPT4gdW5pZmljYXRpb25Db250ZXh0
LmZpbmQodHlwZSkpKTsKICAgICB9Ci0gICAgCi0gICAgY2xvbmUoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMudmlzaXQobmV3IFJld3JpdGVyKCkpOwotICAgIH0KIH0KSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkocmV2aXNpb24gMjIxODY2KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTAgKzMzLDEyIEBAIGZ1bmN0aW9uIHByZXBhcmUob3JpZ2luLCBsaW5lTnVtYmVyT2Zm
c2UKICAgICByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSk7CiAgICAgY2hlY2socHJvZ3JhbSk7CiAg
ICAgY2hlY2tMaXRlcmFsVHlwZXMocHJvZ3JhbSk7CisgICAgY2hlY2tQcm9ncmFtV3JhcHBlZChw
cm9ncmFtKTsKICAgICBjaGVja1JldHVybnMocHJvZ3JhbSk7CiAgICAgY2hlY2tVbnJlYWNoYWJs
ZUNvZGUocHJvZ3JhbSk7CiAgICAgY2hlY2tMb29wcyhwcm9ncmFtKTsKICAgICBjaGVja1JlY3Vy
c2lvbihwcm9ncmFtKTsKKyAgICBjaGVja1Byb2dyYW1XcmFwcGVkKHByb2dyYW0pOwogICAgIGlu
bGluZShwcm9ncmFtKTsKICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdExheW91dEJ1aWxkZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5b3V0QnVpbGRlci5qcwkocmV2
aXNpb24gMjIxODY2KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0TGF5
b3V0QnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTAgQEAgY2xhc3MgU3Ry
dWN0TGF5b3V0QnVpbGRlciBleHRlbmRzIFZpc2l0bwogICAgICAgICB0aGlzLl9vZmZzZXQgPSAw
OwogICAgIH0KICAgICAKKyAgICB2aXNpdFJlZmVyZW5jZVR5cGUobm9kZSkKKyAgICB7CisgICAg
fQorICAgIAogICAgIHZpc2l0U3RydWN0VHlwZShub2RlKQogICAgIHsKICAgICAgICAgaWYgKG5v
ZGUuc2l6ZSAhPSBudWxsKQpAQCAtNDgsNiArNTIsNyBAQCBjbGFzcyBTdHJ1Y3RMYXlvdXRCdWls
ZGVyIGV4dGVuZHMgVmlzaXRvCiAgICAgCiAgICAgdmlzaXRGaWVsZChub2RlKQogICAgIHsKKyAg
ICAgICAgc3VwZXIudmlzaXRGaWVsZChub2RlKTsKICAgICAgICAgbm9kZS5vZmZzZXQgPSB0aGlz
Ll9vZmZzZXQ7CiAgICAgICAgIGxldCBzaXplID0gbm9kZS50eXBlLnNpemU7CiAgICAgICAgIGlm
IChzaXplID09IG51bGwpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWJz
dGl0dXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3Vic3RpdHV0aW9uLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdWJzdGl0dXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSw4
IEBAIGNsYXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIFJld3JpdGVyIHsKICAgICAgICAgaWYgKHBh
cmFtZXRlcnMubGVuZ3RoICE9IGFyZ3VtZW50TGlzdC5sZW5ndGgpCiAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIlBhcmFtZXRlcnMgYW5kIGFyZ3VtZW50cyBhcmUgbWlzbWF0Y2hlZCIpOwog
ICAgICAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgcGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGFyZ3VtZW50TGlz
dFtpXSBpbnN0YW5jZW9mIFZhbHVlKQotICAgICAgICAgICAgICAgIGNoZWNrV3JhcHBlZChhcmd1
bWVudExpc3RbaV0pOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVu
Z3RoOyArK2kpCiAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KHBhcmFtZXRlcnNbaV0sIGFyZ3Vt
ZW50TGlzdFtpXSk7Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdmlzaXRUeXBlUmVmKG5v
ZGUpCkBAIC00NCwxMiArNDEsNyBAQCBjbGFzcyBTdWJzdGl0dXRpb24gZXh0ZW5kcyBSZXdyaXRl
ciB7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCkgewogICAgICAgICAgICAgaWYgKG5vZGUudHlw
ZUFyZ3VtZW50cy5sZW5ndGgpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4
cGVjdGVkIHR5cGUgYXJndW1lbnRzIG9uIHR5cGUgdmFyaWFibGUiKTsKLSAgICAgICAgICAgIC8v
IFdoZW4gd2Ugc3Vic3RpdHV0ZSB0eXBlcywgd2Ugc2ltcGx5IHdyYXAgdGhlbSBpbiBhIHJlZi4g
V2UgZG8gdGhpcyBiZWNhdXNlIHdoZW4gd2Ugd29yayB3aXRoCi0gICAgICAgICAgICAvLyB0eXBl
cywgd2Ugb2Z0ZW4gcG9pbnQgdG8gdHlwZXMgZGlyZWN0bHkuCi0gICAgICAgICAgICAvLyBGSVhN
RTogV2hhdCBpZiB3ZSBlbmQgb2Ygd3JhcHBpbmcgc29tZXRoaW5nIGxpa2UgUHRyVHlwZShUeXBl
VmFyaWFibGUpPyBXb24ndCB0aGF0IHRoZW4gcHJldmVudAotICAgICAgICAgICAgLy8gZnVydGhl
ciBzdWJzdGl0dXRpb24/Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc2Njc3Ci0gICAgICAgICAgICByZXR1cm4gVHlwZVJlZi53cmFwKHJl
cGxhY2VtZW50KTsKKyAgICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudC52aXNpdChuZXcgQXV0
b1dyYXBwZXIoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGxldCByZXN1bHQgPSBz
dXBlci52aXNpdFR5cGVSZWYobm9kZSk7CkBAIC01OSwxMiArNTEsOCBAQCBjbGFzcyBTdWJzdGl0
dXRpb24gZXh0ZW5kcyBSZXdyaXRlciB7CiAgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQogICAg
IHsKICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdGhpcy5fbWFwLmdldChub2RlLnZhcmlhYmxl
KTsKLSAgICAgICAgaWYgKHJlcGxhY2VtZW50KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2hh
dCBpZiB3ZSBlbmQgdXAgZ2V0dGluZyBwYXNzZWQgYSBDb25zdGV4cHJUeXBlUGFyYW1ldGVyPyBX
b24ndCB0aGF0IHByZXZlbnQgZnVydGhlcgotICAgICAgICAgICAgLy8gc3Vic3RpdHV0aW9uPwot
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NjY3NwotICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LmNsb25lKCk7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKHJlcGxhY2VtZW50KQorICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50
LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBzdXBl
ci52aXNpdFZhcmlhYmxlUmVmKG5vZGUpOwogICAgIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9uIDIyMTg2NikKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsNyBA
QAogPHNjcmlwdCBzcmM9IkFycmF5UmVmVHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0i
QXJyYXlUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBc3NpZ25tZW50LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJBdXRvV3JhcHBlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iQmxvY2suanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkJvb2xMaXRlcmFsLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJCcmVhay5qcyI+PC9zY3JpcHQ+CkBAIC0zOSw2ICs0MCw3IEBA
CiA8c2NyaXB0IHNyYz0iRVB0ci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRXZhbHVhdGlv
bkNvbW1vbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRXZhbHVhdG9yLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJFeHByZXNzaW9uRmluZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJGaWVsZC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRm9yTG9vcC5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iRnVuYy5qcyI+PC9zY3JpcHQ+CkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuanMJKHJldmlzaW9uIDIyMTg2NikKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTE4NDIsNiArMTg0Miw5
MSBAQCBmdW5jdGlvbiBURVNUX2Zvckxvb3AoKQogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDcpXSksIDcpOwog
fQogCitmdW5jdGlvbiBURVNUX2NoYWluQ29uc3RleHByKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIGludCBmb288aW50IGE+KGludCBiKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYSArIGI7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhcjxpbnQgYT4o
aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmb288YT4oYik7CisgICAgICAg
IH0KKyAgICAgICAgaW50IGJheihpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGJhcjw0Mj4oYik7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA1OCldKSwg
NTggKyA0Mik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfY2hhaW5HZW5lcmljKCkKK3sKKyAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIFQgZm9vPFQ+KFQgeCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIH0KKyAgICAgICAgVCBiYXI8VD4odGhyZWFkIFRe
IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF5mb28ocHRyKTsKKyAgICAgICAg
fQorICAgICAgICBpbnQgYmF6KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YmFyKCZ4KTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiYmF6IiwgW10sIFttYWtlSW50KHByb2dyYW0sIDM3KV0pLCAzNyk7
Cit9CisKK2Z1bmN0aW9uIFRFU1RfY2hhaW5TdHJ1Y3QoKQoreworICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbzxUPiB7CisgICAgICAgICAgICBUIGY7CisgICAg
ICAgIH0KKyAgICAgICAgc3RydWN0IEJhcjxUPiB7CisgICAgICAgICAgICBGb288dGhyZWFkIFRe
PiBmOworICAgICAgICB9CisgICAgICAgIGludCBmb28odGhyZWFkIEJhcjxpbnQ+XiB4KQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gXngtPmYuZjsKKyAgICAgICAgfQorICAgICAgICBp
bnQgYmFyKGludCBhKQorICAgICAgICB7CisgICAgICAgICAgICBCYXI8aW50PiB4OworICAgICAg
ICAgICAgeC5mLmYgPSAmYTsKKyAgICAgICAgICAgIHJldHVybiBmb28oJngpOworICAgICAgICB9
CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJi
YXIiLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgNDY1NyldKSwgNDY1Nyk7Cit9CisKK2Z1bmN0aW9u
IFRFU1RfY2hhaW5TdHJ1Y3RJbnZhbGlkKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgp
ID0+IGRvUHJlcChgCisgICAgICAgICAgICBzdHJ1Y3QgRm9vPFQ+IHsKKyAgICAgICAgICAgICAg
ICBUIGY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJ1Y3QgQmFyPFQ+IHsKKyAgICAg
ICAgICAgICAgICBGb288ZGV2aWNlIFRePiBmOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aW50IGZvbyh0aHJlYWQgQmFyPGludD5eIHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIF54LT5mLmY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgYmFyKGRl
dmljZSBpbnReIGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQmFyPGludD4geDsK
KyAgICAgICAgICAgICAgICB4LmYuZiA9IGE7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbygm
eCk7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5j
ZW9mIFdUeXBlRXJyb3IpOworfQorCiBsZXQgZmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhp
bmcgYnkgZGVmYXVsdAogaWYgKHRoaXNbImFyZ3VtZW50cyJdKSB7CiAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2aXNpb24gMjIxODY2KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzEx
MCw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlz
aXROYXRpdmVUeXBlSW5zdGFuY2Uobm9kZSkKICAgICB7Ci0gICAgICAgIG5vZGUudHlwZS52aXNp
dChub2RlKTsKKyAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxl
dCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFy
Z3VtZW50LnZpc2l0KHRoaXMpOwogICAgIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1dyYXBDaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1dyYXBDaGVja2VyLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9XcmFwQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEs
NyArNDEsMTUgQEAgY2xhc3MgV3JhcENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAKICAg
ICBfZm91bmRVbndyYXBwZWQobm9kZSkKICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigi
Rm91bmQgdW53cmFwcGVkICIgKyBub2RlLmNvbnN0cnVjdG9yLm5hbWUgKyAiIGF0ICIgKyBub2Rl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiOiAiICsgbm9kZSArICJcbldoaWxlIHZpc2l0aW5nICIg
KyB0aGlzLl9zdGFydE5vZGUuY29uc3RydWN0b3IubmFtZSArICIgYXQgIiArIHRoaXMuX3N0YXJ0
Tm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIjogIiArIHRoaXMuX3N0YXJ0Tm9kZSk7CisgICAg
ICAgIGZ1bmN0aW9uIG9yaWdpblN0cmluZyhub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBs
ZXQgb3JpZ2luID0gbm9kZS5vcmlnaW47CisgICAgICAgICAgICBpZiAoIW9yaWdpbikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIjxudWxsIG9yaWdpbj4iOworICAgICAgICAgICAgcmV0dXJuIG9y
aWdpbi5vcmlnaW5TdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiRm91bmQgdW53cmFwcGVkICIgKyBub2RlLmNvbnN0cnVjdG9yLm5hbWUgKyAiIGF0
ICIgKyBvcmlnaW5TdHJpbmcobm9kZSkgKyAiOiAiICsgbm9kZSArICJcbldoaWxlIHZpc2l0aW5n
ICIgKyB0aGlzLl9zdGFydE5vZGUuY29uc3RydWN0b3IubmFtZSArICIgYXQgIiArIG9yaWdpblN0
cmluZyh0aGlzLl9zdGFydE5vZGUub3JpZ2luKSArICI6ICIgKyB0aGlzLl9zdGFydE5vZGUpOwog
ICAgIH0KICAgICAKICAgICB2aXNpdENvbnN0ZXhwclR5cGVQYXJhbWV0ZXIobm9kZSkKQEAgLTY4
LDQgKzc2LDkgQEAgY2xhc3MgV3JhcENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB7CiAg
ICAgICAgIHRoaXMuX2ZvdW5kVW53cmFwcGVkKG5vZGUpOwogICAgIH0KKyAgICAKKyAgICAvLyBO
T1RFOiBUaGlzIGRvZXMgbm90IGtub3cgaG93IHRvIGhhbmRsZSBOYXRpdmVUeXBlSW5zdGFuY2Us
IGJlY2F1c2UgdGhpcyBpcyBuZXZlciBjYWxsZWQgb24gaW5zdGFudGlhdGVkCisgICAgLy8gY29k
ZS4gT25jZSBjb2RlIGlzIGluc3RhbnRpYXRlZCwgeW91IGNhbm5vdCBpbnN0YW50aWF0ZSBpdCBm
dXJ0aGVyLgorICAgIAorICAgIC8vIE5PVEU6IFRoaXMgbmVlZHMgdG8gYmUga2VwdCBpbiBzeW5j
IHdpdGggQXV0b1dyYXBwZXIuCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320454</attachid>
            <date>2017-09-11 12:19:07 -0700</date>
            <delta_ts>2017-09-11 15:41:13 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22570</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTg2OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDcyIEBACisyMDE3LTA5LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIFN1YnN0aXR1dGlvbiBzaG91bGQgcHJvYmFibHkgd3JhcCB0eXBlIHZhcmlh
YmxlcyBvZiBzdWJzdGl0dXRlZCB0eXBlcyByYXRoZXIgdGhhbiBqdXN0IHdyYXBwaW5nIHRoZSB3
aG9sZSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzY2NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgYWRkcyBhIGNoZWNrZXIgdGhhdCB2ZXJpZmllcyB0aGF0IGFsbCB0eXBl
IHJlZmVyZW5jZXMgYW5kIHZhcmlhYmxlIHJlZmVyZW5jZXMgYXJlIHdyYXBwZWQuCisgICAgICAg
IAorICAgICAgICBUaGVuIHRoaXMgZml4ZXMgZXJyb3JzIGZvdW5kIGJ5IHRoYXQgY2hlY2tlciBi
eSBtYWtpbmcgU3Vic3RpdHV0aW9uIGF1dG8td3JhcCByZXBsYWNlbWVudHMgcmF0aGVyIHRoYW4K
KyAgICAgICAgbWFudWFsbHkgd3JhcHBpbmcgdGhlIG91dGVyIHR5cGUgKGZvciB0eXBlcykgYW5k
IGNsb25pbmcgKGZvciB2YWx1ZXMpLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0F1dG9XcmFwcGVy
LmpzOiBBZGRlZC4KKyAgICAgICAgKEF1dG9XcmFwcGVyLnByb3RvdHlwZS52aXNpdFZhcmlhYmxl
UmVmKToKKyAgICAgICAgKEF1dG9XcmFwcGVyLnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOgorICAg
ICAgICAoQXV0b1dyYXBwZXIucHJvdG90eXBlLnZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRlcik6
CisgICAgICAgIChBdXRvV3JhcHBlci5wcm90b3R5cGUudmlzaXRGdW5jUGFyYW1ldGVyKToKKyAg
ICAgICAgKEF1dG9XcmFwcGVyLnByb3RvdHlwZS52aXNpdFZhcmlhYmxlRGVjbCk6CisgICAgICAg
IChBdXRvV3JhcHBlci5wcm90b3R5cGUudmlzaXRTdHJ1Y3RUeXBlKToKKyAgICAgICAgKEF1dG9X
cmFwcGVyLnByb3RvdHlwZS52aXNpdE5hdGl2ZVR5cGUpOgorICAgICAgICAoQXV0b1dyYXBwZXIp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrV3JhcHBlZC5qczoKKyAg
ICAgICAgKGNoZWNrRXhwcmVzc2lvbldyYXBwZWQpOgorICAgICAgICAoY2hlY2tQcm9ncmFtV3Jh
cHBlZCk6CisgICAgICAgIChjaGVja1dyYXBwZWQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRXhwcmVzc2lvbkZpbmRlci5qczogQWRkZWQuCisgICAgICAgIChFeHByZXNzaW9u
RmluZGVyKToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0RnVuYyk6
CisgICAgICAgIChFeHByZXNzaW9uRmluZGVyLnByb3RvdHlwZS52aXNpdEZ1bmNQYXJhbWV0ZXIp
OgorICAgICAgICAoRXhwcmVzc2lvbkZpbmRlci5wcm90b3R5cGUudmlzaXRDb25zdGV4cHJUeXBl
UGFyYW1ldGVyKToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0QXNz
aWdubWVudCk6CisgICAgICAgIChFeHByZXNzaW9uRmluZGVyLnByb3RvdHlwZS52aXNpdENhbGxF
eHByZXNzaW9uKToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0UmV0
dXJuKToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0V2hpbGVMb29w
KToKKyAgICAgICAgKEV4cHJlc3Npb25GaW5kZXIucHJvdG90eXBlLnZpc2l0RG9XaGlsZUxvb3Ap
OgorICAgICAgICAoRXhwcmVzc2lvbkZpbmRlci5wcm90b3R5cGUudmlzaXRJZlN0YXRlbWVudCk6
CisgICAgICAgIChFeHByZXNzaW9uRmluZGVyLnByb3RvdHlwZS52aXNpdEZvckxvb3ApOgorICAg
ICAgICAoRXhwcmVzc2lvbkZpbmRlci5wcm90b3R5cGUudmlzaXRWYXJpYWJsZURlY2wpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qczoKKyAg
ICAgICAgKE5hdGl2ZUZ1bmNJbnN0YW5jZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTm9kZS5qczoKKyAgICAgICAgKE5vZGUucHJvdG90eXBlLnN1YnN0aXR1dGVUb1VuaWZp
Y2F0aW9uKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoTm9kZS5wcm90b3R5cGUuY2xvbmUp
OiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanM6
CisgICAgICAgIChwcmVwYXJlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
dHJ1Y3RMYXlvdXRCdWlsZGVyLmpzOgorICAgICAgICAoU3RydWN0TGF5b3V0QnVpbGRlci5wcm90
b3R5cGUudmlzaXRSZWZlcmVuY2VUeXBlKToKKyAgICAgICAgKFN0cnVjdExheW91dEJ1aWxkZXIu
cHJvdG90eXBlLnZpc2l0RmllbGQpOgorICAgICAgICAoU3RydWN0TGF5b3V0QnVpbGRlcik6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Vic3RpdHV0aW9uLmpzOgorICAgICAg
ICAoU3Vic3RpdHV0aW9uKToKKyAgICAgICAgKFN1YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRU
eXBlUmVmKToKKyAgICAgICAgKFN1YnN0aXR1dGlvbi5wcm90b3R5cGUudmlzaXRWYXJpYWJsZVJl
Zik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgIChURVNUX2NoYWlu
Q29uc3RleHByKToKKyAgICAgICAgKFRFU1RfY2hhaW5HZW5lcmljKToKKyAgICAgICAgKFRFU1Rf
Y2hhaW5TdHJ1Y3QpOgorICAgICAgICAoVEVTVF9jaGFpblN0cnVjdEludmFsaWQpOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanM6CisgICAgICAgIChWaXNpdG9y
LnByb3RvdHlwZS52aXNpdE5hdGl2ZVR5cGVJbnN0YW5jZSk6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvV3JhcENoZWNrZXIuanM6CisgICAgICAgIChXcmFwQ2hlY2tlci5wcm90
b3R5cGUuX2ZvdW5kVW53cmFwcGVkLm9yaWdpblN0cmluZyk6CisgICAgICAgIChXcmFwQ2hlY2tl
ci5wcm90b3R5cGUuX2ZvdW5kVW53cmFwcGVkKToKKyAgICAgICAgKFdyYXBDaGVja2VyKToKKwog
MjAxNy0wOS0xMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVHVy
biBvbiBleGNlcHRpb24gc2NvcGUgdmVyaWZpY2F0aW9uIGZvciBKU0MgdGVzdHMuCkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAgbG9hZCgiQWRkcmVzc1NwYWNlLmpzIik7CiBsb2FkKCJBcnJheVJlZlR5cGUuanMi
KTsKIGxvYWQoIkFycmF5VHlwZS5qcyIpOwogbG9hZCgiQXNzaWdubWVudC5qcyIpOworbG9hZCgi
QXV0b1dyYXBwZXIuanMiKTsKIGxvYWQoIkJsb2NrLmpzIik7CiBsb2FkKCJCb29sTGl0ZXJhbC5q
cyIpOwogbG9hZCgiQnJlYWsuanMiKTsKQEAgLTYzLDYgKzY0LDcgQEAgbG9hZCgiRUJ1ZmZlckJ1
aWxkZXIuanMiKTsKIGxvYWQoIkVQdHIuanMiKTsKIGxvYWQoIkV2YWx1YXRpb25Db21tb24uanMi
KTsKIGxvYWQoIkV2YWx1YXRvci5qcyIpOworbG9hZCgiRXhwcmVzc2lvbkZpbmRlci5qcyIpOwog
bG9hZCgiRmllbGQuanMiKTsKIGxvYWQoIkZvckxvb3AuanMiKTsKIGxvYWQoIkZ1bmMuanMiKTsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0F1dG9XcmFwcGVyLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0F1dG9XcmFwcGVyLmpzCShu
b25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0F1dG9XcmFwcGVy
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgQXV0b1dyYXBw
ZXIgZXh0ZW5kcyBSZXdyaXRlciB7CisgICAgdmlzaXRWYXJpYWJsZVJlZihub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICAgIAorICAgIHZpc2l0VHlwZVJlZihub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICAgIAorICAgIHZpc2l0Q29u
c3RleHByVHlwZVBhcmFtZXRlcihub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhcmlhYmxl
UmVmLndyYXAobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0RnVuY1BhcmFtZXRlcihub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVSZWYud3JhcChub2RlKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXRWYXJpYWJsZURlY2wobm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYXJp
YWJsZVJlZi53cmFwKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdFN0cnVjdFR5cGUobm9k
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBUeXBlUmVmLndyYXAobm9kZSk7CisgICAgfQorICAg
IAorICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVS
ZWYud3JhcChub2RlKTsKKyAgICB9Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9DaGVja1dyYXBwZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQ2hlY2tXcmFwcGVkLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja1dyYXBwZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDEwICsyNCwxMyBAQAogICovCiAidXNlIHN0cmljdCI7CiAKLS8vIEZJWE1FOiBUaGlzIGRvZXNu
J3Qgd29yayBvbiBQcm9ncmFtLCBzbyB3ZSBjYW4ndCBjYWxsIGl0IGZyb20gcHJlcGFyZS4KLS8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2NzgKLQotZnVuY3Rp
b24gY2hlY2tXcmFwcGVkKG5vZGUpCitmdW5jdGlvbiBjaGVja0V4cHJlc3Npb25XcmFwcGVkKG5v
ZGUpCiB7CiAgICAgbm9kZS52aXNpdChuZXcgV3JhcENoZWNrZXIobm9kZSkpOwogfQorCitmdW5j
dGlvbiBjaGVja1Byb2dyYW1XcmFwcGVkKG5vZGUpCit7CisgICAgbm9kZS52aXNpdChuZXcgRXhw
cmVzc2lvbkZpbmRlcihjaGVja0V4cHJlc3Npb25XcmFwcGVkKSk7Cit9CisKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24gMjIxODY2KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMTAxLDcgKzEwMSw3IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIGlmICghbm9kZS5lbGVtZW50VHlwZS5p
bnN0YW50aWF0ZWRUeXBlLmlzUHJpbWl0aXZlKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiSWxsZWdhbCBwb2ludGVyIHRvIG5vbi1w
cmltaXRpdmUgdHlwZTogIiArIG5vZGUuZWxlbWVudFR5cGUpOworICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiSWxsZWdhbCBwb2ludGVy
IHRvIG5vbi1wcmltaXRpdmUgdHlwZTogIiArIG5vZGUuZWxlbWVudFR5cGUgKyAiIChpbnN0YW50
aWF0ZWQgdG8gIiArIG5vZGUuZWxlbWVudFR5cGUuaW5zdGFudGlhdGVkVHlwZSArICIpIik7CiAg
ICAgfQogICAgIAogICAgIHZpc2l0QXJyYXlUeXBlKG5vZGUpCkBAIC0xNTcsNyArMTU3LDcgQEAg
Y2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHsKICAgICAgICAgbGV0IHN0cnVj
dFR5cGUgPSBub2RlLnN0cnVjdC52aXNpdCh0aGlzKS51bmlmeU5vZGU7CiAgICAgICAgIAotICAg
ICAgICBub2RlLnN0cnVjdFR5cGUgPSBzdHJ1Y3RUeXBlOworICAgICAgICBub2RlLnN0cnVjdFR5
cGUgPSBUeXBlUmVmLndyYXAoc3RydWN0VHlwZSk7CiAgICAgICAgIAogICAgICAgICBsZXQgdW5k
ZXJseWluZ1N0cnVjdCA9IHN0cnVjdFR5cGU7CiAgICAgICAgIApJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRXhwcmVzc2lvbkZpbmRlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FeHByZXNzaW9uRmluZGVyLmpzCShub25leGlzdGVu
dCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V4cHJlc3Npb25GaW5kZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8gVGhpcyBmaW5kcyB0eXBl
IGFuZCB2YWx1ZSBleHByZXNzaW9ucywgYnV0IHNraXBzIHR5cGUgYW5kIHZhbHVlIGRlY2xhcmF0
aW9ucy4KK2NsYXNzIEV4cHJlc3Npb25GaW5kZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBjb25z
dHJ1Y3RvcihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMu
X2NhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgfQorICAgIAorICAgIHZpc2l0RnVuYyhub2RlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZS5yZXR1cm5UeXBlKTsKKyAgICAgICAg
Zm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiBub2RlLnR5cGVQYXJhbWV0ZXJzKQorICAgICAgICAg
ICAgdHlwZVBhcmFtZXRlci52aXNpdCh0aGlzKTsKKyAgICAgICAgZm9yIChsZXQgcGFyYW1ldGVy
IG9mIG5vZGUucGFyYW1ldGVycykKKyAgICAgICAgICAgIHBhcmFtZXRlci52aXNpdCh0aGlzKTsK
KyAgICB9CisgICAgCisgICAgdmlzaXRGdW5jUGFyYW1ldGVyKG5vZGUpCisgICAgeworICAgICAg
ICB0aGlzLl9jYWxsYmFjayhub2RlLnR5cGUpOworICAgIH0KKyAgICAKKyAgICB2aXNpdENvbnN0
ZXhwclR5cGVQYXJhbWV0ZXIobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5v
ZGUudHlwZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0QXNzaWdubWVudChub2RlKQorICAgIHsK
KyAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZSk7CisgICAgfQorICAgIAorICAgIHZpc2l0Q2Fs
bEV4cHJlc3Npb24obm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdFJldHVybihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5v
ZGUudmFsdWUpCisgICAgICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlLnZhbHVlKTsKKyAgICB9
CisgICAgCisgICAgdmlzaXRXaGlsZUxvb3Aobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2Nh
bGxiYWNrKG5vZGUuY29uZGl0aW9uYWwpOworICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7
CisgICAgfQorICAgIAorICAgIHZpc2l0RG9XaGlsZUxvb3Aobm9kZSkKKyAgICB7CisgICAgICAg
IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9kZS5jb25k
aXRpb25hbCk7CisgICAgfQorICAgIAorICAgIHZpc2l0SWZTdGF0ZW1lbnQobm9kZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUuY29uZGl0aW9uYWwpOworICAgICAgICBub2Rl
LmJvZHkudmlzaXQodGhpcyk7CisgICAgICAgIGlmIChub2RlLmVsc2VCb2R5KQorICAgICAgICAg
ICAgbm9kZS5lbHNlQm9keS52aXNpdCh0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRGb3JM
b29wKG5vZGUpCisgICAgeworICAgICAgICAvLyBJbml0aWFsaXphdGlvbiBpcyBhIHN0YXRlbWVu
dCwgbm90IGFuIGV4cHJlc3Npb24uIElmIGl0J3MgYW4gYXNzaWdubWVudCBvciB2YXJpYWJsZURl
Y2wsIHdlJ2xsCisgICAgICAgIC8vIGNhdGNoIGl0IGFuZCByZWRpcmVjdCB0byB0aGUgY2FsbGJh
Y2suCisgICAgICAgIGlmIChub2RlLmluaXRpYWxpemF0aW9uKQorICAgICAgICAgICAgbm9kZS5p
bml0aWFsaXphdGlvbi52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLmNv
bmRpdGlvbikKKyAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKG5vZGUuY29uZGl0aW9uKTsKKyAg
ICAgICAgaWYgKG5vZGUuaW5jcmVtZW50KQorICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2sobm9k
ZS5pbmNyZW1lbnQpOworICAgICAgICAKKyAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdFZhcmlhYmxlRGVjbChub2RlKQorICAgIHsKKyAgICAgICAg
dGhpcy5fY2FsbGJhY2sobm9kZS50eXBlKTsKKyAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIp
CisgICAgICAgICAgICB0aGlzLl9jYWxsYmFjayhub2RlLmluaXRpYWxpemVyKTsKKyAgICB9Cit9
CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5j
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVG
dW5jSW5zdGFuY2UuanMJKHJldmlzaW9uIDIyMTg2NikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL05hdGl2ZUZ1bmNJbnN0YW5jZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQCBjbGFzcyBOYXRpdmVGdW5jSW5zdGFuY2UgZXh0ZW5kcyBGdW5jIHsKICAgICBjb25z
dHJ1Y3RvcihmdW5jLCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJzLCBpc0Nhc3QpCiAgICAgewogICAg
ICAgICBzdXBlcihmdW5jLm9yaWdpbiwgZnVuYy5uYW1lLCByZXR1cm5UeXBlLCBbXSwgcGFyYW1l
dGVycywgaXNDYXN0KTsKKyAgICAgICAgdGhpcy5fZnVuYyA9IGZ1bmM7CiAgICAgfQogICAgIAog
ICAgIGdldCBmdW5jKCkgeyByZXR1cm4gdGhpcy5fZnVuYzsgfQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksOSArMTA5LDQg
QEAgY2xhc3MgTm9kZSB7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLAogICAgICAgICAgICAgcGFy
YW1ldGVycy5tYXAodHlwZSA9PiB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0eXBlKSkpOwogICAg
IH0KLSAgICAKLSAgICBjbG9uZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy52aXNpdChu
ZXcgUmV3cml0ZXIoKSk7Ci0gICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJlcGFyZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9QcmVwYXJlLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTIgQEAg
ZnVuY3Rpb24gcHJlcGFyZShvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZQogICAgIHJlc29sdmVUeXBl
RGVmcyhwcm9ncmFtKTsKICAgICBjaGVjayhwcm9ncmFtKTsKICAgICBjaGVja0xpdGVyYWxUeXBl
cyhwcm9ncmFtKTsKKyAgICBjaGVja1Byb2dyYW1XcmFwcGVkKHByb2dyYW0pOwogICAgIGNoZWNr
UmV0dXJucyhwcm9ncmFtKTsKICAgICBjaGVja1VucmVhY2hhYmxlQ29kZShwcm9ncmFtKTsKICAg
ICBjaGVja0xvb3BzKHByb2dyYW0pOwogICAgIGNoZWNrUmVjdXJzaW9uKHByb2dyYW0pOworICAg
IGNoZWNrUHJvZ3JhbVdyYXBwZWQocHJvZ3JhbSk7CiAgICAgaW5saW5lKHByb2dyYW0pOwogICAg
IHJldHVybiBwcm9ncmFtOwogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RydWN0TGF5b3V0QnVpbGRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjE4NjYpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSwxMCBAQCBjbGFzcyBTdHJ1Y3RMYXlvdXRCdWlsZGVyIGV4
dGVuZHMgVmlzaXRvCiAgICAgICAgIHRoaXMuX29mZnNldCA9IDA7CiAgICAgfQogICAgIAorICAg
IHZpc2l0UmVmZXJlbmNlVHlwZShub2RlKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgdmlzaXRT
dHJ1Y3RUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBpZiAobm9kZS5zaXplICE9IG51bGwpCkBA
IC00OCw2ICs1Miw3IEBAIGNsYXNzIFN0cnVjdExheW91dEJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG8K
ICAgICAKICAgICB2aXNpdEZpZWxkKG5vZGUpCiAgICAgeworICAgICAgICBzdXBlci52aXNpdEZp
ZWxkKG5vZGUpOwogICAgICAgICBub2RlLm9mZnNldCA9IHRoaXMuX29mZnNldDsKICAgICAgICAg
bGV0IHNpemUgPSBub2RlLnR5cGUuc2l6ZTsKICAgICAgICAgaWYgKHNpemUgPT0gbnVsbCkKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1dGlvbi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdWJzdGl0dXRpb24uanMJKHJl
dmlzaW9uIDIyMTg2NikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N1YnN0aXR1
dGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDggQEAgY2xhc3MgU3Vic3RpdHV0
aW9uIGV4dGVuZHMgUmV3cml0ZXIgewogICAgICAgICBpZiAocGFyYW1ldGVycy5sZW5ndGggIT0g
YXJndW1lbnRMaXN0Lmxlbmd0aCkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUGFyYW1l
dGVycyBhbmQgYXJndW1lbnRzIGFyZSBtaXNtYXRjaGVkIik7CiAgICAgICAgIHRoaXMuX21hcCA9
IG5ldyBNYXAoKTsKLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRMaXN0W2ldIGluc3RhbmNlb2YgVmFs
dWUpCi0gICAgICAgICAgICAgICAgY2hlY2tXcmFwcGVkKGFyZ3VtZW50TGlzdFtpXSk7CisgICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7ICsraSkKICAgICAgICAg
ICAgIHRoaXMuX21hcC5zZXQocGFyYW1ldGVyc1tpXSwgYXJndW1lbnRMaXN0W2ldKTsKLSAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICB2aXNpdFR5cGVSZWYobm9kZSkKQEAgLTQ0LDEyICs0MSw3
IEBAIGNsYXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIFJld3JpdGVyIHsKICAgICAgICAgaWYgKHJl
cGxhY2VtZW50KSB7CiAgICAgICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkK
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdHlwZSBhcmd1bWVu
dHMgb24gdHlwZSB2YXJpYWJsZSIpOwotICAgICAgICAgICAgLy8gV2hlbiB3ZSBzdWJzdGl0dXRl
IHR5cGVzLCB3ZSBzaW1wbHkgd3JhcCB0aGVtIGluIGEgcmVmLiBXZSBkbyB0aGlzIGJlY2F1c2Ug
d2hlbiB3ZSB3b3JrIHdpdGgKLSAgICAgICAgICAgIC8vIHR5cGVzLCB3ZSBvZnRlbiBwb2ludCB0
byB0eXBlcyBkaXJlY3RseS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHdlIGVuZCBv
ZiB3cmFwcGluZyBzb21ldGhpbmcgbGlrZSBQdHJUeXBlKFR5cGVWYXJpYWJsZSk/IFdvbid0IHRo
YXQgdGhlbiBwcmV2ZW50Ci0gICAgICAgICAgICAvLyBmdXJ0aGVyIHN1YnN0aXR1dGlvbj8KLSAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2
NzcKLSAgICAgICAgICAgIHJldHVybiBUeXBlUmVmLndyYXAocmVwbGFjZW1lbnQpOworICAgICAg
ICAgICAgcmV0dXJuIHJlcGxhY2VtZW50LnZpc2l0KG5ldyBBdXRvV3JhcHBlcigpKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLnZpc2l0VHlwZVJlZihu
b2RlKTsKQEAgLTU5LDEyICs1MSw4IEBAIGNsYXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIFJld3Jp
dGVyIHsKICAgICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVw
bGFjZW1lbnQgPSB0aGlzLl9tYXAuZ2V0KG5vZGUudmFyaWFibGUpOwotICAgICAgICBpZiAocmVw
bGFjZW1lbnQpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHdlIGVuZCB1cCBnZXR0
aW5nIHBhc3NlZCBhIENvbnN0ZXhwclR5cGVQYXJhbWV0ZXI/IFdvbid0IHRoYXQgcHJldmVudCBm
dXJ0aGVyCi0gICAgICAgICAgICAvLyBzdWJzdGl0dXRpb24/Ci0gICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2Njc3Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVwbGFjZW1lbnQuY2xvbmUoKTsKLSAgICAgICAgfQorICAgICAgICBpZiAocmVwbGFj
ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQudmlzaXQobmV3IEF1dG9XcmFw
cGVyKCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHN1cGVyLnZpc2l0VmFyaWFibGVSZWYo
bm9kZSk7CiAgICAgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRt
bAkocmV2aXNpb24gMjIxODY2KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw3IEBACiA8c2NyaXB0IHNyYz0iQXJy
YXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJBcnJheVR5cGUuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IkFzc2lnbm1lbnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
IkF1dG9XcmFwcGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJCbG9jay5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iQm9vbExpdGVyYWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IkJyZWFrLmpzIj48L3NjcmlwdD4KQEAgLTM5LDYgKzQwLDcgQEAKIDxzY3JpcHQgc3JjPSJFUHRy
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJFdmFsdWF0aW9uQ29tbW9uLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJFdmFsdWF0b3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkV4
cHJlc3Npb25GaW5kZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZpZWxkLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJGb3JMb29wLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJG
dW5jLmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rl
c3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5q
cwkocmV2aXNpb24gMjIxODY2KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTg0Miw2ICsxODQyLDE0MSBAQCBmdW5jdGlvbiBURVNU
X2Zvckxvb3AoKQogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDcpXSksIDcpOwogfQogCitmdW5jdGlvbiBURVNU
X2NoYWluQ29uc3RleHByKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAg
IGludCBmb288aW50IGE+KGludCBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAr
IGI7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhcjxpbnQgYT4oaW50IGIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmb288YT4oYik7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJh
eihpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhcjw0Mj4oYik7CisgICAg
ICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImJheiIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA1OCldKSwgNTggKyA0Mik7Cit9CisKK2Z1
bmN0aW9uIFRFU1RfY2hhaW5HZW5lcmljKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
CisgICAgICAgIFQgZm9vPFQ+KFQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHg7
CisgICAgICAgIH0KKyAgICAgICAgVCBiYXI8VD4odGhyZWFkIFReIHB0cikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIF5mb28ocHRyKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmF6
KGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFyKCZ4KTsKKyAgICAgICAg
fQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
YmF6IiwgW10sIFttYWtlSW50KHByb2dyYW0sIDM3KV0pLCAzNyk7Cit9CisKK2Z1bmN0aW9uIFRF
U1RfY2hhaW5TdHJ1Y3QoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAg
c3RydWN0IEZvbzxUPiB7CisgICAgICAgICAgICBUIGY7CisgICAgICAgIH0KKyAgICAgICAgc3Ry
dWN0IEJhcjxUPiB7CisgICAgICAgICAgICBGb288dGhyZWFkIFRePiBmOworICAgICAgICB9Cisg
ICAgICAgIGludCBmb28odGhyZWFkIEJhcjxpbnQ+XiB4KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gXngtPmYuZjsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFyKGludCBhKQorICAg
ICAgICB7CisgICAgICAgICAgICBCYXI8aW50PiB4OworICAgICAgICAgICAgeC5mLmYgPSAmYTsK
KyAgICAgICAgICAgIHJldHVybiBmb28oJngpOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwgW21ha2VJbnQo
cHJvZ3JhbSwgNDY1NyldKSwgNDY1Nyk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfY2hhaW5TdHJ1Y3RJ
bnZhbGlkKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAg
ICAgICAgICBzdHJ1Y3QgRm9vPFQ+IHsKKyAgICAgICAgICAgICAgICBUIGY7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBzdHJ1Y3QgQmFyPFQ+IHsKKyAgICAgICAgICAgICAgICBGb288ZGV2
aWNlIFRePiBmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvbyh0aHJlYWQgQmFy
PGludD5eIHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF54LT5mLmY7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgYmFyKGRldmljZSBpbnReIGEpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQmFyPGludD4geDsKKyAgICAgICAgICAgICAgICB4
LmYuZiA9IGE7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbygmeCk7CisgICAgICAgICAgICB9
CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOwor
fQorCitmdW5jdGlvbiBURVNUX2NoYWluU3RydWN0RGV2aWNlKCkKK3sKKyAgICBsZXQgcHJvZ3Jh
bSA9IGRvUHJlcChgCisgICAgICAgIHN0cnVjdCBGb288VD4geworICAgICAgICAgICAgVCBmOwor
ICAgICAgICB9CisgICAgICAgIHN0cnVjdCBCYXI8VDpwcmltaXRpdmU+IHsKKyAgICAgICAgICAg
IEZvbzxkZXZpY2UgVF4+IGY7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbyh0aHJlYWQgQmFy
PGludD5eIHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBeeC0+Zi5mOworICAgICAg
ICB9CisgICAgICAgIGludCBiYXIoZGV2aWNlIGludF4gYSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQmFyPGludD4geDsKKyAgICAgICAgICAgIHguZi5mID0gYTsKKyAgICAgICAgICAgIHJldHVy
biBmb28oJngpOworICAgICAgICB9CisgICAgYCk7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVm
ZmVyKDEpOworICAgIGJ1ZmZlci5zZXQoMCwgNzkyMDEpOworICAgIGNoZWNrSW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFtUeXBlZFZhbHVlLmJveChuZXcgUHRy
VHlwZShudWxsLCAiZGV2aWNlIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludDMyKSwgbmV3IEVQdHIo
YnVmZmVyLCAwKSldKSwgNzkyMDEpOworfQorCitmdW5jdGlvbiBURVNUX3BhcmFtQ2hhaW5TdHJ1
Y3REZXZpY2UoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0
IEZvbzxUPiB7CisgICAgICAgICAgICBUIGY7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJh
cjxUPiB7CisgICAgICAgICAgICBGb288VD4gZjsKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9v
KHRocmVhZCBCYXI8ZGV2aWNlIGludF4+XiB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gXngtPmYuZjsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFyKGRldmljZSBpbnReIGEpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEJhcjxkZXZpY2UgaW50Xj4geDsKKyAgICAgICAgICAgIHgu
Zi5mID0gYTsKKyAgICAgICAgICAgIHJldHVybiBmb28oJngpOworICAgICAgICB9CisgICAgYCk7
CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVyKDEpOworICAgIGJ1ZmZlci5zZXQoMCwgNzky
MDEpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwg
W10sIFtUeXBlZFZhbHVlLmJveChuZXcgUHRyVHlwZShudWxsLCAiZGV2aWNlIiwgcHJvZ3JhbS5p
bnRyaW5zaWNzLmludDMyKSwgbmV3IEVQdHIoYnVmZmVyLCAwKSldKSwgNzkyMDEpOworfQorCiBs
ZXQgZmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdAogaWYgKHRoaXNb
ImFyZ3VtZW50cyJdKSB7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3Ro
OyBpKyspIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwko
cmV2aXNpb24gMjIxODY2KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRv
ci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIGNsYXNzIFZpc2l0b3IgZXh0
ZW5kcyBWaXNpdG9yQmFzZSB7CiAgICAgCiAgICAgdmlzaXROYXRpdmVUeXBlSW5zdGFuY2Uobm9k
ZSkKICAgICB7Ci0gICAgICAgIG5vZGUudHlwZS52aXNpdChub2RlKTsKKyAgICAgICAgbm9kZS50
eXBlLnZpc2l0KHRoaXMpOwogICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1lbnQgb2Ygbm9kZS50
eXBlQXJndW1lbnRzKQogICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpOwogICAg
IH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1dyYXBDaGVja2VyLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1dyYXBDaGVja2VyLmpz
CShyZXZpc2lvbiAyMjE4NjYpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XcmFw
Q2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsMTUgQEAgY2xhc3MgV3JhcENo
ZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAKICAgICBfZm91bmRVbndyYXBwZWQobm9kZSkK
ICAgICB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiRm91bmQgdW53cmFwcGVkICIgKyBub2Rl
LmNvbnN0cnVjdG9yLm5hbWUgKyAiIGF0ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAi
OiAiICsgbm9kZSArICJcbldoaWxlIHZpc2l0aW5nICIgKyB0aGlzLl9zdGFydE5vZGUuY29uc3Ry
dWN0b3IubmFtZSArICIgYXQgIiArIHRoaXMuX3N0YXJ0Tm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5n
ICsgIjogIiArIHRoaXMuX3N0YXJ0Tm9kZSk7CisgICAgICAgIGZ1bmN0aW9uIG9yaWdpblN0cmlu
Zyhub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBsZXQgb3JpZ2luID0gbm9kZS5vcmlnaW47
CisgICAgICAgICAgICBpZiAoIW9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm4gIjxudWxs
IG9yaWdpbj4iOworICAgICAgICAgICAgcmV0dXJuIG9yaWdpbi5vcmlnaW5TdHJpbmc7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiRm91bmQgdW53cmFwcGVk
ICIgKyBub2RlLmNvbnN0cnVjdG9yLm5hbWUgKyAiIGF0ICIgKyBvcmlnaW5TdHJpbmcobm9kZSkg
KyAiOiAiICsgbm9kZSArICJcbldoaWxlIHZpc2l0aW5nICIgKyB0aGlzLl9zdGFydE5vZGUuY29u
c3RydWN0b3IubmFtZSArICIgYXQgIiArIG9yaWdpblN0cmluZyh0aGlzLl9zdGFydE5vZGUub3Jp
Z2luKSArICI6ICIgKyB0aGlzLl9zdGFydE5vZGUpOwogICAgIH0KICAgICAKICAgICB2aXNpdENv
bnN0ZXhwclR5cGVQYXJhbWV0ZXIobm9kZSkKQEAgLTY4LDQgKzc2LDkgQEAgY2xhc3MgV3JhcENo
ZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB7CiAgICAgICAgIHRoaXMuX2ZvdW5kVW53cmFw
cGVkKG5vZGUpOwogICAgIH0KKyAgICAKKyAgICAvLyBOT1RFOiBUaGlzIGRvZXMgbm90IGtub3cg
aG93IHRvIGhhbmRsZSBOYXRpdmVUeXBlSW5zdGFuY2UsIGJlY2F1c2UgdGhpcyBpcyBuZXZlciBj
YWxsZWQgb24gaW5zdGFudGlhdGVkCisgICAgLy8gY29kZS4gT25jZSBjb2RlIGlzIGluc3RhbnRp
YXRlZCwgeW91IGNhbm5vdCBpbnN0YW50aWF0ZSBpdCBmdXJ0aGVyLgorICAgIAorICAgIC8vIE5P
VEU6IFRoaXMgbmVlZHMgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggQXV0b1dyYXBwZXIuCiB9Cg==
</data>
<flag name="review"
          id="340546"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>