<?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>86477</bug_id>
          
          <creation_ts>2012-05-15 06:30:52 -0700</creation_ts>
          <short_desc>Web Inspector: Refactor SnippetsModel: extract SnippetStorage, make SnippetScriptMapping delegate calls to ScriptSnippetModel and provide public interface on ScriptSnippetModel in terms of uiSourceCodes</short_desc>
          <delta_ts>2012-05-15 07:36:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vsevolod Vlasov">vsevik</reporter>
          <assigned_to name="Vsevolod Vlasov">vsevik</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>623983</commentid>
    <comment_count>0</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-05-15 06:30:52 -0700</bug_when>
    <thetext>Refactor SnippetsModel: extract SnippetStorage, make SnippetScriptMapping delegate calls to ScriptSnippetModel and provide public interface on ScriptSnippetModel in terms of uiSourceCodes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623990</commentid>
    <comment_count>1</comment_count>
      <attachid>141950</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-05-15 06:34:05 -0700</bug_when>
    <thetext>Created attachment 141950
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624016</commentid>
    <comment_count>2</comment_count>
      <attachid>141950</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-05-15 06:51:29 -0700</bug_when>
    <thetext>Comment on attachment 141950
Patch

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

&gt; Source/WebCore/inspector/front-end/DebuggerPresentationModel.js:-44
&gt; -    this._mappings.push(this._snippetsMapping);

Now that DPM is only instantiating mappings, I don&apos;t see a problem in its dependency on snippets model.

&gt; Source/WebCore/inspector/front-end/DebuggerPresentationModel.js:106
&gt; +    set snippetMapping(snippetMapping)

Setters do not work great with the compiler, avoid their use.

&gt; Source/WebCore/inspector/front-end/ScriptSnippetModel.js:75
&gt; +        var uiSourceCode = new WebInspector.JavaScriptSource(uiSourceCodeURL, new WebInspector.SnippetContentProvider(snippet), this._snippetScriptMapping);

could snippet implement ContentProvider ?

&gt; Source/WebCore/inspector/front-end/ScriptSnippetModel.js:89
&gt; +        var snippet = this._snippetForUISourceCode.get(uiSourceCode);

I don&apos;t think one can follow consistency of these maps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624071</commentid>
    <comment_count>3</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-05-15 07:36:18 -0700</bug_when>
    <thetext>Committed r117065: &lt;http://trac.webkit.org/changeset/117065&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141950</attachid>
            <date>2012-05-15 06:34:05 -0700</date>
            <delta_ts>2012-05-15 06:51:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86477-20120515173402.patch</filename>
            <type>text/plain</type>
            <size>64787</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTcxMWFmYjEyMjEwY2Uz
Yjc0NzFkODBjNWIxODMxMjRhYmJlZjcyYS4uN2QwNGVhOTgwNDA0ZGY2MjQ3MWUwMWRlNTE0Mzhm
NDEyYTY5YzgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTA1LTE1ICBWc2V2
b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFJlZmFjdG9yIFNuaXBwZXRzTW9kZWw6IGV4dHJhY3QgU25pcHBldFN0b3JhZ2UsIG1ha2Ug
U25pcHBldFNjcmlwdE1hcHBpbmcgZGVsZWdhdGUgY2FsbHMgdG8gU2NyaXB0U25pcHBldE1vZGVs
IGFuZCBwcm92aWRlIHB1YmxpYyBpbnRlcmZhY2Ugb24gU2NyaXB0U25pcHBldE1vZGVsIGluIHRl
cm1zIG9mIHVpU291cmNlQ29kZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg2NDc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRXh0cmFjdGVkIFNuaXBwZXRTdG9yYWdlIHRvIGJlIHJldXNlZCBmb3Igb3Ro
ZXIgc25pcHBldCB0eXBlcy4KKyAgICAgICAgTWFkZSBTbmlwcGV0U2NyaXB0TWFwcGluZyBkZWxl
Z2F0ZSBhbGwgY2FsbHMgdG8gU2NyaXB0U25pcHBldE1vZGVsIGFuZCBpbmplY3RlZCBpdCBpbiBE
ZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLgorICAgICAgICBTY3JpcHRTbmlwcGV0TW9kZWwgbm93
IHByb3ZpZGVzIHB1YmxpYyBpbnRlcmZhY2UgZm9yIFNjcmlwdHNQYW5lbCBpbiB0ZXJtcyBvZiB1
aVNvdXJjZUNvZGVzLgorCisgICAgICAgIFRlc3RzOiBpbnNwZWN0b3IvZGVidWdnZXIvc2NyaXB0
LXNuaXBwZXQtbW9kZWwuaHRtbAorICAgICAgICAgICAgICAgaW5zcGVjdG9yL3NuaXBwZXQtc3Rv
cmFnZS5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQt
ZW5kLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRp
b25Nb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1v
ZGVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnBy
b3RvdHlwZS5zZXQgc25pcHBldE1hcHBpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvU2NyaXB0U25pcHBldE1vZGVsLmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRTbmlwcGV0TW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRN
b2RlbC5wcm90b3R5cGUuY3JlYXRlU2NyaXB0U25pcHBldCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2NyaXB0U25pcHBldE1vZGVsLnByb3RvdHlwZS5fYWRkU2NyaXB0U25pcHBldCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U25pcHBldE1vZGVsLnByb3RvdHlwZS5fcmF3TG9jYXRp
b25Ub1VJTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2Rl
bC5wcm90b3R5cGUuX3VpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uLmdldCBpZik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0U25pcHBldE1vZGVsLnByb3RvdHlwZS5fdWlMb2NhdGlvblRvUmF3
TG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbC5wcm90
b3R5cGUuX3VpU291cmNlQ29kZUxpc3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFNu
aXBwZXRNb2RlbC5wcm90b3R5cGUuX3JlbGVhc2VkVUlTb3VyY2VDb2Rlcyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0U25pcHBldE1vZGVsLnByb3RvdHlwZS5fY3JlYXRlVUlTb3VyY2VD
b2RlRm9yU2NyaXB0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTbmlwcGV0TW9kZWwu
cHJvdG90eXBlLl9zb3VyY2VVUkxGb3JTbmlwcGV0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRTbmlwcGV0TW9kZWwucHJvdG90eXBlLl9zbmlwcGV0SWRGb3JTb3VyY2VVUkwpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbC5wcm90b3R5cGUuX3NuaXBwZXRG
b3JTb3VyY2VVUkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbC5w
cm90b3R5cGUuX3Jlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TbmlwcGV0U2NyaXB0TWFw
cGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU25pcHBldFNjcmlwdE1hcHBpbmcucHJvdG90
eXBlLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tbmlw
cGV0U2NyaXB0TWFwcGluZy5wcm90b3R5cGUudWlMb2NhdGlvblRvUmF3TG9jYXRpb24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNuaXBwZXRTY3JpcHRNYXBwaW5nLnByb3RvdHlwZS51aVNvdXJj
ZUNvZGVMaXN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TbmlwcGV0U2NyaXB0TWFwcGluZy5w
cm90b3R5cGUuc25pcHBldElkRm9yU291cmNlVVJMKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
bmlwcGV0U2NyaXB0TWFwcGluZy5wcm90b3R5cGUuYWRkU2NyaXB0KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TbmlwcGV0U2NyaXB0TWFwcGluZy5wcm90b3R5cGUuX3VpU291cmNlQ29kZXNBZGRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU25pcHBldFNjcmlwdE1hcHBpbmcucHJvdG90eXBl
Ll91aVNvdXJjZUNvZGVzUmVtb3ZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU25pcHBldFNj
cmlwdE1hcHBpbmcucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tbmlw
cGV0Q29udGVudFByb3ZpZGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NuaXBw
ZXRTdG9yYWdlLmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5TbmlwcGV0U3RvcmFn
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU25pcHBldFN0b3JhZ2UucHJvdG90eXBlLmdldCBu
YW1lUHJlZml4KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TbmlwcGV0U3RvcmFnZS5wcm90b3R5
cGUuX3NhdmVTZXR0aW5ncyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU25pcHBldFN0b3JhZ2Uu
cHJvdG90eXBlLnNldCBzbmlwcGV0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU25pcHBldFN0
b3JhZ2UucHJvdG90eXBlLnNuaXBwZXRGb3JJZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU25p
cHBldFN0b3JhZ2UucHJvdG90eXBlLmRlbGV0ZVNuaXBwZXQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNuaXBwZXRTdG9yYWdlLnByb3RvdHlwZS5fc25pcHBldEFkZGVkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TbmlwcGV0U3RvcmFnZS5wcm90b3R5cGUucmVzZXQuc2V0IHRoaXMpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNuaXBwZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNuaXBw
ZXQuZnJvbU9iamVjdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU25pcHBldC5wcm90b3R5cGUu
Z2V0IGlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TbmlwcGV0LnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU25pcHBldC5wcm90b3R5cGUuc2V0IG5hbWUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNuaXBwZXQucHJvdG90eXBlLmdldCBjb250ZW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TbmlwcGV0LnByb3RvdHlwZS5zZXQgY29udGVudCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU25pcHBldC5wcm90b3R5cGUuc2VyaWFsaXplVG9PYmplY3QpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU25pcHBldHNNb2RlbC5qczogUmVtb3ZlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qczoKKwogMjAxMi0wNS0xNSAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVy
Y3plZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFRoZSBBUk0gTkVPTiBvcHRpbWl6ZWQgZmlsdGVy
cyBkb2VzIG5vdCBjb21waWxlIG9uIFRIVU1CMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDA1MGMxMzM2
MTY5ZWQ0ZDk3MDc2ZGQ2NzQ0YTM3YzFjODYwZTQ0MDYuLmU2ZjJhM2VlNjM4MTE3NzljODZhY2Jk
OWYxMjNmMGI2MzYxODcyMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTY0NjQsNiArNjQ2NCw3IEBA
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRGb3JtYXR0ZXIuanMnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpz
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdE1hcHBpbmcuanMnLAor
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0U25pcHBldE1vZGVsLmpzJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNOYXZpZ2F0b3IuanMnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNTZWFyY2hTY29wZS5qcycsCkBAIC02
NDc2LDcgKzY0NzcsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU2lkZWJh
ck92ZXJsYXkuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU2lkZWJhclBh
bmUuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU2lkZWJhclRyZWVFbGVt
ZW50LmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NuaXBwZXRzTW9kZWwu
anMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU25pcHBldFN0b3JhZ2UuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUNTU1Rva2VuaXplci5qcycs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcycsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGNhZDZjOGEy
NTBlMDk5ZmZmNzdlMzY3OTExY2NkNDdiZjZiYzFjMTQuLjNiMjgyMTczOWI1ZDYwNzhmMzc1ZDAw
MTk1YmRiZDA5ZjMwZTNlOTcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCkBAIC03NDcwNSw2ICs3NDcwNSwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxl
PgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxT
Y3JpcHRTbmlwcGV0TW9kZWwuanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHNjcmlwdHNQYW5lbC5jc3Mi
CiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC03NDc1Myw3ICs3NDc1Nyw3IEBACiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXFNuaXBwZXRzTW9kZWwuanMiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxTbmlwcGV0U3RvcmFnZS5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8
RmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQt
ZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5Cmlu
ZGV4IDkwNDhlYmZjMjhjOWZlOTMxZWFmOGUzN2MyMjI5MzY5NWI1ZjY3MGQuLmNhNzQ1ZjRiOTQ1
OWVlMDA2MTdhYjk1MTkzMjk3ODU3Y2Y3ZGM1ZjIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKQEAgLTg0LDcgKzg0LDggQEAgbW9kdWxlcyA9IFsK
ICAgICAgICAgICAgICJTY3JpcHQuanMiLAogICAgICAgICAgICAgIlNjcmlwdEZvcm1hdHRlci5q
cyIsCiAgICAgICAgICAgICAiU2NyaXB0TWFwcGluZy5qcyIsCi0gICAgICAgICAgICAiU25pcHBl
dHNNb2RlbC5qcyIsCisgICAgICAgICAgICAiU2NyaXB0U25pcHBldE1vZGVsLmpzIiwKKyAgICAg
ICAgICAgICJTbmlwcGV0U3RvcmFnZS5qcyIsCiAgICAgICAgICAgICAiVGltZWxpbmVNYW5hZ2Vy
LmpzIiwKICAgICAgICAgICAgICJUaW1lbGluZU1vZGVsLmpzIiwKICAgICAgICAgICAgICJSYXdT
b3VyY2VDb2RlLmpzIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcwppbmRleCBmY2UyZjY3
ZjEyMmYyMmQzYjhiMmMxN2Q0NzBmYmVhMDQ4NTNiOTFlLi4zYWMzZDM0NTNkZmM2MDlmNzE3OWEw
NjQyMDk3MTExNTFhNjlmZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLmpzCkBAIC00
MCw4ICs0MCw2IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsID0gZnVu
Y3Rpb24oKQogICAgIHRoaXMuX21hcHBpbmdzLnB1c2godGhpcy5fcmVzb3VyY2VNYXBwaW5nKTsK
ICAgICB0aGlzLl9jb21waWxlck1hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2Ny
aXB0TWFwcGluZygpOwogICAgIHRoaXMuX21hcHBpbmdzLnB1c2godGhpcy5fY29tcGlsZXJNYXBw
aW5nKTsKLSAgICB0aGlzLl9zbmlwcGV0c01hcHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNuaXBw
ZXRzU2NyaXB0TWFwcGluZygpOwotICAgIHRoaXMuX21hcHBpbmdzLnB1c2godGhpcy5fc25pcHBl
dHNNYXBwaW5nKTsKICAgCiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYXBwaW5ncy5s
ZW5ndGg7ICsraSkKICAgICAgICAgdGhpcy5fbWFwcGluZ3NbaV0uYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuU2NyaXB0TWFwcGluZy5FdmVudHMuVUlTb3VyY2VDb2RlTGlzdENoYW5nZWQs
IHRoaXMuX2hhbmRsZVVJU291cmNlQ29kZUxpc3RDaGFuZ2VkLCB0aGlzKTsKQEAgLTEwMywxNSAr
MTAxLDI1IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlw
ZSA9IHsKICAgICB9LAogCiAgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU25p
cHBldFNjcmlwdE1hcHBpbmd9IHNuaXBwZXRNYXBwaW5nCisgICAgICovCisgICAgc2V0IHNuaXBw
ZXRNYXBwaW5nKHNuaXBwZXRNYXBwaW5nKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NuaXBw
ZXRNYXBwaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9zbmlwcGV0TWFw
cGluZyA9IHNuaXBwZXRNYXBwaW5nOworICAgICAgICB0aGlzLl9tYXBwaW5ncy5wdXNoKHRoaXMu
X3NuaXBwZXRNYXBwaW5nKTsKKworICAgIH0sCisKKyAgICAvKioKICAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5TY3JpcHR9IHNjcmlwdAogICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5T
Y3JpcHRNYXBwaW5nfQogICAgICAqLwogICAgIF9tYXBwaW5nRm9yU2NyaXB0OiBmdW5jdGlvbihz
Y3JpcHQpCiAgICAgewotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGlu
Z3Muc25pcHBldHNTdXBwb3J0LmlzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yLnNuaXBwZXRzTW9kZWwuc25pcHBldElkRm9yU291cmNlVVJMKHNjcmlwdC5zb3VyY2VV
UkwpKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zbmlwcGV0c01hcHBpbmc7Ci0gICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3NuaXBwZXRNYXBwaW5nICYmIHRoaXMuX3NuaXBwZXRN
YXBwaW5nLnNuaXBwZXRJZEZvclNvdXJjZVVSTChzY3JpcHQuc291cmNlVVJMKSkKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9zbmlwcGV0TWFwcGluZzsKIAogICAgICAgICBpZiAoV2ViSW5zcGVj
dG9yLnNldHRpbmdzLnNvdXJjZU1hcHNFbmFibGVkLmdldCgpICYmIHNjcmlwdC5zb3VyY2VNYXBV
UkwpIHsKICAgICAgICAgICAgIGlmICh0aGlzLl9jb21waWxlck1hcHBpbmcubG9hZFNvdXJjZU1h
cEZvclNjcmlwdChzY3JpcHQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRTbmlwcGV0TW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdFNuaXBwZXRNb2RlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjgzODZiNjcx
NDIxZDdkZDI1ZmYzNzcyZGY1ZTE0ODRjNTZjYmFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRTbmlwcGV0TW9kZWwuanMKQEAgLTAs
MCArMSwzODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1dlYkluc3BlY3Rv
ci5PYmplY3R9CisgKi8KK1dlYkluc3BlY3Rvci5TY3JpcHRTbmlwcGV0TW9kZWwgPSBmdW5jdGlv
bigpCit7CisgICAgdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWQgPSB7fTsKKyAgICB0aGlz
Ll9zY3JpcHRGb3JVSVNvdXJjZUNvZGUgPSBuZXcgTWFwKCk7CisgICAgdGhpcy5fdWlTb3VyY2VD
b2RlRm9yU25pcHBldCA9IG5ldyBNYXAoKTsKKyAgICB0aGlzLl9zbmlwcGV0Rm9yVUlTb3VyY2VD
b2RlID0gbmV3IE1hcCgpOworICAgIAorICAgIGlmICghV2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRz
U2V0dGluZ3Muc25pcHBldHNTdXBwb3J0LmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgdGhpcy5fc25pcHBldFN0b3JhZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlNuaXBwZXRT
dG9yYWdlKCJzY3JpcHQiLCAiU2NyaXB0IHNuaXBwZXQgIyIpOworICAgIHRoaXMuX2xhc3RTbmlw
cGV0RXZhbHVhdGlvbkluZGV4U2V0dGluZyA9IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5jcmVhdGVT
ZXR0aW5nKCJsYXN0U25pcHBldEV2YWx1YXRpb25JbmRleCIsIDApOworICAgIHRoaXMuX3NuaXBw
ZXRTY3JpcHRNYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5TbmlwcGV0U2NyaXB0TWFwcGluZyh0
aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5zbmlwcGV0
TWFwcGluZyA9IHRoaXMuX3NuaXBwZXRTY3JpcHRNYXBwaW5nOworICAgIAorICAgIHZhciBzbmlw
cGV0cyA9IHRoaXMuX3NuaXBwZXRTdG9yYWdlLnNuaXBwZXRzOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc25pcHBldHMubGVuZ3RoOyArK2kpCisgICAgICAgIHRoaXMuX2FkZFNjcmlwdFNuaXBw
ZXQoc25pcHBldHNbaV0pOworfQorCitXZWJJbnNwZWN0b3IuU2NyaXB0U25pcHBldE1vZGVsLmV2
YWx1YXRlZFNuaXBwZXRFeHRyYUxpbmVzQ291bnQgPSAyOworV2ViSW5zcGVjdG9yLlNjcmlwdFNu
aXBwZXRNb2RlbC5zbmlwcGV0U291cmNlVVJMUHJlZml4ID0gInNuaXBwZXRzOi8vIjsKKworV2Vi
SW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbC5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0KKyAgICAgKi8KKyAgICBjcmVh
dGVTY3JpcHRTbmlwcGV0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc25pcHBldCA9
IHRoaXMuX3NuaXBwZXRTdG9yYWdlLmNyZWF0ZVNuaXBwZXQoKTsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2FkZFNjcmlwdFNuaXBwZXQoc25pcHBldCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNuaXBwZXR9IHNuaXBwZXQKKyAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfQorICAgICAqLworICAgIF9hZGRTY3JpcHRTbmlwcGV0
OiBmdW5jdGlvbihzbmlwcGV0KQorICAgIHsKKyAgICAgICAgdmFyIHVpU291cmNlQ29kZVVSTCA9
ICIiOyAvLyBGSVhNRTogdG8gYmUgaW1wbGVtZW50ZWQuCisgICAgICAgIHZhciB1aVNvdXJjZUNv
ZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2UodWlTb3VyY2VDb2RlVVJMLCBu
ZXcgV2ViSW5zcGVjdG9yLlNuaXBwZXRDb250ZW50UHJvdmlkZXIoc25pcHBldCksIHRoaXMuX3Nu
aXBwZXRTY3JpcHRNYXBwaW5nKTsKKyAgICAgICAgdWlTb3VyY2VDb2RlLmlzU25pcHBldCA9IHRy
dWU7CisgICAgICAgIHVpU291cmNlQ29kZS5pc0VkaXRhYmxlID0gdHJ1ZTsKKyAgICAgICAgdGhp
cy5fdWlTb3VyY2VDb2RlRm9yU25pcHBldC5wdXQoc25pcHBldCwgdWlTb3VyY2VDb2RlKTsKKyAg
ICAgICAgdGhpcy5fc25pcHBldEZvclVJU291cmNlQ29kZS5wdXQodWlTb3VyY2VDb2RlLCBzbmlw
cGV0KTsKKyAgICAgICAgdGhpcy5fc25pcHBldFNjcmlwdE1hcHBpbmcuX3VpU291cmNlQ29kZXNB
ZGRlZChbdWlTb3VyY2VDb2RlXSk7CisgICAgICAgIHJldHVybiB1aVNvdXJjZUNvZGU7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0g
dWlTb3VyY2VDb2RlCisgICAgICovCisgICAgZGVsZXRlU2NyaXB0U25pcHBldDogZnVuY3Rpb24o
dWlTb3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAgdmFyIHNuaXBwZXQgPSB0aGlzLl9zbmlwcGV0
Rm9yVUlTb3VyY2VDb2RlLmdldCh1aVNvdXJjZUNvZGUpOworICAgICAgICB0aGlzLl9zbmlwcGV0
U3RvcmFnZS5kZWxldGVTbmlwcGV0KHNuaXBwZXQpOworICAgICAgICB0aGlzLl9yZWxlYXNlU25p
cHBldFNjcmlwdCh1aVNvdXJjZUNvZGUpOworICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVGb3JT
bmlwcGV0LnJlbW92ZShzbmlwcGV0KTsKKyAgICAgICAgdGhpcy5fc25pcHBldEZvclVJU291cmNl
Q29kZS5yZW1vdmUodWlTb3VyY2VDb2RlKTsKKyAgICAgICAgdGhpcy5fc25pcHBldFNjcmlwdE1h
cHBpbmcuX3VpU291cmNlQ29kZXNSZW1vdmVkKFt1aVNvdXJjZUNvZGVdKTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJj
ZUNvZGUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZQorICAgICAqLworICAgIHJlbmFt
ZVNjcmlwdFNuaXBwZXQ6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbmV3TmFtZSkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3NuaXBwZXRGb3JVSVNvdXJjZUNvZGUuZ2V0KHVpU291cmNlQ29kZSkubmFt
ZSA9IG5ld05hbWU7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5l
d0NvbnRlbnQKKyAgICAgKi8KKyAgICBzZXRTY3JpcHRTbmlwcGV0Q29udGVudDogZnVuY3Rpb24o
dWlTb3VyY2VDb2RlLCBuZXdDb250ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fc25pcHBldEZv
clVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKS5jb250ZW50ID0gbmV3Q29udGVudDsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
fSB1aVNvdXJjZUNvZGUKKyAgICAgKi8KKyAgICBldmFsdWF0ZVNjcmlwdFNuaXBwZXQ6IGZ1bmN0
aW9uKHVpU291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3JlbGVhc2VTbmlwcGV0U2Ny
aXB0KHVpU291cmNlQ29kZSk7CisgICAgICAgIHZhciBldmFsdWF0aW9uSW5kZXggPSB0aGlzLl9s
YXN0U25pcHBldEV2YWx1YXRpb25JbmRleFNldHRpbmcuZ2V0KCkgKyAxOworICAgICAgICB0aGlz
Ll9sYXN0U25pcHBldEV2YWx1YXRpb25JbmRleFNldHRpbmcuc2V0KGV2YWx1YXRpb25JbmRleCk7
CisKKyAgICAgICAgdmFyIHNuaXBwZXQgPSB0aGlzLl9zbmlwcGV0Rm9yVUlTb3VyY2VDb2RlLmdl
dCh1aVNvdXJjZUNvZGUpOworICAgICAgICB2YXIgc291cmNlVVJMID0gdGhpcy5fc291cmNlVVJM
Rm9yU25pcHBldChzbmlwcGV0LCBldmFsdWF0aW9uSW5kZXgpOworICAgICAgICBzbmlwcGV0Ll9s
YXN0RXZhbHVhdGlvblNvdXJjZVVSTCA9IHNvdXJjZVVSTDsKKyAgICAgICAgdmFyIGV4cHJlc3Np
b24gPSAiXG4vL0Agc291cmNlVVJMPSIgKyBzb3VyY2VVUkwgKyAiXG4iICsgc25pcHBldC5jb250
ZW50OworICAgICAgICBXZWJJbnNwZWN0b3IuZXZhbHVhdGVJbkNvbnNvbGUoZXhwcmVzc2lvbiwg
dHJ1ZSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RGVidWdnZXJBZ2VudC5M
b2NhdGlvbn0gcmF3TG9jYXRpb24KKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlMb2Nh
dGlvbn0KKyAgICAgKi8KKyAgICBfcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJh
d0xvY2F0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3VpU291
cmNlQ29kZUZvclNjcmlwdElkW3Jhd0xvY2F0aW9uLnNjcmlwdElkXTsKKyAgICAgICAgaWYgKHVp
U291cmNlQ29kZS5pc1NuaXBwZXQpIHsKKyAgICAgICAgICAgIHZhciB1aUxpbmVOdW1iZXIgPSBy
YXdMb2NhdGlvbi5saW5lTnVtYmVyIC0gV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbC5l
dmFsdWF0ZWRTbmlwcGV0RXh0cmFMaW5lc0NvdW50OworICAgICAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIHVpTGluZU51bWJlciwgcmF3TG9j
YXRpb24uY29sdW1uTnVtYmVyIHx8IDApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIHJhd0xvY2F0aW9uLmxpbmVO
dW1iZXIsIHJhd0xvY2F0aW9uLmNvbHVtbk51bWJlciB8fCAwKTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUK
KyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBjb2x1bW5OdW1iZXIKKyAgICAgKiBAcmV0dXJuIHtEZWJ1Z2dlckFnZW50LkxvY2F0aW9ufQor
ICAgICAqLworICAgIF91aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24odWlTb3VyY2VD
b2RlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICB2YXIgc2NyaXB0
ID0gdGhpcy5fc2NyaXB0Rm9yVUlTb3VyY2VDb2RlLmdldCh1aVNvdXJjZUNvZGUpOworICAgICAg
ICBpZiAoIXNjcmlwdCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGlmICh1
aVNvdXJjZUNvZGUuaXNTbmlwcGV0KSB7CisgICAgICAgICAgICB2YXIgcmF3TGluZU51bWJlciA9
IGxpbmVOdW1iZXIgKyBXZWJJbnNwZWN0b3IuU2NyaXB0U25pcHBldE1vZGVsLmV2YWx1YXRlZFNu
aXBwZXRFeHRyYUxpbmVzQ291bnQ7CisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTW9kZWwuY3JlYXRlUmF3TG9jYXRpb24oc2NyaXB0LCByYXdMaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLmNyZWF0ZVJhd0xvY2F0aW9uKHNjcmlwdCwgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7QXJyYXkuPFdlYkluc3Bl
Y3Rvci5VSVNvdXJjZUNvZGU+fQorICAgICAqLworICAgIF91aVNvdXJjZUNvZGVMaXN0OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fdWlTb3VyY2VDb2RlRm9y
U25pcHBldC52YWx1ZXMoKTsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh0aGlzLl9y
ZWxlYXNlZFVJU291cmNlQ29kZXMoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0FycmF5LjxXZWJJbnNwZWN0b3IuVUlTb3VyY2VD
b2RlPn0KKyAgICAgKi8KKyAgICBfcmVsZWFzZWRVSVNvdXJjZUNvZGVzOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAodmFyIHNjcmlwdElk
IGluIHRoaXMuX3VpU291cmNlQ29kZUZvclNjcmlwdElkKSB7CisgICAgICAgICAgICB2YXIgdWlT
b3VyY2VDb2RlID0gdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWRbc2NyaXB0SWRdOworICAg
ICAgICAgICAgaWYgKHVpU291cmNlQ29kZS5pc1NuaXBwZXQpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICByZXN1bHQucHVzaCh1aVNvdXJjZUNvZGUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlNjcmlwdH0gc2NyaXB0CisgICAgICovCisgICAgX2FkZFNjcmlwdDog
ZnVuY3Rpb24oc2NyaXB0KQorICAgIHsKKyAgICAgICAgdmFyIHNuaXBwZXQgPSB0aGlzLl9zbmlw
cGV0Rm9yU291cmNlVVJMKHNjcmlwdC5zb3VyY2VVUkwpOworICAgICAgICBpZiAoIXNuaXBwZXQp
IHsKKyAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVVJU291cmNlQ29kZUZvclNjcmlwdChzY3JpcHQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciB1aVNvdXJjZUNv
ZGUgPSB0aGlzLl91aVNvdXJjZUNvZGVGb3JTbmlwcGV0LmdldChzbmlwcGV0KTsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoIXRoaXMuX3NjcmlwdEZvclVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VD
b2RlKSk7CisKKyAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWRbc2NyaXB0LnNj
cmlwdElkXSA9IHVpU291cmNlQ29kZTsKKyAgICAgICAgdGhpcy5fc2NyaXB0Rm9yVUlTb3VyY2VD
b2RlLnB1dCh1aVNvdXJjZUNvZGUsIHNjcmlwdCk7CisgICAgICAgIHNjcmlwdC5zZXRTb3VyY2VN
YXBwaW5nKHRoaXMuX3NuaXBwZXRTY3JpcHRNYXBwaW5nKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU2NyaXB0fSBzY3JpcHQKKyAgICAgKi8KKyAgICBf
Y3JlYXRlVUlTb3VyY2VDb2RlRm9yU2NyaXB0OiBmdW5jdGlvbihzY3JpcHQpCisgICAgeworICAg
ICAgICB2YXIgdWlTb3VyY2VDb2RlID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNl
KHNjcmlwdC5zb3VyY2VVUkwsIHNjcmlwdCwgdGhpcy5fc25pcHBldFNjcmlwdE1hcHBpbmcpOwor
ICAgICAgICB1aVNvdXJjZUNvZGUuaXNTbmlwcGV0RXZhbHVhdGlvbiA9IHRydWU7CisgICAgICAg
IHRoaXMuX3VpU291cmNlQ29kZUZvclNjcmlwdElkW3NjcmlwdC5zY3JpcHRJZF0gPSB1aVNvdXJj
ZUNvZGU7CisgICAgICAgIHRoaXMuX3NjcmlwdEZvclVJU291cmNlQ29kZS5wdXQodWlTb3VyY2VD
b2RlLCBzY3JpcHQpOworICAgICAgICB0aGlzLl9zbmlwcGV0U2NyaXB0TWFwcGluZy5fdWlTb3Vy
Y2VDb2Rlc0FkZGVkKFt1aVNvdXJjZUNvZGVdKTsKKyAgICAgICAgc2NyaXB0LnNldFNvdXJjZU1h
cHBpbmcodGhpcy5fc25pcHBldFNjcmlwdE1hcHBpbmcpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQorICAg
ICAqLworICAgIF9yZWxlYXNlU25pcHBldFNjcmlwdDogZnVuY3Rpb24odWlTb3VyY2VDb2RlKQor
ICAgIHsKKyAgICAgICAgdmFyIHNjcmlwdCA9IHRoaXMuX3NjcmlwdEZvclVJU291cmNlQ29kZS5n
ZXQodWlTb3VyY2VDb2RlKTsKKyAgICAgICAgaWYgKCFzY3JpcHQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgZGVsZXRlIHRoaXMuX3VpU291cmNlQ29kZUZvclNjcmlwdElkW3Njcmlw
dC5zY3JpcHRJZF07CisgICAgICAgIHRoaXMuX3NjcmlwdEZvclVJU291cmNlQ29kZS5yZW1vdmUo
dWlTb3VyY2VDb2RlKTsKKworICAgICAgICB0aGlzLl9jcmVhdGVVSVNvdXJjZUNvZGVGb3JTY3Jp
cHQoc2NyaXB0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuU25pcHBldH0gc25pcHBldAorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmFsdWF0aW9uSW5k
ZXgKKyAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CisgICAgICovCisgICAgX3NvdXJjZVVSTEZvclNu
aXBwZXQ6IGZ1bmN0aW9uKHNuaXBwZXQsIGV2YWx1YXRpb25JbmRleCkKKyAgICB7CisgICAgICAg
IHZhciBzbmlwcGV0UHJlZml4ID0gV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbC5zbmlw
cGV0U291cmNlVVJMUHJlZml4OworICAgICAgICB2YXIgZXZhbHVhdGlvblN1ZmZpeCA9IGV2YWx1
YXRpb25JbmRleCA/ICJfIiArIGV2YWx1YXRpb25JbmRleCA6ICIiOworICAgICAgICByZXR1cm4g
c25pcHBldFByZWZpeCArIHNuaXBwZXQuaWQgKyBldmFsdWF0aW9uU3VmZml4OworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlVVJMCisgICAgICogQHJldHVy
biB7c3RyaW5nfG51bGx9CisgICAgICovCisgICAgX3NuaXBwZXRJZEZvclNvdXJjZVVSTDogZnVu
Y3Rpb24oc291cmNlVVJMKQorICAgIHsKKyAgICAgICAgdmFyIHNuaXBwZXRQcmVmaXggPSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U25pcHBldE1vZGVsLnNuaXBwZXRTb3VyY2VVUkxQcmVmaXg7CisgICAg
ICAgIGlmICghc291cmNlVVJMLnN0YXJ0c1dpdGgoc25pcHBldFByZWZpeCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgdmFyIHNwbGl0dGVkVVJMID0gc291cmNlVVJMLnN1YnN0
cmluZyhzbmlwcGV0UHJlZml4Lmxlbmd0aCkuc3BsaXQoIl8iKTsKKyAgICAgICAgdmFyIHNuaXBw
ZXRJZCA9IHNwbGl0dGVkVVJMWzBdOworICAgICAgICByZXR1cm4gc25pcHBldElkOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlVVJMCisgICAgICogQHJl
dHVybiB7V2ViSW5zcGVjdG9yLlNuaXBwZXR8bnVsbH0KKyAgICAgKi8KKyAgICBfc25pcHBldEZv
clNvdXJjZVVSTDogZnVuY3Rpb24oc291cmNlVVJMKQorICAgIHsKKyAgICAgICAgdmFyIHNuaXBw
ZXRJZCA9IHRoaXMuX3NuaXBwZXRJZEZvclNvdXJjZVVSTChzb3VyY2VVUkwpOworICAgICAgICBp
ZiAoIXNuaXBwZXRJZCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB2YXIgc25p
cHBldCA9IHRoaXMuX3NuaXBwZXRTdG9yYWdlLnNuaXBwZXRGb3JJZChzbmlwcGV0SWQpOworICAg
ICAgICBpZiAoIXNuaXBwZXQgfHwgc25pcHBldC5fbGFzdEV2YWx1YXRpb25Tb3VyY2VVUkwgIT09
IHNvdXJjZVVSTCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICByZXR1cm4gc25p
cHBldDsKKyAgICB9LAorCisgICAgX3Jlc2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2
YXIgcmVtb3ZlZFVJU291cmNlQ29kZXMgPSB0aGlzLl9yZWxlYXNlZFVJU291cmNlQ29kZXMoKTsK
KyAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWQgPSB7fTsKKyAgICAgICAgdGhp
cy5fc2NyaXB0Rm9yVUlTb3VyY2VDb2RlID0gbmV3IE1hcCgpOworICAgICAgICB0aGlzLl9zbmlw
cGV0U2NyaXB0TWFwcGluZy5fdWlTb3VyY2VDb2Rlc1JlbW92ZWQocmVtb3ZlZFVJU291cmNlQ29k
ZXMpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbC5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CisKKy8qKgorICog
QGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHRTbmlwcGV0TW9kZWx9
IHNjcmlwdFNuaXBwZXRNb2RlbAorICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5TY3JpcHRNYXBw
aW5nfQorICovCitXZWJJbnNwZWN0b3IuU25pcHBldFNjcmlwdE1hcHBpbmcgPSBmdW5jdGlvbihz
Y3JpcHRTbmlwcGV0TW9kZWwpCit7CisgICAgdGhpcy5fc2NyaXB0U25pcHBldE1vZGVsID0gc2Ny
aXB0U25pcHBldE1vZGVsOworfQorCitXZWJJbnNwZWN0b3IuU25pcHBldFNjcmlwdE1hcHBpbmcu
cHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RGVidWdnZXJBZ2VudC5Mb2Nh
dGlvbn0gcmF3TG9jYXRpb24KKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlv
bn0KKyAgICAgKi8KKyAgICByYXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9j
YXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2NyaXB0U25pcHBldE1vZGVsLl9y
YXdMb2NhdGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbik7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCisg
ICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBAcGFyYW0ge251bWJlcn0g
Y29sdW1uTnVtYmVyCisgICAgICogQHJldHVybiB7RGVidWdnZXJBZ2VudC5Mb2NhdGlvbn0KKyAg
ICAgKi8KKyAgICB1aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24odWlTb3VyY2VDb2Rl
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
c2NyaXB0U25pcHBldE1vZGVsLl91aUxvY2F0aW9uVG9SYXdMb2NhdGlvbih1aVNvdXJjZUNvZGUs
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBy
ZXR1cm4ge0FycmF5LjxXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlPn0KKyAgICAgKi8KKyAgICB1
aVNvdXJjZUNvZGVMaXN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
c2NyaXB0U25pcHBldE1vZGVsLl91aVNvdXJjZUNvZGVMaXN0KCk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VVUkwKKyAgICAgKiBAcmV0dXJuIHtzdHJp
bmd8bnVsbH0KKyAgICAgKi8KKyAgICBzbmlwcGV0SWRGb3JTb3VyY2VVUkw6IGZ1bmN0aW9uKHNv
dXJjZVVSTCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHRTbmlwcGV0TW9kZWwu
X3NuaXBwZXRJZEZvclNvdXJjZVVSTChzb3VyY2VVUkwpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHR9IHNjcmlwdAorICAgICAqLworICAgIGFk
ZFNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQorICAgIHsKKyAgICAgICAgdGhpcy5fc2NyaXB0U25p
cHBldE1vZGVsLl9hZGRTY3JpcHQoc2NyaXB0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QHBhcmFtIHtBcnJheS48V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT59IHVpU291cmNlQ29kZXMK
KyAgICAgKi8KKyAgICBfdWlTb3VyY2VDb2Rlc0FkZGVkOiBmdW5jdGlvbih1aVNvdXJjZUNvZGVz
KQorICAgIHsKKyAgICAgICAgdmFyIGRhdGEgPSB7IHJlbW92ZWRJdGVtczogW10sIGFkZGVkSXRl
bXM6IHVpU291cmNlQ29kZXMgfTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLlNjcmlwdE1hcHBpbmcuRXZlbnRzLlVJU291cmNlQ29kZUxpc3RDaGFu
Z2VkLCBkYXRhKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBcnJheS48V2Vi
SW5zcGVjdG9yLlVJU291cmNlQ29kZT59IHVpU291cmNlQ29kZXMKKyAgICAgKi8KKyAgICBfdWlT
b3VyY2VDb2Rlc1JlbW92ZWQ6IGZ1bmN0aW9uKHVpU291cmNlQ29kZXMpCisgICAgeworICAgICAg
ICB2YXIgZGF0YSA9IHsgcmVtb3ZlZEl0ZW1zOiB1aVNvdXJjZUNvZGVzLCBhZGRlZEl0ZW1zOiBb
XSB9OworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
U2NyaXB0TWFwcGluZy5FdmVudHMuVUlTb3VyY2VDb2RlTGlzdENoYW5nZWQsIGRhdGEpOworICAg
IH0sCisKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2NyaXB0
U25pcHBldE1vZGVsLl9yZXNldCgpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlNuaXBwZXRT
Y3JpcHRNYXBwaW5nLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU2NyaXB0TWFw
cGluZy5wcm90b3R5cGU7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyB7V2Vi
SW5zcGVjdG9yLlN0YXRpY0NvbnRlbnRQcm92aWRlcn0KKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlNuaXBwZXR9IHNuaXBwZXQKKyAqLworV2ViSW5zcGVjdG9yLlNuaXBwZXRDb250ZW50UHJvdmlk
ZXIgPSBmdW5jdGlvbihzbmlwcGV0KQoreworICAgIFdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50
UHJvdmlkZXIuY2FsbCh0aGlzLCAidGV4dC9qYXZhc2NyaXB0Iiwgc25pcHBldC5jb250ZW50KTsK
K30KKworV2ViSW5zcGVjdG9yLlNuaXBwZXRDb250ZW50UHJvdmlkZXIucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIucHJvdG90eXBlOworCisv
KioKKyAqIEB0eXBlIHs/V2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbH0KKyAqLworV2Vi
SW5zcGVjdG9yLnNjcmlwdFNuaXBwZXRNb2RlbCA9IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NuaXBwZXRTdG9yYWdlLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TbmlwcGV0U3RvcmFnZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
MTRhNTAzZTM1YzQ4MTAxOTg4ZDU2ZTFkMzQzNWIzMzhlNmU2MjhjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TbmlwcGV0U3RvcmFnZS5qcwpA
QCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyB7V2ViSW5z
cGVjdG9yLk9iamVjdH0KKyAqLworV2ViSW5zcGVjdG9yLlNuaXBwZXRTdG9yYWdlID0gZnVuY3Rp
b24oc2V0dGluZ1ByZWZpeCwgbmFtZVByZWZpeCkKK3sKKyAgICB0aGlzLl9zbmlwcGV0cyA9IHt9
OworCisgICAgdGhpcy5fbGFzdFNuaXBwZXRJZGVudGlmaWVyU2V0dGluZyA9IFdlYkluc3BlY3Rv
ci5zZXR0aW5ncy5jcmVhdGVTZXR0aW5nKHNldHRpbmdQcmVmaXggKyAiU25pcHBldHNfbGFzdElk
ZW50aWZpZXIiLCAwKTsKKyAgICB0aGlzLl9zbmlwcGV0c1NldHRpbmcgPSBXZWJJbnNwZWN0b3Iu
c2V0dGluZ3MuY3JlYXRlU2V0dGluZyhzZXR0aW5nUHJlZml4ICsgIlNuaXBwZXRzIiwgW10pOwor
ICAgIHRoaXMuX25hbWVQcmVmaXggPSBuYW1lUHJlZml4OworCisgICAgdGhpcy5fbG9hZFNldHRp
bmdzKCk7Cit9CisKK1dlYkluc3BlY3Rvci5TbmlwcGV0U3RvcmFnZS5wcm90b3R5cGUgPSB7Cisg
ICAgZ2V0IG5hbWVQcmVmaXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25hbWVQcmVm
aXg7CisgICAgfSwKKworICAgIF9zYXZlU2V0dGluZ3M6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHZhciBzYXZlZFNuaXBwZXRzID0gW107CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMu
X3NuaXBwZXRzKQorICAgICAgICAgICAgc2F2ZWRTbmlwcGV0cy5wdXNoKHRoaXMuX3NuaXBwZXRz
W2lkXS5zZXJpYWxpemVUb09iamVjdCgpKTsKKyAgICAgICAgdGhpcy5fc25pcHBldHNTZXR0aW5n
LnNldChzYXZlZFNuaXBwZXRzKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7
QXJyYXkuPFdlYkluc3BlY3Rvci5TbmlwcGV0Pn0KKyAgICAgKi8KKyAgICBzbmlwcGV0czogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICBmb3IgKHZh
ciBpZCBpbiB0aGlzLl9zbmlwcGV0cykKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuX3Nu
aXBwZXRzW2lkXSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5T
bmlwcGV0fQorICAgICAqLworICAgIHNuaXBwZXRGb3JJZDogZnVuY3Rpb24oaWQpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fc25pcHBldHNbaWRdOworICAgIH0sCisKKyAgICBfbG9hZFNl
dHRpbmdzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc2F2ZWRTbmlwcGV0cyA9IHRo
aXMuX3NuaXBwZXRzU2V0dGluZy5nZXQoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
YXZlZFNuaXBwZXRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgdGhpcy5fc25pcHBldEFkZGVk
KFdlYkluc3BlY3Rvci5TbmlwcGV0LmZyb21PYmplY3Qoc2F2ZWRTbmlwcGV0c1tpXSkpOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TbmlwcGV0fSBzbmlw
cGV0CisgICAgICovCisgICAgZGVsZXRlU25pcHBldDogZnVuY3Rpb24oc25pcHBldCkKKyAgICB7
CisgICAgICAgIGRlbGV0ZSB0aGlzLl9zbmlwcGV0c1tzbmlwcGV0LmlkXTsKKyAgICAgICAgdGhp
cy5fc2F2ZVNldHRpbmdzKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge1dl
Ykluc3BlY3Rvci5TbmlwcGV0fQorICAgICAqLworICAgIGNyZWF0ZVNuaXBwZXQ6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBuZXh0SWQgPSB0aGlzLl9sYXN0U25pcHBldElkZW50aWZp
ZXJTZXR0aW5nLmdldCgpICsgMTsKKyAgICAgICAgdmFyIHNuaXBwZXRJZCA9IFN0cmluZyhuZXh0
SWQpOworICAgICAgICB0aGlzLl9sYXN0U25pcHBldElkZW50aWZpZXJTZXR0aW5nLnNldChuZXh0
SWQpOworICAgICAgICB2YXIgc25pcHBldCA9IG5ldyBXZWJJbnNwZWN0b3IuU25pcHBldCh0aGlz
LCBzbmlwcGV0SWQpOworICAgICAgICB0aGlzLl9zbmlwcGV0QWRkZWQoc25pcHBldCk7CisgICAg
ICAgIHRoaXMuX3NhdmVTZXR0aW5ncygpOworICAgICAgICByZXR1cm4gc25pcHBldDsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU25pcHBldH0gc25pcHBl
dAorICAgICAqLworICAgIF9zbmlwcGV0QWRkZWQ6IGZ1bmN0aW9uKHNuaXBwZXQpCisgICAgewor
ICAgICAgICB0aGlzLl9zbmlwcGV0c1tzbmlwcGV0LmlkXSA9IHNuaXBwZXQ7CisgICAgfSwKKyAg
ICAKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFzdFNuaXBw
ZXRJZGVudGlmaWVyU2V0dGluZy5zZXQoMCk7CisgICAgICAgIHRoaXMuX3NuaXBwZXRzU2V0dGlu
Zy5zZXQoW10pOworICAgICAgICB0aGlzLl9zbmlwcGV0cyA9IHt9OworICAgIH0KK30KKworV2Vi
SW5zcGVjdG9yLlNuaXBwZXRTdG9yYWdlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuT2JqZWN0LnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRz
IHtXZWJJbnNwZWN0b3IuT2JqZWN0fQorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU25pcHBldFN0
b3JhZ2V9IHN0b3JhZ2UKKyAqIEBwYXJhbSB7c3RyaW5nfSBpZAorICogQHBhcmFtIHtzdHJpbmc9
fSBuYW1lCisgKiBAcGFyYW0ge3N0cmluZz19IGNvbnRlbnQKKyAqLworV2ViSW5zcGVjdG9yLlNu
aXBwZXQgPSBmdW5jdGlvbihzdG9yYWdlLCBpZCwgbmFtZSwgY29udGVudCkKK3sKKyAgICB0aGlz
Ll9zdG9yYWdlID0gc3RvcmFnZTsKKyAgICB0aGlzLl9pZCA9IGlkOworICAgIHRoaXMuX25hbWUg
PSBuYW1lIHx8IHN0b3JhZ2UubmFtZVByZWZpeCArIGlkOworICAgIHRoaXMuX2NvbnRlbnQgPSBj
b250ZW50IHx8ICIiOworfQorCisvKioKKyAqIEBwYXJhbSB7T2JqZWN0fSBzZXJpYWxpemVkU25p
cHBldAorICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlNuaXBwZXR9CisgKi8KK1dlYkluc3BlY3Rv
ci5TbmlwcGV0LmZyb21PYmplY3QgPSBmdW5jdGlvbihzZXJpYWxpemVkU25pcHBldCkKK3sKKyAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5TbmlwcGV0KHRoaXMsIHNlcmlhbGl6ZWRTbmlwcGV0
LmlkLCBzZXJpYWxpemVkU25pcHBldC5uYW1lLCBzZXJpYWxpemVkU25pcHBldC5jb250ZW50KTsK
K30KKworV2ViSW5zcGVjdG9yLlNuaXBwZXQucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAq
IEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBnZXQgaWQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2lkOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtzdHJp
bmd9CisgICAgICovCisgICAgZ2V0IG5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X25hbWU7CisgICAgfSwKKworICAgIHNldCBuYW1lKG5hbWUpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5fbmFtZSA9PT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
Ll9uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5fc3RvcmFnZS5fc2F2ZVNldHRpbmdzKCk7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBn
ZXQgY29udGVudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudDsKKyAgICB9
LAorCisgICAgc2V0IGNvbnRlbnQoY29udGVudCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9j
b250ZW50ID09PSBjb250ZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMu
X2NvbnRlbnQgPSBjb250ZW50OworICAgICAgICB0aGlzLl9zdG9yYWdlLl9zYXZlU2V0dGluZ3Mo
KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7T2JqZWN0fQorICAgICAqLwor
ICAgIHNlcmlhbGl6ZVRvT2JqZWN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc2Vy
aWFsaXplZFNuaXBwZXQgPSB7fTsKKyAgICAgICAgc2VyaWFsaXplZFNuaXBwZXQuaWQgPSB0aGlz
LmlkOworICAgICAgICBzZXJpYWxpemVkU25pcHBldC5uYW1lID0gdGhpcy5uYW1lOworICAgICAg
ICBzZXJpYWxpemVkU25pcHBldC5jb250ZW50ID0gdGhpcy5jb250ZW50OworICAgICAgICByZXR1
cm4gc2VyaWFsaXplZFNuaXBwZXQ7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuU25pcHBldC5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NuaXBwZXRzTW9kZWwu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NuaXBwZXRzTW9kZWwuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYzU4N2EwMzY4Y2FmNjRlYjdmMWM0Y2Rk
NzNlZGEyMmI0MjQ1YTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TbmlwcGV0c01vZGVsLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsNDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4KLSAqIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuT2JqZWN0fQotICovCi1X
ZWJJbnNwZWN0b3IuU25pcHBldHNNb2RlbCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9zbmlw
cGV0cyA9IHt9OwotCi0gICAgdGhpcy5fbGFzdFNuaXBwZXRJZGVudGlmaWVyU2V0dGluZyA9IFdl
Ykluc3BlY3Rvci5zZXR0aW5ncy5jcmVhdGVTZXR0aW5nKCJsYXN0U25pcHBldElkZW50aWZpZXIi
LCAwKTsKLSAgICB0aGlzLl9zbmlwcGV0c1NldHRpbmcgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
Y3JlYXRlU2V0dGluZygic25pcHBldHMiLCBbXSk7Ci0gICAgdGhpcy5fbGFzdFNuaXBwZXRFdmFs
dWF0aW9uSW5kZXhTZXR0aW5nID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLmNyZWF0ZVNldHRpbmco
Imxhc3RTbmlwcGV0RXZhbHVhdGlvbkluZGV4IiwgMCk7Ci0KLSAgICB0aGlzLl9sb2FkU2V0dGlu
Z3MoKTsKLX0KLQotV2ViSW5zcGVjdG9yLlNuaXBwZXRzTW9kZWwuc25pcHBldHNTb3VyY2VVUkxQ
cmVmaXggPSAic25pcHBldHM6Ly8iOwotCi1XZWJJbnNwZWN0b3IuU25pcHBldHNNb2RlbC5FdmVu
dFR5cGVzID0gewotICAgIFNuaXBwZXRBZGRlZDogIlNuaXBwZXRBZGRlZCIsCi0gICAgU25pcHBl
dFdpbGxCZUV2YWx1YXRlZDogIlNuaXBwZXRXaWxsQmVFdmFsdWF0ZWQiLAotICAgIFNuaXBwZXRS
ZW5hbWVkOiAiU25pcHBldFJlbmFtZWQiLAotICAgIFNuaXBwZXRSZW1vdmVkOiAiU25pcHBldFJl
bW92ZWQiLAotfQotCi1XZWJJbnNwZWN0b3IuU25pcHBldHNNb2RlbC5wcm90b3R5cGUgPSB7Ci0g
ICAgX3NhdmVTZXR0aW5nczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNhdmVkU25p
cHBldHMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fc25pcHBldHMpCi0gICAg
ICAgICAgICBzYXZlZFNuaXBwZXRzLnB1c2godGhpcy5fc25pcHBldHNbaWRdLnNlcmlhbGl6ZVRv
T2JqZWN0KCkpOwotICAgICAgICB0aGlzLl9zbmlwcGV0c1NldHRpbmcuc2V0KHNhdmVkU25pcHBl
dHMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVj
dG9yLlNuaXBwZXQ+fQotICAgICAqLwotICAgIGdldCBzbmlwcGV0cygpCi0gICAgewotICAgICAg
ICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX3NuaXBwZXRz
KQotICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5fc25pcHBldHNbaWRdKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgX2xvYWRTZXR0aW5nczogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdmFyIHNhdmVkU25pcHBldHMgPSB0aGlzLl9zbmlwcGV0c1NldHRpbmcu
Z2V0KCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2F2ZWRTbmlwcGV0cy5sZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIHRoaXMuX3NuaXBwZXRBZGRlZChXZWJJbnNwZWN0b3IuU25pcHBl
dC5mcm9tT2JqZWN0KHNhdmVkU25pcHBldHNbaV0pKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU25pcHBldH0gc25pcHBldAotICAgICAqLwotICAgIGRl
bGV0ZVNuaXBwZXQ6IGZ1bmN0aW9uKHNuaXBwZXQpCi0gICAgewotICAgICAgICBkZWxldGUgdGhp
cy5fc25pcHBldHNbc25pcHBldC5pZF07Ci0gICAgICAgIHRoaXMuX3NhdmVTZXR0aW5ncygpOwot
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU25pcHBl
dHNNb2RlbC5FdmVudFR5cGVzLlNuaXBwZXRSZW1vdmVkLCBzbmlwcGV0KTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlNuaXBwZXR9Ci0gICAgICovCi0g
ICAgY3JlYXRlU25pcHBldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG5leHRJZCA9
IHRoaXMuX2xhc3RTbmlwcGV0SWRlbnRpZmllclNldHRpbmcuZ2V0KCkgKyAxOwotICAgICAgICB2
YXIgc25pcHBldElkID0gU3RyaW5nKG5leHRJZCk7Ci0gICAgICAgIHRoaXMuX2xhc3RTbmlwcGV0
SWRlbnRpZmllclNldHRpbmcuc2V0KG5leHRJZCk7Ci0gICAgICAgIHZhciBzbmlwcGV0ID0gbmV3
IFdlYkluc3BlY3Rvci5TbmlwcGV0KHRoaXMsIHNuaXBwZXRJZCk7Ci0gICAgICAgIHRoaXMuX3Nu
aXBwZXRBZGRlZChzbmlwcGV0KTsKLSAgICAgICAgdGhpcy5fc2F2ZVNldHRpbmdzKCk7Ci0KLSAg
ICAgICAgcmV0dXJuIHNuaXBwZXQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlNuaXBwZXR9IHNuaXBwZXQKLSAgICAgKi8KLSAgICBfc25pcHBldEFkZGVk
OiBmdW5jdGlvbihzbmlwcGV0KQotICAgIHsKLSAgICAgICAgdGhpcy5fc25pcHBldHNbc25pcHBl
dC5pZF0gPSBzbmlwcGV0OwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuU25pcHBldHNNb2RlbC5FdmVudFR5cGVzLlNuaXBwZXRBZGRlZCwgc25pcHBl
dCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzbmlwcGV0SWQK
LSAgICAgKi8KLSAgICBfc25pcHBldENvbnRlbnRVcGRhdGVkOiBmdW5jdGlvbihzbmlwcGV0SWQp
Ci0gICAgewotICAgICAgICB0aGlzLl9zYXZlU2V0dGluZ3MoKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU25pcHBldH0gc25pcHBldAotICAgICAqLwot
ICAgIF9zbmlwcGV0UmVuYW1lZDogZnVuY3Rpb24oc25pcHBldCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX3NhdmVTZXR0aW5ncygpOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuU25pcHBldHNNb2RlbC5FdmVudFR5cGVzLlNuaXBwZXRSZW5hbWVkLCBz
bmlwcGV0KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
U25pcHBldH0gc25pcHBldAotICAgICAqLwotICAgIF9ldmFsdWF0ZVNuaXBwZXQ6IGZ1bmN0aW9u
KHNuaXBwZXQpCi0gICAgewotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuU25pcHBldHNNb2RlbC5FdmVudFR5cGVzLlNuaXBwZXRXaWxsQmVFdmFsdWF0
ZWQsIHNuaXBwZXQpOwotICAgICAgICB2YXIgZXZhbHVhdGlvbkluZGV4ID0gdGhpcy5fbGFzdFNu
aXBwZXRFdmFsdWF0aW9uSW5kZXhTZXR0aW5nLmdldCgpICsgMTsKLSAgICAgICAgdGhpcy5fbGFz
dFNuaXBwZXRFdmFsdWF0aW9uSW5kZXhTZXR0aW5nLnNldChldmFsdWF0aW9uSW5kZXgpOwotCi0g
ICAgICAgIHZhciBzb3VyY2VVUkwgPSB0aGlzLl9zb3VyY2VVUkxGb3JTbmlwcGV0KHNuaXBwZXQs
IGV2YWx1YXRpb25JbmRleCk7Ci0gICAgICAgIHNuaXBwZXQuX2xhc3RFdmFsdWF0aW9uU291cmNl
VVJMID0gc291cmNlVVJMOwotICAgICAgICB2YXIgZXhwcmVzc2lvbiA9ICJcbi8vQCBzb3VyY2VV
Ukw9IiArIHNvdXJjZVVSTCArICJcbiIgKyBzbmlwcGV0LmNvbnRlbnQ7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5ldmFsdWF0ZUluQ29uc29sZShleHByZXNzaW9uLCB0cnVlKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU25pcHBldH0gc25pcHBldAotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBldmFsdWF0aW9uSW5kZXgKLSAgICAgKiBAcmV0dXJuIHtzdHJp
bmd9Ci0gICAgICovCi0gICAgX3NvdXJjZVVSTEZvclNuaXBwZXQ6IGZ1bmN0aW9uKHNuaXBwZXQs
IGV2YWx1YXRpb25JbmRleCkKLSAgICB7Ci0gICAgICAgIHZhciBzbmlwcGV0c1ByZWZpeCA9IFdl
Ykluc3BlY3Rvci5TbmlwcGV0c01vZGVsLnNuaXBwZXRzU291cmNlVVJMUHJlZml4OwotICAgICAg
ICB2YXIgZXZhbHVhdGlvblN1ZmZpeCA9IGV2YWx1YXRpb25JbmRleCA/ICJfIiArIGV2YWx1YXRp
b25JbmRleCA6ICIiOwotICAgICAgICByZXR1cm4gc25pcHBldHNQcmVmaXggKyBzbmlwcGV0Lmlk
ICsgZXZhbHVhdGlvblN1ZmZpeDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IHNvdXJjZVVSTAotICAgICAqIEByZXR1cm4ge3N0cmluZ3xudWxsfQotICAgICAqLwot
ICAgIHNuaXBwZXRJZEZvclNvdXJjZVVSTDogZnVuY3Rpb24oc291cmNlVVJMKQotICAgIHsKLSAg
ICAgICAgdmFyIHNuaXBwZXRzUHJlZml4ID0gV2ViSW5zcGVjdG9yLlNuaXBwZXRzTW9kZWwuc25p
cHBldHNTb3VyY2VVUkxQcmVmaXg7Ci0gICAgICAgIGlmICghc291cmNlVVJMLnN0YXJ0c1dpdGgo
c25pcHBldHNQcmVmaXgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHZhciBz
cGxpdHRlZFVSTCA9IHNvdXJjZVVSTC5zdWJzdHJpbmcoc25pcHBldHNQcmVmaXgubGVuZ3RoKS5z
cGxpdCgiXyIpOwotICAgICAgICB2YXIgc25pcHBldElkID0gc3BsaXR0ZWRVUkxbMF07Ci0gICAg
ICAgIHJldHVybiBzbmlwcGV0SWQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBzb3VyY2VVUkwKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuU25pcHBldHxu
dWxsfQotICAgICAqLwotICAgIHNuaXBwZXRGb3JTb3VyY2VVUkw6IGZ1bmN0aW9uKHNvdXJjZVVS
TCkKLSAgICB7Ci0gICAgICAgIHZhciBzbmlwcGV0SWQgPSB0aGlzLnNuaXBwZXRJZEZvclNvdXJj
ZVVSTChzb3VyY2VVUkwpOwotICAgICAgICBpZiAoIXNuaXBwZXRJZCkKLSAgICAgICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgICB2YXIgc25pcHBldCA9IHRoaXMuX3NuaXBwZXRzW3NuaXBwZXRJ
ZF07Ci0gICAgICAgIGlmICghc25pcHBldCB8fCBzbmlwcGV0Ll9sYXN0RXZhbHVhdGlvblNvdXJj
ZVVSTCAhPT0gc291cmNlVVJMKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJl
dHVybiBzbmlwcGV0OwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLlNuaXBwZXRzTW9kZWwucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwotCi0vKioK
LSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9Ci0gKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5TbmlwcGV0c01vZGVsfSBtb2RlbAotICogQHBhcmFtIHtzdHJp
bmd9IGlkCi0gKiBAcGFyYW0ge3N0cmluZz19IG5hbWUKLSAqIEBwYXJhbSB7c3RyaW5nPX0gY29u
dGVudAotICovCi1XZWJJbnNwZWN0b3IuU25pcHBldCA9IGZ1bmN0aW9uKG1vZGVsLCBpZCwgbmFt
ZSwgY29udGVudCkKLXsKLSAgICB0aGlzLl9tb2RlbCA9IG1vZGVsOwotICAgIHRoaXMuX2lkID0g
aWQ7Ci0gICAgdGhpcy5fbmFtZSA9IG5hbWUgfHwgIlNuaXBwZXQgIyIgKyBpZDsKLSAgICB0aGlz
Ll9jb250ZW50ID0gY29udGVudCB8fCAiIjsKLX0KLQotV2ViSW5zcGVjdG9yLlNuaXBwZXQuZXZh
bHVhdGVkU25pcHBldEV4dHJhTGluZXNDb3VudCA9IDI7Ci0KLS8qKgotICogQHBhcmFtIHtPYmpl
Y3R9IHNlcmlhbGl6ZWRTbmlwcGV0Ci0gKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuU25pcHBldH0K
LSAqLwotV2ViSW5zcGVjdG9yLlNuaXBwZXQuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKHNlcmlhbGl6
ZWRTbmlwcGV0KQotewotICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlNuaXBwZXQodGhpcywg
c2VyaWFsaXplZFNuaXBwZXQuaWQsIHNlcmlhbGl6ZWRTbmlwcGV0Lm5hbWUsIHNlcmlhbGl6ZWRT
bmlwcGV0LmNvbnRlbnQpOwotfQotCi1XZWJJbnNwZWN0b3IuU25pcHBldC5wcm90b3R5cGUgPSB7
Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7c3RyaW5nfQotICAgICAqLwotICAgIGdldCBpZCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faWQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEByZXR1cm4ge3N0cmluZ30KLSAgICAgKi8KLSAgICBnZXQgbmFtZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fbmFtZTsKLSAgICB9LAotCi0gICAgc2V0IG5hbWUobmFtZSkKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzLl9uYW1lID09PSBuYW1lKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgICAgICB0aGlzLl9tb2RlbC5fc25p
cHBldFJlbmFtZWQodGhpcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge3N0
cmluZ30KLSAgICAgKi8KLSAgICBnZXQgY29udGVudCgpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fY29udGVudDsKLSAgICB9LAotCi0gICAgc2V0IGNvbnRlbnQoY29udGVudCkKLSAgICB7
Ci0gICAgICAgIGlmICh0aGlzLl9jb250ZW50ID09PSBjb250ZW50KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50OwotICAgICAgICB0aGlzLl9t
b2RlbC5fc25pcHBldENvbnRlbnRVcGRhdGVkKHRoaXMuX2lkKTsKLSAgICB9LAotCi0gICAgZXZh
bHVhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21vZGVsLl9ldmFsdWF0ZVNu
aXBwZXQodGhpcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEByZXR1cm4ge09iamVjdH0K
LSAgICAgKi8KLSAgICBzZXJpYWxpemVUb09iamVjdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIHNlcmlhbGl6ZWRTbmlwcGV0ID0ge307Ci0gICAgICAgIHNlcmlhbGl6ZWRTbmlwcGV0
LmlkID0gdGhpcy5pZDsKLSAgICAgICAgc2VyaWFsaXplZFNuaXBwZXQubmFtZSA9IHRoaXMubmFt
ZTsKLSAgICAgICAgc2VyaWFsaXplZFNuaXBwZXQuY29udGVudCA9IHRoaXMuY29udGVudDsKLSAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRTbmlwcGV0OwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9y
LlNuaXBwZXQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90
eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5T
Y3JpcHRNYXBwaW5nfQotICovCi1XZWJJbnNwZWN0b3IuU25pcHBldHNTY3JpcHRNYXBwaW5nID0g
ZnVuY3Rpb24oKQotewotICAgIHRoaXMuX3NuaXBwZXRGb3JTY3JpcHRJZCA9IHt9OwotICAgIHRo
aXMuX3VpU291cmNlQ29kZUZvclNjcmlwdElkID0ge307Ci0gICAgdGhpcy5fc2NyaXB0Rm9yVUlT
b3VyY2VDb2RlID0gbmV3IE1hcCgpOwotICAgIHRoaXMuX3VpU291cmNlQ29kZUZvclNuaXBwZXQg
PSBuZXcgTWFwKCk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iuc25pcHBldHNNb2RlbC5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5TbmlwcGV0c01vZGVsLkV2ZW50VHlwZXMuU25pcHBldEFkZGVk
LCB0aGlzLl9oYW5kbGVTbmlwcGV0QWRkZWQuYmluZCh0aGlzKSk7Ci0gICAgV2ViSW5zcGVjdG9y
LnNuaXBwZXRzTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU25pcHBldHNNb2Rl
bC5FdmVudFR5cGVzLlNuaXBwZXRXaWxsQmVFdmFsdWF0ZWQsIHRoaXMuX3NuaXBwZXRXaWxsQmVF
dmFsdWF0ZWQuYmluZCh0aGlzKSk7Ci0gICAgV2ViSW5zcGVjdG9yLnNuaXBwZXRzTW9kZWwuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU25pcHBldHNNb2RlbC5FdmVudFR5cGVzLlNuaXBw
ZXRSZW1vdmVkLCB0aGlzLl9zbmlwcGV0UmVtb3ZlZC5iaW5kKHRoaXMpKTsKLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IFdlYkluc3BlY3Rvci5zbmlwcGV0c01vZGVsLnNuaXBwZXRzLmxlbmd0aDsg
KytpKQotICAgICAgICB0aGlzLl9zbmlwcGV0QWRkZWQoV2ViSW5zcGVjdG9yLnNuaXBwZXRzTW9k
ZWwuc25pcHBldHNbaV0pOwotfQotCi1XZWJJbnNwZWN0b3IuU25pcHBldHNTY3JpcHRNYXBwaW5n
LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RlYnVnZ2VyQWdlbnQuTG9j
YXRpb259IHJhd0xvY2F0aW9uCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJTG9jYXRp
b259Ci0gICAgICovCi0gICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xv
Y2F0aW9uKQotICAgIHsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3VpU291cmNl
Q29kZUZvclNjcmlwdElkW3Jhd0xvY2F0aW9uLnNjcmlwdElkXTsKLQotICAgICAgICB2YXIgc25p
cHBldCA9IHRoaXMuX3NuaXBwZXRGb3JTY3JpcHRJZFtyYXdMb2NhdGlvbi5zY3JpcHRJZF07Ci0g
ICAgICAgIGlmIChzbmlwcGV0KSB7Ci0gICAgICAgICAgICB2YXIgdWlMaW5lTnVtYmVyID0gcmF3
TG9jYXRpb24ubGluZU51bWJlciAtIFdlYkluc3BlY3Rvci5TbmlwcGV0LmV2YWx1YXRlZFNuaXBw
ZXRFeHRyYUxpbmVzQ291bnQ7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5V
SUxvY2F0aW9uKHVpU291cmNlQ29kZSwgdWlMaW5lTnVtYmVyLCByYXdMb2NhdGlvbi5jb2x1bW5O
dW1iZXIgfHwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgcmF3TG9jYXRpb24ubGluZU51bWJlciwgcmF3TG9j
YXRpb24uY29sdW1uTnVtYmVyIHx8IDApOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJl
cgotICAgICAqIEByZXR1cm4ge0RlYnVnZ2VyQWdlbnQuTG9jYXRpb259Ci0gICAgICovCi0gICAg
dWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgdmFyIHNjcmlwdCA9IHRoaXMuX3Njcmlw
dEZvclVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgaWYgKCFzY3JpcHQp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBpZiAodWlTb3VyY2VDb2RlLmlz
U25pcHBldCkgewotICAgICAgICAgICAgdmFyIHJhd0xpbmVOdW1iZXIgPSBsaW5lTnVtYmVyICsg
V2ViSW5zcGVjdG9yLlNuaXBwZXQuZXZhbHVhdGVkU25pcHBldEV4dHJhTGluZXNDb3VudDsKLSAg
ICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5jcmVhdGVSYXdMb2Nh
dGlvbihzY3JpcHQsIHJhd0xpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuY3JlYXRlUmF3TG9jYXRp
b24oc2NyaXB0LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcmV0dXJuIHtBcnJheS48V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT59Ci0gICAg
ICovCi0gICAgdWlTb3VyY2VDb2RlTGlzdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IHJlc3VsdCA9IHRoaXMuX3VpU291cmNlQ29kZUZvclNuaXBwZXQudmFsdWVzKCk7Ci0gICAgICAg
IHJlc3VsdCA9IHJlc3VsdC5jb25jYXQodGhpcy5fcmVsZWFzZWRVSVNvdXJjZUNvZGVzKCkpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJu
IHtBcnJheS48V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT59Ci0gICAgICovCi0gICAgX3JlbGVh
c2VkVUlTb3VyY2VDb2RlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9
IFtdOwotICAgICAgICBmb3IgKHZhciBzY3JpcHRJZCBpbiB0aGlzLl91aVNvdXJjZUNvZGVGb3JT
Y3JpcHRJZCkgewotICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3VpU291cmNl
Q29kZUZvclNjcmlwdElkW3NjcmlwdElkXTsKLSAgICAgICAgICAgIGlmICh1aVNvdXJjZUNvZGUu
aXNTbmlwcGV0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzdWx0
LnB1c2godWlTb3VyY2VDb2RlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHR9IHNj
cmlwdAotICAgICAqLwotICAgIGFkZFNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQotICAgIHsKLSAg
ICAgICAgdmFyIHNuaXBwZXQgPSBXZWJJbnNwZWN0b3Iuc25pcHBldHNNb2RlbC5zbmlwcGV0Rm9y
U291cmNlVVJMKHNjcmlwdC5zb3VyY2VVUkwpOwotICAgICAgICBpZiAoIXNuaXBwZXQpIHsKLSAg
ICAgICAgICAgIHRoaXMuX2NyZWF0ZVVJU291cmNlQ29kZUZvclNjcmlwdChzY3JpcHQpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0
aGlzLl91aVNvdXJjZUNvZGVGb3JTbmlwcGV0LmdldChzbmlwcGV0KTsKLSAgICAgICAgY29uc29s
ZS5hc3NlcnQoIXRoaXMuX3NjcmlwdEZvclVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKSk7
Ci0KLSAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWRbc2NyaXB0LnNjcmlwdElk
XSA9IHVpU291cmNlQ29kZTsKLSAgICAgICAgdGhpcy5fc25pcHBldEZvclNjcmlwdElkW3Njcmlw
dC5zY3JpcHRJZF0gPSBzbmlwcGV0OwotICAgICAgICB0aGlzLl9zY3JpcHRGb3JVSVNvdXJjZUNv
ZGUucHV0KHVpU291cmNlQ29kZSwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0LnNldFNvdXJjZU1h
cHBpbmcodGhpcyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkV2ZW50fSBldmVudAotICAgICAqLwotICAgIF9oYW5kbGVTbmlwcGV0QWRkZWQ6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHNuaXBwZXQgPSAvKiogQHR5cGUge1dlYklu
c3BlY3Rvci5TbmlwcGV0fSAqLyBldmVudC5kYXRhOwotICAgICAgICB0aGlzLl9zbmlwcGV0QWRk
ZWQoc25pcHBldCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlNuaXBwZXR9IHNuaXBwZXQKLSAgICAgKi8KLSAgICBfc25pcHBldEFkZGVkOiBmdW5jdGlv
bihzbmlwcGV0KQotICAgIHsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZVVSTCA9ICIiOyAvLyBG
SVhNRTogdG8gYmUgaW1wbGVtZW50ZWQuCi0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSBuZXcg
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2UodWlTb3VyY2VDb2RlVVJMLCBuZXcgV2ViSW5z
cGVjdG9yLlNuaXBwZXRDb250ZW50UHJvdmlkZXIoc25pcHBldCksIHRoaXMpOwotICAgICAgICB1
aVNvdXJjZUNvZGUuaXNTbmlwcGV0ID0gdHJ1ZTsKLSAgICAgICAgdWlTb3VyY2VDb2RlLmlzRWRp
dGFibGUgPSB0cnVlOwotICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVGb3JTbmlwcGV0LnB1dChz
bmlwcGV0LCB1aVNvdXJjZUNvZGUpOwotICAgICAgICB1aVNvdXJjZUNvZGUuc25pcHBldCA9IHNu
aXBwZXQ7Ci0gICAgICAgIHZhciBkYXRhID0geyByZW1vdmVkSXRlbXM6IFtdLCBhZGRlZEl0ZW1z
OiBbdWlTb3VyY2VDb2RlXSB9OwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuU2NyaXB0TWFwcGluZy5FdmVudHMuVUlTb3VyY2VDb2RlTGlzdENoYW5n
ZWQsIGRhdGEpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rv
ci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfc25pcHBldFdpbGxCZUV2YWx1YXRlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgc25pcHBldCA9IC8qKiBAdHlwZSB7V2Vi
SW5zcGVjdG9yLlNuaXBwZXR9ICovIGV2ZW50LmRhdGE7Ci0gICAgICAgIHRoaXMuX3JlbGVhc2VT
bmlwcGV0U2NyaXB0KHNuaXBwZXQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5TY3JpcHR9IHNjcmlwdAotICAgICAqLwotICAgIF9jcmVhdGVVSVNvdXJj
ZUNvZGVGb3JTY3JpcHQ6IGZ1bmN0aW9uKHNjcmlwdCkKLSAgICB7Ci0gICAgICAgIHZhciB1aVNv
dXJjZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2Uoc2NyaXB0LnNvdXJj
ZVVSTCwgc2NyaXB0LCB0aGlzKTsKLSAgICAgICAgdWlTb3VyY2VDb2RlLmlzU25pcHBldEV2YWx1
YXRpb24gPSB0cnVlOwotICAgICAgICB2YXIgb2xkVUlTb3VyY2VDb2RlID0gdGhpcy5fdWlTb3Vy
Y2VDb2RlRm9yU2NyaXB0SWRbc2NyaXB0LnNjcmlwdElkXTsKLSAgICAgICAgdGhpcy5fdWlTb3Vy
Y2VDb2RlRm9yU2NyaXB0SWRbc2NyaXB0LnNjcmlwdElkXSA9IHVpU291cmNlQ29kZTsKLSAgICAg
ICAgdGhpcy5fc2NyaXB0Rm9yVUlTb3VyY2VDb2RlLnB1dCh1aVNvdXJjZUNvZGUsIHNjcmlwdCk7
Ci0gICAgICAgIHZhciBkYXRhID0geyByZW1vdmVkSXRlbXM6IFtdLCBhZGRlZEl0ZW1zOiBbdWlT
b3VyY2VDb2RlXSB9OwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuU2NyaXB0TWFwcGluZy5FdmVudHMuVUlTb3VyY2VDb2RlTGlzdENoYW5nZWQsIGRh
dGEpOwotICAgICAgICBzY3JpcHQuc2V0U291cmNlTWFwcGluZyh0aGlzKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU25pcHBldH0gc25pcHBldAotICAg
ICAqLwotICAgIF9yZWxlYXNlU25pcHBldFNjcmlwdDogZnVuY3Rpb24oc25pcHBldCkKLSAgICB7
Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl91aVNvdXJjZUNvZGVGb3JTbmlwcGV0
LmdldChzbmlwcGV0KTsKLSAgICAgICAgdmFyIHNjcmlwdCA9IHRoaXMuX3NjcmlwdEZvclVJU291
cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgaWYgKCFzY3JpcHQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX3VpU291cmNlQ29kZUZvclNjcmlw
dElkW3NjcmlwdC5zY3JpcHRJZF07Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zbmlwcGV0Rm9yU2Ny
aXB0SWRbc2NyaXB0LnNjcmlwdElkXTsKLSAgICAgICAgdGhpcy5fc2NyaXB0Rm9yVUlTb3VyY2VD
b2RlLnJlbW92ZSh1aVNvdXJjZUNvZGUpOwotCi0gICAgICAgIHRoaXMuX2NyZWF0ZVVJU291cmNl
Q29kZUZvclNjcmlwdChzY3JpcHQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfc25pcHBldFJlbW92ZWQ6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIHNuaXBwZXQgPSAvKiogQHR5cGUg
e1dlYkluc3BlY3Rvci5TbmlwcGV0fSAqLyBldmVudC5kYXRhOwotICAgICAgICB2YXIgdWlTb3Vy
Y2VDb2RlID0gdGhpcy5fdWlTb3VyY2VDb2RlRm9yU25pcHBldC5nZXQoc25pcHBldCk7Ci0gICAg
ICAgIHRoaXMuX3JlbGVhc2VTbmlwcGV0U2NyaXB0KHNuaXBwZXQpOwotICAgICAgICB0aGlzLl91
aVNvdXJjZUNvZGVGb3JTbmlwcGV0LnJlbW92ZShzbmlwcGV0KTsKLSAgICAgICAgdmFyIGRhdGEg
PSB7IHJlbW92ZWRJdGVtczogW3VpU291cmNlQ29kZV0sIGFkZGVkSXRlbXM6IFtdIH07Ci0gICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5TY3JpcHRNYXBw
aW5nLkV2ZW50cy5VSVNvdXJjZUNvZGVMaXN0Q2hhbmdlZCwgZGF0YSk7Ci0gICAgfSwKLQotICAg
IHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgcmVtb3ZlZFVJU291cmNlQ29k
ZXMgPSB0aGlzLl9yZWxlYXNlZFVJU291cmNlQ29kZXMoKTsKLSAgICAgICAgdGhpcy5fc25pcHBl
dEZvclNjcmlwdElkID0ge307Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZUZvclNjcmlwdElk
ID0ge307Ci0gICAgICAgIHRoaXMuX3NjcmlwdEZvclVJU291cmNlQ29kZSA9IG5ldyBNYXAoKTsK
LSAgICAgICAgdmFyIGRhdGEgPSB7IHJlbW92ZWRJdGVtczogcmVtb3ZlZFVJU291cmNlQ29kZXMs
IGFkZGVkSXRlbXM6IFtdIH07Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5TY3JpcHRNYXBwaW5nLkV2ZW50cy5VSVNvdXJjZUNvZGVMaXN0Q2hhbmdl
ZCwgZGF0YSk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuU25pcHBldHNTY3JpcHRNYXBwaW5n
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU2NyaXB0TWFwcGluZy5wcm90b3R5
cGU7Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlN0
YXRpY0NvbnRlbnRQcm92aWRlcn0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNuaXBwZXR9IHNu
aXBwZXQKLSAqLwotV2ViSW5zcGVjdG9yLlNuaXBwZXRDb250ZW50UHJvdmlkZXIgPSBmdW5jdGlv
bihzbmlwcGV0KQotewotICAgIFdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIuY2Fs
bCh0aGlzLCAidGV4dC9qYXZhc2NyaXB0Iiwgc25pcHBldC5jb250ZW50KTsKLX0KLQotV2ViSW5z
cGVjdG9yLlNuaXBwZXRDb250ZW50UHJvdmlkZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYklu
c3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIucHJvdG90eXBlOwotCi0vKioKLSAqIEB0eXBl
IHs/V2ViSW5zcGVjdG9yLlNuaXBwZXRzTW9kZWx9Ci0gKi8KLVdlYkluc3BlY3Rvci5zbmlwcGV0
c01vZGVsID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2Vi
S2l0LnFyYwppbmRleCBlZGIzMmY0ZDQ4YjNiMTY4MTYzMmIxZTEyNTM0ZmI4YWVlYjA5MjllLi5m
ODRhZTAzNDIzZjk0NDk2YTI4ZDQzNTIwNTY3NDZkMWEzNTEwMDNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC0xMzIsNiArMTMyLDcgQEAK
ICAgICA8ZmlsZT5TY3JpcHRGb3JtYXR0ZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+U2NyaXB0Rm9y
bWF0dGVyV29ya2VyLmpzPC9maWxlPgogICAgIDxmaWxlPlNjcmlwdE1hcHBpbmcuanM8L2ZpbGU+
CisgICAgPGZpbGU+U2NyaXB0U25pcHBldE1vZGVsLmpzPC9maWxlPgogICAgIDxmaWxlPlNjcmlw
dHNQYW5lbC5qczwvZmlsZT4KICAgICA8ZmlsZT5TY3JpcHRzTmF2aWdhdG9yLmpzPC9maWxlPgog
ICAgIDxmaWxlPlNjcmlwdHNTZWFyY2hTY29wZS5qczwvZmlsZT4KQEAgLTE0NCw3ICsxNDUsNyBA
QAogICAgIDxmaWxlPlNpZGViYXJPdmVybGF5LmpzPC9maWxlPgogICAgIDxmaWxlPlNpZGViYXJQ
YW5lLmpzPC9maWxlPgogICAgIDxmaWxlPlNpZGViYXJUcmVlRWxlbWVudC5qczwvZmlsZT4KLSAg
ICA8ZmlsZT5TbmlwcGV0c01vZGVsLmpzPC9maWxlPgorICAgIDxmaWxlPlNuaXBwZXRTdG9yYWdl
LmpzPC9maWxlPgogICAgIDxmaWxlPlNvZnRDb250ZXh0TWVudS5qczwvZmlsZT4KICAgICA8Zmls
ZT5Tb3VyY2VDU1NUb2tlbml6ZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+U291cmNlRnJhbWUuanM8
L2ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5odG1sIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbAppbmRleCA0MDUzNDkwYTQ2YmFiZTVjNDJlZGNhNGM1OWE3YzM3NWRjMTg5NzU3Li41
Mjk5Njg3MTBlNTFkZDA3MjkyMWJkNDU3OWZiMzgzOWFiODk0ZGJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTIxMSw3ICsy
MTEsOCBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IkphdmFTY3JpcHRDb250ZXh0TWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSGFuZGxlclJlZ2lzdHJ5LmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJNZW1vcnlTdGF0aXN0aWNzLmpz
Ij48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTbmlw
cGV0c01vZGVsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJTbmlwcGV0U3RvcmFnZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0U25pcHBldE1vZGVsLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdHlsZXNQYW5lbC5qcyI+PC9z
Y3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBjbGFzcz0iZGV0YWNoZWQiIGlkPSItd2Via2l0LXdlYi1p
bnNwZWN0b3IiPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcwppbmRleCA3MDg3ODgxNTRlM2NiODk5NTY4YjMzYjFmMDdlYWQ1ODhlYWNkZTk3Li5l
MjVlMDczOTcwMzg2YWQyOGRjNDE5MzYyZDdiMzEwYjYwZWIyY2QyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMzgwLDkgKzM4MCw5
IEBAIFdlYkluc3BlY3Rvci5fZG9Mb2FkZWREb25lV2l0aENhcGFiaWxpdGllcyA9IGZ1bmN0aW9u
KCkKICAgICB0aGlzLmNvbnNvbGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQ29uc29s
ZU1vZGVsLkV2ZW50cy5SZXBlYXRDb3VudFVwZGF0ZWQsIHRoaXMuX3VwZGF0ZUVycm9yQW5kV2Fy
bmluZ0NvdW50cywgdGhpcyk7CiAKICAgICB0aGlzLmRlYnVnZ2VyTW9kZWwgPSBuZXcgV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTW9kZWwoKTsKLSAgICB0aGlzLnNuaXBwZXRzTW9kZWwgPSBuZXcgV2Vi
SW5zcGVjdG9yLlNuaXBwZXRzTW9kZWwoKTsKICAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyID0g
bmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcihXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
YnJlYWtwb2ludHMsIHRoaXMuZGVidWdnZXJNb2RlbCk7CiAgICAgdGhpcy5kZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVs
KCk7CisgICAgdGhpcy5zY3JpcHRTbmlwcGV0TW9kZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlNjcmlw
dFNuaXBwZXRNb2RlbCgpOwogICAgIG5ldyBXZWJJbnNwZWN0b3IuRGVidWdnZXJSZXNvdXJjZUJp
bmRpbmcoKTsKIAogICAgIHRoaXMuZHJhd2VyID0gbmV3IFdlYkluc3BlY3Rvci5EcmF3ZXIoKTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxNWY4ODU1NDBhNjIyNmIxNmU2NjcwMzQyYjY5NjM0YjQzMTA0NTM5Li5mZTliNDll
ZjUxZmZkMzM1MmM5MjYxOTM3NTlkNjEzZDcxM2EwMjdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTItMDUtMTUgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogUmVmYWN0b3IgU25pcHBldHNNb2RlbDogZXh0cmFjdCBTbmlw
cGV0U3RvcmFnZSwgbWFrZSBTbmlwcGV0U2NyaXB0TWFwcGluZyBkZWxlZ2F0ZSBjYWxscyB0byBT
Y3JpcHRTbmlwcGV0TW9kZWwgYW5kIHByb3ZpZGUgcHVibGljIGludGVyZmFjZSBvbiBTY3JpcHRT
bmlwcGV0TW9kZWwgaW4gdGVybXMgb2YgdWlTb3VyY2VDb2RlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY0NzcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQt
c25pcHBldC1tb2RlbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9k
ZWJ1Z2dlci9zY3JpcHQtc25pcHBldC1tb2RlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3IvZGVidWdnZXIvc25pcHBldHMtbW9kZWwtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAg
ICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9zbmlwcGV0cy1tb2RlbC5odG1sOiBSZW1vdmVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zbmlwcGV0LXN0b3JhZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc25pcHBldC1zdG9yYWdlLmh0bWw6IEFkZGVkLgorCiAyMDEy
LTA1LTE1ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgbWFya2luZyBwbHVnaW5zL25wcnVudGltZS9kZWxldGUtcGx1Z2luLXdpdGhp
bi1nZXRQcm9wZXJ0eS5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVi
dWdnZXIvc2NyaXB0LXNuaXBwZXQtbW9kZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2RlYnVnZ2VyL3NjcmlwdC1zbmlwcGV0LW1vZGVsLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yMjJiN2E0NjE4Yjg1MmIxNzFhN2JlYzBlNTM4ZGE4ZDY4MTU0MDliCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NjcmlwdC1zbmlwcGV0LW1v
ZGVsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitUZXN0cyBzY3JpcHQgc25pcHBldCBt
b2RlbC4KKworRGVidWdnZXIgd2FzIGVuYWJsZWQuCisKK1J1bm5pbmc6IHRlc3RFdmFsdWF0ZQor
TGFzdCBldmFsdWF0aW9uIHNvdXJjZSB1cmwgZm9yIHNuaXBwZXQ6IHNuaXBwZXRzOi8vMV8xCitT
bmlwcGV0IHNjcmlwdCBhZGRlZCwgc291cmNlVVJMID0gc25pcHBldHM6Ly8xXzEKK0xhc3QgZXZh
bHVhdGlvbiBzb3VyY2UgdXJsIGZvciBzbmlwcGV0OiBzbmlwcGV0czovLzJfMgorU25pcHBldCBz
Y3JpcHQgYWRkZWQsIHNvdXJjZVVSTCA9IHNuaXBwZXRzOi8vMl8yCitMYXN0IGV2YWx1YXRpb24g
c291cmNlIHVybCBmb3Igc25pcHBldDogc25pcHBldHM6Ly8xXzMKK1NuaXBwZXQgc2NyaXB0IGFk
ZGVkLCBzb3VyY2VVUkwgPSBzbmlwcGV0czovLzFfMworRGVidWdnZXIgd2FzIGRpc2FibGVkLgor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc2NyaXB0LXNuaXBw
ZXQtbW9kZWwuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQtc25p
cHBldC1tb2RlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyYzFkMmVhZWNjNjJkZWE3Y2Y3NGZjODE4ZDUw
ZTk2Y2NjZmI4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVi
dWdnZXIvc2NyaXB0LXNuaXBwZXQtbW9kZWwuaHRtbApAQCAtMCwwICsxLDc1IEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rv
ci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0
KCkKK3sKKyAgICBmdW5jdGlvbiByZXNldFNuaXBwZXRzU2V0dGluZ3MoKQorICAgIHsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLnNjcmlwdFNuaXBwZXRNb2RlbC5fc25pcHBldFN0b3JhZ2UucmVzZXQo
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNjcmlwdFNuaXBwZXRNb2RlbC5fbGFzdFNuaXBwZXRF
dmFsdWF0aW9uSW5kZXhTZXR0aW5nLnNldCgwKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVt
b3ZlIG9uY2Ugc25pcHBldHMgYXJlIHRha2VuIG91dCBvZiBleHBlcmltZW50cy4KKyAgICBXZWJJ
bnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5zbmlwcGV0c1N1cHBvcnQgPSB7fTsKKyAgICBX
ZWJJbnNwZWN0b3IuZXhwZXJpbWVudHNTZXR0aW5ncy5zbmlwcGV0c1N1cHBvcnQuaXNFbmFibGVk
ID0gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9OworICAgIFdlYkluc3BlY3Rvci5zY3JpcHRT
bmlwcGV0TW9kZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlNjcmlwdFNuaXBwZXRNb2RlbCgpOworCisg
ICAgSW5zcGVjdG9yVGVzdC5ydW5EZWJ1Z2dlclRlc3RTdWl0ZShbCisgICAgICAgIGZ1bmN0aW9u
IHRlc3RFdmFsdWF0ZShuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICByZXNldFNuaXBwZXRz
U2V0dGluZ3MoKTsKKworICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZTEgPSBXZWJJbnNwZWN0
b3Iuc2NyaXB0U25pcHBldE1vZGVsLmNyZWF0ZVNjcmlwdFNuaXBwZXQoKTsKKyAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5zY3JpcHRTbmlwcGV0TW9kZWwucmVuYW1lU2NyaXB0U25pcHBldCh1aVNv
dXJjZUNvZGUxLCAiU25pcHBldDEiKTsKKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gIiI7Cisg
ICAgICAgICAgICBjb250ZW50ICs9ICIvLyBUaGlzIHNuaXBwZXQgZG9lcyBub3RoaW5nLlxuIjsK
KyAgICAgICAgICAgIGNvbnRlbnQgKz0gInZhciBpID0gMisyO1xuIjsKKyAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5zY3JpcHRTbmlwcGV0TW9kZWwuc2V0U2NyaXB0U25pcHBldENvbnRlbnQodWlT
b3VyY2VDb2RlMSwgY29udGVudCk7CisKKyAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUyID0g
V2ViSW5zcGVjdG9yLnNjcmlwdFNuaXBwZXRNb2RlbC5jcmVhdGVTY3JpcHRTbmlwcGV0KCk7Cisg
ICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2NyaXB0U25pcHBldE1vZGVsLnJlbmFtZVNjcmlwdFNu
aXBwZXQodWlTb3VyY2VDb2RlMSwgIlNuaXBwZXQyIik7CisgICAgICAgICAgICBjb250ZW50ID0g
IiI7CisgICAgICAgICAgICBjb250ZW50ICs9ICIvLyBUaGlzIHNuaXBwZXQgY3JlYXRlcyBhIGZ1
bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuIjsKKyAgICAgICAgICAgIGNvbnRlbnQgKz0gImZ1
bmN0aW9uIGRvZXNOb3RoaW5nKClcbiI7CisgICAgICAgICAgICBjb250ZW50ICs9ICJ7XG4iOwor
ICAgICAgICAgICAgY29udGVudCArPSAiICAgIHZhciAgaSA9IDIrMjtcbiI7CisgICAgICAgICAg
ICBjb250ZW50ICs9ICJ9XG4iOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNjcmlwdFNuaXBw
ZXRNb2RlbC5zZXRTY3JpcHRTbmlwcGV0Q29udGVudCh1aVNvdXJjZUNvZGUyLCBjb250ZW50KTsK
KworICAgICAgICAgICAgZnVuY3Rpb24gZXZhbHVhdGVTbmlwcGV0QW5kRHVtcEV2YWx1YXRpb25E
ZXRhaWxzKHVpU291cmNlQ29kZSwgY2FsbGJhY2spCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKFdlYkluc3BlY3Rvci5TbmlwcGV0U2NyaXB0
TWFwcGluZy5wcm90b3R5cGUsICJhZGRTY3JpcHQiLCBkdW1wU2NyaXB0KTsKKyAgICAgICAgICAg
ICAgICBXZWJJbnNwZWN0b3Iuc2NyaXB0U25pcHBldE1vZGVsLmV2YWx1YXRlU2NyaXB0U25pcHBl
dCh1aVNvdXJjZUNvZGUpOworICAgICAgICAgICAgICAgIHZhciBzbmlwcGV0ID0gV2ViSW5zcGVj
dG9yLnNjcmlwdFNuaXBwZXRNb2RlbC5fc25pcHBldEZvclVJU291cmNlQ29kZS5nZXQodWlTb3Vy
Y2VDb2RlKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiTGFzdCBl
dmFsdWF0aW9uIHNvdXJjZSB1cmwgZm9yIHNuaXBwZXQ6ICIgKyBzbmlwcGV0Ll9sYXN0RXZhbHVh
dGlvblNvdXJjZVVSTCk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVh
bHMoc25pcHBldCwgV2ViSW5zcGVjdG9yLnNjcmlwdFNuaXBwZXRNb2RlbC5fc25pcHBldEZvclNv
dXJjZVVSTChzbmlwcGV0Ll9sYXN0RXZhbHVhdGlvblNvdXJjZVVSTCksICJTbmlwcGV0IGNhbiBu
b3QgYmUgaWRlbnRpZmllZCBieSBpdHMgZXZhbHVhdGlvbiBzb3VyY2VVUkwuIik7CisKKyAgICAg
ICAgICAgICAgICBmdW5jdGlvbiBkdW1wU2NyaXB0KHNjcmlwdCkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJTbmlwcGV0IHNj
cmlwdCBhZGRlZCwgc291cmNlVVJMID0gIiArIHNjcmlwdC5zb3VyY2VVUkwpOworICAgICAgICAg
ICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZXZhbHVhdGVTbmlwcGV0QW5kRHVtcEV2YWx1YXRpb25EZXRhaWxzKHVp
U291cmNlQ29kZTEsIHN0ZXAyKTsKKworICAgICAgICAgICAgZnVuY3Rpb24gc3RlcDIoKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGV2YWx1YXRlU25pcHBldEFuZER1bXBFdmFsdWF0
aW9uRGV0YWlscyh1aVNvdXJjZUNvZGUyLCBzdGVwMyk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIHN0ZXAzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBl
dmFsdWF0ZVNuaXBwZXRBbmREdW1wRXZhbHVhdGlvbkRldGFpbHModWlTb3VyY2VDb2RlMSwgbmV4
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBdKTsKK307Cis8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPlRlc3RzIHNjcmlwdCBzbmlwcGV0
IG1vZGVsLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9kZWJ1Z2dlci9zbmlwcGV0cy1tb2RlbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZGVidWdnZXIvc25pcHBldHMtbW9kZWwtZXhwZWN0ZWQudHh0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTNmNmU5M2Y3ZWU4MmJjYzAxYjcxNzZjODlmN2I2NWJi
YTllODUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zbmlwcGV0cy1tb2RlbC1leHBlY3RlZC50eHQK
KysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1UZXN0cyBzbmlwcGV0cyBtb2RlbC4KLQot
RGVidWdnZXIgd2FzIGVuYWJsZWQuCi0KLVJ1bm5pbmc6IHRlc3RDcmVhdGVSZW5hbWVFZGl0RGVs
ZXRlCi1EdW1waW5nIHNhdmVkIHNuaXBwZXRzOgotRHVtcGluZyBtb2RlbCBzbmlwcGV0czoKLVNu
aXBwZXQgY3JlYXRlZC4KLUR1bXBpbmcgc2F2ZWQgc25pcHBldHM6Ci0gICAgU25pcHBldDogaWQg
PSAxLCBuYW1lID0gJ1NuaXBwZXQgIzEnLCBjb250ZW50ID0gJycuCi1EdW1waW5nIG1vZGVsIHNu
aXBwZXRzOgotICAgIFNuaXBwZXQ6IGlkID0gMSwgbmFtZSA9ICdTbmlwcGV0ICMxJywgY29udGVu
dCA9ICcnLgotU25pcHBldCByZW5hbWVkLgotRHVtcGluZyBzYXZlZCBzbmlwcGV0czoKLSAgICBT
bmlwcGV0OiBpZCA9IDEsIG5hbWUgPSAnTmV3IHNuaXBwZXQgbmFtZScsIGNvbnRlbnQgPSAnJy4K
LUR1bXBpbmcgbW9kZWwgc25pcHBldHM6Ci0gICAgU25pcHBldDogaWQgPSAxLCBuYW1lID0gJ05l
dyBzbmlwcGV0IG5hbWUnLCBjb250ZW50ID0gJycuCi1TbmlwcGV0IGNvbnRlbnQgY2hhbmdlZC4K
LUR1bXBpbmcgc2F2ZWQgc25pcHBldHM6Ci0gICAgU25pcHBldDogaWQgPSAxLCBuYW1lID0gJ05l
dyBzbmlwcGV0IG5hbWUnLCBjb250ZW50ID0gJ05ldyBzbmlwcGV0IGNvbnRlbnQnLgotRHVtcGlu
ZyBtb2RlbCBzbmlwcGV0czoKLSAgICBTbmlwcGV0OiBpZCA9IDEsIG5hbWUgPSAnTmV3IHNuaXBw
ZXQgbmFtZScsIGNvbnRlbnQgPSAnTmV3IHNuaXBwZXQgY29udGVudCcuCi1Bbm90aGVyIHNuaXBw
ZXQgY3JlYXRlZC4KLUR1bXBpbmcgc2F2ZWQgc25pcHBldHM6Ci0gICAgU25pcHBldDogaWQgPSAx
LCBuYW1lID0gJ05ldyBzbmlwcGV0IG5hbWUnLCBjb250ZW50ID0gJ05ldyBzbmlwcGV0IGNvbnRl
bnQnLgotICAgIFNuaXBwZXQ6IGlkID0gMiwgbmFtZSA9ICdTbmlwcGV0ICMyJywgY29udGVudCA9
ICcnLgotRHVtcGluZyBtb2RlbCBzbmlwcGV0czoKLSAgICBTbmlwcGV0OiBpZCA9IDEsIG5hbWUg
PSAnTmV3IHNuaXBwZXQgbmFtZScsIGNvbnRlbnQgPSAnTmV3IHNuaXBwZXQgY29udGVudCcuCi0g
ICAgU25pcHBldDogaWQgPSAyLCBuYW1lID0gJ1NuaXBwZXQgIzInLCBjb250ZW50ID0gJycuCi1T
bmlwcGV0IGRlbGV0ZWQuCi1EdW1waW5nIHNhdmVkIHNuaXBwZXRzOgotICAgIFNuaXBwZXQ6IGlk
ID0gMiwgbmFtZSA9ICdTbmlwcGV0ICMyJywgY29udGVudCA9ICcnLgotRHVtcGluZyBtb2RlbCBz
bmlwcGV0czoKLSAgICBTbmlwcGV0OiBpZCA9IDIsIG5hbWUgPSAnU25pcHBldCAjMicsIGNvbnRl
bnQgPSAnJy4KLUFub3RoZXIgc25pcHBldCBkZWxldGVkLgotRHVtcGluZyBzYXZlZCBzbmlwcGV0
czoKLUR1bXBpbmcgbW9kZWwgc25pcHBldHM6Ci0KLVJ1bm5pbmc6IHRlc3RFdmFsdWF0ZQotTGFz
dCBldmFsdWF0aW9uIHNvdXJjZSB1cmwgZm9yIHNuaXBwZXQ6IHNuaXBwZXRzOi8vMV8xCi1Tbmlw
cGV0IHNjcmlwdCBhZGRlZCwgc291cmNlVVJMID0gc25pcHBldHM6Ly8xXzEKLUxhc3QgZXZhbHVh
dGlvbiBzb3VyY2UgdXJsIGZvciBzbmlwcGV0OiBzbmlwcGV0czovLzJfMgotU25pcHBldCBzY3Jp
cHQgYWRkZWQsIHNvdXJjZVVSTCA9IHNuaXBwZXRzOi8vMl8yCi1MYXN0IGV2YWx1YXRpb24gc291
cmNlIHVybCBmb3Igc25pcHBldDogc25pcHBldHM6Ly8xXzMKLVNuaXBwZXQgc2NyaXB0IGFkZGVk
LCBzb3VyY2VVUkwgPSBzbmlwcGV0czovLzFfMwotRGVidWdnZXIgd2FzIGRpc2FibGVkLgotCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc25pcHBldHMtbW9kZWwu
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zbmlwcGV0cy1tb2RlbC5odG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2Y1ZDk5OGRmZjkwNGY5NWQ2ZjJmNzYx
ZDk3ZTE4ZTU4NTdhZjliLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zbmlwcGV0cy1tb2RlbC5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0
IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2Ny
aXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRl
c3QuanMiPjwvc2NyaXB0PgotPHNjcmlwdD4KLWZ1bmN0aW9uIHRlc3QoKQotewotICAgIGZ1bmN0
aW9uIHJlc2V0U25pcHBldHNTZXR0aW5ncygpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iu
c25pcHBldHNNb2RlbC5fbGFzdFNuaXBwZXRJZGVudGlmaWVyU2V0dGluZy5zZXQoMCk7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5zbmlwcGV0c01vZGVsLl9zbmlwcGV0c1NldHRpbmcuc2V0KFtdKTsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLnNuaXBwZXRzTW9kZWwuX2xhc3RTbmlwcGV0RXZhbHVhdGlv
bkluZGV4U2V0dGluZy5zZXQoMCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJlbW92ZSBvbmNl
IHNuaXBwZXRzIGFyZSB0YWtlbiBvdXQgb2YgZXhwZXJpbWVudHMuCi0gICAgV2ViSW5zcGVjdG9y
LmV4cGVyaW1lbnRzU2V0dGluZ3Muc25pcHBldHNTdXBwb3J0ID0ge307Ci0gICAgV2ViSW5zcGVj
dG9yLmV4cGVyaW1lbnRzU2V0dGluZ3Muc25pcHBldHNTdXBwb3J0LmlzRW5hYmxlZCA9IGZ1bmN0
aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfTsKLQotICAgIEluc3BlY3RvclRlc3QucnVuRGVidWdnZXJU
ZXN0U3VpdGUoWwotICAgICAgICBmdW5jdGlvbiB0ZXN0Q3JlYXRlUmVuYW1lRWRpdERlbGV0ZShu
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmdW5jdGlvbiBkdW1wU25pcHBldHMoc25pcHBl
dHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
bmlwcGV0cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgc25pcHBldCA9
IHNuaXBwZXRzW2ldOwotICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3Vs
dCgiICAgIFNuaXBwZXQ6IGlkID0gIiArIHNuaXBwZXQuaWQgKyAiLCBuYW1lID0gJyIgKyBzbmlw
cGV0Lm5hbWUgKyAiJywgY29udGVudCA9ICciICsgc25pcHBldC5jb250ZW50ICsgIicuIik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiBk
dW1wU2F2ZWRTbmlwcGV0cygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5hZGRSZXN1bHQoIkR1bXBpbmcgc2F2ZWQgc25pcHBldHM6Iik7Ci0gICAgICAgICAg
ICAgICAgZHVtcFNuaXBwZXRzKFdlYkluc3BlY3Rvci5zbmlwcGV0c01vZGVsLl9zbmlwcGV0c1Nl
dHRpbmcuZ2V0KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiBkdW1w
TW9kZWxTbmlwcGV0cygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5hZGRSZXN1bHQoIkR1bXBpbmcgbW9kZWwgc25pcHBldHM6Iik7Ci0gICAgICAgICAgICAg
ICAgdmFyIHNuaXBwZXRzID0gW107Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gV2Vi
SW5zcGVjdG9yLnNuaXBwZXRzTW9kZWwuX3NuaXBwZXRzKQotICAgICAgICAgICAgICAgICAgICBz
bmlwcGV0cy5wdXNoKFdlYkluc3BlY3Rvci5zbmlwcGV0c01vZGVsLl9zbmlwcGV0c1tpZF0pOwot
ICAgICAgICAgICAgICAgIGR1bXBTbmlwcGV0cyhzbmlwcGV0cyk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJlc2V0U25pcHBldHNTZXR0aW5ncygpOwotCi0gICAgICAgICAgICBkdW1w
U2F2ZWRTbmlwcGV0cygpOwotICAgICAgICAgICAgZHVtcE1vZGVsU25pcHBldHMoKTsKLSAgICAg
ICAgICAgIHZhciBzbmlwcGV0ID0gV2ViSW5zcGVjdG9yLnNuaXBwZXRzTW9kZWwuY3JlYXRlU25p
cHBldCgpOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNuaXBwZXQgY3Jl
YXRlZC4iKTsKLSAgICAgICAgICAgIGR1bXBTYXZlZFNuaXBwZXRzKCk7Ci0gICAgICAgICAgICBk
dW1wTW9kZWxTbmlwcGV0cygpOwotICAgICAgICAgICAgc25pcHBldC5uYW1lID0gIk5ldyBzbmlw
cGV0IG5hbWUiOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNuaXBwZXQg
cmVuYW1lZC4iKTsKLSAgICAgICAgICAgIGR1bXBTYXZlZFNuaXBwZXRzKCk7Ci0gICAgICAgICAg
ICBkdW1wTW9kZWxTbmlwcGV0cygpOwotICAgICAgICAgICAgc25pcHBldC5jb250ZW50ID0gIk5l
dyBzbmlwcGV0IGNvbnRlbnQiOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQo
IlNuaXBwZXQgY29udGVudCBjaGFuZ2VkLiIpOwotICAgICAgICAgICAgZHVtcFNhdmVkU25pcHBl
dHMoKTsKLSAgICAgICAgICAgIGR1bXBNb2RlbFNuaXBwZXRzKCk7Ci0gICAgICAgICAgICB2YXIg
YW5vdGhlclNuaXBwZXQgPSBXZWJJbnNwZWN0b3Iuc25pcHBldHNNb2RlbC5jcmVhdGVTbmlwcGV0
KCk7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiQW5vdGhlciBzbmlwcGV0
IGNyZWF0ZWQuIik7Ci0gICAgICAgICAgICBkdW1wU2F2ZWRTbmlwcGV0cygpOwotICAgICAgICAg
ICAgZHVtcE1vZGVsU25pcHBldHMoKTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zbmlwcGV0
c01vZGVsLmRlbGV0ZVNuaXBwZXQoc25pcHBldCk7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmFkZFJlc3VsdCgiU25pcHBldCBkZWxldGVkLiIpOwotICAgICAgICAgICAgZHVtcFNhdmVkU25p
cHBldHMoKTsKLSAgICAgICAgICAgIGR1bXBNb2RlbFNuaXBwZXRzKCk7Ci0gICAgICAgICAgICBX
ZWJJbnNwZWN0b3Iuc25pcHBldHNNb2RlbC5kZWxldGVTbmlwcGV0KGFub3RoZXJTbmlwcGV0KTsK
LSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJBbm90aGVyIHNuaXBwZXQgZGVs
ZXRlZC4iKTsKLSAgICAgICAgICAgIGR1bXBTYXZlZFNuaXBwZXRzKCk7Ci0gICAgICAgICAgICBk
dW1wTW9kZWxTbmlwcGV0cygpOwotCi0gICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgZnVuY3Rpb24gdGVzdEV2YWx1YXRlKG5leHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJlc2V0U25pcHBldHNTZXR0aW5ncygpOwotCi0gICAgICAgICAgICB2YXIgc25pcHBldDEg
PSBXZWJJbnNwZWN0b3Iuc25pcHBldHNNb2RlbC5jcmVhdGVTbmlwcGV0KCk7Ci0gICAgICAgICAg
ICBzbmlwcGV0MS5uYW1lID0gIlNuaXBwZXQxIjsKLSAgICAgICAgICAgIHNuaXBwZXQxLmNvbnRl
bnQgPSAiIjsKLSAgICAgICAgICAgIHNuaXBwZXQxLmNvbnRlbnQgKz0gIi8vIFRoaXMgc25pcHBl
dCBkb2VzIG5vdGhpbmcuXG4iOwotICAgICAgICAgICAgc25pcHBldDEuY29udGVudCArPSAidmFy
IGkgPSAyKzI7XG4iOwotICAgICAgICAgICAgdmFyIHNuaXBwZXQyID0gV2ViSW5zcGVjdG9yLnNu
aXBwZXRzTW9kZWwuY3JlYXRlU25pcHBldCgpOwotICAgICAgICAgICAgc25pcHBldDIubmFtZSA9
ICJTbmlwcGV0MiI7Ci0gICAgICAgICAgICBzbmlwcGV0Mi5jb250ZW50ID0gIiI7Ci0gICAgICAg
ICAgICBzbmlwcGV0Mi5jb250ZW50ICs9ICIvLyBUaGlzIHNuaXBwZXQgY3JlYXRlcyBhIGZ1bmN0
aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuIjsKLSAgICAgICAgICAgIHNuaXBwZXQyLmNvbnRlbnQg
Kz0gImZ1bmN0aW9uIGRvZXNOb3RoaW5nKClcbiI7Ci0gICAgICAgICAgICBzbmlwcGV0Mi5jb250
ZW50ICs9ICJ7XG4iOwotICAgICAgICAgICAgc25pcHBldDIuY29udGVudCArPSAiICAgIHZhciAg
aSA9IDIrMjtcbiI7Ci0gICAgICAgICAgICBzbmlwcGV0Mi5jb250ZW50ICs9ICJ9XG4iOwotCi0g
ICAgICAgICAgICBmdW5jdGlvbiBldmFsdWF0ZVNuaXBwZXRBbmREdW1wRXZhbHVhdGlvbkRldGFp
bHMoc25pcHBldCwgY2FsbGJhY2spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRTbmlmZmVyKFdlYkluc3BlY3Rvci5TbmlwcGV0c1NjcmlwdE1hcHBpbmcu
cHJvdG90eXBlLCAiYWRkU2NyaXB0IiwgZHVtcFNjcmlwdCk7Ci0gICAgICAgICAgICAgICAgc25p
cHBldC5ldmFsdWF0ZSgpOwotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0
KCJMYXN0IGV2YWx1YXRpb24gc291cmNlIHVybCBmb3Igc25pcHBldDogIiArIHNuaXBwZXQuX2xh
c3RFdmFsdWF0aW9uU291cmNlVVJMKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFz
c2VydEVxdWFscyhzbmlwcGV0LCBXZWJJbnNwZWN0b3Iuc25pcHBldHNNb2RlbC5zbmlwcGV0Rm9y
U291cmNlVVJMKHNuaXBwZXQuX2xhc3RFdmFsdWF0aW9uU291cmNlVVJMKSwgIlNuaXBwZXQgY2Fu
IG5vdCBiZSBpZGVudGlmaWVkIGJ5IGl0cyBldmFsdWF0aW9uIHNvdXJjZVVSTC4iKTsKLQotICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIGR1bXBTY3JpcHQoc2NyaXB0KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNuaXBwZXQg
c2NyaXB0IGFkZGVkLCBzb3VyY2VVUkwgPSAiICsgc2NyaXB0LnNvdXJjZVVSTCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBldmFsdWF0ZVNuaXBwZXRBbmREdW1wRXZhbHVhdGlvbkRldGFpbHMo
c25pcHBldDEsIHN0ZXAyKTsKLQotICAgICAgICAgICAgZnVuY3Rpb24gc3RlcDIoKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGV2YWx1YXRlU25pcHBldEFuZER1bXBFdmFsdWF0aW9u
RGV0YWlscyhzbmlwcGV0Miwgc3RlcDMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBm
dW5jdGlvbiBzdGVwMygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXZhbHVhdGVT
bmlwcGV0QW5kRHVtcEV2YWx1YXRpb25EZXRhaWxzKHNuaXBwZXQxLCBuZXh0KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIF0pOwotfTsKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkg
b25sb2FkPSJydW5UZXN0KCkiPgotPHA+VGVzdHMgc25pcHBldHMgbW9kZWwuPC9wPgotPC9ib2R5
PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3NuaXBwZXQtc3Rv
cmFnZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc25pcHBldC1zdG9yYWdl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yY2NjZDllZTcxMzQ4ZWQxNGZhNzIxYTAxNDFjZGUw
Y2ExODg4ODI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3NuaXBw
ZXQtc3RvcmFnZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBAQAorVGVzdHMgc25pcHBldCBz
dG9yYWdlLgorCitEdW1waW5nIHNhdmVkIHNuaXBwZXRzOgorRHVtcGluZyBzdG9yYWdlIHNuaXBw
ZXRzOgorU25pcHBldCBjcmVhdGVkLgorRHVtcGluZyBzYXZlZCBzbmlwcGV0czoKKyAgICBTbmlw
cGV0OiBpZCA9IDEsIG5hbWUgPSAnVGVzdCBzbmlwcGV0ICMxJywgY29udGVudCA9ICcnLgorRHVt
cGluZyBzdG9yYWdlIHNuaXBwZXRzOgorU25pcHBldCByZW5hbWVkLgorRHVtcGluZyBzYXZlZCBz
bmlwcGV0czoKKyAgICBTbmlwcGV0OiBpZCA9IDEsIG5hbWUgPSAnTmV3IHNuaXBwZXQgbmFtZScs
IGNvbnRlbnQgPSAnJy4KK0R1bXBpbmcgc3RvcmFnZSBzbmlwcGV0czoKK1NuaXBwZXQgY29udGVu
dCBjaGFuZ2VkLgorRHVtcGluZyBzYXZlZCBzbmlwcGV0czoKKyAgICBTbmlwcGV0OiBpZCA9IDEs
IG5hbWUgPSAnTmV3IHNuaXBwZXQgbmFtZScsIGNvbnRlbnQgPSAnTmV3IHNuaXBwZXQgY29udGVu
dCcuCitEdW1waW5nIHN0b3JhZ2Ugc25pcHBldHM6CitBbm90aGVyIHNuaXBwZXQgY3JlYXRlZC4K
K0R1bXBpbmcgc2F2ZWQgc25pcHBldHM6CisgICAgU25pcHBldDogaWQgPSAxLCBuYW1lID0gJ05l
dyBzbmlwcGV0IG5hbWUnLCBjb250ZW50ID0gJ05ldyBzbmlwcGV0IGNvbnRlbnQnLgorICAgIFNu
aXBwZXQ6IGlkID0gMiwgbmFtZSA9ICdUZXN0IHNuaXBwZXQgIzInLCBjb250ZW50ID0gJycuCitE
dW1waW5nIHN0b3JhZ2Ugc25pcHBldHM6CitTbmlwcGV0IGRlbGV0ZWQuCitEdW1waW5nIHNhdmVk
IHNuaXBwZXRzOgorICAgIFNuaXBwZXQ6IGlkID0gMiwgbmFtZSA9ICdUZXN0IHNuaXBwZXQgIzIn
LCBjb250ZW50ID0gJycuCitEdW1waW5nIHN0b3JhZ2Ugc25pcHBldHM6CitBbm90aGVyIHNuaXBw
ZXQgZGVsZXRlZC4KK0R1bXBpbmcgc2F2ZWQgc25pcHBldHM6CitEdW1waW5nIHN0b3JhZ2Ugc25p
cHBldHM6CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zbmlwcGV0LXN0b3Jh
Z2UuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zbmlwcGV0LXN0b3JhZ2UuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMGNkMzhhNjk2OTc0NDM4YmE5YjUyNGFhMGFiOGVjMjUzNjA2ODJhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3NuaXBwZXQtc3RvcmFnZS5odG1sCkBA
IC0wLDAgKzEsNjYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0
cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0
aW9uIHRlc3QoKQoreworICAgIHZhciBzZXR0aW5nUHJlZml4ID0gInRlc3QiOworICAgIHZhciBu
YW1lUHJlZml4ID0gIlRlc3Qgc25pcHBldCAjIjsKKyAgICB2YXIgc25pcHBldFN0b3JhZ2UgPSBu
ZXcgV2ViSW5zcGVjdG9yLlNuaXBwZXRTdG9yYWdlKHNldHRpbmdQcmVmaXgsIG5hbWVQcmVmaXgp
OworICAgIHNuaXBwZXRTdG9yYWdlLnJlc2V0KCk7CisKKyAgICBmdW5jdGlvbiBkdW1wU25pcHBl
dHMoc25pcHBldHMpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNuaXBwZXRz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgc25pcHBldCA9IHNuaXBwZXRzW2ldOwor
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIiAgICBTbmlwcGV0OiBpZCA9ICIg
KyBzbmlwcGV0LmlkICsgIiwgbmFtZSA9ICciICsgc25pcHBldC5uYW1lICsgIicsIGNvbnRlbnQg
PSAnIiArIHNuaXBwZXQuY29udGVudCArICInLiIpOworICAgICAgICB9CisgICAgfQorCisgICAg
ZnVuY3Rpb24gZHVtcFNhdmVkU25pcHBldHMoKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yVGVz
dC5hZGRSZXN1bHQoIkR1bXBpbmcgc2F2ZWQgc25pcHBldHM6Iik7CisgICAgICAgIGR1bXBTbmlw
cGV0cyhzbmlwcGV0U3RvcmFnZS5fc25pcHBldHNTZXR0aW5nLmdldCgpKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBkdW1wU3RvcmFnZVNuaXBwZXRzKCkKKyAgICB7CisgICAgICAgIEluc3BlY3Rv
clRlc3QuYWRkUmVzdWx0KCJEdW1waW5nIHN0b3JhZ2Ugc25pcHBldHM6Iik7CisgICAgICAgIGR1
bXBTbmlwcGV0cyhzbmlwcGV0U3RvcmFnZS5zbmlwcGV0cyk7CisgICAgfQorCisgICAgZHVtcFNh
dmVkU25pcHBldHMoKTsKKyAgICBkdW1wU3RvcmFnZVNuaXBwZXRzKCk7CisgICAgdmFyIHNuaXBw
ZXQgPSBzbmlwcGV0U3RvcmFnZS5jcmVhdGVTbmlwcGV0KCk7CisgICAgSW5zcGVjdG9yVGVzdC5h
ZGRSZXN1bHQoIlNuaXBwZXQgY3JlYXRlZC4iKTsKKyAgICBkdW1wU2F2ZWRTbmlwcGV0cygpOwor
ICAgIGR1bXBTdG9yYWdlU25pcHBldHMoKTsKKyAgICBzbmlwcGV0Lm5hbWUgPSAiTmV3IHNuaXBw
ZXQgbmFtZSI7CisgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNuaXBwZXQgcmVuYW1lZC4i
KTsKKyAgICBkdW1wU2F2ZWRTbmlwcGV0cygpOworICAgIGR1bXBTdG9yYWdlU25pcHBldHMoKTsK
KyAgICBzbmlwcGV0LmNvbnRlbnQgPSAiTmV3IHNuaXBwZXQgY29udGVudCI7CisgICAgSW5zcGVj
dG9yVGVzdC5hZGRSZXN1bHQoIlNuaXBwZXQgY29udGVudCBjaGFuZ2VkLiIpOworICAgIGR1bXBT
YXZlZFNuaXBwZXRzKCk7CisgICAgZHVtcFN0b3JhZ2VTbmlwcGV0cygpOworICAgIHZhciBhbm90
aGVyU25pcHBldCA9IHNuaXBwZXRTdG9yYWdlLmNyZWF0ZVNuaXBwZXQoKTsKKyAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdCgiQW5vdGhlciBzbmlwcGV0IGNyZWF0ZWQuIik7CisgICAgZHVtcFNh
dmVkU25pcHBldHMoKTsKKyAgICBkdW1wU3RvcmFnZVNuaXBwZXRzKCk7CisgICAgc25pcHBldFN0
b3JhZ2UuZGVsZXRlU25pcHBldChzbmlwcGV0KTsKKyAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3Vs
dCgiU25pcHBldCBkZWxldGVkLiIpOworICAgIGR1bXBTYXZlZFNuaXBwZXRzKCk7CisgICAgZHVt
cFN0b3JhZ2VTbmlwcGV0cygpOworICAgIHNuaXBwZXRTdG9yYWdlLmRlbGV0ZVNuaXBwZXQoYW5v
dGhlclNuaXBwZXQpOworICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJBbm90aGVyIHNuaXBw
ZXQgZGVsZXRlZC4iKTsKKyAgICBkdW1wU2F2ZWRTbmlwcGV0cygpOworICAgIGR1bXBTdG9yYWdl
U25pcHBldHMoKTsKKworICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7Cit9OworPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0cyBzbmlw
cGV0IHN0b3JhZ2UuPC9wPgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="148162"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>