<?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>151549</bug_id>
          
          <creation_ts>2015-11-22 10:46:57 -0800</creation_ts>
          <short_desc>Rename JavaScriptCore builtins files to match exposed object names</short_desc>
          <delta_ts>2015-11-23 14:10:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150482</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>darin</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1144053</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-11-22 10:46:57 -0800</bug_when>
    <thetext>As a subtask of unifying code generation for WebCore and JSC builtins, we need to get rid of differences between builtins filenames (e.g., Operations.Promise.js, Promise.prototype.js) and the name of the generated Builtin object (OperationsPromise, PromisePrototype). If we don&apos;t do this, then both build systems need special hacks to normalize the object name from the file name. It&apos;s easier to just normalize the filename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144058</commentid>
    <comment_count>1</comment_count>
      <attachid>266057</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-11-22 11:05:59 -0800</bug_when>
    <thetext>Created attachment 266057
Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144059</commentid>
    <comment_count>2</comment_count>
      <attachid>266058</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-11-22 11:08:40 -0800</bug_when>
    <thetext>Created attachment 266058
Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144065</commentid>
    <comment_count>3</comment_count>
      <attachid>266058</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-11-22 11:30:15 -0800</bug_when>
    <thetext>Comment on attachment 266058
Proposed Fix

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

Looks like the right direction to me.

&gt; Source/JavaScriptCore/CMakeLists.txt:1198
&gt;      ${JAVASCRIPTCORE_DIR}/builtins/GlobalObject.js

This filename has no suffix. Is it ok? Should we think of renaming it also?

&gt; Source/JavaScriptCore/CMakeLists.txt:1204
&gt; +    ${JAVASCRIPTCORE_DIR}/builtins/OperationsPromise.js

I would rename it to PromiseXXX.js so that it gets closer to other Promise related files.
If we were to follow WebCore, it would be named PromiseInternals.js, which would relate to @internal annotation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144106</commentid>
    <comment_count>4</comment_count>
      <attachid>266058</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-11-22 16:53:52 -0800</bug_when>
    <thetext>Comment on attachment 266058
Proposed Fix

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

&gt;&gt; Source/JavaScriptCore/CMakeLists.txt:1198
&gt;&gt;      ${JAVASCRIPTCORE_DIR}/builtins/GlobalObject.js
&gt; 
&gt; This filename has no suffix. Is it ok? Should we think of renaming it also?

I think it&apos;s okay, it&apos;s a singleton like ReflectObject and InspectorInstrumentationObject, and it can&apos;t be constructed.

&gt;&gt; Source/JavaScriptCore/CMakeLists.txt:1204
&gt;&gt; +    ${JAVASCRIPTCORE_DIR}/builtins/OperationsPromise.js
&gt; 
&gt; I would rename it to PromiseXXX.js so that it gets closer to other Promise related files.
&gt; If we were to follow WebCore, it would be named PromiseInternals.js, which would relate to @internal annotation.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144127</commentid>
    <comment_count>5</comment_count>
      <attachid>266058</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-11-22 23:02:25 -0800</bug_when>
    <thetext>Comment on attachment 266058
Proposed Fix

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144222</commentid>
    <comment_count>6</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-11-23 14:10:16 -0800</bug_when>
    <thetext>Committed r192751: &lt;http://trac.webkit.org/changeset/192751&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266057</attachid>
            <date>2015-11-22 11:05:59 -0800</date>
            <delta_ts>2015-11-22 11:07:39 -0800</delta_ts>
            <desc>Proposed Fix</desc>
            <filename>bug-151549-20151122110543.patch</filename>
            <type>text/plain</type>
            <size>115131</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YjE2NWRkY2E4ZWE1MGNjYmZmMGYwMzU3YzM2YzRmNmEyY2MyMDA4Li5lMDZiZDYxNDRmYzJmNDE1
MWY4MjI2MDhiYTg1NmUyNGNhMzE1NjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNS0xMS0yMiAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW5hbWUgSmF2YVNjcmlwdENvcmUgYnVpbHRpbnMgZmlsZXMgdG8gbWF0Y2ggZXhw
b3NlZCBvYmplY3QgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MTU0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFzIGEgc3VidGFzayBvZiB1bmlmeWluZyBjb2RlIGdlbmVyYXRpb24gZm9yIFdl
YkNvcmUgYW5kIEpTQyBidWlsdGlucywgd2UgbmVlZCB0byBnZXQgcmlkIG9mCisgICAgICAgIGRp
ZmZlcmVuY2VzIGJldHdlZW4gYnVpbHRpbnMgZmlsZW5hbWVzIChlLmcuLCBPcGVyYXRpb25zLlBy
b21pc2UuanMsIFByb21pc2UucHJvdG90eXBlLmpzKQorICAgICAgICBhbmQgdGhlIG5hbWUgb2Yg
dGhlIGdlbmVyYXRlZCBCdWlsdGluIG9iamVjdCAoT3BlcmF0aW9uc1Byb21pc2UsIFByb21pc2VQ
cm90b3R5cGUpLgorCisgICAgICAgIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gYm90aCBidWls
ZCBzeXN0ZW1zIG5lZWQgc3BlY2lhbCBoYWNrcyB0byBub3JtYWxpemUgdGhlIG9iamVjdCBuYW1l
CisgICAgICAgIGZyb20gdGhlIGZpbGUgbmFtZS4gSXQncyBlYXNpZXIgdG8ganVzdCBub3JtYWxp
emUgdGhlIGZpbGVuYW1lLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
RGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ1aWx0aW5zL0FycmF5SXRlcmF0b3JQcm90b3R5
cGUuanM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlJ
dGVyYXRvci5wcm90b3R5cGUuanMuCisgICAgICAgICogYnVpbHRpbnMvQXJyYXlQcm90b3R5cGUu
anM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXkucHJv
dG90eXBlLmpzLgorICAgICAgICAqIGJ1aWx0aW5zL0Z1bmN0aW9uUHJvdG90eXBlLmpzOiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0Z1bmN0aW9uLnByb3RvdHlw
ZS5qcy4KKyAgICAgICAgKiBidWlsdGlucy9JdGVyYXRvclByb3RvdHlwZS5qczogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9JdGVyYXRvci5wcm90b3R5cGUuanMu
CisgICAgICAgICogYnVpbHRpbnMvT3BlcmF0aW9uc1Byb21pc2UuanM6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvT3BlcmF0aW9ucy5Qcm9taXNlLmpzLgorICAg
ICAgICAqIGJ1aWx0aW5zL1Byb21pc2VQcm90b3R5cGUuanM6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJvbWlzZS5wcm90b3R5cGUuanMuCisgICAgICAgICog
YnVpbHRpbnMvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanM6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLmpzLgorICAg
ICAgICAqIGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvVHlwZWRBcnJheS5wcm90b3R5cGUuanMuCisKIDIw
MTUtMTEtMjAgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJF
R1JFU1NJT04ocjE5MjUzNik6IE51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBlZDMwZmZlMzBjOTIyZThkZjQwNzcxOWQzNjQ3NWI2YjYxMWU4Mjk2Li43
YmE3N2I3ODhiN2QzYmE2ZDU4YWVkZWY1ZjdhODJkNzM5ZTk5MGM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTkyLDIyICsxMTkyLDIyIEBAIHNldChCVUlMVElOU19H
RU5FUkFUT1JfU0NSSVBUUwogCiBzZXQoSmF2YVNjcmlwdENvcmVfQlVJTFRJTlNfU09VUkNFUwog
ICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9BcnJheUNvbnN0cnVjdG9yLmpzCi0g
ICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJvdG90eXBl
LmpzCi0gICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL0FycmF5LnByb3RvdHlwZS5q
cwotICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9GdW5jdGlvbi5wcm90b3R5cGUu
anMKKyAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5qcworICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9BcnJheVByb3RvdHlw
ZS5qcworICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9GdW5jdGlvblByb3RvdHlw
ZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9HbG9iYWxPYmplY3QuanMK
ICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0LmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL0ludGVybmFs
UHJvbWlzZUNvbnN0cnVjdG9yLmpzCi0gICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5z
L0l0ZXJhdG9yLnByb3RvdHlwZS5qcworICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlu
cy9JdGVyYXRvclByb3RvdHlwZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlu
cy9Nb2R1bGVMb2FkZXJPYmplY3QuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRp
bnMvT2JqZWN0Q29uc3RydWN0b3IuanMKLSAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRp
bnMvT3BlcmF0aW9ucy5Qcm9taXNlLmpzCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0
aW5zL09wZXJhdGlvbnNQcm9taXNlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0
aW5zL1Byb21pc2VDb25zdHJ1Y3Rvci5qcwotICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWls
dGlucy9Qcm9taXNlLnByb3RvdHlwZS5qcworICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWls
dGlucy9Qcm9taXNlUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0
aW5zL1JlZmxlY3RPYmplY3QuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMv
U3RyaW5nQ29uc3RydWN0b3IuanMKLSAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMv
U3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLmpzCi0gICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1
aWx0aW5zL1R5cGVkQXJyYXkucHJvdG90eXBlLmpzCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2J1aWx0aW5zL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzCisgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2J1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanMKICAgICAke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vYnVpbHRpbnMvVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzCiApCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMmY2NWRiNTVhMWVlZDM2NDlj
ZmUzM2Q3OGI5MjZjNjI1MTNhOWY2OC4uOGU3MDg5OTRjMzk0MDhmNTU5ZWY3NDY3NWFiOGEzNzY2
ZDA4ZTg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAg
LTgxLDIzICs4MSwyMyBAQCBCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUyA9IFwKIAogSmF2YVNj
cmlwdENvcmVfQlVJTFRJTlNfU09VUkNFUyA9IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWls
dGlucy9BcnJheUNvbnN0cnVjdG9yLmpzIFwKLSAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlu
cy9BcnJheUl0ZXJhdG9yLnByb3RvdHlwZS5qcyBcCi0gICAgJChKYXZhU2NyaXB0Q29yZSkvYnVp
bHRpbnMvQXJyYXkucHJvdG90eXBlLmpzIFwKLSAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlu
cy9GdW5jdGlvbi5wcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5z
L0FycmF5SXRlcmF0b3JQcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0
aW5zL0FycmF5UHJvdG90eXBlLmpzIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9G
dW5jdGlvblByb3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvR2xv
YmFsT2JqZWN0LmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3QuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5z
L0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzIFwKLSAgICAkKEphdmFTY3JpcHRDb3JlKS9i
dWlsdGlucy9JdGVyYXRvci5wcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1
aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWls
dGlucy9Nb2R1bGVMb2FkZXJPYmplY3QuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0
aW5zL09iamVjdENvbnN0cnVjdG9yLmpzIFwKLSAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlu
cy9PcGVyYXRpb25zLlByb21pc2UuanMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5z
L09wZXJhdGlvbnNQcm9taXNlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9Q
cm9taXNlQ29uc3RydWN0b3IuanMgXAotICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL1By
b21pc2UucHJvdG90eXBlLmpzIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9Qcm9t
aXNlUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9SZWZsZWN0
T2JqZWN0LmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9TdHJpbmdDb25zdHJ1
Y3Rvci5qcyBcCi0gICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvU3RyaW5nSXRlcmF0b3Iu
cHJvdG90eXBlLmpzIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9TdHJpbmdJdGVy
YXRvclByb3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvVHlwZWRB
cnJheUNvbnN0cnVjdG9yLmpzIFwKLSAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9UeXBl
ZEFycmF5LnByb3RvdHlwZS5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvVHlw
ZWRBcnJheVByb3RvdHlwZS5qcyBcCiAjCiAKICMgVGhlIGNvbWJpbmVkIG91dHB1dCBmaWxlIGRl
cGVuZHMgb24gdGhlIGNvbnRlbnRzIG9mIGJ1aWx0aW5zIGFuZCBnZW5lcmF0b3Igc2NyaXB0cywg
c28KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWQ3NDkxNmNjY2MyNmVkM2Q4NjRk
YmQ1MGYwZDkxNjMzOTMwYWUxMy4uNDA4OTgzYzNjODFhZTIyOTNhYzY1ZDNjYjEyOTQzMDY4MmVm
M2VlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMxNjcsNyArMzE2Nyw3IEBA
CiAJCTUzNzBCNEY0MUJGMjVFQTIwMDVDNDBGQyAvKiBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTM5MTdFN0ExQjc5MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTdDMUI3OTExMDYwMDBFQkQzMyAvKiBK
U1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNTM5MTdFODMxQjc5MUNCODAwMEVCRDMzIC8qIFR5cGVkQXJyYXkucHJvdG90eXBlLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlwZWRBcnJheS5wcm90
b3R5cGUuanM7IHBhdGggPSBidWlsdGlucy9UeXBlZEFycmF5LnByb3RvdHlwZS5qczsgc291cmNl
VHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk1MzkxN0U4MzFCNzkxQ0I4MDAwRUJEMzMgLyogVHlw
ZWRBcnJheVByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFt
ZSA9IFR5cGVkQXJyYXlQcm90b3R5cGUuanM7IHBhdGggPSBidWlsdGlucy9UeXBlZEFycmF5UHJv
dG90eXBlLmpzOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTUzRjI1NkUxMUI4N0Uy
ODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTQwNzU4NDE4RjRBMzc1MDA2MDJBNUQgLyog
Q29tcGlsZVJ1bnRpbWVUb0xMVk1JUi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7
IHBhdGggPSBDb21waWxlUnVudGltZVRvTExWTUlSLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1OTNENDNDQ0EwQkJFMDZEODlDNTk3MDcgLyogTWFwRGF0YUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzMTUsMTYgKzMzMTUsMTYgQEAKIAkJN0MxODRF
MjQxN0JGRkEzNjAwN0NCNjNBIC8qIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1Byb21pc2VDb25zdHJ1Y3Rvci5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MxODRFMjUxN0JGRkEzNjAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5s
dXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9taXNlUHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Q0Y5QkM1ODFCNjVEOUEzMDA5REIxRUYgLyogQXJyYXlDb25z
dHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEFycmF5Q29uc3RydWN0b3IuanM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDRjlCQzU5MUI2NUQ5QTMwMDlEQjFFRiAvKiBB
cnJheUl0ZXJhdG9yLnByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEFycmF5SXRl
cmF0b3IucHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Y5QkM1
OTFCNjVEOUEzMDA5REIxRUYgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNj
cmlwdDsgcGF0aCA9IEFycmF5SXRlcmF0b3JQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDRjlCQzVBMUI2NUQ5QTMwMDlEQjFFRiAvKiBHbG9iYWxPYmplY3QuanMg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBHbG9iYWxPYmplY3QuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTdDRjlCQzVCMUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVyYXRvci5wcm90b3R5
cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJdGVyYXRvci5wcm90b3R5cGUuanM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRjlCQzVCMUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVy
YXRvclByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9yUHJvdG90eXBl
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Y5QkM1QzFCNjVEOUIxMDA5REIx
RUYgLyogT2JqZWN0Q29uc3RydWN0b3IuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBPYmplY3RD
b25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NGOUJDNUQxQjY1
RDlCMTAwOURCMUVGIC8qIE9wZXJhdGlvbnMuUHJvbWlzZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0
aCA9IE9wZXJhdGlvbnMuUHJvbWlzZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0NGOUJDNUQxQjY1RDlCMTAwOURCMUVGIC8qIE9wZXJhdGlvbnNQcm9taXNlLmpzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZh
c2NyaXB0OyBwYXRoID0gT3BlcmF0aW9uc1Byb21pc2UuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDRjlCQzVFMUI2NUQ5QjEwMDlEQjFFRiAvKiBQcm9taXNlQ29uc3RydWN0b3Iu
anMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBQcm9taXNlQ29uc3RydWN0b3IuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRjlCQzVGMUI2NUQ5QjEwMDlEQjFFRiAvKiBSZWZsZWN0
T2JqZWN0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUmVmbGVjdE9iamVjdC5qczsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGOUJDNjAxQjY1RDlCMTAwOURCMUVGIC8qIFN0cmlu
Z0NvbnN0cnVjdG9yLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU3RyaW5nQ29uc3RydWN0b3Iu
anM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDRjlCQzYxMUI2NUQ5QjEwMDlEQjFF
RiAvKiBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBT
dHJpbmdJdGVyYXRvci5wcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDRkJBQzFDMThCNTM1RTUwMEQwMDc1MCAvKiBQcm9taXNlLnByb3RvdHlwZS5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFByb21pc2UucHJvdG90eXBlLmpzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Y5QkM2MTFCNjVEOUIxMDA5REIxRUYgLyog
U3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTdHJpbmdJ
dGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NGQkFD
MUMxOEI1MzVFNTAwRDAwNzUwIC8qIFByb21pc2VQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBQcm9taXNlUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3RTRFRTcwODBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJl
Q2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlQ2hhaW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U0RUU3MEUwRUJCN0E1QjAwNTkzNEFB
IC8qIFN0cnVjdHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYw
MTYxREYwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc4OSw3ICszNzg5LDcgQEAKIAkJQTdBOEFGMzEx
N0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFVpbnQ4Q2xhbXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVaW50MTZBcnJheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBN0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWludDMyQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBOTc5QzQxOEJFOEQ5RTAwMkMzNzMzIC8qIEZ1bmN0
aW9uLnByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9
IEZ1bmN0aW9uLnByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdB
OTc5QzQxOEJFOEQ5RTAwMkMzNzMzIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gRnVuY3Rpb25Qcm90b3R5cGUuanM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVj
dXRhYmxlQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1
dGFibGVBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNDhEQjYw
RUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9y
dE1hY3Jvcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4cG9ydE1hY3Jv
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzgxNCw3ICszODE0LDcgQEAKIAkJ
QTdDQTNBRTIxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1dlYWtNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdDQTNBRTkxN0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYWtNYXBEYXRhLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTdDQTNBRUExN0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtNYXBEYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3RDgwMUEwMTg4MEQ2NkUwMDI2QzM5QiAvKiBBcnJh
eS5wcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBB
cnJheS5wcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3RDgwMUEw
MTg4MEQ2NkUwMDI2QzM5QiAvKiBBcnJheVByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgcGF0aCA9IEFycmF5UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0Q4MDFBMTE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFi
bGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0aW5FeGVj
dXRhYmxlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDgwMUEyMTg4MEQ2
NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQnVpbHRpbkV4ZWN1dGFibGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3RDgwMUE2MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NCdWlsdGlucy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NTMzLDI3ICs2NTMzLDI3IEBACiAJCUE3RDgwMTlGMTg4
MEQ2NkUwMDI2QzM5QiAvKiBidWlsdGlucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJQTdEODAxQTAxODgwRDY2RTAwMjZDMzlCIC8qIEFycmF5LnByb3Rv
dHlwZS5qcyAqLywKKwkJCQlBN0Q4MDFBMDE4ODBENjZFMDAyNkMzOUIgLyogQXJyYXlQcm90b3R5
cGUuanMgKi8sCiAJCQkJN0NGOUJDNTgxQjY1RDlBMzAwOURCMUVGIC8qIEFycmF5Q29uc3RydWN0
b3IuanMgKi8sCi0JCQkJN0NGOUJDNTkxQjY1RDlBMzAwOURCMUVGIC8qIEFycmF5SXRlcmF0b3Iu
cHJvdG90eXBlLmpzICovLAorCQkJCTdDRjlCQzU5MUI2NUQ5QTMwMDlEQjFFRiAvKiBBcnJheUl0
ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJCUE3RDgwMUExMTg4MEQ2NkUwMDI2QzM5QiAvKiBC
dWlsdGluRXhlY3V0YWJsZXMuY3BwICovLAogCQkJCUE3RDgwMUEyMTg4MEQ2NkUwMDI2QzM5QiAv
KiBCdWlsdGluRXhlY3V0YWJsZXMuaCAqLywKIAkJCQlBNzVFRTlCMDE4QUFCN0UyMDBBQUQwNDMg
LyogQnVpbHRpbk5hbWVzLmggKi8sCiAJCQkJNDFERUExMzExQjlGMzE1NDAwNkQ2NUREIC8qIEJ1
aWx0aW5VdGlscy5oICovLAotCQkJCUE3QTk3OUM0MThCRThEOUUwMDJDMzczMyAvKiBGdW5jdGlv
bi5wcm90b3R5cGUuanMgKi8sCisJCQkJQTdBOTc5QzQxOEJFOEQ5RTAwMkMzNzMzIC8qIEZ1bmN0
aW9uUHJvdG90eXBlLmpzICovLAogCQkJCTdDRjlCQzVBMUI2NUQ5QTMwMDlEQjFFRiAvKiBHbG9i
YWxPYmplY3QuanMgKi8sCiAJCQkJRTM1RTAzNjExQjdBQjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLywKIAkJCQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4
NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgKi8sCi0JCQkJN0NGOUJDNUIxQjY1
RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yLnByb3RvdHlwZS5qcyAqLywKKwkJCQk3Q0Y5QkM1QjFC
NjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJRTMwNjc3OTcx
QjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlck9iamVjdC5qcyAqLywKIAkJCQk3Q0Y5QkM1
QzFCNjVEOUIxMDA5REIxRUYgLyogT2JqZWN0Q29uc3RydWN0b3IuanMgKi8sCi0JCQkJN0NGOUJD
NUQxQjY1RDlCMTAwOURCMUVGIC8qIE9wZXJhdGlvbnMuUHJvbWlzZS5qcyAqLywKLQkJCQk3Q0ZC
QUMxQzE4QjUzNUU1MDBEMDA3NTAgLyogUHJvbWlzZS5wcm90b3R5cGUuanMgKi8sCisJCQkJN0NG
OUJDNUQxQjY1RDlCMTAwOURCMUVGIC8qIE9wZXJhdGlvbnNQcm9taXNlLmpzICovLAorCQkJCTdD
RkJBQzFDMThCNTM1RTUwMEQwMDc1MCAvKiBQcm9taXNlUHJvdG90eXBlLmpzICovLAogCQkJCTdD
RjlCQzVFMUI2NUQ5QjEwMDlEQjFFRiAvKiBQcm9taXNlQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJ
N0NGOUJDNUYxQjY1RDlCMTAwOURCMUVGIC8qIFJlZmxlY3RPYmplY3QuanMgKi8sCiAJCQkJN0NG
OUJDNjAxQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmpzICovLAotCQkJCTdD
RjlCQzYxMUI2NUQ5QjEwMDlEQjFFRiAvKiBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUuanMgKi8s
Ci0JCQkJNTM5MTdFODMxQjc5MUNCODAwMEVCRDMzIC8qIFR5cGVkQXJyYXkucHJvdG90eXBlLmpz
ICovLAorCQkJCTdDRjlCQzYxMUI2NUQ5QjEwMDlEQjFFRiAvKiBTdHJpbmdJdGVyYXRvclByb3Rv
dHlwZS5qcyAqLywKKwkJCQk1MzkxN0U4MzFCNzkxQ0I4MDAwRUJEMzMgLyogVHlwZWRBcnJheVBy
b3RvdHlwZS5qcyAqLywKIAkJCQk1MzRDNDU3QTFCQzcwM0RDMDA3NDc2QTcgLyogVHlwZWRBcnJh
eUNvbnN0cnVjdG9yLmpzICovLAogCQkJKTsKIAkJCXBhdGggPSBidWlsdGluczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheS5wcm90b3R5cGUuanMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXkucHJvdG90eXBlLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDg4ZDI2MzllYmY0NDE5YTU1YzdhM2Y2ZWRiMGIxZDgw
MDBjY2YyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheS5wcm90b3R5cGUuanMKKysrIC9kZXYv
bnVsbApAQCAtMSw2NjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVz
dWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrIC8qLCBpbml0
aWFsVmFsdWUgKi8pCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKHRoaXMgPT09IG51
bGwpCi0gICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUucmVkdWNl
IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7Ci0KLSAgICBpZiAodGhpcyA9PT0g
dW5kZWZpbmVkKQotICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBl
LnJlZHVjZSByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgdW5kZWZpbmVkIik7Ci0KLSAgICB2
YXIgYXJyYXkgPSBAT2JqZWN0KHRoaXMpOwotICAgIHZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJy
YXkubGVuZ3RoKTsKLQotICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCi0g
ICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUucmVkdWNlIGNhbGxi
YWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpOwotCi0gICAgaWYgKGxlbmd0aCA9PT0gMCAmJiBhcmd1
bWVudHMubGVuZ3RoIDwgMikKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoInJlZHVjZSBv
ZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKLQotICAgIHZhciBhY2N1bXVs
YXRvciwgayA9IDA7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKQotICAgICAgICBhY2N1
bXVsYXRvciA9IGFyZ3VtZW50c1sxXTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2hpbGUgKGsgPCBs
ZW5ndGggJiYgIShrIGluIGFycmF5KSkKLSAgICAgICAgICAgIGsgKz0gMTsKLSAgICAgICAgaWYg
KGsgPj0gbGVuZ3RoKQotICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoInJlZHVjZSBv
ZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKLSAgICAgICAgYWNjdW11bGF0
b3IgPSBhcnJheVtrKytdOwotICAgIH0KLQotICAgIHdoaWxlIChrIDwgbGVuZ3RoKSB7Ci0gICAg
ICAgIGlmIChrIGluIGFycmF5KQotICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFjay5A
Y2FsbCh1bmRlZmluZWQsIGFjY3VtdWxhdG9yLCBhcnJheVtrXSwgaywgYXJyYXkpOwotICAgICAg
ICBrICs9IDE7Ci0gICAgfQotICAgIHJldHVybiBhY2N1bXVsYXRvcjsKLX0KLQotZnVuY3Rpb24g
cmVkdWNlUmlnaHQoY2FsbGJhY2sgLyosIGluaXRpYWxWYWx1ZSAqLykKLXsKLSAgICAidXNlIHN0
cmljdCI7Ci0KLSAgICBpZiAodGhpcyA9PT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBl
RXJyb3IoIkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCByZXF1aXJlcyB0aGF0IHx0aGlzfCBu
b3QgYmUgbnVsbCIpOwotCi0gICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKLSAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCByZXF1aXJlcyB0
aGF0IHx0aGlzfCBub3QgYmUgdW5kZWZpbmVkIik7Ci0KLSAgICB2YXIgYXJyYXkgPSBAT2JqZWN0
KHRoaXMpOwotICAgIHZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTsKLQotICAg
IGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCi0gICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgY2FsbGJhY2sgbXVzdCBiZSBh
IGZ1bmN0aW9uIik7Ci0KLSAgICBpZiAobGVuZ3RoID09PSAwICYmIGFyZ3VtZW50cy5sZW5ndGgg
PCAyKQotICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkg
YXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Ci0KLSAgICB2YXIgYWNjdW11bGF0b3IsIGsg
PSBsZW5ndGggLSAxOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkKLSAgICAgICAgYWNj
dW11bGF0b3IgPSBhcmd1bWVudHNbMV07Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlIChrID49
IDAgJiYgIShrIGluIGFycmF5KSkKLSAgICAgICAgICAgIGsgLT0gMTsKLSAgICAgICAgaWYgKGsg
PCAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVt
cHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwotICAgICAgICBhY2N1bXVsYXRvciA9
IGFycmF5W2stLV07Ci0gICAgfQotCi0gICAgd2hpbGUgKGsgPj0gMCkgewotICAgICAgICBpZiAo
ayBpbiBhcnJheSkKLSAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2suQGNhbGwodW5k
ZWZpbmVkLCBhY2N1bXVsYXRvciwgYXJyYXlba10sIGssIGFycmF5KTsKLSAgICAgICAgayAtPSAx
OwotICAgIH0KLSAgICByZXR1cm4gYWNjdW11bGF0b3I7Ci19Ci0KLWZ1bmN0aW9uIGV2ZXJ5KGNh
bGxiYWNrIC8qLCB0aGlzQXJnICovKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmICh0
aGlzID09PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90
eXBlLmV2ZXJ5IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7Ci0gICAgCi0gICAg
aWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFy
cmF5LnByb3RvdHlwZS5ldmVyeSByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgdW5kZWZpbmVk
Iik7Ci0gICAgCi0gICAgdmFyIGFycmF5ID0gQE9iamVjdCh0aGlzKTsKLSAgICB2YXIgbGVuZ3Ro
ID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0aCk7Ci0KLSAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9
PSAiZnVuY3Rpb24iKQotICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90
eXBlLmV2ZXJ5IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpOwotICAgIAotICAgIHZhciB0
aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7
Ci0gICAgCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBp
ZiAoIShpIGluIGFycmF5KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWNh
bGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5W2ldLCBpLCBhcnJheSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1mdW5jdGlv
biBmb3JFYWNoKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQotewotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIGlmICh0aGlzID09PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigi
QXJyYXkucHJvdG90eXBlLmZvckVhY2ggcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwi
KTsKLSAgICAKLSAgICBpZiAodGhpcyA9PT0gdW5kZWZpbmVkKQotICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZvckVhY2ggcmVxdWlyZXMgdGhhdCB8dGhpc3wg
bm90IGJlIHVuZGVmaW5lZCIpOwotICAgIAotICAgIHZhciBhcnJheSA9IEBPYmplY3QodGhpcyk7
Ci0gICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0aChhcnJheS5sZW5ndGgpOwotCi0gICAgaWYgKHR5
cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJy
b3IoIkFycmF5LnByb3RvdHlwZS5mb3JFYWNoIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIp
OwotICAgIAotICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVu
dHNbMV0gOiB1bmRlZmluZWQ7Ci0gICAgCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgICBpZiAoaSBpbiBhcnJheSkKLSAgICAgICAgICAgIGNhbGxiYWNrLkBj
YWxsKHRoaXNBcmcsIGFycmF5W2ldLCBpLCBhcnJheSk7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBm
aWx0ZXIoY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0g
ICAgaWYgKHRoaXMgPT09IG51bGwpCi0gICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJh
eS5wcm90b3R5cGUuZmlsdGVyIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7Ci0g
ICAgCi0gICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBl
RXJyb3IoIkFycmF5LnByb3RvdHlwZS5maWx0ZXIgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJl
IHVuZGVmaW5lZCIpOwotICAgIAotICAgIHZhciBhcnJheSA9IEBPYmplY3QodGhpcyk7Ci0gICAg
dmFyIGxlbmd0aCA9IEB0b0xlbmd0aChhcnJheS5sZW5ndGgpOwotCi0gICAgaWYgKHR5cGVvZiBj
YWxsYmFjayAhPT0gImZ1bmN0aW9uIikKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFy
cmF5LnByb3RvdHlwZS5maWx0ZXIgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7Ci0gICAg
Ci0gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6
IHVuZGVmaW5lZDsKLSAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgdmFyIG5leHRJbmRleCA9IDA7
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoIShp
IGluIGFycmF5KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB2YXIgY3VycmVudCA9
IGFycmF5W2ldCi0gICAgICAgIGlmIChjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCBjdXJyZW50LCBp
LCBhcnJheSkpIHsKLSAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIG5leHRJbmRl
eCwgY3VycmVudCk7Ci0gICAgICAgICAgICArK25leHRJbmRleDsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mdW5jdGlvbiBtYXAoY2FsbGJhY2sgLyosIHRoaXNB
cmcgKi8pCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKHRoaXMgPT09IG51bGwpCi0g
ICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUubWFwIHJlcXVpcmVz
IHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7Ci0gICAgCi0gICAgaWYgKHRoaXMgPT09IHVuZGVm
aW5lZCkKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5tYXAg
cmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIHVuZGVmaW5lZCIpOwotICAgIAotICAgIHZhciBh
cnJheSA9IEBPYmplY3QodGhpcyk7Ci0gICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0aChhcnJheS5s
ZW5ndGgpOwotCi0gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKLSAgICAg
ICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5tYXAgY2FsbGJhY2sgbXVz
dCBiZSBhIGZ1bmN0aW9uIik7Ci0gICAgCi0gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVu
Z3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKLSAgICB2YXIgcmVzdWx0ID0gW107
Ci0gICAgcmVzdWx0Lmxlbmd0aCA9IGxlbmd0aDsKLSAgICB2YXIgbmV4dEluZGV4ID0gMDsKLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmICghKGkgaW4g
YXJyYXkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHZhciBtYXBwZWRWYWx1ZSA9
IGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5W2ldLCBpLCBhcnJheSk7Ci0gICAgICAgIEBw
dXRCeVZhbERpcmVjdChyZXN1bHQsIGksIG1hcHBlZFZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotZnVuY3Rpb24gc29tZShjYWxsYmFjayAvKiwgdGhpc0FyZyAqLykKLXsK
LSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAodGhpcyA9PT0gbnVsbCkKLSAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5zb21lIHJlcXVpcmVzIHRoYXQgfHRo
aXN8IG5vdCBiZSBudWxsIik7Ci0gICAgCi0gICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKLSAg
ICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5zb21lIHJlcXVpcmVz
IHRoYXQgfHRoaXN8IG5vdCBiZSB1bmRlZmluZWQiKTsKLSAgICAKLSAgICB2YXIgYXJyYXkgPSBA
T2JqZWN0KHRoaXMpOwotICAgIHZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTsK
LQotICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCi0gICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuc29tZSBjYWxsYmFjayBtdXN0IGJlIGEg
ZnVuY3Rpb24iKTsKLSAgICAKLSAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAx
ID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgaWYgKCEoaSBpbiBhcnJheSkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5W2ldLCBpLCBh
cnJheSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1mdW5jdGlvbiBmaWxsKHZhbHVlIC8qIFssIHN0YXJ0IFssIGVuZF1dICovKQotewot
ICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmICh0aGlzID09PSBudWxsKQotICAgICAgICB0aHJv
dyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbGwgcmVxdWlyZXMgdGhhdCB8dGhp
c3wgbm90IGJlIG51bGwiKTsKLSAgICAKLSAgICBpZiAodGhpcyA9PT0gdW5kZWZpbmVkKQotICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbGwgcmVxdWlyZXMg
dGhhdCB8dGhpc3wgbm90IGJlIHVuZGVmaW5lZCIpOwotICAgIHZhciBPID0gQE9iamVjdCh0aGlz
KTsKLSAgICB2YXIgbGVuID0gQHRvTGVuZ3RoKE8ubGVuZ3RoKTsKLSAgICB2YXIgcmVsYXRpdmVT
dGFydCA9IDA7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAh
PT0gdW5kZWZpbmVkKQotICAgICAgICByZWxhdGl2ZVN0YXJ0ID0gYXJndW1lbnRzWzFdIHwgMDsK
LSAgICB2YXIgayA9IDA7Ci0gICAgaWYgKHJlbGF0aXZlU3RhcnQgPCAwKSB7Ci0gICAgICAgIGsg
PSBsZW4gKyByZWxhdGl2ZVN0YXJ0OwotICAgICAgICBpZiAoayA8IDApCi0gICAgICAgICAgICBr
ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBrID0gcmVsYXRpdmVTdGFydDsKLSAgICAgICAg
aWYgKGsgPiBsZW4pCi0gICAgICAgICAgICBrID0gbGVuOwotICAgIH0KLSAgICB2YXIgcmVsYXRp
dmVFbmQgPSBsZW47Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1sy
XSAhPT0gdW5kZWZpbmVkKQotICAgICAgICByZWxhdGl2ZUVuZCA9IGFyZ3VtZW50c1syXSB8IDA7
Ci0gICAgdmFyIGZpbmFsID0gMDsKLSAgICBpZiAocmVsYXRpdmVFbmQgPCAwKSB7Ci0gICAgICAg
IGZpbmFsID0gbGVuICsgcmVsYXRpdmVFbmQ7Ci0gICAgICAgIGlmIChmaW5hbCA8IDApCi0gICAg
ICAgICAgICBmaW5hbCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmluYWwgPSByZWxhdGl2
ZUVuZDsKLSAgICAgICAgaWYgKGZpbmFsID4gbGVuKQotICAgICAgICAgICAgZmluYWwgPSBsZW47
Ci0gICAgfQotICAgIGZvciAoOyBrIDwgZmluYWw7IGsrKykKLSAgICAgICAgT1trXSA9IHZhbHVl
OwotICAgIHJldHVybiBPOwotfQotCi1mdW5jdGlvbiBmaW5kKGNhbGxiYWNrIC8qLCB0aGlzQXJn
ICovKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmICh0aGlzID09PSBudWxsKQotICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbmQgcmVxdWlyZXMg
dGhhdCB8dGhpc3wgbm90IGJlIG51bGwiKTsKLSAgICAKLSAgICBpZiAodGhpcyA9PT0gdW5kZWZp
bmVkKQotICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbmQg
cmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIHVuZGVmaW5lZCIpOwotICAgIAotICAgIHZhciBh
cnJheSA9IEBPYmplY3QodGhpcyk7Ci0gICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0aChhcnJheS5s
ZW5ndGgpOwotCi0gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKLSAgICAg
ICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5maW5kIGNhbGxiYWNrIG11
c3QgYmUgYSBmdW5jdGlvbiIpOwotICAgIAotICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxl
bmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7Ci0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICB2YXIga1ZhbHVlID0gYXJyYXlbaV07Ci0gICAg
ICAgIGlmIChjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCBrVmFsdWUsIGksIGFycmF5KSkKLSAgICAg
ICAgICAgIHJldHVybiBrVmFsdWU7Ci0gICAgfQotICAgIHJldHVybiB1bmRlZmluZWQ7Ci19Ci0K
LWZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFjayAvKiwgdGhpc0FyZyAqLykKLXsKLSAgICAidXNl
IHN0cmljdCI7Ci0KLSAgICBpZiAodGhpcyA9PT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEBU
eXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXggcmVxdWlyZXMgdGhhdCB8dGhpc3wg
bm90IGJlIG51bGwiKTsKLSAgICAKLSAgICBpZiAodGhpcyA9PT0gdW5kZWZpbmVkKQotICAgICAg
ICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCByZXF1aXJl
cyB0aGF0IHx0aGlzfCBub3QgYmUgdW5kZWZpbmVkIik7Ci0gICAgCi0gICAgdmFyIGFycmF5ID0g
QE9iamVjdCh0aGlzKTsKLSAgICB2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0aCk7
Ci0KLSAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQotICAgICAgICB0aHJv
dyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCBjYWxsYmFjayBtdXN0
IGJlIGEgZnVuY3Rpb24iKTsKLSAgICAKLSAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5n
dGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFy
cmF5W2ldLCBpLCBhcnJheSkpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0gICAgcmV0
dXJuIC0xOwotfQotCi1mdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8qLCBmcm9tSW5k
ZXgqLykKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAodGhpcyA9PT0gbnVsbCkKLSAg
ICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyByZXF1
aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOwotCi0gICAgaWYgKHRoaXMgPT09IHVuZGVm
aW5lZCkKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5pbmNs
dWRlcyByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgdW5kZWZpbmVkIik7Ci0KLSAgICB2YXIg
YXJyYXkgPSBAT2JqZWN0KHRoaXMpOwotICAgIHZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXku
bGVuZ3RoKTsKLQotICAgIGlmIChsZW5ndGggPT09IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHZhciBmcm9tSW5kZXggPSAwOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAm
JiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCkKLSAgICAgICAgZnJvbUluZGV4ID0gYXJndW1l
bnRzWzFdIHwgMDsKLQotICAgIHZhciBpbmRleDsKLSAgICBpZiAoZnJvbUluZGV4ID49IDApCi0g
ICAgICAgIGluZGV4ID0gZnJvbUluZGV4OwotICAgIGVsc2UKLSAgICAgICAgaW5kZXggPSBsZW5n
dGggKyBmcm9tSW5kZXg7Ci0KLSAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICBpbmRleCA9IDA7
Ci0KLSAgICB2YXIgY3VycmVudEVsZW1lbnQ7Ci0gICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyAr
K2luZGV4KSB7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gYXJyYXlbaW5kZXhdOwotICAgICAg
ICAvLyBVc2UgU2FtZVZhbHVlWmVybyBjb21wYXJpc29uLCByYXRoZXIgdGhhbiBqdXN0IFN0cmlj
dEVxdWFscy4KLSAgICAgICAgaWYgKHNlYXJjaEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50IHx8
IChzZWFyY2hFbGVtZW50ICE9PSBzZWFyY2hFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBj
dXJyZW50RWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1mdW5jdGlvbiBzb3J0KGNvbXBhcmF0b3IpCi17Ci0gICAgInVzZSBz
dHJpY3QiOwotCi0gICAgZnVuY3Rpb24gbWluKGEsIGIpCi0gICAgewotICAgICAgICByZXR1cm4g
YSA8IGIgPyBhIDogYjsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzdHJpbmdDb21wYXJhdG9yKGEs
IGIpCi0gICAgewotICAgICAgICB2YXIgYVN0cmluZyA9IGEuc3RyaW5nOwotICAgICAgICB2YXIg
YlN0cmluZyA9IGIuc3RyaW5nOwotCi0gICAgICAgIHZhciBhTGVuZ3RoID0gYVN0cmluZy5sZW5n
dGg7Ci0gICAgICAgIHZhciBiTGVuZ3RoID0gYlN0cmluZy5sZW5ndGg7Ci0gICAgICAgIHZhciBs
ZW5ndGggPSBtaW4oYUxlbmd0aCwgYkxlbmd0aCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGFDaGFyQ29kZSA9IGFTdHJpbmcu
QGNoYXJDb2RlQXQoaSk7Ci0gICAgICAgICAgICB2YXIgYkNoYXJDb2RlID0gYlN0cmluZy5AY2hh
ckNvZGVBdChpKTsKLQotICAgICAgICAgICAgaWYgKGFDaGFyQ29kZSA9PSBiQ2hhckNvZGUpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHJldHVybiBhQ2hhckNvZGUg
LSBiQ2hhckNvZGU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYUxlbmd0aCAtIGJMZW5n
dGg7Ci0gICAgfQotCi0gICAgLy8gTW92ZSB1bmRlZmluZWRzIGFuZCBob2xlcyB0byB0aGUgZW5k
IG9mIGEgc3BhcnNlIGFycmF5LiBSZXN1bHQgaXMgW3ZhbHVlcy4uLiwgdW5kZWZpbmVkcy4uLiwg
aG9sZXMuLi5dLgotICAgIGZ1bmN0aW9uIGNvbXBhY3RTcGFyc2UoYXJyYXksIGRzdCwgc3JjLCBs
ZW5ndGgpCi0gICAgewotICAgICAgICB2YXIgdmFsdWVzID0gWyBdOwotICAgICAgICB2YXIgc2Vl
biA9IHsgfTsKLSAgICAgICAgdmFyIHZhbHVlQ291bnQgPSAwOwotICAgICAgICB2YXIgdW5kZWZp
bmVkQ291bnQgPSAwOwotCi0gICAgICAgIC8vIENsZWFuIHVwIGFmdGVyIHRoZSBpbi1wcm9ncmVz
cyBub24tc3BhcnNlIGNvbXBhY3Rpb24gdGhhdCBmYWlsZWQuCi0gICAgICAgIGZvciAodmFyIGkg
PSBkc3Q7IGkgPCBzcmM7ICsraSkKLSAgICAgICAgICAgIGRlbGV0ZSBhcnJheVtpXTsKLQotICAg
ICAgICBmb3IgKHZhciBvYmplY3QgPSBhcnJheTsgb2JqZWN0OyBvYmplY3QgPSBAT2JqZWN0LkBn
ZXRQcm90b3R5cGVPZihvYmplY3QpKSB7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lcyA9
IEBPYmplY3QuQGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgIHZhciBpbmRleCA9IHByb3BlcnR5TmFtZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGlu
ZGV4IDwgbGVuZ3RoKSB7IC8vIEV4Y2x1ZGUgbm9uLW51bWVyaWMgcHJvcGVydGllcyBhbmQgcHJv
cGVydGllcyBwYXN0IGxlbmd0aC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW5baW5kZXhd
KSAvLyBFeGNsdWRlIGR1cGxpY2F0ZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgc2VlbltpbmRleF0gPSAxOwotCi0gICAgICAgICAgICAg
ICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIGFycmF5W2luZGV4XTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVu
ZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgKyt1bmRlZmluZWRDb3VudDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgYXJyYXlbdmFsdWVDb3VudCsrXSA9IHZhbHVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFy
IGkgPSB2YWx1ZUNvdW50OyBpIDwgdmFsdWVDb3VudCArIHVuZGVmaW5lZENvdW50OyArK2kpCi0g
ICAgICAgICAgICBhcnJheVtpXSA9IHVuZGVmaW5lZDsKLQotICAgICAgICByZXR1cm4gdmFsdWVD
b3VudDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjb21wYWN0U2xvdyhhcnJheSwgbGVuZ3RoKQot
ICAgIHsKLSAgICAgICAgdmFyIGhvbGVDb3VudCA9IDA7Ci0KLSAgICAgICAgZm9yICh2YXIgZHN0
ID0gMCwgc3JjID0gMDsgc3JjIDwgbGVuZ3RoOyArK3NyYykgewotICAgICAgICAgICAgaWYgKCEo
c3JjIGluIGFycmF5KSkgewotICAgICAgICAgICAgICAgICsraG9sZUNvdW50OwotICAgICAgICAg
ICAgICAgIGlmIChob2xlQ291bnQgPCAyNTYpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIHJldHVybiBjb21wYWN0U3BhcnNlKGFycmF5LCBkc3QsIHNyYywg
bGVuZ3RoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlb
c3JjXTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBhcnJheVtkc3QrK10gPSB2YWx1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciB2YWx1ZUNvdW50ID0gZHN0OwotICAgICAgICB2YXIgdW5kZWZp
bmVkQ291bnQgPSBsZW5ndGggLSB2YWx1ZUNvdW50IC0gaG9sZUNvdW50OwotCi0gICAgICAgIGZv
ciAodmFyIGkgPSB2YWx1ZUNvdW50OyBpIDwgdmFsdWVDb3VudCArIHVuZGVmaW5lZENvdW50OyAr
K2kpCi0gICAgICAgICAgICBhcnJheVtpXSA9IHVuZGVmaW5lZDsKLQotICAgICAgICBmb3IgKHZh
ciBpID0gdmFsdWVDb3VudCArIHVuZGVmaW5lZENvdW50OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICBkZWxldGUgYXJyYXlbaV07Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlQ291bnQ7Ci0g
ICAgfQotCi0gICAgLy8gTW92ZSB1bmRlZmluZWRzIGFuZCBob2xlcyB0byB0aGUgZW5kIG9mIGFu
IGFycmF5LiBSZXN1bHQgaXMgW3ZhbHVlcy4uLiwgdW5kZWZpbmVkcy4uLiwgaG9sZXMuLi5dLgot
ICAgIGZ1bmN0aW9uIGNvbXBhY3QoYXJyYXksIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChhcnJh
eVtpXSA9PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgICAgIHJldHVybiBjb21wYWN0U2xvdyhh
cnJheSwgbGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBsZW5ndGg7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gbWVyZ2UoZHN0LCBzcmMsIHNyY0luZGV4LCBzcmNFbmQsIHdpZHRo
LCBjb21wYXJhdG9yKQotICAgIHsKLSAgICAgICAgdmFyIGxlZnQgPSBzcmNJbmRleDsKLSAgICAg
ICAgdmFyIGxlZnRFbmQgPSBtaW4obGVmdCArIHdpZHRoLCBzcmNFbmQpOwotICAgICAgICB2YXIg
cmlnaHQgPSBsZWZ0RW5kOwotICAgICAgICB2YXIgcmlnaHRFbmQgPSBtaW4ocmlnaHQgKyB3aWR0
aCwgc3JjRW5kKTsKLQotICAgICAgICBmb3IgKHZhciBkc3RJbmRleCA9IGxlZnQ7IGRzdEluZGV4
IDwgcmlnaHRFbmQ7ICsrZHN0SW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChyaWdodCA8IHJpZ2h0
RW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQgPj0gbGVmdEVuZCB8fCBjb21wYXJhdG9y
KHNyY1tyaWdodF0sIHNyY1tsZWZ0XSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRzdFtk
c3RJbmRleF0gPSBzcmNbcmlnaHQrK107Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZHN0W2RzdElu
ZGV4XSA9IHNyY1tsZWZ0KytdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWVy
Z2VTb3J0KGFycmF5LCB2YWx1ZUNvdW50LCBjb21wYXJhdG9yKQotICAgIHsKLSAgICAgICAgdmFy
IGJ1ZmZlciA9IFsgXTsKLSAgICAgICAgYnVmZmVyLmxlbmd0aCA9IHZhbHVlQ291bnQ7Ci0KLSAg
ICAgICAgdmFyIGRzdCA9IGJ1ZmZlcjsKLSAgICAgICAgdmFyIHNyYyA9IGFycmF5OwotICAgICAg
ICBmb3IgKHZhciB3aWR0aCA9IDE7IHdpZHRoIDwgdmFsdWVDb3VudDsgd2lkdGggKj0gMikgewot
ICAgICAgICAgICAgZm9yICh2YXIgc3JjSW5kZXggPSAwOyBzcmNJbmRleCA8IHZhbHVlQ291bnQ7
IHNyY0luZGV4ICs9IDIgKiB3aWR0aCkKLSAgICAgICAgICAgICAgICBtZXJnZShkc3QsIHNyYywg
c3JjSW5kZXgsIHZhbHVlQ291bnQsIHdpZHRoLCBjb21wYXJhdG9yKTsKLQotICAgICAgICAgICAg
dmFyIHRtcCA9IHNyYzsKLSAgICAgICAgICAgIHNyYyA9IGRzdDsKLSAgICAgICAgICAgIGRzdCA9
IHRtcDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzcmMgIT0gYXJyYXkpIHsKLSAgICAgICAg
ICAgIGZvcih2YXIgaSA9IDA7IGkgPCB2YWx1ZUNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAg
YXJyYXlbaV0gPSBzcmNbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBidWNr
ZXRTb3J0KGFycmF5LCBkc3QsIGJ1Y2tldCwgZGVwdGgpCi0gICAgewotICAgICAgICBpZiAoYnVj
a2V0Lmxlbmd0aCA8IDMyIHx8IGRlcHRoID4gMzIpIHsKLSAgICAgICAgICAgIG1lcmdlU29ydChi
dWNrZXQsIGJ1Y2tldC5sZW5ndGgsIHN0cmluZ0NvbXBhcmF0b3IpOwotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBidWNrZXQubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgYXJy
YXlbZHN0KytdID0gYnVja2V0W2ldLnZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciBidWNrZXRzID0gWyBdOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGJ1Y2tldC5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGVudHJ5ID0g
YnVja2V0W2ldOwotICAgICAgICAgICAgdmFyIHN0cmluZyA9IGVudHJ5LnN0cmluZzsKLSAgICAg
ICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID09IGRlcHRoKSB7Ci0gICAgICAgICAgICAgICAgYXJy
YXlbZHN0KytdID0gZW50cnkudmFsdWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBjID0gc3RyaW5nLkBjaGFyQ29kZUF0KGRlcHRo
KTsKLSAgICAgICAgICAgIGlmICghYnVja2V0c1tjXSkKLSAgICAgICAgICAgICAgICBidWNrZXRz
W2NdID0gWyBdOwotICAgICAgICAgICAgYnVja2V0c1tjXVtidWNrZXRzW2NdLmxlbmd0aF0gPSBl
bnRyeTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVja2V0cy5s
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKCFidWNrZXRzW2ldKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZHN0ID0gYnVja2V0U29ydChhcnJheSwgZHN0LCBi
dWNrZXRzW2ldLCBkZXB0aCArIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRzdDsK
LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjb21wYXJhdG9yU29ydChhcnJheSwgY29tcGFyYXRvcikK
LSAgICB7Ci0gICAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPj4+IDA7Ci0KLSAgICAg
ICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBGaXJlZm94IGFuZCBDaHJvbWUsIGRvIG5vdGhp
bmcgb2JzZXJ2YWJsZQotICAgICAgICAvLyB0byB0aGUgdGFyZ2V0IGFycmF5IGlmIGl0IGhhcyAw
IG9yIDEgc29ydGFibGUgcHJvcGVydGllcy4KLSAgICAgICAgaWYgKGxlbmd0aCA8IDIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHZhbHVlQ291bnQgPSBjb21wYWN0KGFycmF5
LCBsZW5ndGgpOwotICAgICAgICBtZXJnZVNvcnQoYXJyYXksIHZhbHVlQ291bnQsIGNvbXBhcmF0
b3IpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHN0cmluZ1NvcnQoYXJyYXkpCi0gICAgewotICAg
ICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoID4+PiAwOwotCi0gICAgICAgIC8vIEZvciBj
b21wYXRpYmlsaXR5IHdpdGggRmlyZWZveCBhbmQgQ2hyb21lLCBkbyBub3RoaW5nIG9ic2VydmFi
bGUKLSAgICAgICAgLy8gdG8gdGhlIHRhcmdldCBhcnJheSBpZiBpdCBoYXMgMCBvciAxIHNvcnRh
YmxlIHByb3BlcnRpZXMuCi0gICAgICAgIGlmIChsZW5ndGggPCAyKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHZhciB2YWx1ZUNvdW50ID0gY29tcGFjdChhcnJheSwgbGVuZ3RoKTsK
LQotICAgICAgICB2YXIgc3RyaW5ncyA9IG5ldyBAQXJyYXkodmFsdWVDb3VudCk7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVDb3VudDsgKytpKQotICAgICAgICAgICAgc3RyaW5n
c1tpXSA9IHsgc3RyaW5nOiBAdG9TdHJpbmcoYXJyYXlbaV0pLCB2YWx1ZTogYXJyYXlbaV0gfTsK
LQotICAgICAgICBidWNrZXRTb3J0KGFycmF5LCAwLCBzdHJpbmdzLCAwKTsKLSAgICB9Ci0KLSAg
ICBpZiAodGhpcyA9PT0gbnVsbCkKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5
LnByb3RvdHlwZS5zb3J0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7Ci0KLSAg
ICBpZiAodGhpcyA9PT0gdW5kZWZpbmVkKQotICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigi
QXJyYXkucHJvdG90eXBlLnNvcnQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIHVuZGVmaW5l
ZCIpOwotCi0gICAgaWYgKHR5cGVvZiB0aGlzID09ICJzdHJpbmciKQotICAgICAgICB0aHJvdyBu
ZXcgQFR5cGVFcnJvcigiQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4i
KTsKLQotICAgIHZhciBhcnJheSA9IEBPYmplY3QodGhpcyk7Ci0KLSAgICBpZiAodHlwZW9mIGNv
bXBhcmF0b3IgPT0gImZ1bmN0aW9uIikKLSAgICAgICAgY29tcGFyYXRvclNvcnQoYXJyYXksIGNv
bXBhcmF0b3IpOwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5nU29ydChhcnJheSk7Ci0KLSAgICBy
ZXR1cm4gYXJyYXk7Ci19Ci0KLWZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiwg
ZW5kICovKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGZ1bmN0aW9uIG1heFdpdGhQb3Np
dGl2ZXMoYSwgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiAoYSA8IGIpID8gYiA6IGE7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gbWluV2l0aE1heWJlTmVnYXRpdmVaZXJvQW5kUG9zaXRpdmUobWF5
YmVOZWdhdGl2ZVplcm8sIHBvc2l0aXZlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChtYXliZU5l
Z2F0aXZlWmVybyA8IHBvc2l0aXZlKSA/IG1heWJlTmVnYXRpdmVaZXJvIDogcG9zaXRpdmU7Ci0g
ICAgfQotCi0gICAgaWYgKHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdW5kZWZpbmVkKQotICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkuY29weVdpdGhpbiByZXF1aXJlcyB0aGF0
IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQiKTsKLSAgICB2YXIgdGhpc09iamVjdCA9
IEBPYmplY3QodGhpcyk7Ci0KLSAgICB2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKHRoaXNPYmplY3Qu
bGVuZ3RoKTsKLQotICAgIHZhciByZWxhdGl2ZVRhcmdldCA9IEB0b0ludGVnZXIodGFyZ2V0KTsK
LSAgICB2YXIgdG8gPSAocmVsYXRpdmVUYXJnZXQgPCAwKSA/IG1heFdpdGhQb3NpdGl2ZXMobGVu
Z3RoICsgcmVsYXRpdmVUYXJnZXQsIDApIDogbWluV2l0aE1heWJlTmVnYXRpdmVaZXJvQW5kUG9z
aXRpdmUocmVsYXRpdmVUYXJnZXQsIGxlbmd0aCk7Ci0KLSAgICB2YXIgcmVsYXRpdmVTdGFydCA9
IEB0b0ludGVnZXIoc3RhcnQpOwotICAgIHZhciBmcm9tID0gKHJlbGF0aXZlU3RhcnQgPCAwKSA/
IG1heFdpdGhQb3NpdGl2ZXMobGVuZ3RoICsgcmVsYXRpdmVTdGFydCwgMCkgOiBtaW5XaXRoTWF5
YmVOZWdhdGl2ZVplcm9BbmRQb3NpdGl2ZShyZWxhdGl2ZVN0YXJ0LCBsZW5ndGgpOwotCi0gICAg
dmFyIHJlbGF0aXZlRW5kOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIHsKLSAgICAg
ICAgdmFyIGVuZCA9IGFyZ3VtZW50c1syXTsKLSAgICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVk
KQotICAgICAgICAgICAgcmVsYXRpdmVFbmQgPSBsZW5ndGg7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJlbGF0aXZlRW5kID0gQHRvSW50ZWdlcihlbmQpOwotICAgIH0gZWxzZQotICAgICAg
ICByZWxhdGl2ZUVuZCA9IGxlbmd0aDsKLQotICAgIHZhciBmaW5hbFZhbHVlID0gKHJlbGF0aXZl
RW5kIDwgMCkgPyBtYXhXaXRoUG9zaXRpdmVzKGxlbmd0aCArIHJlbGF0aXZlRW5kLCAwKSA6IG1p
bldpdGhNYXliZU5lZ2F0aXZlWmVyb0FuZFBvc2l0aXZlKHJlbGF0aXZlRW5kLCBsZW5ndGgpOwot
Ci0gICAgdmFyIGNvdW50ID0gbWluV2l0aE1heWJlTmVnYXRpdmVaZXJvQW5kUG9zaXRpdmUoZmlu
YWxWYWx1ZSAtIGZyb20sIGxlbmd0aCAtIHRvKTsKLQotICAgIHZhciBkaXJlY3Rpb24gPSAxOwot
ICAgIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHsKLSAgICAgICAgZGlyZWN0
aW9uID0gLTE7Ci0gICAgICAgIGZyb20gPSBmcm9tICsgY291bnQgLSAxOwotICAgICAgICB0byA9
IHRvICsgY291bnQgLSAxOwotICAgIH0KLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7
ICsraSwgZnJvbSArPSBkaXJlY3Rpb24sIHRvICs9IGRpcmVjdGlvbikgewotICAgICAgICBpZiAo
ZnJvbSBpbiB0aGlzT2JqZWN0KQotICAgICAgICAgICAgdGhpc09iamVjdFt0b10gPSB0aGlzT2Jq
ZWN0W2Zyb21dOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZWxldGUgdGhpc09iamVjdFt0
b107Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXNPYmplY3Q7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ODdmYzI2ZjgzOWQxMTMxNzY4YTYxZWU4
NmVkZmM0MWQ5YzgyZWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJvdG90
eXBlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1mdW5jdGlvbiBuZXh0KCkKLXsKLSAg
ICAidXNlIHN0cmljdCI7Ci0KLSAgICBpZiAodGhpcyA9PSBudWxsKQotICAgICAgICB0aHJvdyBu
ZXcgQFR5cGVFcnJvcigiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhh
dCB8dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7Ci0KLSAgICB2YXIgaXRlbUtpbmQg
PSB0aGlzLkBhcnJheUl0ZXJhdGlvbktpbmQ7Ci0gICAgaWYgKGl0ZW1LaW5kID09PSB1bmRlZmlu
ZWQpCi0gICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCIlQXJyYXlJdGVyYXRvclByb3RvdHlw
ZSUubmV4dCByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBhbiBBcnJheSBJdGVyYXRvciBpbnN0YW5j
ZSIpOwotCi0gICAgdmFyIGRvbmUgPSB0cnVlOwotICAgIHZhciB2YWx1ZSA9IHVuZGVmaW5lZDsK
LQotICAgIHZhciBhcnJheSA9IHRoaXMuQGl0ZXJhdGVkT2JqZWN0OwotICAgIGlmIChhcnJheSAh
PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHZhciBpbmRleCA9IHRoaXMuQGFycmF5SXRlcmF0b3JO
ZXh0SW5kZXg7Ci0gICAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPj4+IDA7Ci0gICAg
ICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKLSAgICAgICAgICAgIHRoaXMuQGl0ZXJhdGVkT2Jq
ZWN0ID0gdW5kZWZpbmVkOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5AYXJy
YXlJdGVyYXRvck5leHRJbmRleCA9IGluZGV4ICsgMTsKLSAgICAgICAgICAgIGRvbmUgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChpdGVtS2luZCA9PT0gQGFycmF5SXRlcmF0aW9uS2luZEtleSkg
ewotICAgICAgICAgICAgICAgIHZhbHVlID0gaW5kZXg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGl0ZW1LaW5kID09PSBAYXJyYXlJdGVyYXRpb25LaW5kVmFsdWUpIHsKLSAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGFycmF5W2luZGV4XTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgdmFsdWUgPSBbIGluZGV4LCBhcnJheVtpbmRleF0gXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7ZG9uZSwgdmFsdWV9OwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3JQcm90b3R5cGUu
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mNjg3ZmMyNmY4MzlkMTEzMTc2OGE2MWVlODZlZGZjNDFkOWM4MmVl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5
SXRlcmF0b3JQcm90b3R5cGUuanMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBuZXh0KCkKK3sKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAodGhpcyA9PSBudWxsKQorICAgICAgICB0aHJvdyBu
ZXcgQFR5cGVFcnJvcigiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhh
dCB8dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7CisKKyAgICB2YXIgaXRlbUtpbmQg
PSB0aGlzLkBhcnJheUl0ZXJhdGlvbktpbmQ7CisgICAgaWYgKGl0ZW1LaW5kID09PSB1bmRlZmlu
ZWQpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCIlQXJyYXlJdGVyYXRvclByb3RvdHlw
ZSUubmV4dCByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBhbiBBcnJheSBJdGVyYXRvciBpbnN0YW5j
ZSIpOworCisgICAgdmFyIGRvbmUgPSB0cnVlOworICAgIHZhciB2YWx1ZSA9IHVuZGVmaW5lZDsK
KworICAgIHZhciBhcnJheSA9IHRoaXMuQGl0ZXJhdGVkT2JqZWN0OworICAgIGlmIChhcnJheSAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuQGFycmF5SXRlcmF0b3JO
ZXh0SW5kZXg7CisgICAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPj4+IDA7CisgICAg
ICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuQGl0ZXJhdGVkT2Jq
ZWN0ID0gdW5kZWZpbmVkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5AYXJy
YXlJdGVyYXRvck5leHRJbmRleCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAgIGRvbmUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChpdGVtS2luZCA9PT0gQGFycmF5SXRlcmF0aW9uS2luZEtleSkg
eworICAgICAgICAgICAgICAgIHZhbHVlID0gaW5kZXg7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGl0ZW1LaW5kID09PSBAYXJyYXlJdGVyYXRpb25LaW5kVmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGFycmF5W2luZGV4XTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgdmFsdWUgPSBbIGluZGV4LCBhcnJheVtpbmRleF0gXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7ZG9uZSwgdmFsdWV9OworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5UHJvdG90eXBlLmpzIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5UHJvdG90eXBlLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYwODhkMjYzOWViZjQ0MTlhNTVjN2EzZjZlZGIwYjFkODAwMGNjZjIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlQcm90b3R5cGUuanMKQEAg
LTAsMCArMSw2NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2Z1bmN0aW9uIHJlZHVjZShjYWxsYmFjayAvKiwgaW5pdGlhbFZhbHVl
ICovKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICh0aGlzID09PSBudWxsKQorICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLnJlZHVjZSByZXF1aXJl
cyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOworCisgICAgaWYgKHRoaXMgPT09IHVuZGVmaW5l
ZCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5yZWR1Y2Ug
cmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIHVuZGVmaW5lZCIpOworCisgICAgdmFyIGFycmF5
ID0gQE9iamVjdCh0aGlzKTsKKyAgICB2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0
aCk7CisKKyAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQorICAgICAgICB0
aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLnJlZHVjZSBjYWxsYmFjayBtdXN0
IGJlIGEgZnVuY3Rpb24iKTsKKworICAgIGlmIChsZW5ndGggPT09IDAgJiYgYXJndW1lbnRzLmxl
bmd0aCA8IDIpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkg
YXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CisKKyAgICB2YXIgYWNjdW11bGF0b3IsIGsg
PSAwOworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkKKyAgICAgICAgYWNjdW11bGF0b3Ig
PSBhcmd1bWVudHNbMV07CisgICAgZWxzZSB7CisgICAgICAgIHdoaWxlIChrIDwgbGVuZ3RoICYm
ICEoayBpbiBhcnJheSkpCisgICAgICAgICAgICBrICs9IDE7CisgICAgICAgIGlmIChrID49IGxl
bmd0aCkKKyAgICAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkg
YXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAgICAgIGFjY3VtdWxhdG9yID0gYXJy
YXlbaysrXTsKKyAgICB9CisKKyAgICB3aGlsZSAoayA8IGxlbmd0aCkgeworICAgICAgICBpZiAo
ayBpbiBhcnJheSkKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2suQGNhbGwodW5k
ZWZpbmVkLCBhY2N1bXVsYXRvciwgYXJyYXlba10sIGssIGFycmF5KTsKKyAgICAgICAgayArPSAx
OworICAgIH0KKyAgICByZXR1cm4gYWNjdW11bGF0b3I7Cit9CisKK2Z1bmN0aW9uIHJlZHVjZVJp
Z2h0KGNhbGxiYWNrIC8qLCBpbml0aWFsVmFsdWUgKi8pCit7CisgICAgInVzZSBzdHJpY3QiOwor
CisgICAgaWYgKHRoaXMgPT09IG51bGwpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJB
cnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51
bGwiKTsKKworICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQpCisgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgcmVxdWlyZXMgdGhhdCB8dGhp
c3wgbm90IGJlIHVuZGVmaW5lZCIpOworCisgICAgdmFyIGFycmF5ID0gQE9iamVjdCh0aGlzKTsK
KyAgICB2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0aCk7CisKKyAgICBpZiAodHlw
ZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJv
cigiQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlv
biIpOworCisgICAgaWYgKGxlbmd0aCA9PT0gMCAmJiBhcmd1bWVudHMubGVuZ3RoIDwgMikKKyAg
ICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdp
dGggbm8gaW5pdGlhbCB2YWx1ZSIpOworCisgICAgdmFyIGFjY3VtdWxhdG9yLCBrID0gbGVuZ3Ro
IC0gMTsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpCisgICAgICAgIGFjY3VtdWxhdG9y
ID0gYXJndW1lbnRzWzFdOworICAgIGVsc2UgeworICAgICAgICB3aGlsZSAoayA+PSAwICYmICEo
ayBpbiBhcnJheSkpCisgICAgICAgICAgICBrIC09IDE7CisgICAgICAgIGlmIChrIDwgMCkKKyAg
ICAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJh
eSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVtr
LS1dOworICAgIH0KKworICAgIHdoaWxlIChrID49IDApIHsKKyAgICAgICAgaWYgKGsgaW4gYXJy
YXkpCisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrLkBjYWxsKHVuZGVmaW5lZCwg
YWNjdW11bGF0b3IsIGFycmF5W2tdLCBrLCBhcnJheSk7CisgICAgICAgIGsgLT0gMTsKKyAgICB9
CisgICAgcmV0dXJuIGFjY3VtdWxhdG9yOworfQorCitmdW5jdGlvbiBldmVyeShjYWxsYmFjayAv
KiwgdGhpc0FyZyAqLykKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAodGhpcyA9PT0g
bnVsbCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5ldmVy
eSByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOworICAgIAorICAgIGlmICh0aGlz
ID09PSB1bmRlZmluZWQpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90
b3R5cGUuZXZlcnkgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIHVuZGVmaW5lZCIpOworICAg
IAorICAgIHZhciBhcnJheSA9IEBPYmplY3QodGhpcyk7CisgICAgdmFyIGxlbmd0aCA9IEB0b0xl
bmd0aChhcnJheS5sZW5ndGgpOworCisgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0
aW9uIikKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5ldmVy
eSBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKKyAgICAKKyAgICB2YXIgdGhpc0FyZyA9
IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIAor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCEoaSBp
biBhcnJheSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFjYWxsYmFjay5A
Y2FsbCh0aGlzQXJnLCBhcnJheVtpXSwgaSwgYXJyYXkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gZm9yRWFj
aChjYWxsYmFjayAvKiwgdGhpc0FyZyAqLykKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBp
ZiAodGhpcyA9PT0gbnVsbCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnBy
b3RvdHlwZS5mb3JFYWNoIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7CisgICAg
CisgICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJy
b3IoIkFycmF5LnByb3RvdHlwZS5mb3JFYWNoIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSB1
bmRlZmluZWQiKTsKKyAgICAKKyAgICB2YXIgYXJyYXkgPSBAT2JqZWN0KHRoaXMpOworICAgIHZh
ciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTsKKworICAgIGlmICh0eXBlb2YgY2Fs
bGJhY2sgIT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJh
eS5wcm90b3R5cGUuZm9yRWFjaCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKKyAgICAK
KyAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDog
dW5kZWZpbmVkOworICAgIAorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgaWYgKGkgaW4gYXJyYXkpCisgICAgICAgICAgICBjYWxsYmFjay5AY2FsbCh0aGlz
QXJnLCBhcnJheVtpXSwgaSwgYXJyYXkpOworICAgIH0KK30KKworZnVuY3Rpb24gZmlsdGVyKGNh
bGxiYWNrIC8qLCB0aGlzQXJnICovKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICh0
aGlzID09PSBudWxsKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90
eXBlLmZpbHRlciByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOworICAgIAorICAg
IGlmICh0aGlzID09PSB1bmRlZmluZWQpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJB
cnJheS5wcm90b3R5cGUuZmlsdGVyIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSB1bmRlZmlu
ZWQiKTsKKyAgICAKKyAgICB2YXIgYXJyYXkgPSBAT2JqZWN0KHRoaXMpOworICAgIHZhciBsZW5n
dGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTsKKworICAgIGlmICh0eXBlb2YgY2FsbGJhY2sg
IT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90
b3R5cGUuZmlsdGVyIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpOworICAgIAorICAgIHZh
ciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmlu
ZWQ7CisgICAgdmFyIHJlc3VsdCA9IFtdOworICAgIHZhciBuZXh0SW5kZXggPSAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKCEoaSBpbiBhcnJh
eSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdmFyIGN1cnJlbnQgPSBhcnJheVtp
XQorICAgICAgICBpZiAoY2FsbGJhY2suQGNhbGwodGhpc0FyZywgY3VycmVudCwgaSwgYXJyYXkp
KSB7CisgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBuZXh0SW5kZXgsIGN1cnJl
bnQpOworICAgICAgICAgICAgKytuZXh0SW5kZXg7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gbWFwKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQor
eworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICh0aGlzID09PSBudWxsKQorICAgICAgICB0
aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLm1hcCByZXF1aXJlcyB0aGF0IHx0
aGlzfCBub3QgYmUgbnVsbCIpOworICAgIAorICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQpCisg
ICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUubWFwIHJlcXVpcmVz
IHRoYXQgfHRoaXN8IG5vdCBiZSB1bmRlZmluZWQiKTsKKyAgICAKKyAgICB2YXIgYXJyYXkgPSBA
T2JqZWN0KHRoaXMpOworICAgIHZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTsK
KworICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUubWFwIGNhbGxiYWNrIG11c3QgYmUgYSBm
dW5jdGlvbiIpOworICAgIAorICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEg
PyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7CisgICAgdmFyIHJlc3VsdCA9IFtdOworICAgIHJl
c3VsdC5sZW5ndGggPSBsZW5ndGg7CisgICAgdmFyIG5leHRJbmRleCA9IDA7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIShpIGluIGFycmF5KSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2YXIgbWFwcGVkVmFsdWUgPSBjYWxsYmFj
ay5AY2FsbCh0aGlzQXJnLCBhcnJheVtpXSwgaSwgYXJyYXkpOworICAgICAgICBAcHV0QnlWYWxE
aXJlY3QocmVzdWx0LCBpLCBtYXBwZWRWYWx1ZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2Z1bmN0aW9uIHNvbWUoY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pCit7CisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgaWYgKHRoaXMgPT09IG51bGwpCisgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuc29tZSByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3Qg
YmUgbnVsbCIpOworICAgIAorICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQpCisgICAgICAgIHRo
cm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuc29tZSByZXF1aXJlcyB0aGF0IHx0
aGlzfCBub3QgYmUgdW5kZWZpbmVkIik7CisgICAgCisgICAgdmFyIGFycmF5ID0gQE9iamVjdCh0
aGlzKTsKKyAgICB2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0aCk7CisKKyAgICBp
ZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQorICAgICAgICB0aHJvdyBuZXcgQFR5
cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLnNvbWUgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9u
Iik7CisgICAgCisgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3Vt
ZW50c1sxXSA6IHVuZGVmaW5lZDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgIGlmICghKGkgaW4gYXJyYXkpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCBhcnJheVtpXSwgaSwgYXJyYXkpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
ZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiBbLCBzdGFydCBbLCBlbmRdXSAqLykKK3sKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICBpZiAodGhpcyA9PT0gbnVsbCkKKyAgICAgICAgdGhyb3cgbmV3IEBU
eXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5maWxsIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBi
ZSBudWxsIik7CisgICAgCisgICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5maWxsIHJlcXVpcmVzIHRoYXQgfHRo
aXN8IG5vdCBiZSB1bmRlZmluZWQiKTsKKyAgICB2YXIgTyA9IEBPYmplY3QodGhpcyk7CisgICAg
dmFyIGxlbiA9IEB0b0xlbmd0aChPLmxlbmd0aCk7CisgICAgdmFyIHJlbGF0aXZlU3RhcnQgPSAw
OworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVm
aW5lZCkKKyAgICAgICAgcmVsYXRpdmVTdGFydCA9IGFyZ3VtZW50c1sxXSB8IDA7CisgICAgdmFy
IGsgPSAwOworICAgIGlmIChyZWxhdGl2ZVN0YXJ0IDwgMCkgeworICAgICAgICBrID0gbGVuICsg
cmVsYXRpdmVTdGFydDsKKyAgICAgICAgaWYgKGsgPCAwKQorICAgICAgICAgICAgayA9IDA7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgayA9IHJlbGF0aXZlU3RhcnQ7CisgICAgICAgIGlmIChrID4g
bGVuKQorICAgICAgICAgICAgayA9IGxlbjsKKyAgICB9CisgICAgdmFyIHJlbGF0aXZlRW5kID0g
bGVuOworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVu
ZGVmaW5lZCkKKyAgICAgICAgcmVsYXRpdmVFbmQgPSBhcmd1bWVudHNbMl0gfCAwOworICAgIHZh
ciBmaW5hbCA9IDA7CisgICAgaWYgKHJlbGF0aXZlRW5kIDwgMCkgeworICAgICAgICBmaW5hbCA9
IGxlbiArIHJlbGF0aXZlRW5kOworICAgICAgICBpZiAoZmluYWwgPCAwKQorICAgICAgICAgICAg
ZmluYWwgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbmFsID0gcmVsYXRpdmVFbmQ7Cisg
ICAgICAgIGlmIChmaW5hbCA+IGxlbikKKyAgICAgICAgICAgIGZpbmFsID0gbGVuOworICAgIH0K
KyAgICBmb3IgKDsgayA8IGZpbmFsOyBrKyspCisgICAgICAgIE9ba10gPSB2YWx1ZTsKKyAgICBy
ZXR1cm4gTzsKK30KKworZnVuY3Rpb24gZmluZChjYWxsYmFjayAvKiwgdGhpc0FyZyAqLykKK3sK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAodGhpcyA9PT0gbnVsbCkKKyAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5maW5kIHJlcXVpcmVzIHRoYXQgfHRo
aXN8IG5vdCBiZSBudWxsIik7CisgICAgCisgICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5maW5kIHJlcXVpcmVz
IHRoYXQgfHRoaXN8IG5vdCBiZSB1bmRlZmluZWQiKTsKKyAgICAKKyAgICB2YXIgYXJyYXkgPSBA
T2JqZWN0KHRoaXMpOworICAgIHZhciBsZW5ndGggPSBAdG9MZW5ndGgoYXJyYXkubGVuZ3RoKTsK
KworICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuZmluZCBjYWxsYmFjayBtdXN0IGJlIGEg
ZnVuY3Rpb24iKTsKKyAgICAKKyAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAx
ID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGtWYWx1ZSA9IGFycmF5W2ldOworICAgICAgICBpZiAo
Y2FsbGJhY2suQGNhbGwodGhpc0FyZywga1ZhbHVlLCBpLCBhcnJheSkpCisgICAgICAgICAgICBy
ZXR1cm4ga1ZhbHVlOworICAgIH0KKyAgICByZXR1cm4gdW5kZWZpbmVkOworfQorCitmdW5jdGlv
biBmaW5kSW5kZXgoY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pCit7CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgaWYgKHRoaXMgPT09IG51bGwpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9y
KCJBcnJheS5wcm90b3R5cGUuZmluZEluZGV4IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBu
dWxsIik7CisgICAgCisgICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgdGhyb3cg
bmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXggcmVxdWlyZXMgdGhhdCB8
dGhpc3wgbm90IGJlIHVuZGVmaW5lZCIpOworICAgIAorICAgIHZhciBhcnJheSA9IEBPYmplY3Qo
dGhpcyk7CisgICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0aChhcnJheS5sZW5ndGgpOworCisgICAg
aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKKyAgICAgICAgdGhyb3cgbmV3IEBU
eXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXggY2FsbGJhY2sgbXVzdCBiZSBhIGZ1
bmN0aW9uIik7CisgICAgCisgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/
IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgIGlmIChjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCBhcnJheVtpXSwg
aSwgYXJyYXkpKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiAtMTsK
K30KKworZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiwgZnJvbUluZGV4Ki8pCit7
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKHRoaXMgPT09IG51bGwpCisgICAgICAgIHRo
cm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMgcmVxdWlyZXMgdGhh
dCB8dGhpc3wgbm90IGJlIG51bGwiKTsKKworICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQpCisg
ICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMgcmVx
dWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIHVuZGVmaW5lZCIpOworCisgICAgdmFyIGFycmF5ID0g
QE9iamVjdCh0aGlzKTsKKyAgICB2YXIgbGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5Lmxlbmd0aCk7
CisKKyAgICBpZiAobGVuZ3RoID09PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2
YXIgZnJvbUluZGV4ID0gMDsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1l
bnRzWzFdICE9PSB1bmRlZmluZWQpCisgICAgICAgIGZyb21JbmRleCA9IGFyZ3VtZW50c1sxXSB8
IDA7CisKKyAgICB2YXIgaW5kZXg7CisgICAgaWYgKGZyb21JbmRleCA+PSAwKQorICAgICAgICBp
bmRleCA9IGZyb21JbmRleDsKKyAgICBlbHNlCisgICAgICAgIGluZGV4ID0gbGVuZ3RoICsgZnJv
bUluZGV4OworCisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSAwOworCisgICAg
dmFyIGN1cnJlbnRFbGVtZW50OworICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkg
eworICAgICAgICBjdXJyZW50RWxlbWVudCA9IGFycmF5W2luZGV4XTsKKyAgICAgICAgLy8gVXNl
IFNhbWVWYWx1ZVplcm8gY29tcGFyaXNvbiwgcmF0aGVyIHRoYW4ganVzdCBTdHJpY3RFcXVhbHMu
CisgICAgICAgIGlmIChzZWFyY2hFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudCB8fCAoc2VhcmNo
RWxlbWVudCAhPT0gc2VhcmNoRWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gY3VycmVudEVs
ZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworZnVuY3Rpb24gc29ydChjb21wYXJhdG9yKQoreworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIGZ1bmN0aW9uIG1pbihhLCBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPCBiID8g
YSA6IGI7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RyaW5nQ29tcGFyYXRvcihhLCBiKQorICAg
IHsKKyAgICAgICAgdmFyIGFTdHJpbmcgPSBhLnN0cmluZzsKKyAgICAgICAgdmFyIGJTdHJpbmcg
PSBiLnN0cmluZzsKKworICAgICAgICB2YXIgYUxlbmd0aCA9IGFTdHJpbmcubGVuZ3RoOworICAg
ICAgICB2YXIgYkxlbmd0aCA9IGJTdHJpbmcubGVuZ3RoOworICAgICAgICB2YXIgbGVuZ3RoID0g
bWluKGFMZW5ndGgsIGJMZW5ndGgpOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBhQ2hhckNvZGUgPSBhU3RyaW5nLkBjaGFyQ29k
ZUF0KGkpOworICAgICAgICAgICAgdmFyIGJDaGFyQ29kZSA9IGJTdHJpbmcuQGNoYXJDb2RlQXQo
aSk7CisKKyAgICAgICAgICAgIGlmIChhQ2hhckNvZGUgPT0gYkNoYXJDb2RlKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICByZXR1cm4gYUNoYXJDb2RlIC0gYkNoYXJD
b2RlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFMZW5ndGggLSBiTGVuZ3RoOworICAg
IH0KKworICAgIC8vIE1vdmUgdW5kZWZpbmVkcyBhbmQgaG9sZXMgdG8gdGhlIGVuZCBvZiBhIHNw
YXJzZSBhcnJheS4gUmVzdWx0IGlzIFt2YWx1ZXMuLi4sIHVuZGVmaW5lZHMuLi4sIGhvbGVzLi4u
XS4KKyAgICBmdW5jdGlvbiBjb21wYWN0U3BhcnNlKGFycmF5LCBkc3QsIHNyYywgbGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgdmFyIHZhbHVlcyA9IFsgXTsKKyAgICAgICAgdmFyIHNlZW4gPSB7IH07
CisgICAgICAgIHZhciB2YWx1ZUNvdW50ID0gMDsKKyAgICAgICAgdmFyIHVuZGVmaW5lZENvdW50
ID0gMDsKKworICAgICAgICAvLyBDbGVhbiB1cCBhZnRlciB0aGUgaW4tcHJvZ3Jlc3Mgbm9uLXNw
YXJzZSBjb21wYWN0aW9uIHRoYXQgZmFpbGVkLgorICAgICAgICBmb3IgKHZhciBpID0gZHN0OyBp
IDwgc3JjOyArK2kpCisgICAgICAgICAgICBkZWxldGUgYXJyYXlbaV07CisKKyAgICAgICAgZm9y
ICh2YXIgb2JqZWN0ID0gYXJyYXk7IG9iamVjdDsgb2JqZWN0ID0gQE9iamVjdC5AZ2V0UHJvdG90
eXBlT2Yob2JqZWN0KSkgeworICAgICAgICAgICAgdmFyIHByb3BlcnR5TmFtZXMgPSBAT2JqZWN0
LkBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIg
aW5kZXggPSBwcm9wZXJ0eU5hbWVzW2ldOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxl
bmd0aCkgeyAvLyBFeGNsdWRlIG5vbi1udW1lcmljIHByb3BlcnRpZXMgYW5kIHByb3BlcnRpZXMg
cGFzdCBsZW5ndGguCisgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuW2luZGV4XSkgLy8gRXhj
bHVkZSBkdXBsaWNhdGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIHNlZW5baW5kZXhdID0gMTsKKworICAgICAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSBhcnJheVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhcnJh
eVtpbmRleF07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrdW5kZWZpbmVkQ291bnQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGFycmF5W3ZhbHVlQ291bnQrK10gPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gdmFs
dWVDb3VudDsgaSA8IHZhbHVlQ291bnQgKyB1bmRlZmluZWRDb3VudDsgKytpKQorICAgICAgICAg
ICAgYXJyYXlbaV0gPSB1bmRlZmluZWQ7CisKKyAgICAgICAgcmV0dXJuIHZhbHVlQ291bnQ7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gY29tcGFjdFNsb3coYXJyYXksIGxlbmd0aCkKKyAgICB7Cisg
ICAgICAgIHZhciBob2xlQ291bnQgPSAwOworCisgICAgICAgIGZvciAodmFyIGRzdCA9IDAsIHNy
YyA9IDA7IHNyYyA8IGxlbmd0aDsgKytzcmMpIHsKKyAgICAgICAgICAgIGlmICghKHNyYyBpbiBh
cnJheSkpIHsKKyAgICAgICAgICAgICAgICArK2hvbGVDb3VudDsKKyAgICAgICAgICAgICAgICBp
ZiAoaG9sZUNvdW50IDwgMjU2KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY29tcGFjdFNwYXJzZShhcnJheSwgZHN0LCBzcmMsIGxlbmd0aCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W3NyY107Cisg
ICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgYXJyYXlbZHN0KytdID0gdmFsdWU7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgdmFsdWVDb3VudCA9IGRzdDsKKyAgICAgICAgdmFyIHVuZGVmaW5lZENvdW50
ID0gbGVuZ3RoIC0gdmFsdWVDb3VudCAtIGhvbGVDb3VudDsKKworICAgICAgICBmb3IgKHZhciBp
ID0gdmFsdWVDb3VudDsgaSA8IHZhbHVlQ291bnQgKyB1bmRlZmluZWRDb3VudDsgKytpKQorICAg
ICAgICAgICAgYXJyYXlbaV0gPSB1bmRlZmluZWQ7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHZh
bHVlQ291bnQgKyB1bmRlZmluZWRDb3VudDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAg
ZGVsZXRlIGFycmF5W2ldOworCisgICAgICAgIHJldHVybiB2YWx1ZUNvdW50OworICAgIH0KKwor
ICAgIC8vIE1vdmUgdW5kZWZpbmVkcyBhbmQgaG9sZXMgdG8gdGhlIGVuZCBvZiBhbiBhcnJheS4g
UmVzdWx0IGlzIFt2YWx1ZXMuLi4sIHVuZGVmaW5lZHMuLi4sIGhvbGVzLi4uXS4KKyAgICBmdW5j
dGlvbiBjb21wYWN0KGFycmF5LCBsZW5ndGgpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlbaV0gPT09
IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFjdFNsb3coYXJyYXksIGxl
bmd0aCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKworICAg
IGZ1bmN0aW9uIG1lcmdlKGRzdCwgc3JjLCBzcmNJbmRleCwgc3JjRW5kLCB3aWR0aCwgY29tcGFy
YXRvcikKKyAgICB7CisgICAgICAgIHZhciBsZWZ0ID0gc3JjSW5kZXg7CisgICAgICAgIHZhciBs
ZWZ0RW5kID0gbWluKGxlZnQgKyB3aWR0aCwgc3JjRW5kKTsKKyAgICAgICAgdmFyIHJpZ2h0ID0g
bGVmdEVuZDsKKyAgICAgICAgdmFyIHJpZ2h0RW5kID0gbWluKHJpZ2h0ICsgd2lkdGgsIHNyY0Vu
ZCk7CisKKyAgICAgICAgZm9yICh2YXIgZHN0SW5kZXggPSBsZWZ0OyBkc3RJbmRleCA8IHJpZ2h0
RW5kOyArK2RzdEluZGV4KSB7CisgICAgICAgICAgICBpZiAocmlnaHQgPCByaWdodEVuZCkgewor
ICAgICAgICAgICAgICAgIGlmIChsZWZ0ID49IGxlZnRFbmQgfHwgY29tcGFyYXRvcihzcmNbcmln
aHRdLCBzcmNbbGVmdF0pIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBkc3RbZHN0SW5kZXhd
ID0gc3JjW3JpZ2h0KytdOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRzdFtkc3RJbmRleF0gPSBz
cmNbbGVmdCsrXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIG1lcmdlU29ydChh
cnJheSwgdmFsdWVDb3VudCwgY29tcGFyYXRvcikKKyAgICB7CisgICAgICAgIHZhciBidWZmZXIg
PSBbIF07CisgICAgICAgIGJ1ZmZlci5sZW5ndGggPSB2YWx1ZUNvdW50OworCisgICAgICAgIHZh
ciBkc3QgPSBidWZmZXI7CisgICAgICAgIHZhciBzcmMgPSBhcnJheTsKKyAgICAgICAgZm9yICh2
YXIgd2lkdGggPSAxOyB3aWR0aCA8IHZhbHVlQ291bnQ7IHdpZHRoICo9IDIpIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCB2YWx1ZUNvdW50OyBzcmNJbmRl
eCArPSAyICogd2lkdGgpCisgICAgICAgICAgICAgICAgbWVyZ2UoZHN0LCBzcmMsIHNyY0luZGV4
LCB2YWx1ZUNvdW50LCB3aWR0aCwgY29tcGFyYXRvcik7CisKKyAgICAgICAgICAgIHZhciB0bXAg
PSBzcmM7CisgICAgICAgICAgICBzcmMgPSBkc3Q7CisgICAgICAgICAgICBkc3QgPSB0bXA7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc3JjICE9IGFycmF5KSB7CisgICAgICAgICAgICBmb3Io
dmFyIGkgPSAwOyBpIDwgdmFsdWVDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIGFycmF5W2ld
ID0gc3JjW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gYnVja2V0U29ydChh
cnJheSwgZHN0LCBidWNrZXQsIGRlcHRoKQorICAgIHsKKyAgICAgICAgaWYgKGJ1Y2tldC5sZW5n
dGggPCAzMiB8fCBkZXB0aCA+IDMyKSB7CisgICAgICAgICAgICBtZXJnZVNvcnQoYnVja2V0LCBi
dWNrZXQubGVuZ3RoLCBzdHJpbmdDb21wYXJhdG9yKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYnVja2V0Lmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGFycmF5W2RzdCsr
XSA9IGJ1Y2tldFtpXS52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBkc3Q7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgYnVja2V0cyA9IFsgXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBidWNrZXQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBlbnRyeSA9IGJ1Y2tldFtp
XTsKKyAgICAgICAgICAgIHZhciBzdHJpbmcgPSBlbnRyeS5zdHJpbmc7CisgICAgICAgICAgICBp
ZiAoc3RyaW5nLmxlbmd0aCA9PSBkZXB0aCkgeworICAgICAgICAgICAgICAgIGFycmF5W2RzdCsr
XSA9IGVudHJ5LnZhbHVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgYyA9IHN0cmluZy5AY2hhckNvZGVBdChkZXB0aCk7CisgICAg
ICAgICAgICBpZiAoIWJ1Y2tldHNbY10pCisgICAgICAgICAgICAgICAgYnVja2V0c1tjXSA9IFsg
XTsKKyAgICAgICAgICAgIGJ1Y2tldHNbY11bYnVja2V0c1tjXS5sZW5ndGhdID0gZW50cnk7Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Y2tldHMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmICghYnVja2V0c1tpXSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGRzdCA9IGJ1Y2tldFNvcnQoYXJyYXksIGRzdCwgYnVja2V0c1tp
XSwgZGVwdGggKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkc3Q7CisgICAgfQor
CisgICAgZnVuY3Rpb24gY29tcGFyYXRvclNvcnQoYXJyYXksIGNvbXBhcmF0b3IpCisgICAgewor
ICAgICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoID4+PiAwOworCisgICAgICAgIC8vIEZv
ciBjb21wYXRpYmlsaXR5IHdpdGggRmlyZWZveCBhbmQgQ2hyb21lLCBkbyBub3RoaW5nIG9ic2Vy
dmFibGUKKyAgICAgICAgLy8gdG8gdGhlIHRhcmdldCBhcnJheSBpZiBpdCBoYXMgMCBvciAxIHNv
cnRhYmxlIHByb3BlcnRpZXMuCisgICAgICAgIGlmIChsZW5ndGggPCAyKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciB2YWx1ZUNvdW50ID0gY29tcGFjdChhcnJheSwgbGVuZ3Ro
KTsKKyAgICAgICAgbWVyZ2VTb3J0KGFycmF5LCB2YWx1ZUNvdW50LCBjb21wYXJhdG9yKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBzdHJpbmdTb3J0KGFycmF5KQorICAgIHsKKyAgICAgICAgdmFy
IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA+Pj4gMDsKKworICAgICAgICAvLyBGb3IgY29tcGF0aWJp
bGl0eSB3aXRoIEZpcmVmb3ggYW5kIENocm9tZSwgZG8gbm90aGluZyBvYnNlcnZhYmxlCisgICAg
ICAgIC8vIHRvIHRoZSB0YXJnZXQgYXJyYXkgaWYgaXQgaGFzIDAgb3IgMSBzb3J0YWJsZSBwcm9w
ZXJ0aWVzLgorICAgICAgICBpZiAobGVuZ3RoIDwgMikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB2YXIgdmFsdWVDb3VudCA9IGNvbXBhY3QoYXJyYXksIGxlbmd0aCk7CisKKyAgICAg
ICAgdmFyIHN0cmluZ3MgPSBuZXcgQEFycmF5KHZhbHVlQ291bnQpOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHZhbHVlQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHN0cmluZ3NbaV0gPSB7
IHN0cmluZzogQHRvU3RyaW5nKGFycmF5W2ldKSwgdmFsdWU6IGFycmF5W2ldIH07CisKKyAgICAg
ICAgYnVja2V0U29ydChhcnJheSwgMCwgc3RyaW5ncywgMCk7CisgICAgfQorCisgICAgaWYgKHRo
aXMgPT09IG51bGwpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5
cGUuc29ydCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOworCisgICAgaWYgKHRo
aXMgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnBy
b3RvdHlwZS5zb3J0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSB1bmRlZmluZWQiKTsKKwor
ICAgIGlmICh0eXBlb2YgdGhpcyA9PSAic3RyaW5nIikKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBl
RXJyb3IoIkF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIik7CisKKyAg
ICB2YXIgYXJyYXkgPSBAT2JqZWN0KHRoaXMpOworCisgICAgaWYgKHR5cGVvZiBjb21wYXJhdG9y
ID09ICJmdW5jdGlvbiIpCisgICAgICAgIGNvbXBhcmF0b3JTb3J0KGFycmF5LCBjb21wYXJhdG9y
KTsKKyAgICBlbHNlCisgICAgICAgIHN0cmluZ1NvcnQoYXJyYXkpOworCisgICAgcmV0dXJuIGFy
cmF5OworfQorCitmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyosIGVuZCAqLykK
K3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBmdW5jdGlvbiBtYXhXaXRoUG9zaXRpdmVzKGEs
IGIpCisgICAgeworICAgICAgICByZXR1cm4gKGEgPCBiKSA/IGIgOiBhOworICAgIH0KKworICAg
IGZ1bmN0aW9uIG1pbldpdGhNYXliZU5lZ2F0aXZlWmVyb0FuZFBvc2l0aXZlKG1heWJlTmVnYXRp
dmVaZXJvLCBwb3NpdGl2ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobWF5YmVOZWdhdGl2ZVpl
cm8gPCBwb3NpdGl2ZSkgPyBtYXliZU5lZ2F0aXZlWmVybyA6IHBvc2l0aXZlOworICAgIH0KKwor
ICAgIGlmICh0aGlzID09PSBudWxsIHx8IHRoaXMgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LmNvcHlXaXRoaW4gcmVxdWlyZXMgdGhhdCB8dGhpc3wg
bm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7CisgICAgdmFyIHRoaXNPYmplY3QgPSBAT2JqZWN0
KHRoaXMpOworCisgICAgdmFyIGxlbmd0aCA9IEB0b0xlbmd0aCh0aGlzT2JqZWN0Lmxlbmd0aCk7
CisKKyAgICB2YXIgcmVsYXRpdmVUYXJnZXQgPSBAdG9JbnRlZ2VyKHRhcmdldCk7CisgICAgdmFy
IHRvID0gKHJlbGF0aXZlVGFyZ2V0IDwgMCkgPyBtYXhXaXRoUG9zaXRpdmVzKGxlbmd0aCArIHJl
bGF0aXZlVGFyZ2V0LCAwKSA6IG1pbldpdGhNYXliZU5lZ2F0aXZlWmVyb0FuZFBvc2l0aXZlKHJl
bGF0aXZlVGFyZ2V0LCBsZW5ndGgpOworCisgICAgdmFyIHJlbGF0aXZlU3RhcnQgPSBAdG9JbnRl
Z2VyKHN0YXJ0KTsKKyAgICB2YXIgZnJvbSA9IChyZWxhdGl2ZVN0YXJ0IDwgMCkgPyBtYXhXaXRo
UG9zaXRpdmVzKGxlbmd0aCArIHJlbGF0aXZlU3RhcnQsIDApIDogbWluV2l0aE1heWJlTmVnYXRp
dmVaZXJvQW5kUG9zaXRpdmUocmVsYXRpdmVTdGFydCwgbGVuZ3RoKTsKKworICAgIHZhciByZWxh
dGl2ZUVuZDsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSB7CisgICAgICAgIHZhciBl
bmQgPSBhcmd1bWVudHNbMl07CisgICAgICAgIGlmIChlbmQgPT09IHVuZGVmaW5lZCkKKyAgICAg
ICAgICAgIHJlbGF0aXZlRW5kID0gbGVuZ3RoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZWxhdGl2ZUVuZCA9IEB0b0ludGVnZXIoZW5kKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVsYXRp
dmVFbmQgPSBsZW5ndGg7CisKKyAgICB2YXIgZmluYWxWYWx1ZSA9IChyZWxhdGl2ZUVuZCA8IDAp
ID8gbWF4V2l0aFBvc2l0aXZlcyhsZW5ndGggKyByZWxhdGl2ZUVuZCwgMCkgOiBtaW5XaXRoTWF5
YmVOZWdhdGl2ZVplcm9BbmRQb3NpdGl2ZShyZWxhdGl2ZUVuZCwgbGVuZ3RoKTsKKworICAgIHZh
ciBjb3VudCA9IG1pbldpdGhNYXliZU5lZ2F0aXZlWmVyb0FuZFBvc2l0aXZlKGZpbmFsVmFsdWUg
LSBmcm9tLCBsZW5ndGggLSB0byk7CisKKyAgICB2YXIgZGlyZWN0aW9uID0gMTsKKyAgICBpZiAo
ZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7CisgICAgICAgIGRpcmVjdGlvbiA9IC0x
OworICAgICAgICBmcm9tID0gZnJvbSArIGNvdW50IC0gMTsKKyAgICAgICAgdG8gPSB0byArIGNv
dW50IC0gMTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2ksIGZy
b20gKz0gZGlyZWN0aW9uLCB0byArPSBkaXJlY3Rpb24pIHsKKyAgICAgICAgaWYgKGZyb20gaW4g
dGhpc09iamVjdCkKKyAgICAgICAgICAgIHRoaXNPYmplY3RbdG9dID0gdGhpc09iamVjdFtmcm9t
XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlIHRoaXNPYmplY3RbdG9dOworICAg
IH0KKworICAgIHJldHVybiB0aGlzT2JqZWN0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0Z1bmN0aW9uLnByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9GdW5jdGlvbi5wcm90b3R5cGUuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDFhYTAyNDIyYjE4MDRlZWZjMDM2ZjU1Y2ExZTI1ZWE3ZmMxMzBmMmQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0Z1bmN0aW9uLnByb3RvdHlwZS5qcworKysgL2Rldi9udWxsCkBA
IC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi1mdW5jdGlvbiBjYWxsKHRoaXNBcmd1bWVudCkKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0K
LSAgICByZXR1cm4gdGhpcy5AY2FsbCguLi5hcmd1bWVudHMpOwotfQotCi1mdW5jdGlvbiBhcHBs
eSh0aGlzVmFsdWUsIGFyZ3VtZW50VmFsdWVzKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAg
IHJldHVybiB0aGlzLkBhcHBseSh0aGlzVmFsdWUsIGFyZ3VtZW50VmFsdWVzKTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9GdW5jdGlvblByb3RvdHlwZS5q
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9GdW5jdGlvblByb3RvdHlwZS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xYWEwMjQyMmIxODA0ZWVmYzAzNmY1NWNhMWUyNWVhN2ZjMTMwZjJkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0Z1bmN0aW9uUHJv
dG90eXBlLmpzCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBjYWxsKHRoaXNBcmd1bWVudCkKK3sKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4gdGhpcy5AY2FsbCguLi5hcmd1bWVudHMpOworfQorCitm
dW5jdGlvbiBhcHBseSh0aGlzVmFsdWUsIGFyZ3VtZW50VmFsdWVzKQoreworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHJldHVybiB0aGlzLkBhcHBseSh0aGlzVmFsdWUsIGFyZ3VtZW50VmFsdWVz
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9JdGVyYXRv
ci5wcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvSXRlcmF0b3Iu
cHJvdG90eXBlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmNhZTNmMTI1MGU4
NDBiNjY0MzVmYmU3ZjMxZGE5MDFmZWMyZWU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9JdGVyYXRv
ci5wcm90b3R5cGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWZ1bmN0aW9uIHN5bWJv
bEl0ZXJhdG9yKCkKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gdGhpczsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9JdGVyYXRvclByb3Rv
dHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9JdGVyYXRvclByb3RvdHlw
ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42MmNhZTNmMTI1MGU4NDBiNjY0MzVmYmU3ZjMxZGE5MDFmZWMyZWU1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0l0ZXJh
dG9yUHJvdG90eXBlLmpzCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworZnVuY3Rpb24gc3ltYm9sSXRlcmF0b3IoKQor
eworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB0aGlzOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL09wZXJhdGlvbnMuUHJvbWlzZS5qcyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9PcGVyYXRpb25zLlByb21pc2UuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1OWI0ZmQ1MDIzYzU0ZDhkYTEyZjk5MGQ1MDQ3YzA1
ODRhYjBlMmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL09wZXJhdGlvbnMuUHJvbWlzZS5qcworKysg
L2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IFl1
c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIEBpbnRlcm5hbAotCi1mdW5jdGlvbiBpc1Byb21p
c2UocHJvbWlzZSkKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gQGlzT2JqZWN0
KHByb21pc2UpICYmICEhcHJvbWlzZS5AcHJvbWlzZVN0YXRlOwotfQotCi1mdW5jdGlvbiBuZXdQ
cm9taXNlUmVhY3Rpb24oY2FwYWJpbGl0eSwgaGFuZGxlcikKLXsKLSAgICAidXNlIHN0cmljdCI7
Ci0KLSAgICByZXR1cm4gewotICAgICAgICBAY2FwYWJpbGl0aWVzOiBjYXBhYmlsaXR5LAotICAg
ICAgICBAaGFuZGxlcjogaGFuZGxlcgotICAgIH07Ci19Ci0KLWZ1bmN0aW9uIG5ld1Byb21pc2VD
YXBhYmlsaXR5KGNvbnN0cnVjdG9yKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vIEZJ
WE1FOiBDaGVjayBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKS4KLSAgICBpZiAodHlwZW9mIGNv
bnN0cnVjdG9yICE9PSAiZnVuY3Rpb24iKQotICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigi
cHJvbWlzZSBjYXBhYmlsaXR5IHJlcXVpcmVzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24iKTsKLQot
ICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IHsKLSAgICAgICAgQHByb21pc2U6IHVuZGVmaW5l
ZCwKLSAgICAgICAgQHJlc29sdmU6IHVuZGVmaW5lZCwKLSAgICAgICAgQHJlamVjdDogdW5kZWZp
bmVkCi0gICAgfTsKLQotICAgIGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUsIHJlamVjdCkKLSAg
ICB7Ci0gICAgICAgIGlmIChwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSAhPT0gdW5kZWZpbmVk
KQotICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoInJlc29sdmUgZnVuY3Rpb24gaXMg
YWxyZWFkeSBzZXQiKTsKLSAgICAgICAgaWYgKHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QgIT09
IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJyZWplY3QgZnVu
Y3Rpb24gaXMgYWxyZWFkeSBzZXQiKTsKLQotICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVz
b2x2ZSA9IHJlc29sdmU7Ci0gICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QgPSByZWpl
Y3Q7Ci0gICAgfQotCi0gICAgdmFyIHByb21pc2UgPSBuZXcgY29uc3RydWN0b3IoZXhlY3V0b3Ip
OwotCi0gICAgaWYgKHR5cGVvZiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSAhPT0gImZ1bmN0
aW9uIikKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoImV4ZWN1dG9yIGRpZCBub3QgdGFr
ZSBhIHJlc29sdmUgZnVuY3Rpb24iKTsKLQotICAgIGlmICh0eXBlb2YgcHJvbWlzZUNhcGFiaWxp
dHkuQHJlamVjdCAhPT0gImZ1bmN0aW9uIikKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3Io
ImV4ZWN1dG9yIGRpZCBub3QgdGFrZSBhIHJlamVjdCBmdW5jdGlvbiIpOwotCi0gICAgcHJvbWlz
ZUNhcGFiaWxpdHkuQHByb21pc2UgPSBwcm9taXNlOwotCi0gICAgcmV0dXJuIHByb21pc2VDYXBh
YmlsaXR5OwotfQotCi1mdW5jdGlvbiB0cmlnZ2VyUHJvbWlzZVJlYWN0aW9ucyhyZWFjdGlvbnMs
IGFyZ3VtZW50KQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGZvciAodmFyIGluZGV4ID0g
MCwgbGVuZ3RoID0gcmVhY3Rpb25zLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0g
ICAgICAgIEBlbnF1ZXVlSm9iKEBwcm9taXNlUmVhY3Rpb25Kb2IsIFtyZWFjdGlvbnNbaW5kZXhd
LCBhcmd1bWVudF0pOwotfQotCi1mdW5jdGlvbiByZWplY3RQcm9taXNlKHByb21pc2UsIHJlYXNv
bikKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgcmVhY3Rpb25zID0gcHJvbWlzZS5A
cHJvbWlzZVJlamVjdFJlYWN0aW9uczsKLSAgICBwcm9taXNlLkBwcm9taXNlUmVzdWx0ID0gcmVh
c29uOwotICAgIHByb21pc2UuQHByb21pc2VGdWxmaWxsUmVhY3Rpb25zID0gdW5kZWZpbmVkOwot
ICAgIHByb21pc2UuQHByb21pc2VSZWplY3RSZWFjdGlvbnMgPSB1bmRlZmluZWQ7Ci0gICAgcHJv
bWlzZS5AcHJvbWlzZVN0YXRlID0gQHByb21pc2VSZWplY3RlZDsKLQotICAgIEBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24ucHJvbWlzZVJlamVjdGVkKHByb21pc2UsIHJlYXNvbiwgcmVhY3Rpb25z
KTsKLQotICAgIEB0cmlnZ2VyUHJvbWlzZVJlYWN0aW9ucyhyZWFjdGlvbnMsIHJlYXNvbik7Ci19
Ci0KLWZ1bmN0aW9uIGZ1bGZpbGxQcm9taXNlKHByb21pc2UsIHZhbHVlKQotewotICAgICJ1c2Ug
c3RyaWN0IjsKLQotICAgIHZhciByZWFjdGlvbnMgPSBwcm9taXNlLkBwcm9taXNlRnVsZmlsbFJl
YWN0aW9uczsKLSAgICBwcm9taXNlLkBwcm9taXNlUmVzdWx0ID0gdmFsdWU7Ci0gICAgcHJvbWlz
ZS5AcHJvbWlzZUZ1bGZpbGxSZWFjdGlvbnMgPSB1bmRlZmluZWQ7Ci0gICAgcHJvbWlzZS5AcHJv
bWlzZVJlamVjdFJlYWN0aW9ucyA9IHVuZGVmaW5lZDsKLSAgICBwcm9taXNlLkBwcm9taXNlU3Rh
dGUgPSBAcHJvbWlzZUZ1bGZpbGxlZDsKLQotICAgIEBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
cHJvbWlzZUZ1bGZpbGxlZChwcm9taXNlLCB2YWx1ZSwgcmVhY3Rpb25zKTsKLQotICAgIEB0cmln
Z2VyUHJvbWlzZVJlYWN0aW9ucyhyZWFjdGlvbnMsIHZhbHVlKTsKLX0KLQotZnVuY3Rpb24gY3Jl
YXRlUmVzb2x2aW5nRnVuY3Rpb25zKHByb21pc2UpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0g
ICAgdmFyIGFscmVhZHlSZXNvbHZlZCA9IGZhbHNlOwotCi0gICAgdmFyIHJlc29sdmUgPSBmdW5j
dGlvbiAocmVzb2x1dGlvbikgewotICAgICAgICBpZiAoYWxyZWFkeVJlc29sdmVkKQotICAgICAg
ICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTsK
LQotICAgICAgICBpZiAocmVzb2x1dGlvbiA9PT0gcHJvbWlzZSkKLSAgICAgICAgICAgIHJldHVy
biBAcmVqZWN0UHJvbWlzZShwcm9taXNlLCBuZXcgQFR5cGVFcnJvcigiUmVzb2x2ZSBhIHByb21p
c2Ugd2l0aCBpdHNlbGYiKSk7Ci0KLSAgICAgICAgaWYgKCFAaXNPYmplY3QocmVzb2x1dGlvbikp
Ci0gICAgICAgICAgICByZXR1cm4gQGZ1bGZpbGxQcm9taXNlKHByb21pc2UsIHJlc29sdXRpb24p
OwotCi0gICAgICAgIHZhciB0aGVuOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhlbiA9
IHJlc29sdXRpb24udGhlbjsKLSAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAg
IHJldHVybiBAcmVqZWN0UHJvbWlzZShwcm9taXNlLCBlcnJvcik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAodHlwZW9mIHRoZW4gIT09ICdmdW5jdGlvbicpCi0gICAgICAgICAgICByZXR1cm4g
QGZ1bGZpbGxQcm9taXNlKHByb21pc2UsIHJlc29sdXRpb24pOwotCi0gICAgICAgIEBlbnF1ZXVl
Sm9iKEBwcm9taXNlUmVzb2x2ZVRoZW5hYmxlSm9iLCBbcHJvbWlzZSwgcmVzb2x1dGlvbiwgdGhl
bl0pOwotCi0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgfTsKLQotICAgIHZhciByZWpl
Y3QgPSBmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAgICAgIGlmIChhbHJlYWR5UmVzb2x2ZWQpCi0g
ICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0
cnVlOwotCi0gICAgICAgIHJldHVybiBAcmVqZWN0UHJvbWlzZShwcm9taXNlLCByZWFzb24pOwot
ICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgICBAcmVzb2x2ZTogcmVzb2x2ZSwKLSAgICAg
ICAgQHJlamVjdDogcmVqZWN0Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gcHJvbWlzZVJlYWN0aW9u
Sm9iKHJlYWN0aW9uLCBhcmd1bWVudCkKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIg
cHJvbWlzZUNhcGFiaWxpdHkgPSByZWFjdGlvbi5AY2FwYWJpbGl0aWVzOwotCi0gICAgdmFyIHJl
c3VsdDsKLSAgICB0cnkgewotICAgICAgICByZXN1bHQgPSByZWFjdGlvbi5AaGFuZGxlci5AY2Fs
bCh1bmRlZmluZWQsIGFyZ3VtZW50KTsKLSAgICB9IGNhdGNoIChlcnJvcikgewotICAgICAgICBy
ZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGVycm9yKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwodW5k
ZWZpbmVkLCByZXN1bHQpOwotfQotCi1mdW5jdGlvbiBwcm9taXNlUmVzb2x2ZVRoZW5hYmxlSm9i
KHByb21pc2VUb1Jlc29sdmUsIHRoZW5hYmxlLCB0aGVuKQotewotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIHZhciByZXNvbHZpbmdGdW5jdGlvbnMgPSBAY3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25z
KHByb21pc2VUb1Jlc29sdmUpOwotCi0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIHRoZW4uQGNh
bGwodGhlbmFibGUsIHJlc29sdmluZ0Z1bmN0aW9ucy5AcmVzb2x2ZSwgcmVzb2x2aW5nRnVuY3Rp
b25zLkByZWplY3QpOwotICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAgICAgIHJldHVybiByZXNv
bHZpbmdGdW5jdGlvbnMuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGVycm9yKTsKLSAgICB9Ci19
Ci0KLWZ1bmN0aW9uIGluaXRpYWxpemVQcm9taXNlKGV4ZWN1dG9yKQotewotICAgICJ1c2Ugc3Ry
aWN0IjsKLQotICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpCi0gICAgICAg
IHRocm93IG5ldyBAVHlwZUVycm9yKCJQcm9taXNlIGNvbnN0cnVjdG9yIHRha2VzIGEgZnVuY3Rp
b24gYXJndW1lbnQiKTsKLQotICAgIHRoaXMuQHByb21pc2VTdGF0ZSA9IEBwcm9taXNlUGVuZGlu
ZzsKLSAgICB0aGlzLkBwcm9taXNlRnVsZmlsbFJlYWN0aW9ucyA9IFtdOwotICAgIHRoaXMuQHBy
b21pc2VSZWplY3RSZWFjdGlvbnMgPSBbXTsKLQotICAgIHZhciByZXNvbHZpbmdGdW5jdGlvbnMg
PSBAY3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25zKHRoaXMpOwotICAgIHRyeSB7Ci0gICAgICAgIGV4
ZWN1dG9yKHJlc29sdmluZ0Z1bmN0aW9ucy5AcmVzb2x2ZSwgcmVzb2x2aW5nRnVuY3Rpb25zLkBy
ZWplY3QpOwotICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAgICAgIHJldHVybiByZXNvbHZpbmdG
dW5jdGlvbnMuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGVycm9yKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdGhpczsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9PcGVyYXRpb25zUHJvbWlzZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9P
cGVyYXRpb25zUHJvbWlzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTliNGZkNTAyM2M1NGQ4ZGExMmY5OTBk
NTA0N2MwNTg0YWIwZTJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL09wZXJhdGlvbnNQcm9taXNlLmpzCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4u
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEBpbnRlcm5h
bAorCitmdW5jdGlvbiBpc1Byb21pc2UocHJvbWlzZSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICByZXR1cm4gQGlzT2JqZWN0KHByb21pc2UpICYmICEhcHJvbWlzZS5AcHJvbWlzZVN0YXRl
OworfQorCitmdW5jdGlvbiBuZXdQcm9taXNlUmVhY3Rpb24oY2FwYWJpbGl0eSwgaGFuZGxlcikK
K3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICBAY2FwYWJpbGl0
aWVzOiBjYXBhYmlsaXR5LAorICAgICAgICBAaGFuZGxlcjogaGFuZGxlcgorICAgIH07Cit9CisK
K2Z1bmN0aW9uIG5ld1Byb21pc2VDYXBhYmlsaXR5KGNvbnN0cnVjdG9yKQoreworICAgICJ1c2Ug
c3RyaWN0IjsKKworICAgIC8vIEZJWE1FOiBDaGVjayBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9y
KS4KKyAgICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yICE9PSAiZnVuY3Rpb24iKQorICAgICAgICB0
aHJvdyBuZXcgQFR5cGVFcnJvcigicHJvbWlzZSBjYXBhYmlsaXR5IHJlcXVpcmVzIGEgY29uc3Ry
dWN0b3IgZnVuY3Rpb24iKTsKKworICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IHsKKyAgICAg
ICAgQHByb21pc2U6IHVuZGVmaW5lZCwKKyAgICAgICAgQHJlc29sdmU6IHVuZGVmaW5lZCwKKyAg
ICAgICAgQHJlamVjdDogdW5kZWZpbmVkCisgICAgfTsKKworICAgIGZ1bmN0aW9uIGV4ZWN1dG9y
KHJlc29sdmUsIHJlamVjdCkKKyAgICB7CisgICAgICAgIGlmIChwcm9taXNlQ2FwYWJpbGl0eS5A
cmVzb2x2ZSAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3Io
InJlc29sdmUgZnVuY3Rpb24gaXMgYWxyZWFkeSBzZXQiKTsKKyAgICAgICAgaWYgKHByb21pc2VD
YXBhYmlsaXR5LkByZWplY3QgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJyZWplY3QgZnVuY3Rpb24gaXMgYWxyZWFkeSBzZXQiKTsKKworICAgICAgICBw
cm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSA9IHJlc29sdmU7CisgICAgICAgIHByb21pc2VDYXBh
YmlsaXR5LkByZWplY3QgPSByZWplY3Q7CisgICAgfQorCisgICAgdmFyIHByb21pc2UgPSBuZXcg
Y29uc3RydWN0b3IoZXhlY3V0b3IpOworCisgICAgaWYgKHR5cGVvZiBwcm9taXNlQ2FwYWJpbGl0
eS5AcmVzb2x2ZSAhPT0gImZ1bmN0aW9uIikKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3Io
ImV4ZWN1dG9yIGRpZCBub3QgdGFrZSBhIHJlc29sdmUgZnVuY3Rpb24iKTsKKworICAgIGlmICh0
eXBlb2YgcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdCAhPT0gImZ1bmN0aW9uIikKKyAgICAgICAg
dGhyb3cgbmV3IEBUeXBlRXJyb3IoImV4ZWN1dG9yIGRpZCBub3QgdGFrZSBhIHJlamVjdCBmdW5j
dGlvbiIpOworCisgICAgcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2UgPSBwcm9taXNlOworCisg
ICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5OworfQorCitmdW5jdGlvbiB0cmlnZ2VyUHJvbWlz
ZVJlYWN0aW9ucyhyZWFjdGlvbnMsIGFyZ3VtZW50KQoreworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gcmVhY3Rpb25zLmxlbmd0aDsgaW5kZXgg
PCBsZW5ndGg7ICsraW5kZXgpCisgICAgICAgIEBlbnF1ZXVlSm9iKEBwcm9taXNlUmVhY3Rpb25K
b2IsIFtyZWFjdGlvbnNbaW5kZXhdLCBhcmd1bWVudF0pOworfQorCitmdW5jdGlvbiByZWplY3RQ
cm9taXNlKHByb21pc2UsIHJlYXNvbikKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIg
cmVhY3Rpb25zID0gcHJvbWlzZS5AcHJvbWlzZVJlamVjdFJlYWN0aW9uczsKKyAgICBwcm9taXNl
LkBwcm9taXNlUmVzdWx0ID0gcmVhc29uOworICAgIHByb21pc2UuQHByb21pc2VGdWxmaWxsUmVh
Y3Rpb25zID0gdW5kZWZpbmVkOworICAgIHByb21pc2UuQHByb21pc2VSZWplY3RSZWFjdGlvbnMg
PSB1bmRlZmluZWQ7CisgICAgcHJvbWlzZS5AcHJvbWlzZVN0YXRlID0gQHByb21pc2VSZWplY3Rl
ZDsKKworICAgIEBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24ucHJvbWlzZVJlamVjdGVkKHByb21p
c2UsIHJlYXNvbiwgcmVhY3Rpb25zKTsKKworICAgIEB0cmlnZ2VyUHJvbWlzZVJlYWN0aW9ucyhy
ZWFjdGlvbnMsIHJlYXNvbik7Cit9CisKK2Z1bmN0aW9uIGZ1bGZpbGxQcm9taXNlKHByb21pc2Us
IHZhbHVlKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciByZWFjdGlvbnMgPSBwcm9t
aXNlLkBwcm9taXNlRnVsZmlsbFJlYWN0aW9uczsKKyAgICBwcm9taXNlLkBwcm9taXNlUmVzdWx0
ID0gdmFsdWU7CisgICAgcHJvbWlzZS5AcHJvbWlzZUZ1bGZpbGxSZWFjdGlvbnMgPSB1bmRlZmlu
ZWQ7CisgICAgcHJvbWlzZS5AcHJvbWlzZVJlamVjdFJlYWN0aW9ucyA9IHVuZGVmaW5lZDsKKyAg
ICBwcm9taXNlLkBwcm9taXNlU3RhdGUgPSBAcHJvbWlzZUZ1bGZpbGxlZDsKKworICAgIEBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24ucHJvbWlzZUZ1bGZpbGxlZChwcm9taXNlLCB2YWx1ZSwgcmVh
Y3Rpb25zKTsKKworICAgIEB0cmlnZ2VyUHJvbWlzZVJlYWN0aW9ucyhyZWFjdGlvbnMsIHZhbHVl
KTsKK30KKworZnVuY3Rpb24gY3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25zKHByb21pc2UpCit7Cisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIGFscmVhZHlSZXNvbHZlZCA9IGZhbHNlOworCisg
ICAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiAocmVzb2x1dGlvbikgeworICAgICAgICBpZiAoYWxy
ZWFkeVJlc29sdmVkKQorICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgYWxy
ZWFkeVJlc29sdmVkID0gdHJ1ZTsKKworICAgICAgICBpZiAocmVzb2x1dGlvbiA9PT0gcHJvbWlz
ZSkKKyAgICAgICAgICAgIHJldHVybiBAcmVqZWN0UHJvbWlzZShwcm9taXNlLCBuZXcgQFR5cGVF
cnJvcigiUmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGYiKSk7CisKKyAgICAgICAgaWYgKCFA
aXNPYmplY3QocmVzb2x1dGlvbikpCisgICAgICAgICAgICByZXR1cm4gQGZ1bGZpbGxQcm9taXNl
KHByb21pc2UsIHJlc29sdXRpb24pOworCisgICAgICAgIHZhciB0aGVuOworICAgICAgICB0cnkg
eworICAgICAgICAgICAgdGhlbiA9IHJlc29sdXRpb24udGhlbjsKKyAgICAgICAgfSBjYXRjaCAo
ZXJyb3IpIHsKKyAgICAgICAgICAgIHJldHVybiBAcmVqZWN0UHJvbWlzZShwcm9taXNlLCBlcnJv
cik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIHRoZW4gIT09ICdmdW5jdGlvbicp
CisgICAgICAgICAgICByZXR1cm4gQGZ1bGZpbGxQcm9taXNlKHByb21pc2UsIHJlc29sdXRpb24p
OworCisgICAgICAgIEBlbnF1ZXVlSm9iKEBwcm9taXNlUmVzb2x2ZVRoZW5hYmxlSm9iLCBbcHJv
bWlzZSwgcmVzb2x1dGlvbiwgdGhlbl0pOworCisgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Cisg
ICAgfTsKKworICAgIHZhciByZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7CisgICAgICAgIGlm
IChhbHJlYWR5UmVzb2x2ZWQpCisgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAg
ICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlOworCisgICAgICAgIHJldHVybiBAcmVqZWN0UHJvbWlz
ZShwcm9taXNlLCByZWFzb24pOworICAgIH07CisKKyAgICByZXR1cm4geworICAgICAgICBAcmVz
b2x2ZTogcmVzb2x2ZSwKKyAgICAgICAgQHJlamVjdDogcmVqZWN0CisgICAgfTsKK30KKworZnVu
Y3Rpb24gcHJvbWlzZVJlYWN0aW9uSm9iKHJlYWN0aW9uLCBhcmd1bWVudCkKK3sKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSByZWFjdGlvbi5AY2FwYWJp
bGl0aWVzOworCisgICAgdmFyIHJlc3VsdDsKKyAgICB0cnkgeworICAgICAgICByZXN1bHQgPSBy
ZWFjdGlvbi5AaGFuZGxlci5AY2FsbCh1bmRlZmluZWQsIGFyZ3VtZW50KTsKKyAgICB9IGNhdGNo
IChlcnJvcikgeworICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2Fs
bCh1bmRlZmluZWQsIGVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxp
dHkuQHJlc29sdmUuQGNhbGwodW5kZWZpbmVkLCByZXN1bHQpOworfQorCitmdW5jdGlvbiBwcm9t
aXNlUmVzb2x2ZVRoZW5hYmxlSm9iKHByb21pc2VUb1Jlc29sdmUsIHRoZW5hYmxlLCB0aGVuKQor
eworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciByZXNvbHZpbmdGdW5jdGlvbnMgPSBAY3Jl
YXRlUmVzb2x2aW5nRnVuY3Rpb25zKHByb21pc2VUb1Jlc29sdmUpOworCisgICAgdHJ5IHsKKyAg
ICAgICAgcmV0dXJuIHRoZW4uQGNhbGwodGhlbmFibGUsIHJlc29sdmluZ0Z1bmN0aW9ucy5AcmVz
b2x2ZSwgcmVzb2x2aW5nRnVuY3Rpb25zLkByZWplY3QpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7
CisgICAgICAgIHJldHVybiByZXNvbHZpbmdGdW5jdGlvbnMuQHJlamVjdC5AY2FsbCh1bmRlZmlu
ZWQsIGVycm9yKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGluaXRpYWxpemVQcm9taXNlKGV4ZWN1
dG9yKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09
ICdmdW5jdGlvbicpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJQcm9taXNlIGNvbnN0
cnVjdG9yIHRha2VzIGEgZnVuY3Rpb24gYXJndW1lbnQiKTsKKworICAgIHRoaXMuQHByb21pc2VT
dGF0ZSA9IEBwcm9taXNlUGVuZGluZzsKKyAgICB0aGlzLkBwcm9taXNlRnVsZmlsbFJlYWN0aW9u
cyA9IFtdOworICAgIHRoaXMuQHByb21pc2VSZWplY3RSZWFjdGlvbnMgPSBbXTsKKworICAgIHZh
ciByZXNvbHZpbmdGdW5jdGlvbnMgPSBAY3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25zKHRoaXMpOwor
ICAgIHRyeSB7CisgICAgICAgIGV4ZWN1dG9yKHJlc29sdmluZ0Z1bmN0aW9ucy5AcmVzb2x2ZSwg
cmVzb2x2aW5nRnVuY3Rpb25zLkByZWplY3QpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAg
ICAgIHJldHVybiByZXNvbHZpbmdGdW5jdGlvbnMuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGVy
cm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9idWlsdGlucy9Qcm9taXNlLnByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9Qcm9taXNlLnByb3RvdHlwZS5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODU2M2RmMGQ5MjdmYjIzMzk2ODkzOWUxNDk0MjM5NmVjODVlNjVhYS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJvbWlzZS5wcm90b3R5cGUuanMKKysrIC9kZXYvbnVsbApA
QCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotZnVuY3Rpb24gY2F0Y2gob25SZWplY3RlZCkK
LXsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwg
b25SZWplY3RlZCk7Ci19Ci0KLWZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQp
Ci17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKCFAaXNQcm9taXNlKHRoaXMpKQotICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigifHRoaXN8IGlzIG5vdCBhIG9iamVjdCIpOwotCi0g
ICAgLy8gRklYTUU6IEZpeCB0aGlzIGNvZGUgd2hlbiBAQHNwZWNpZXMgd2VsbC1rbm93biBzeW1i
b2wgaXMgbGFuZGVkLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDY2MjQKLSAgICB2YXIgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yOwotCi0g
ICAgdmFyIHJlc3VsdENhcGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoY29uc3RydWN0
b3IpOwotCi0gICAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCAhPT0gImZ1bmN0aW9uIikKLSAgICAg
ICAgb25GdWxmaWxsZWQgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHsgcmV0dXJuIGFyZ3VtZW50OyB9
OwotCi0gICAgaWYgKHR5cGVvZiBvblJlamVjdGVkICE9PSAiZnVuY3Rpb24iKQotICAgICAgICBv
blJlamVjdGVkID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7IHRocm93IGFyZ3VtZW50OyB9OwotCi0g
ICAgdmFyIGZ1bGZpbGxSZWFjdGlvbiA9IEBuZXdQcm9taXNlUmVhY3Rpb24ocmVzdWx0Q2FwYWJp
bGl0eSwgb25GdWxmaWxsZWQpOwotICAgIHZhciByZWplY3RSZWFjdGlvbiA9IEBuZXdQcm9taXNl
UmVhY3Rpb24ocmVzdWx0Q2FwYWJpbGl0eSwgb25SZWplY3RlZCk7Ci0KLSAgICB2YXIgc3RhdGUg
PSB0aGlzLkBwcm9taXNlU3RhdGU7Ci0KLSAgICBpZiAoc3RhdGUgPT09IEBwcm9taXNlUGVuZGlu
ZykgewotICAgICAgICBAcHV0QnlWYWxEaXJlY3QodGhpcy5AcHJvbWlzZUZ1bGZpbGxSZWFjdGlv
bnMsIHRoaXMuQHByb21pc2VGdWxmaWxsUmVhY3Rpb25zLmxlbmd0aCwgZnVsZmlsbFJlYWN0aW9u
KQotICAgICAgICBAcHV0QnlWYWxEaXJlY3QodGhpcy5AcHJvbWlzZVJlamVjdFJlYWN0aW9ucywg
dGhpcy5AcHJvbWlzZVJlamVjdFJlYWN0aW9ucy5sZW5ndGgsIHJlamVjdFJlYWN0aW9uKQotICAg
IH0gZWxzZSBpZiAoc3RhdGUgPT09IEBwcm9taXNlRnVsZmlsbGVkKQotICAgICAgICBAZW5xdWV1
ZUpvYihAcHJvbWlzZVJlYWN0aW9uSm9iLCBbZnVsZmlsbFJlYWN0aW9uLCB0aGlzLkBwcm9taXNl
UmVzdWx0XSk7Ci0gICAgZWxzZSBpZiAoc3RhdGUgPT09IEBwcm9taXNlUmVqZWN0ZWQpCi0gICAg
ICAgIEBlbnF1ZXVlSm9iKEBwcm9taXNlUmVhY3Rpb25Kb2IsIFtyZWplY3RSZWFjdGlvbiwgdGhp
cy5AcHJvbWlzZVJlc3VsdF0pOwotCi0gICAgcmV0dXJuIHJlc3VsdENhcGFiaWxpdHkuQHByb21p
c2U7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJvbWlz
ZVByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Qcm9taXNlUHJv
dG90eXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1NjNkZjBkOTI3ZmIyMzM5Njg5MzllMTQ5NDIzOTZlYzg1
ZTY1YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
UHJvbWlzZVByb3RvdHlwZS5qcwpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworZnVuY3Rp
b24gY2F0Y2gob25SZWplY3RlZCkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4g
dGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7Cit9CisKK2Z1bmN0aW9uIHRoZW4ob25G
dWxmaWxsZWQsIG9uUmVqZWN0ZWQpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFA
aXNQcm9taXNlKHRoaXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigifHRoaXN8IGlz
IG5vdCBhIG9iamVjdCIpOworCisgICAgLy8gRklYTUU6IEZpeCB0aGlzIGNvZGUgd2hlbiBAQHNw
ZWNpZXMgd2VsbC1rbm93biBzeW1ib2wgaXMgbGFuZGVkLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY2MjQKKyAgICB2YXIgY29uc3RydWN0b3IgPSB0
aGlzLmNvbnN0cnVjdG9yOworCisgICAgdmFyIHJlc3VsdENhcGFiaWxpdHkgPSBAbmV3UHJvbWlz
ZUNhcGFiaWxpdHkoY29uc3RydWN0b3IpOworCisgICAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCAh
PT0gImZ1bmN0aW9uIikKKyAgICAgICAgb25GdWxmaWxsZWQgPSBmdW5jdGlvbiAoYXJndW1lbnQp
IHsgcmV0dXJuIGFyZ3VtZW50OyB9OworCisgICAgaWYgKHR5cGVvZiBvblJlamVjdGVkICE9PSAi
ZnVuY3Rpb24iKQorICAgICAgICBvblJlamVjdGVkID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7IHRo
cm93IGFyZ3VtZW50OyB9OworCisgICAgdmFyIGZ1bGZpbGxSZWFjdGlvbiA9IEBuZXdQcm9taXNl
UmVhY3Rpb24ocmVzdWx0Q2FwYWJpbGl0eSwgb25GdWxmaWxsZWQpOworICAgIHZhciByZWplY3RS
ZWFjdGlvbiA9IEBuZXdQcm9taXNlUmVhY3Rpb24ocmVzdWx0Q2FwYWJpbGl0eSwgb25SZWplY3Rl
ZCk7CisKKyAgICB2YXIgc3RhdGUgPSB0aGlzLkBwcm9taXNlU3RhdGU7CisKKyAgICBpZiAoc3Rh
dGUgPT09IEBwcm9taXNlUGVuZGluZykgeworICAgICAgICBAcHV0QnlWYWxEaXJlY3QodGhpcy5A
cHJvbWlzZUZ1bGZpbGxSZWFjdGlvbnMsIHRoaXMuQHByb21pc2VGdWxmaWxsUmVhY3Rpb25zLmxl
bmd0aCwgZnVsZmlsbFJlYWN0aW9uKQorICAgICAgICBAcHV0QnlWYWxEaXJlY3QodGhpcy5AcHJv
bWlzZVJlamVjdFJlYWN0aW9ucywgdGhpcy5AcHJvbWlzZVJlamVjdFJlYWN0aW9ucy5sZW5ndGgs
IHJlamVjdFJlYWN0aW9uKQorICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IEBwcm9taXNlRnVsZmls
bGVkKQorICAgICAgICBAZW5xdWV1ZUpvYihAcHJvbWlzZVJlYWN0aW9uSm9iLCBbZnVsZmlsbFJl
YWN0aW9uLCB0aGlzLkBwcm9taXNlUmVzdWx0XSk7CisgICAgZWxzZSBpZiAoc3RhdGUgPT09IEBw
cm9taXNlUmVqZWN0ZWQpCisgICAgICAgIEBlbnF1ZXVlSm9iKEBwcm9taXNlUmVhY3Rpb25Kb2Is
IFtyZWplY3RSZWFjdGlvbiwgdGhpcy5AcHJvbWlzZVJlc3VsdF0pOworCisgICAgcmV0dXJuIHJl
c3VsdENhcGFiaWxpdHkuQHByb21pc2U7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL1N0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZS5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzFlZTVkNzMzNjc4NjY4MTAzODFhNzliOTY4OGI4YmRlN2Qw
YWM0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBZ
dXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1mdW5jdGlvbiBuZXh0KCkKLXsKLSAgICAidXNlIHN0
cmljdCI7Ci0KLSAgICBpZiAodGhpcyA9PSBudWxsKQotICAgICAgICB0aHJvdyBuZXcgQFR5cGVF
cnJvcigiJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8
IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCIpOwotCi0gICAgdmFyIHBvc2l0aW9uID0gdGhpcy5A
c3RyaW5nSXRlcmF0b3JOZXh0SW5kZXg7Ci0gICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQp
Ci0gICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCIlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUl
Lm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgYSBTdHJpbmcgSXRlcmF0b3IgaW5zdGFuY2Ui
KTsKLQotICAgIHZhciBkb25lID0gdHJ1ZTsKLSAgICB2YXIgdmFsdWUgPSB1bmRlZmluZWQ7Ci0K
LSAgICB2YXIgc3RyaW5nID0gdGhpcy5AaXRlcmF0ZWRTdHJpbmc7Ci0gICAgaWYgKHN0cmluZyAh
PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoID4+PiAw
OwotICAgICAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aGlzLkBp
dGVyYXRlZFN0cmluZyA9IHVuZGVmaW5lZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGRvbmUgPSBmYWxzZTsKLQotICAgICAgICAgICAgdmFyIGZpcnN0ID0gc3RyaW5nLkBjaGFyQ29k
ZUF0KHBvc2l0aW9uKTsKLSAgICAgICAgICAgIGlmIChmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+
IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IGxlbmd0aCkKLSAgICAgICAgICAgICAgICB2YWx1
ZSA9IHN0cmluZ1twb3NpdGlvbl07Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICB2YXIgc2Vjb25kID0gc3RyaW5nLkBjaGFyQ29kZUF0KHBvc2l0aW9uICsgMSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNlY29uZCA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkYpCi0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gc3RyaW5nW3Bvc2l0aW9uXTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RyaW5nW3Bvc2l0aW9uXSArIHN0cmlu
Z1twb3NpdGlvbiArIDFdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLkBzdHJp
bmdJdGVyYXRvck5leHRJbmRleCA9IHBvc2l0aW9uICsgdmFsdWUubGVuZ3RoOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHtkb25lLCB2YWx1ZX07Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzFlZTVkNzMzNjc4NjY4MTAzODFhNzliOTY4OGI4YmRlN2QwYWM0YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TdHJpbmdJdGVy
YXRvclByb3RvdHlwZS5qcwpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Z1bmN0aW9uIG5leHQoKQoreworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIGlmICh0aGlzID09IG51bGwpCisgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCIlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8
dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7CisKKyAgICB2YXIgcG9zaXRpb24gPSB0
aGlzLkBzdHJpbmdJdGVyYXRvck5leHRJbmRleDsKKyAgICBpZiAocG9zaXRpb24gPT09IHVuZGVm
aW5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIiVTdHJpbmdJdGVyYXRvclByb3Rv
dHlwZSUubmV4dCByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBhIFN0cmluZyBJdGVyYXRvciBpbnN0
YW5jZSIpOworCisgICAgdmFyIGRvbmUgPSB0cnVlOworICAgIHZhciB2YWx1ZSA9IHVuZGVmaW5l
ZDsKKworICAgIHZhciBzdHJpbmcgPSB0aGlzLkBpdGVyYXRlZFN0cmluZzsKKyAgICBpZiAoc3Ry
aW5nICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgg
Pj4+IDA7CisgICAgICAgIGlmIChwb3NpdGlvbiA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIHRo
aXMuQGl0ZXJhdGVkU3RyaW5nID0gdW5kZWZpbmVkOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZG9uZSA9IGZhbHNlOworCisgICAgICAgICAgICB2YXIgZmlyc3QgPSBzdHJpbmcuQGNo
YXJDb2RlQXQocG9zaXRpb24pOworICAgICAgICAgICAgaWYgKGZpcnN0IDwgMHhEODAwIHx8IGZp
cnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gbGVuZ3RoKQorICAgICAgICAgICAgICAg
IHZhbHVlID0gc3RyaW5nW3Bvc2l0aW9uXTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHZhciBzZWNvbmQgPSBzdHJpbmcuQGNoYXJDb2RlQXQocG9zaXRpb24gKyAxKTsKKyAg
ICAgICAgICAgICAgICBpZiAoc2Vjb25kIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRikKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJpbmdbcG9zaXRpb25dOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJpbmdbcG9zaXRpb25dICsg
c3RyaW5nW3Bvc2l0aW9uICsgMV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMu
QHN0cmluZ0l0ZXJhdG9yTmV4dEluZGV4ID0gcG9zaXRpb24gKyB2YWx1ZS5sZW5ndGg7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4ge2RvbmUsIHZhbHVlfTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9UeXBlZEFycmF5LnByb3RvdHlwZS5qcyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9UeXBlZEFycmF5LnByb3RvdHlwZS5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhjZDM0OTJlZDU0NTI2YmIxMzFiMTI0ODE4
ZGRkMTRlNGUwODFiZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvVHlwZWRBcnJheS5wcm90b3R5cGUu
anMKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIE5vdGUgdGhhdCB0aGUgaW50cmlzaWMgQHR5cGVk
QXJyYXlMZW5ndGggY2hlY2tzIHRoZSB0aGF0IHRoZSBhcmd1bWVudCBwYXNzZWQgaXMgYSB0eXBl
ZCBhcnJheQotLy8gYW5kIHRocm93cyBpZiBpdCBpcyBub3QuCi0KLWZ1bmN0aW9uIGV2ZXJ5KGNh
bGxiYWNrIC8qLCB0aGlzQXJnICovKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgbGVu
Z3RoID0gQHR5cGVkQXJyYXlMZW5ndGgodGhpcyk7Ci0gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVu
dHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKLQotICAgIGlmICh0eXBl
b2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCi0gICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9y
KCJUeXBlZEFycmF5LnByb3RvdHlwZS5ldmVyeSBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24i
KTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYg
KCFjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCB0aGlzW2ldLCBpLCB0aGlzKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZnVuY3Rpb24g
ZmluZChjYWxsYmFjayAvKiBbLCB0aGlzQXJnXSAqLykKLXsKLSAgICAidXNlIHN0cmljdCI7Ci0g
ICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpOwotICAgIHZhciB0aGlzQXJn
ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7Ci0KLSAg
ICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQotICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiVHlwZWRBcnJheS5wcm90b3R5cGUuZmluZCBjYWxsYmFjayBtdXN0IGJlIGEg
ZnVuY3Rpb24iKTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgbGV0IGVsZW0gPSB0aGlzW2ldOwotICAgICAgICBpZiAoY2FsbGJhY2suQGNhbGwodGhp
c0FyZywgZWxlbSwgaSwgdGhpcykpCi0gICAgICAgICAgICByZXR1cm4gZWxlbTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHVuZGVmaW5lZDsKLX0KLQotZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrIC8q
IFssIHRoaXNBcmddICovKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgbGVuZ3RoID0g
QHR5cGVkQXJyYXlMZW5ndGgodGhpcyk7Ci0gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVu
Z3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKLQotICAgIGlmICh0eXBlb2YgY2Fs
bGJhY2sgIT09ICJmdW5jdGlvbiIpCi0gICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJUeXBl
ZEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXggY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7
Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChj
YWxsYmFjay5AY2FsbCh0aGlzQXJnLCB0aGlzW2ldLCBpLCB0aGlzKSkKLSAgICAgICAgICAgIHJl
dHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLWZ1bmN0aW9uIGZvckVhY2goY2Fs
bGJhY2sgLyogWywgdGhpc0FyZ10gKi8pCi17Ci0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBs
ZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTsKLSAgICB2YXIgdGhpc0FyZyA9IGFyZ3Vt
ZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOwotCi0gICAgaWYgKHR5
cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJy
b3IoIlR5cGVkQXJyYXkucHJvdG90eXBlLmZvckVhY2ggY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0
aW9uIik7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICBj
YWxsYmFjay5AY2FsbCh0aGlzQXJnLCB0aGlzW2ldLCBpLCB0aGlzKTsKLX0KLQotZnVuY3Rpb24g
c29tZShjYWxsYmFjayAvKiBbLCB0aGlzQXJnXSAqLykKLXsKLSAgICAvLyAyMi4yLjMuMjQKLSAg
ICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMp
OwotICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0g
OiB1bmRlZmluZWQ7Ci0KLSAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQot
ICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlwZWRBcnJheS5wcm90b3R5cGUuc29tZSBj
YWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIHRoaXNb
aV0sIGksIHRoaXMpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1mdW5jdGlvbiBzb3J0KGNvbXBhcmF0b3IpCi17Ci0gICAgLy8gMjIu
Mi4zLjI1Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgZnVuY3Rpb24gbWluKGEsIGIpCi0gICAg
ewotICAgICAgICByZXR1cm4gYSA8IGIgPyBhIDogYjsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBt
ZXJnZShkc3QsIHNyYywgc3JjSW5kZXgsIHNyY0VuZCwgd2lkdGgsIGNvbXBhcmF0b3IpCi0gICAg
ewotICAgICAgICB2YXIgbGVmdCA9IHNyY0luZGV4OwotICAgICAgICB2YXIgbGVmdEVuZCA9IG1p
bihsZWZ0ICsgd2lkdGgsIHNyY0VuZCk7Ci0gICAgICAgIHZhciByaWdodCA9IGxlZnRFbmQ7Ci0g
ICAgICAgIHZhciByaWdodEVuZCA9IG1pbihyaWdodCArIHdpZHRoLCBzcmNFbmQpOwotCi0gICAg
ICAgIGZvciAodmFyIGRzdEluZGV4ID0gbGVmdDsgZHN0SW5kZXggPCByaWdodEVuZDsgKytkc3RJ
bmRleCkgewotICAgICAgICAgICAgaWYgKHJpZ2h0IDwgcmlnaHRFbmQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobGVmdCA+PSBsZWZ0RW5kIHx8IGNvbXBhcmF0b3Ioc3JjW3JpZ2h0XSwgc3JjW2xl
ZnRdKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZHN0W2RzdEluZGV4XSA9IHNyY1tyaWdo
dCsrXTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkc3RbZHN0SW5kZXhdID0gc3JjW2xlZnQrK107
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtZXJnZVNvcnQoYXJyYXksIHZhbHVl
Q291bnQsIGNvbXBhcmF0b3IpCi0gICAgewotICAgICAgICB2YXIgYnVmZmVyID0gWyBdOwotICAg
ICAgICBidWZmZXIubGVuZ3RoID0gdmFsdWVDb3VudDsKLQotICAgICAgICB2YXIgZHN0ID0gYnVm
ZmVyOwotICAgICAgICB2YXIgc3JjID0gYXJyYXk7Ci0KLSAgICAgICAgZm9yICh2YXIgd2lkdGgg
PSAxOyB3aWR0aCA8IHZhbHVlQ291bnQ7IHdpZHRoICo9IDIpIHsKLSAgICAgICAgICAgIGZvciAo
dmFyIHNyY0luZGV4ID0gMDsgc3JjSW5kZXggPCB2YWx1ZUNvdW50OyBzcmNJbmRleCArPSAyICog
d2lkdGgpCi0gICAgICAgICAgICAgICAgbWVyZ2UoZHN0LCBzcmMsIHNyY0luZGV4LCB2YWx1ZUNv
dW50LCB3aWR0aCwgY29tcGFyYXRvcik7Ci0KLSAgICAgICAgICAgIHZhciB0bXAgPSBzcmM7Ci0g
ICAgICAgICAgICBzcmMgPSBkc3Q7Ci0gICAgICAgICAgICBkc3QgPSB0bXA7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc3JjICE9IGFycmF5KSB7Ci0gICAgICAgICAgICBmb3IodmFyIGkgPSAw
OyBpIDwgdmFsdWVDb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3JjW2ld
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3Ro
KHRoaXMpOwotCi0gICAgaWYgKGxlbmd0aCA8IDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICh0eXBlb2YgY29tcGFyYXRvciA9PSAiZnVuY3Rpb24iKQotICAgICAgICBtZXJnZVNvcnQodGhp
cywgbGVuZ3RoLCBjb21wYXJhdG9yKTsKLSAgICBlbHNlCi0gICAgICAgIEB0eXBlZEFycmF5U29y
dCh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gdGhpczsKLX0KLQotZnVuY3Rpb24gcmVkdWNlKGNh
bGxiYWNrIC8qIFssIGluaXRpYWxWYWx1ZV0gKi8pCi17Ci0gICAgLy8gMjIuMi4zLjE5Ci0gICAg
InVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMp
OwotCi0gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKLSAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIlR5cGVkQXJyYXkucHJvdG90eXBlLnJlZHVjZSBjYWxsYmFjayBt
dXN0IGJlIGEgZnVuY3Rpb24iKTsKLQotICAgIGlmIChsZW5ndGggPT09IDAgJiYgYXJndW1lbnRz
Lmxlbmd0aCA8IDIpCi0gICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJUeXBlZEFycmF5LnBy
b3RvdHlwZS5yZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7Ci0K
LSAgICB2YXIgYWNjdW11bGF0b3IsIGsgPSAwOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4g
MSkKLSAgICAgICAgYWNjdW11bGF0b3IgPSBhcmd1bWVudHNbMV07Ci0gICAgZWxzZQotICAgICAg
ICBhY2N1bXVsYXRvciA9IHRoaXNbaysrXTsKLQotICAgIGZvciAoOyBrIDwgbGVuZ3RoOyBrKysp
Ci0gICAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2suQGNhbGwodW5kZWZpbmVkLCBhY2N1bXVs
YXRvciwgdGhpc1trXSwgaywgdGhpcyk7Ci0KLSAgICByZXR1cm4gYWNjdW11bGF0b3I7Ci19Ci0K
LWZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrIC8qIFssIGluaXRpYWxWYWx1ZV0gKi8pCi17
Ci0gICAgLy8gMjIuMi4zLjIwCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGxlbmd0aCA9
IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpOwotCi0gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0g
ImZ1bmN0aW9uIikKLSAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlR5cGVkQXJyYXkucHJv
dG90eXBlLnJlZHVjZVJpZ2h0IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpOwotCi0gICAg
aWYgKGxlbmd0aCA9PT0gMCAmJiBhcmd1bWVudHMubGVuZ3RoIDwgMikKLSAgICAgICAgdGhyb3cg
bmV3IEBUeXBlRXJyb3IoIlR5cGVkQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0IG9mIGVtcHR5
IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwotCi0gICAgdmFyIGFjY3VtdWxhdG9yLCBr
ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpCi0gICAgICAgIGFj
Y3VtdWxhdG9yID0gYXJndW1lbnRzWzFdOwotICAgIGVsc2UKLSAgICAgICAgYWNjdW11bGF0b3Ig
PSB0aGlzW2stLV07Ci0KLSAgICBmb3IgKDsgayA+PSAwOyBrLS0pCi0gICAgICAgIGFjY3VtdWxh
dG9yID0gY2FsbGJhY2suQGNhbGwodW5kZWZpbmVkLCBhY2N1bXVsYXRvciwgdGhpc1trXSwgaywg
dGhpcyk7Ci0KLSAgICByZXR1cm4gYWNjdW11bGF0b3I7Ci19Ci0KLWZ1bmN0aW9uIG1hcChjYWxs
YmFjayAvKiwgdGhpc0FyZyAqLykKLXsKLSAgICAvLyAyMi4yLjMuMTgKLSAgICAidXNlIHN0cmlj
dCI7Ci0KLSAgICB2YXIgbGVuZ3RoID0gQHR5cGVkQXJyYXlMZW5ndGgodGhpcyk7Ci0KLSAgICBp
ZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQotICAgICAgICB0aHJvdyBuZXcgQFR5
cGVFcnJvcigiVHlwZWRBcnJheS5wcm90b3R5cGUubWFwIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5j
dGlvbiIpOwotCi0gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3Vt
ZW50c1sxXSA6IHVuZGVmaW5lZDsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBzcGVj
aWVzIGNvbnN0cnVjdG9yLgotICAgIHZhciByZXN1bHQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihs
ZW5ndGgpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
dmFyIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suQGNhbGwodGhpc0FyZywgdGhpc1tpXSwgaSwgdGhp
cyk7Ci0gICAgICAgIHJlc3VsdFtpXSA9IG1hcHBlZFZhbHVlOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1mdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pCi17
Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3Ro
KHRoaXMpOwotCi0gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKLSAgICAg
ICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlR5cGVkQXJyYXkucHJvdG90eXBlLmZpbHRlciBjYWxs
YmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKLQotICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRz
Lmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7Ci0KLSAgICB2YXIga2VwdCA9
IFtdOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICB2
YXIgdmFsdWUgPSB0aGlzW2ldOwotICAgICAgICBpZiAoY2FsbGJhY2suQGNhbGwodGhpc0FyZywg
dmFsdWUsIGksIHRoaXMpKQotICAgICAgICAgICAga2VwdC5wdXNoKHZhbHVlKTsKLSAgICB9Ci0K
LSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBzcGVjaWVzIGNvbnN0cnVjdG9yLgotICAg
IHZhciByZXN1bHQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihrZXB0Lmxlbmd0aCk7Ci0KLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGtlcHQubGVuZ3RoOyBpKyspCi0gICAgICAgIHJlc3VsdFtpXSA9
IGtlcHRbaV07Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1mdW5jdGlvbiB0b0xvY2FsZVN0
cmluZygpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFy
cmF5TGVuZ3RoKHRoaXMpOwotCi0gICAgaWYgKGxlbmd0aCA9PSAwKQotICAgICAgICByZXR1cm4g
IiI7Ci0KLSAgICB2YXIgc3RyaW5nID0gdGhpc1swXS50b0xvY2FsZVN0cmluZygpOwotICAgIGZv
ciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgIHN0cmluZyArPSAiLCIgKyB0
aGlzW2ldLnRvTG9jYWxlU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUu
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvVHlwZWRBcnJheVByb3RvdHlwZS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mOGNkMzQ5MmVkNTQ1MjZiYjEzMWIxMjQ4MThkZGQxNGU0ZTA4MWJmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVkQXJy
YXlQcm90b3R5cGUuanMKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBOb3RlIHRoYXQgdGhlIGludHJpc2ljIEB0eXBlZEFy
cmF5TGVuZ3RoIGNoZWNrcyB0aGUgdGhhdCB0aGUgYXJndW1lbnQgcGFzc2VkIGlzIGEgdHlwZWQg
YXJyYXkKKy8vIGFuZCB0aHJvd3MgaWYgaXQgaXMgbm90LgorCitmdW5jdGlvbiBldmVyeShjYWxs
YmFjayAvKiwgdGhpc0FyZyAqLykKK3sKKyAgICAidXNlIHN0cmljdCI7CisgICAgdmFyIGxlbmd0
aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpOworICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRz
Lmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7CisKKyAgICBpZiAodHlwZW9m
IGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigi
VHlwZWRBcnJheS5wcm90b3R5cGUuZXZlcnkgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICgh
Y2FsbGJhY2suQGNhbGwodGhpc0FyZywgdGhpc1tpXSwgaSwgdGhpcykpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGZp
bmQoY2FsbGJhY2sgLyogWywgdGhpc0FyZ10gKi8pCit7CisgICAgInVzZSBzdHJpY3QiOworICAg
IHZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTsKKyAgICB2YXIgdGhpc0FyZyA9
IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworCisgICAg
aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKKyAgICAgICAgdGhyb3cgbmV3IEBU
eXBlRXJyb3IoIlR5cGVkQXJyYXkucHJvdG90eXBlLmZpbmQgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1
bmN0aW9uIik7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGxldCBlbGVtID0gdGhpc1tpXTsKKyAgICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNB
cmcsIGVsZW0sIGksIHRoaXMpKQorICAgICAgICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorICAg
IHJldHVybiB1bmRlZmluZWQ7Cit9CisKK2Z1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFjayAvKiBb
LCB0aGlzQXJnXSAqLykKK3sKKyAgICAidXNlIHN0cmljdCI7CisgICAgdmFyIGxlbmd0aCA9IEB0
eXBlZEFycmF5TGVuZ3RoKHRoaXMpOworICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0
aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7CisKKyAgICBpZiAodHlwZW9mIGNhbGxi
YWNrICE9PSAiZnVuY3Rpb24iKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlwZWRB
cnJheS5wcm90b3R5cGUuZmluZEluZGV4IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoY2Fs
bGJhY2suQGNhbGwodGhpc0FyZywgdGhpc1tpXSwgaSwgdGhpcykpCisgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCitmdW5jdGlvbiBmb3JFYWNoKGNhbGxi
YWNrIC8qIFssIHRoaXNBcmddICovKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB2YXIgbGVu
Z3RoID0gQHR5cGVkQXJyYXlMZW5ndGgodGhpcyk7CisgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVu
dHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKKworICAgIGlmICh0eXBl
b2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9y
KCJUeXBlZEFycmF5LnByb3RvdHlwZS5mb3JFYWNoIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlv
biIpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgY2Fs
bGJhY2suQGNhbGwodGhpc0FyZywgdGhpc1tpXSwgaSwgdGhpcyk7Cit9CisKK2Z1bmN0aW9uIHNv
bWUoY2FsbGJhY2sgLyogWywgdGhpc0FyZ10gKi8pCit7CisgICAgLy8gMjIuMi4zLjI0CisgICAg
InVzZSBzdHJpY3QiOworICAgIHZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTsK
KyAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDog
dW5kZWZpbmVkOworCisgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKKyAg
ICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlR5cGVkQXJyYXkucHJvdG90eXBlLnNvbWUgY2Fs
bGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCB0aGlzW2ld
LCBpLCB0aGlzKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworZnVuY3Rpb24gc29ydChjb21wYXJhdG9yKQoreworICAgIC8vIDIyLjIu
My4yNQorICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9uIG1pbihhLCBiKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGEgPCBiID8gYSA6IGI7CisgICAgfQorCisgICAgZnVuY3Rpb24gbWVy
Z2UoZHN0LCBzcmMsIHNyY0luZGV4LCBzcmNFbmQsIHdpZHRoLCBjb21wYXJhdG9yKQorICAgIHsK
KyAgICAgICAgdmFyIGxlZnQgPSBzcmNJbmRleDsKKyAgICAgICAgdmFyIGxlZnRFbmQgPSBtaW4o
bGVmdCArIHdpZHRoLCBzcmNFbmQpOworICAgICAgICB2YXIgcmlnaHQgPSBsZWZ0RW5kOworICAg
ICAgICB2YXIgcmlnaHRFbmQgPSBtaW4ocmlnaHQgKyB3aWR0aCwgc3JjRW5kKTsKKworICAgICAg
ICBmb3IgKHZhciBkc3RJbmRleCA9IGxlZnQ7IGRzdEluZGV4IDwgcmlnaHRFbmQ7ICsrZHN0SW5k
ZXgpIHsKKyAgICAgICAgICAgIGlmIChyaWdodCA8IHJpZ2h0RW5kKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGxlZnQgPj0gbGVmdEVuZCB8fCBjb21wYXJhdG9yKHNyY1tyaWdodF0sIHNyY1tsZWZ0
XSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRzdFtkc3RJbmRleF0gPSBzcmNbcmlnaHQr
K107CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZHN0W2RzdEluZGV4XSA9IHNyY1tsZWZ0KytdOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gbWVyZ2VTb3J0KGFycmF5LCB2YWx1ZUNv
dW50LCBjb21wYXJhdG9yKQorICAgIHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9IFsgXTsKKyAgICAg
ICAgYnVmZmVyLmxlbmd0aCA9IHZhbHVlQ291bnQ7CisKKyAgICAgICAgdmFyIGRzdCA9IGJ1ZmZl
cjsKKyAgICAgICAgdmFyIHNyYyA9IGFycmF5OworCisgICAgICAgIGZvciAodmFyIHdpZHRoID0g
MTsgd2lkdGggPCB2YWx1ZUNvdW50OyB3aWR0aCAqPSAyKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBzcmNJbmRleCA9IDA7IHNyY0luZGV4IDwgdmFsdWVDb3VudDsgc3JjSW5kZXggKz0gMiAqIHdp
ZHRoKQorICAgICAgICAgICAgICAgIG1lcmdlKGRzdCwgc3JjLCBzcmNJbmRleCwgdmFsdWVDb3Vu
dCwgd2lkdGgsIGNvbXBhcmF0b3IpOworCisgICAgICAgICAgICB2YXIgdG1wID0gc3JjOworICAg
ICAgICAgICAgc3JjID0gZHN0OworICAgICAgICAgICAgZHN0ID0gdG1wOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHNyYyAhPSBhcnJheSkgeworICAgICAgICAgICAgZm9yKHZhciBpID0gMDsg
aSA8IHZhbHVlQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHNyY1tpXTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0
aGlzKTsKKworICAgIGlmIChsZW5ndGggPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
dHlwZW9mIGNvbXBhcmF0b3IgPT0gImZ1bmN0aW9uIikKKyAgICAgICAgbWVyZ2VTb3J0KHRoaXMs
IGxlbmd0aCwgY29tcGFyYXRvcik7CisgICAgZWxzZQorICAgICAgICBAdHlwZWRBcnJheVNvcnQo
dGhpcyk7CisgICAgCisgICAgcmV0dXJuIHRoaXM7Cit9CisKK2Z1bmN0aW9uIHJlZHVjZShjYWxs
YmFjayAvKiBbLCBpbml0aWFsVmFsdWVdICovKQoreworICAgIC8vIDIyLjIuMy4xOQorICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIHZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0aGlzKTsK
KworICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJUeXBlZEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgY2FsbGJhY2sgbXVz
dCBiZSBhIGZ1bmN0aW9uIik7CisKKyAgICBpZiAobGVuZ3RoID09PSAwICYmIGFyZ3VtZW50cy5s
ZW5ndGggPCAyKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlwZWRBcnJheS5wcm90
b3R5cGUucmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOworCisg
ICAgdmFyIGFjY3VtdWxhdG9yLCBrID0gMDsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEp
CisgICAgICAgIGFjY3VtdWxhdG9yID0gYXJndW1lbnRzWzFdOworICAgIGVsc2UKKyAgICAgICAg
YWNjdW11bGF0b3IgPSB0aGlzW2srK107CisKKyAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKQor
ICAgICAgICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrLkBjYWxsKHVuZGVmaW5lZCwgYWNjdW11bGF0
b3IsIHRoaXNba10sIGssIHRoaXMpOworCisgICAgcmV0dXJuIGFjY3VtdWxhdG9yOworfQorCitm
dW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFjayAvKiBbLCBpbml0aWFsVmFsdWVdICovKQorewor
ICAgIC8vIDIyLjIuMy4yMAorICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBsZW5ndGggPSBA
dHlwZWRBcnJheUxlbmd0aCh0aGlzKTsKKworICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJm
dW5jdGlvbiIpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJUeXBlZEFycmF5LnByb3Rv
dHlwZS5yZWR1Y2VSaWdodCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKKworICAgIGlm
IChsZW5ndGggPT09IDAgJiYgYXJndW1lbnRzLmxlbmd0aCA8IDIpCisgICAgICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJUeXBlZEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCBvZiBlbXB0eSBh
cnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKKworICAgIHZhciBhY2N1bXVsYXRvciwgayA9
IGxlbmd0aCAtIDE7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKQorICAgICAgICBhY2N1
bXVsYXRvciA9IGFyZ3VtZW50c1sxXTsKKyAgICBlbHNlCisgICAgICAgIGFjY3VtdWxhdG9yID0g
dGhpc1trLS1dOworCisgICAgZm9yICg7IGsgPj0gMDsgay0tKQorICAgICAgICBhY2N1bXVsYXRv
ciA9IGNhbGxiYWNrLkBjYWxsKHVuZGVmaW5lZCwgYWNjdW11bGF0b3IsIHRoaXNba10sIGssIHRo
aXMpOworCisgICAgcmV0dXJuIGFjY3VtdWxhdG9yOworfQorCitmdW5jdGlvbiBtYXAoY2FsbGJh
Y2sgLyosIHRoaXNBcmcgKi8pCit7CisgICAgLy8gMjIuMi4zLjE4CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVuZ3RoKHRoaXMpOworCisgICAgaWYg
KHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBl
RXJyb3IoIlR5cGVkQXJyYXkucHJvdG90eXBlLm1hcCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rp
b24iKTsKKworICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVu
dHNbMV0gOiB1bmRlZmluZWQ7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgc3BlY2ll
cyBjb25zdHJ1Y3Rvci4KKyAgICB2YXIgcmVzdWx0ID0gbmV3IHRoaXMuY29uc3RydWN0b3IobGVu
Z3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZh
ciBtYXBwZWRWYWx1ZSA9IGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIHRoaXNbaV0sIGksIHRoaXMp
OworICAgICAgICByZXN1bHRbaV0gPSBtYXBwZWRWYWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQorewor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0
aGlzKTsKKworICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCisgICAgICAg
IHRocm93IG5ldyBAVHlwZUVycm9yKCJUeXBlZEFycmF5LnByb3RvdHlwZS5maWx0ZXIgY2FsbGJh
Y2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisKKyAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5s
ZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworCisgICAgdmFyIGtlcHQgPSBb
XTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFy
IHZhbHVlID0gdGhpc1tpXTsKKyAgICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIHZh
bHVlLCBpLCB0aGlzKSkKKyAgICAgICAgICAgIGtlcHQucHVzaCh2YWx1ZSk7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgc3BlY2llcyBjb25zdHJ1Y3Rvci4KKyAgICB2
YXIgcmVzdWx0ID0gbmV3IHRoaXMuY29uc3RydWN0b3Ioa2VwdC5sZW5ndGgpOworCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBrZXB0Lmxlbmd0aDsgaSsrKQorICAgICAgICByZXN1bHRbaV0gPSBr
ZXB0W2ldOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gdG9Mb2NhbGVTdHJp
bmcoKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBsZW5ndGggPSBAdHlwZWRBcnJh
eUxlbmd0aCh0aGlzKTsKKworICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICAgICAgcmV0dXJuICIi
OworCisgICAgdmFyIHN0cmluZyA9IHRoaXNbMF0udG9Mb2NhbGVTdHJpbmcoKTsKKyAgICBmb3Ig
KHZhciBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBzdHJpbmcgKz0gIiwiICsgdGhp
c1tpXS50b0xvY2FsZVN0cmluZygpOworCisgICAgcmV0dXJuIHN0cmluZzsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266058</attachid>
            <date>2015-11-22 11:08:40 -0800</date>
            <delta_ts>2015-11-22 23:02:25 -0800</delta_ts>
            <desc>Proposed Fix</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>18987</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBlZDMwZmZlLi43YmE3N2I3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTkyLDIyICsxMTkyLDIyIEBA
IHNldChCVUlMVElOU19HRU5FUkFUT1JfU0NSSVBUUwogCiBzZXQoSmF2YVNjcmlwdENvcmVfQlVJ
TFRJTlNfU09VUkNFUwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9BcnJheUNv
bnN0cnVjdG9yLmpzCi0gICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL0FycmF5SXRl
cmF0b3IucHJvdG90eXBlLmpzCi0gICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL0Fy
cmF5LnByb3RvdHlwZS5qcwotICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9GdW5j
dGlvbi5wcm90b3R5cGUuanMKKyAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvQXJy
YXlJdGVyYXRvclByb3RvdHlwZS5qcworICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlu
cy9BcnJheVByb3RvdHlwZS5qcworICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9G
dW5jdGlvblByb3RvdHlwZS5qcwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9idWlsdGlucy9H
bG9iYWxPYmplY3QuanMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1
aWx0aW5zL0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzCi0gICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2J1aWx0aW5zL0l0ZXJhdG9yLnByb3RvdHlwZS5qcworICAgICR7SkFWQVNDUklQVENP
UkVfRElSfS9idWlsdGlucy9JdGVyYXRvclByb3RvdHlwZS5qcwogICAgICR7SkFWQVNDUklQVENP
UkVfRElSfS9idWlsdGlucy9Nb2R1bGVMb2FkZXJPYmplY3QuanMKICAgICAke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vYnVpbHRpbnMvT2JqZWN0Q29uc3RydWN0b3IuanMKLSAgICAke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vYnVpbHRpbnMvT3BlcmF0aW9ucy5Qcm9taXNlLmpzCisgICAgJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L2J1aWx0aW5zL09wZXJhdGlvbnNQcm9taXNlLmpzCiAgICAgJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L2J1aWx0aW5zL1Byb21pc2VDb25zdHJ1Y3Rvci5qcwotICAgICR7SkFWQVNDUklQ
VENPUkVfRElSfS9idWlsdGlucy9Qcm9taXNlLnByb3RvdHlwZS5qcworICAgICR7SkFWQVNDUklQ
VENPUkVfRElSfS9idWlsdGlucy9Qcm9taXNlUHJvdG90eXBlLmpzCiAgICAgJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L2J1aWx0aW5zL1JlZmxlY3RPYmplY3QuanMKICAgICAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vYnVpbHRpbnMvU3RyaW5nQ29uc3RydWN0b3IuanMKLSAgICAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vYnVpbHRpbnMvU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLmpzCi0gICAgJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2J1aWx0aW5zL1R5cGVkQXJyYXkucHJvdG90eXBlLmpzCisgICAgJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzCisgICAg
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2J1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanMKICAg
ICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vYnVpbHRpbnMvVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpz
CiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRiMTY1ZGQuLmUwNmJkNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTExLTIyICBCcmlhbiBC
dXJnICA8YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBKYXZhU2NyaXB0Q29yZSBi
dWlsdGlucyBmaWxlcyB0byBtYXRjaCBleHBvc2VkIG9iamVjdCBuYW1lcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNTQ5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXMgYSBzdWJ0YXNrIG9mIHVuaWZ5
aW5nIGNvZGUgZ2VuZXJhdGlvbiBmb3IgV2ViQ29yZSBhbmQgSlNDIGJ1aWx0aW5zLCB3ZSBuZWVk
IHRvIGdldCByaWQgb2YKKyAgICAgICAgZGlmZmVyZW5jZXMgYmV0d2VlbiBidWlsdGlucyBmaWxl
bmFtZXMgKGUuZy4sIE9wZXJhdGlvbnMuUHJvbWlzZS5qcywgUHJvbWlzZS5wcm90b3R5cGUuanMp
CisgICAgICAgIGFuZCB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIEJ1aWx0aW4gb2JqZWN0IChP
cGVyYXRpb25zUHJvbWlzZSwgUHJvbWlzZVByb3RvdHlwZSkuCisKKyAgICAgICAgSWYgd2UgZG9u
J3QgZG8gdGhpcywgdGhlbiBib3RoIGJ1aWxkIHN5c3RlbXMgbmVlZCBzcGVjaWFsIGhhY2tzIHRv
IG5vcm1hbGl6ZSB0aGUgb2JqZWN0IG5hbWUKKyAgICAgICAgZnJvbSB0aGUgZmlsZSBuYW1lLiBJ
dCdzIGVhc2llciB0byBqdXN0IG5vcm1hbGl6ZSB0aGUgZmlsZW5hbWUuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnVp
bHRpbnMvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9BcnJheUl0ZXJhdG9yLnByb3RvdHlwZS5qcy4KKyAgICAgICAg
KiBidWlsdGlucy9BcnJheVByb3RvdHlwZS5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9BcnJheS5wcm90b3R5cGUuanMuCisgICAgICAgICogYnVpbHRpbnMv
RnVuY3Rpb25Qcm90b3R5cGUuanM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvRnVuY3Rpb24ucHJvdG90eXBlLmpzLgorICAgICAgICAqIGJ1aWx0aW5zL0l0ZXJh
dG9yUHJvdG90eXBlLmpzOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0l0ZXJhdG9yLnByb3RvdHlwZS5qcy4KKyAgICAgICAgKiBidWlsdGlucy9PcGVyYXRpb25z
UHJvbWlzZS5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9P
cGVyYXRpb25zLlByb21pc2UuanMuCisgICAgICAgICogYnVpbHRpbnMvUHJvbWlzZVByb3RvdHlw
ZS5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Qcm9taXNl
LnByb3RvdHlwZS5qcy4KKyAgICAgICAgKiBidWlsdGlucy9TdHJpbmdJdGVyYXRvclByb3RvdHlw
ZS5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TdHJpbmdJ
dGVyYXRvci5wcm90b3R5cGUuanMuCisgICAgICAgICogYnVpbHRpbnMvVHlwZWRBcnJheVByb3Rv
dHlwZS5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9UeXBl
ZEFycmF5LnByb3RvdHlwZS5qcy4KKwogMjAxNS0xMS0yMCAgQW5kcmVhcyBLbGluZyAgPGFrbGlu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTkyNTM2KTogTnVsbCBwb2ludGVy
IGRlcmVmZXJlbmNlIGluIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbigp
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2Ug
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAyZjY1ZGI1
Li44ZTcwODk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpA
QCAtODEsMjMgKzgxLDIzIEBAIEJVSUxUSU5TX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAogCiBKYXZh
U2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1
aWx0aW5zL0FycmF5Q29uc3RydWN0b3IuanMgXAotICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0
aW5zL0FycmF5SXRlcmF0b3IucHJvdG90eXBlLmpzIFwKLSAgICAkKEphdmFTY3JpcHRDb3JlKS9i
dWlsdGlucy9BcnJheS5wcm90b3R5cGUuanMgXAotICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0
aW5zL0Z1bmN0aW9uLnByb3RvdHlwZS5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRp
bnMvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVp
bHRpbnMvQXJyYXlQcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5z
L0Z1bmN0aW9uUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9H
bG9iYWxPYmplY3QuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRp
bnMvSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgXAotICAgICQoSmF2YVNjcmlwdENvcmUp
L2J1aWx0aW5zL0l0ZXJhdG9yLnByb3RvdHlwZS5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkv
YnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1
aWx0aW5zL01vZHVsZUxvYWRlck9iamVjdC5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVp
bHRpbnMvT2JqZWN0Q29uc3RydWN0b3IuanMgXAotICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0
aW5zL09wZXJhdGlvbnMuUHJvbWlzZS5qcyBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRp
bnMvT3BlcmF0aW9uc1Byb21pc2UuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5z
L1Byb21pc2VDb25zdHJ1Y3Rvci5qcyBcCi0gICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMv
UHJvbWlzZS5wcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL1By
b21pc2VQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL1JlZmxl
Y3RPYmplY3QuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL1N0cmluZ0NvbnN0
cnVjdG9yLmpzIFwKLSAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9TdHJpbmdJdGVyYXRv
ci5wcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL1N0cmluZ0l0
ZXJhdG9yUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9UeXBl
ZEFycmF5Q29uc3RydWN0b3IuanMgXAotICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL1R5
cGVkQXJyYXkucHJvdG90eXBlLmpzIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9U
eXBlZEFycmF5UHJvdG90eXBlLmpzIFwKICMKIAogIyBUaGUgY29tYmluZWQgb3V0cHV0IGZpbGUg
ZGVwZW5kcyBvbiB0aGUgY29udGVudHMgb2YgYnVpbHRpbnMgYW5kIGdlbmVyYXRvciBzY3JpcHRz
LCBzbwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlZDc0OTE2Li40MDg5ODNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzE2Nyw3ICszMTY3LDcgQEAKIAkJNTM3
MEI0RjQxQkYyNUVBMjAwNUM0MEZDIC8qIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzkxN0U3QTFCNzkwNkU0MDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5MTdFN0MxQjc5MTEwNjAwMEVCRDMzIC8qIEpTVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MzkxN0U4MzFCNzkxQ0I4MDAwRUJEMzMgLyogVHlwZWRBcnJheS5wcm90b3R5cGUuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IG5hbWUgPSBUeXBlZEFycmF5LnByb3RvdHlwZS5q
czsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXkucHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0g
U09VUkNFX1JPT1Q7IH07CisJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5
UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gVHlw
ZWRBcnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUu
anM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNTNGMjU2RTExQjg3RTI4MDAwQjRC
NzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1NDA3NTg0MThGNEEzNzUwMDYwMkE1RCAvKiBDb21waWxl
UnVudGltZVRvTExWTUlSLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9
IENvbXBpbGVSdW50aW1lVG9MTFZNSVIueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzMxNSwxNiArMzMxNSwxNiBAQAogCQk3QzE4NEUyNDE3QkZG
QTM2MDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IubHV0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzE4NEUyNTE3QkZGQTM2MDA3Q0I2M0EgLyogSlNQcm9taXNlUHJvdG90eXBlLmx1dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1Byb21pc2VQcm90b3R5cGUubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDRjlCQzU4MUI2NUQ5QTMwMDlEQjFFRiAvKiBBcnJheUNvbnN0cnVjdG9y
LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gQXJyYXlDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NGOUJDNTkxQjY1RDlBMzAwOURCMUVGIC8qIEFycmF5SXRl
cmF0b3IucHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gQXJyYXlJdGVyYXRvci5w
cm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRjlCQzU5MUI2NUQ5
QTMwMDlEQjFFRiAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBw
YXRoID0gQXJyYXlJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0NGOUJDNUExQjY1RDlBMzAwOURCMUVGIC8qIEdsb2JhbE9iamVjdC5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IEdsb2JhbE9iamVjdC5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJN0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yLnByb3RvdHlwZS5qcyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgcGF0aCA9IEl0ZXJhdG9yLnByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSXRlcmF0b3JQcm90b3R5cGUuanM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRjlCQzVDMUI2NUQ5QjEwMDlEQjFFRiAvKiBP
YmplY3RDb25zdHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE9iamVjdENvbnN0cnVj
dG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0Y5QkM1RDFCNjVEOUIxMDA5
REIxRUYgLyogT3BlcmF0aW9ucy5Qcm9taXNlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gT3Bl
cmF0aW9ucy5Qcm9taXNlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0Y5QkM1
RDFCNjVEOUIxMDA5REIxRUYgLyogT3BlcmF0aW9uc1Byb21pc2UuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBPcGVyYXRpb25zUHJvbWlzZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NGOUJDNUUxQjY1RDlCMTAwOURCMUVGIC8qIFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgcGF0aCA9IFByb21pc2VDb25zdHJ1Y3Rvci5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0NGOUJDNUYxQjY1RDlCMTAwOURCMUVGIC8qIFJlZmxlY3RPYmplY3Qu
anMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBSZWZsZWN0T2JqZWN0LmpzOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0Y5QkM2MDFCNjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3Ry
dWN0b3IuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBTdHJpbmdDb25zdHJ1Y3Rvci5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0
cmluZ0l0ZXJhdG9yLnByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmluZ0l0
ZXJhdG9yLnByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NGQkFD
MUMxOEI1MzVFNTAwRDAwNzUwIC8qIFByb21pc2UucHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gUHJvbWlzZS5wcm90b3R5cGUuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRjlCQzYxMUI2NUQ5QjEwMDlEQjFFRiAvKiBTdHJpbmdJ
dGVyYXRvclByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IFN0cmluZ0l0ZXJhdG9y
UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZCQUMxQzE4QjUz
NUU1MDBEMDA3NTAgLyogUHJvbWlzZVByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgcGF0aCA9IFByb21pc2VQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdFNEVFNzA4MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVDaGFpbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3RTRFRTcwRTBFQkI3QTVCMDA1OTM0QUEgLyogU3Ry
dWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Ry
dWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjAxNjFERjBG
M0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zNzg5LDcgKzM3ODksNyBAQAogCQlBN0E4QUYzMTE3QURCNUYz
MDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3QThBRjMzMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MzJBcnJheS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVaW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBN0E5NzlDNDE4QkU4RDlFMDAyQzM3MzMgLyogRnVuY3Rpb24ucHJv
dG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gRnVuY3Rp
b24ucHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0E5NzlDNDE4
QkU4RDlFMDAyQzM3MzMgLyogRnVuY3Rpb25Qcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBGdW5jdGlvblByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0YWJsZUFs
bG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0OERCNjBFRTc0Q0ZD
MDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdCNEFDQUUxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXhwb3J0TWFjcm9zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODE0LDcgKzM4MTQsNyBAQAogCQlBN0NBM0FF
MjE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2Vha01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0NB
M0FFOTE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2Vha01hcERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBN0NBM0FFQTE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha01hcERhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQTdEODAxQTAxODgwRDY2RTAwMjZDMzlCIC8qIEFycmF5LnByb3Rv
dHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEFycmF5LnBy
b3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdEODAxQTAxODgwRDY2
RTAwMjZDMzlCIC8qIEFycmF5UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZh
c2NyaXB0OyBwYXRoID0gQXJyYXlQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3RDgwMUExMTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnVpbHRpbkV4ZWN1dGFibGVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdEODAxQTIxODgwRDY2RTAwMjZD
MzlCIC8qIEJ1aWx0aW5FeGVjdXRhYmxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCdWlsdGluRXhlY3V0YWJsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTdEODAxQTYxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0J1aWx0aW5zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTY1MzMsMjcgKzY1MzMsMjcgQEAKIAkJQTdEODAxOUYxODgwRDY2RTAw
MjZDMzlCIC8qIGJ1aWx0aW5zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQlBN0Q4MDFBMDE4ODBENjZFMDAyNkMzOUIgLyogQXJyYXkucHJvdG90eXBlLmpz
ICovLAorCQkJCUE3RDgwMUEwMTg4MEQ2NkUwMDI2QzM5QiAvKiBBcnJheVByb3RvdHlwZS5qcyAq
LywKIAkJCQk3Q0Y5QkM1ODFCNjVEOUEzMDA5REIxRUYgLyogQXJyYXlDb25zdHJ1Y3Rvci5qcyAq
LywKLQkJCQk3Q0Y5QkM1OTFCNjVEOUEzMDA5REIxRUYgLyogQXJyYXlJdGVyYXRvci5wcm90b3R5
cGUuanMgKi8sCisJCQkJN0NGOUJDNTkxQjY1RDlBMzAwOURCMUVGIC8qIEFycmF5SXRlcmF0b3JQ
cm90b3R5cGUuanMgKi8sCiAJCQkJQTdEODAxQTExODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0aW5F
eGVjdXRhYmxlcy5jcHAgKi8sCiAJCQkJQTdEODAxQTIxODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0
aW5FeGVjdXRhYmxlcy5oICovLAogCQkJCUE3NUVFOUIwMThBQUI3RTIwMEFBRDA0MyAvKiBCdWls
dGluTmFtZXMuaCAqLywKIAkJCQk0MURFQTEzMTFCOUYzMTU0MDA2RDY1REQgLyogQnVpbHRpblV0
aWxzLmggKi8sCi0JCQkJQTdBOTc5QzQxOEJFOEQ5RTAwMkMzNzMzIC8qIEZ1bmN0aW9uLnByb3Rv
dHlwZS5qcyAqLywKKwkJCQlBN0E5NzlDNDE4QkU4RDlFMDAyQzM3MzMgLyogRnVuY3Rpb25Qcm90
b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNUExQjY1RDlBMzAwOURCMUVGIC8qIEdsb2JhbE9iamVj
dC5qcyAqLywKIAkJCQlFMzVFMDM2MTFCN0FCNDg1MDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uT2JqZWN0LmpzICovLAogCQkJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJ
bnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLywKLQkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5
REIxRUYgLyogSXRlcmF0b3IucHJvdG90eXBlLmpzICovLAorCQkJCTdDRjlCQzVCMUI2NUQ5QTMw
MDlEQjFFRiAvKiBJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQlFMzA2Nzc5NzFCOEJDNkY1
MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyT2JqZWN0LmpzICovLAogCQkJCTdDRjlCQzVDMUI2NUQ5
QjEwMDlEQjFFRiAvKiBPYmplY3RDb25zdHJ1Y3Rvci5qcyAqLywKLQkJCQk3Q0Y5QkM1RDFCNjVE
OUIxMDA5REIxRUYgLyogT3BlcmF0aW9ucy5Qcm9taXNlLmpzICovLAotCQkJCTdDRkJBQzFDMThC
NTM1RTUwMEQwMDc1MCAvKiBQcm9taXNlLnByb3RvdHlwZS5qcyAqLywKKwkJCQk3Q0Y5QkM1RDFC
NjVEOUIxMDA5REIxRUYgLyogT3BlcmF0aW9uc1Byb21pc2UuanMgKi8sCisJCQkJN0NGQkFDMUMx
OEI1MzVFNTAwRDAwNzUwIC8qIFByb21pc2VQcm90b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNUUx
QjY1RDlCMTAwOURCMUVGIC8qIFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM1
RjFCNjVEOUIxMDA5REIxRUYgLyogUmVmbGVjdE9iamVjdC5qcyAqLywKIAkJCQk3Q0Y5QkM2MDFC
NjVEOUIxMDA5REIxRUYgLyogU3RyaW5nQ29uc3RydWN0b3IuanMgKi8sCi0JCQkJN0NGOUJDNjEx
QjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZS5qcyAqLywKLQkJCQk1
MzkxN0U4MzFCNzkxQ0I4MDAwRUJEMzMgLyogVHlwZWRBcnJheS5wcm90b3R5cGUuanMgKi8sCisJ
CQkJN0NGOUJDNjExQjY1RDlCMTAwOURCMUVGIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpz
ICovLAorCQkJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAvKiBUeXBlZEFycmF5UHJvdG90eXBl
LmpzICovLAogCQkJCTUzNEM0NTdBMUJDNzAzREMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3Ry
dWN0b3IuanMgKi8sCiAJCQkpOwogCQkJcGF0aCA9IGJ1aWx0aW5zOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJvdG90eXBlLmpzIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuanMK
c2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9BcnJheUl0ZXJhdG9yLnByb3RvdHlwZS5qcwpyZW5hbWUgdG8gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuanMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheS5wcm90b3R5cGUuanMgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlQcm90b3R5cGUuanMKc2ltaWxhcml0eSBp
bmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJh
eS5wcm90b3R5cGUuanMKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9B
cnJheVByb3RvdHlwZS5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0Z1bmN0aW9uLnByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9GdW5jdGlvblByb3RvdHlwZS5qcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0Z1bmN0aW9uLnByb3RvdHlwZS5qcwpyZW5h
bWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0Z1bmN0aW9uUHJvdG90eXBlLmpz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvSXRlcmF0b3IucHJv
dG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90
eXBlLmpzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvSXRlcmF0b3IucHJvdG90eXBlLmpzCnJlbmFtZSB0byBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9PcGVyYXRpb25zLlByb21pc2UuanMgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvT3BlcmF0aW9uc1Byb21pc2UuanMKc2ltaWxhcml0
eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9P
cGVyYXRpb25zLlByb21pc2UuanMKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9PcGVyYXRpb25zUHJvbWlzZS5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL1Byb21pc2UucHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL1Byb21pc2VQcm90b3R5cGUuanMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFt
ZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Qcm9taXNlLnByb3RvdHlwZS5q
cwpyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1Byb21pc2VQcm90b3R5
cGUuanMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TdHJpbmdJ
dGVyYXRvci5wcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3Ry
aW5nSXRlcmF0b3JQcm90b3R5cGUuanMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TdHJpbmdJdGVyYXRvci5wcm90b3R5cGUu
anMKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TdHJpbmdJdGVyYXRv
clByb3RvdHlwZS5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L1R5cGVkQXJyYXkucHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L1R5cGVkQXJyYXlQcm90b3R5cGUuanMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9UeXBlZEFycmF5LnByb3RvdHlwZS5qcwpy
ZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5
cGUuanMK
</data>
<flag name="review"
          id="291088"
          type_id="1"
          status="+"
          setter="youennf"
    />
    <flag name="commit-queue"
          id="291089"
          type_id="3"
          status="-"
          setter="youennf"
    />
          </attachment>
      

    </bug>

</bugzilla>