<?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>95830</bug_id>
          
          <creation_ts>2012-09-05 01:46:17 -0700</creation_ts>
          <short_desc>Refactor CalendarPicker to not use global variables.</short_desc>
          <delta_ts>2012-09-06 04:05:09 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keishi Hattori">keishi</reporter>
          <assigned_to name="Keishi Hattori">keishi</assigned_to>
          <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>711839</commentid>
    <comment_count>0</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-09-05 01:46:17 -0700</bug_when>
    <thetext>Refactor CalendarPicker to not use global variables so we can introduce multiple pickers into one page popup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711845</commentid>
    <comment_count>1</comment_count>
      <attachid>162190</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-09-05 01:59:08 -0700</bug_when>
    <thetext>Created attachment 162190
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711860</commentid>
    <comment_count>2</comment_count>
      <attachid>162190</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-09-05 02:23:10 -0700</bug_when>
    <thetext>Comment on attachment 162190
Patch

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

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:247
&gt; +    if (args.isDatePopup) {

We prefer early return.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:314
&gt; +    this._element.classList.add(&quot;calendar-picker&quot;);

This change should be explained in ChangeLog.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:321
&gt; +CalendarPicker.prototype._layoutButtons = function() {

Please do not move the function order in the source file.  It makes the review harder.
You can move the function position by another patch before this patch or after this patch.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:341
&gt; +CalendarPicker.prototype._handleKeyDown = function(event) {

ditto.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:461
&gt; -    this._monthPopup.addEventListener(&quot;click&quot;, bind(this._handleYearMonthChange, this), false);
&gt; -    this._monthPopup.addEventListener(&quot;keydown&quot;, bind(this._handleMonthPopupKey, this), false);
&gt; -    this._monthPopup.addEventListener(&quot;mousemove&quot;, bind(this._handleMouseMove, this), false);
&gt; +    this._monthPopup.addEventListener(&quot;click&quot;, this._handleYearMonthChange.bind(this), false);
&gt; +    this._monthPopup.addEventListener(&quot;keydown&quot;, this._handleMonthPopupKey.bind(this), false);
&gt; +    this._monthPopup.addEventListener(&quot;mousemove&quot;, this._handleMouseMove.bind(this), false);

Can you defer bind(fn,this) -&gt; fn.bind(this) changes to another patch?

&gt; Source/WebCore/Resources/pagepopups/pickerCommon.js:80
&gt; +function Picker(element, config) {

Please add JSDoc annotation.

&gt; Source/WebCore/Resources/pagepopups/pickerCommon.js:91
&gt; +Picker.prototype.submitValue = function(value) {

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711936</commentid>
    <comment_count>3</comment_count>
      <attachid>162215</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-09-05 04:29:34 -0700</bug_when>
    <thetext>Created attachment 162215
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711942</commentid>
    <comment_count>4</comment_count>
      <attachid>162190</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-09-05 04:39:09 -0700</bug_when>
    <thetext>Comment on attachment 162190
Patch

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

&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:314
&gt;&gt; +    this._element.classList.add(&quot;calendar-picker&quot;);
&gt; 
&gt; This change should be explained in ChangeLog.

I removed this for now. I will add it later when I will be using it.

&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:321
&gt;&gt; +CalendarPicker.prototype._layoutButtons = function() {
&gt; 
&gt; Please do not move the function order in the source file.  It makes the review harder.
&gt; You can move the function position by another patch before this patch or after this patch.

Done.

&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:461
&gt;&gt; +    this._monthPopup.addEventListener(&quot;mousemove&quot;, this._handleMouseMove.bind(this), false);
&gt; 
&gt; Can you defer bind(fn,this) -&gt; fn.bind(this) changes to another patch?

Done.

&gt;&gt; Source/WebCore/Resources/pagepopups/pickerCommon.js:80
&gt;&gt; +function Picker(element, config) {
&gt; 
&gt; Please add JSDoc annotation.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712813</commentid>
    <comment_count>5</comment_count>
      <attachid>162215</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-09-05 20:18:28 -0700</bug_when>
    <thetext>Comment on attachment 162215
Patch

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

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:78
&gt; +    minimumDate: new Date(-62135596800000.0),
&gt; +    maximumDate: new Date(8640000000000000.0)

Are these needed? CalendarPIcker constructor always sets values.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:298
&gt; + * @param {?Element} element

I don&apos;t think element is nullable.  should be {!Element}.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:366
&gt; +    var MainPadding = 6; // TODO: Fix name.

TODO: -&gt; FIXME:

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:404
&gt;   */
&gt; -function YearMonthController() {
&gt; +function YearMonthController(picker) {

Please add annotation for &apos;picker&apos; argument.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:771
&gt;   */
&gt; -function DaysTable() {
&gt; +function DaysTable(picker) {

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712846</commentid>
    <comment_count>6</comment_count>
      <attachid>162409</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-09-05 21:25:32 -0700</bug_when>
    <thetext>Created attachment 162409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712849</commentid>
    <comment_count>7</comment_count>
      <attachid>162409</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-09-05 21:28:12 -0700</bug_when>
    <thetext>Comment on attachment 162409
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713151</commentid>
    <comment_count>8</comment_count>
      <attachid>162409</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-06 04:05:05 -0700</bug_when>
    <thetext>Comment on attachment 162409
Patch

Clearing flags on attachment: 162409

Committed r127727: &lt;http://trac.webkit.org/changeset/127727&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713152</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-06 04:05:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162190</attachid>
            <date>2012-09-05 01:59:08 -0700</date>
            <delta_ts>2012-09-05 04:39:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95830-20120905175849.patch</filename>
            <type>text/plain</type>
            <size>29265</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmNTRkMGM1NmJiNGMx
MzU0NmZlODI5MWZlZWQxMTZmMWRhYmUxNS4uMDUwMTZhNGNjMTdkZjU0YzdkYmI4MjI4ZWFiMWU3
OTE3YWIzY2YwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA5LTA1ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlZmFjdG9yIENhbGVu
ZGFyUGlja2VyIHRvIG5vdCB1c2UgZ2xvYmFsIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgZGF5c1RhYmxlLCB5ZWFyTW9udGhD
b250cm9sbGVyLCBldGMuIGZyb20gZ2xvYmFsIHRvIENhbGVuZGFyUGlja2VyLgorICAgICAgICBX
ZSB3YW50IHRvIG1ha2UgZXZlcnl0aGluZyBjb250YWluZWQgaW5zaWRlIENhbGVuZGFyUGlja2Vy
IHNvIHdlIGNhbgorICAgICAgICBoYXZlIG11bHRpcGxlIFBpY2tlcnMgaW4gb25lIHBhZ2UgcG9w
dXAgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGJlaGF2aW9yIGNo
YW5nZS4KKworICAgICAgICAqIFJlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpz
OgorICAgICAgICAodmFsaWRhdGVBcmd1bWVudHMpOgorICAgICAgICAoaW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChyZXNldE1haW4pOgorICAgICAgICAob3BlbkNhbGVuZGFyUGlja2VyKToKKyAgICAg
ICAgKENhbGVuZGFyUGlja2VyKToKKyAgICAgICAgKENhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5f
bGF5b3V0KToKKyAgICAgICAgKENhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5fbGF5b3V0QnV0dG9u
cyk6CisgICAgICAgIChDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuX2hhbmRsZUtleURvd24pOgor
ICAgICAgICAoQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLmhhbmRsZVRvZGF5KToKKyAgICAgICAg
KENhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5oYW5kbGVDbGVhcik6CisgICAgICAgIChDYWxlbmRh
clBpY2tlci5wcm90b3R5cGUuZml4V2luZG93U2l6ZSk6CisgICAgICAgIChZZWFyTW9udGhDb250
cm9sbGVyKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmF0dGFjaFRv
KToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9hdHRhY2hMZWZ0QnV0
dG9uc1RvKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9hdHRhY2hS
aWdodEJ1dHRvbnNUbyk6CisgICAgICAgIChZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5f
aGFuZGxlWWVhck1vbnRoQ2hhbmdlKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIucHJv
dG90eXBlLm1vdmVSZWxhdGl2ZWx5KToKKyAgICAgICAgKERheXNUYWJsZSk6CisgICAgICAgIChE
YXlzVGFibGUucHJvdG90eXBlLmF0dGFjaFRvKToKKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5
cGUuX3JlbmRlck1vbnRoKToKKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX25hdmlnYXRl
VG9Nb250aCk6CisgICAgICAgIChEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVEYXlDbGljayk6
CisgICAgICAgIChEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkpOgorICAgICAgICAqIFJl
c291cmNlcy9wYWdlcG9wdXBzL2NvbG9yU3VnZ2VzdGlvblBpY2tlci5qczoKKyAgICAgICAgKENv
bG9yUGlja2VyKToKKyAgICAgICAgKENvbG9yUGlja2VyLnByb3RvdHlwZS5fbGF5b3V0KToKKyAg
ICAgICAgKENvbG9yUGlja2VyLnByb3RvdHlwZS5faGFuZGxlS2V5RG93bik6CisgICAgICAgIChD
b2xvclBpY2tlci5wcm90b3R5cGUuX2hhbmRsZVN3YXRjaENsaWNrKToKKyAgICAgICAgKiBSZXNv
dXJjZXMvcGFnZXBvcHVwcy9waWNrZXJDb21tb24uanM6CisgICAgICAgIChQaWNrZXIpOgorICAg
ICAgICAoUGlja2VyLnByb3RvdHlwZS5zdWJtaXRWYWx1ZSk6CisgICAgICAgIChQaWNrZXIucHJv
dG90eXBlLmhhbmRsZUNhbmNlbCk6CisgICAgICAgIChQaWNrZXIucHJvdG90eXBlLmNob29zZU90
aGVyQ29sb3IpOgorCiAyMDEyLTA5LTA0ICBTZXJnZXkgR2xhenVub3YgIDxzZXJnLmdsYXp1bm92
QGdtYWlsLmNvbT4KIAogICAgICAgICBGcmFtZSBlbGVtZW50IGRvZXNuJ3QgYWx3YXlzIHVubG9h
ZCBpdHMgY2hpbGQgZnJhbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMv
cGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5qcyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9w
YWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzCmluZGV4IDkyNmY3NmVkMWI3OGRiZmNiODViZGUz
NjNkZTI1OGE3NjY2MzA3NzQuLjhiNmNjYWJjYjg4NWU0MjY4ZDUzODFhZTk3NzljNmQ3NDNhOTJi
OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVu
ZGFyUGlja2VyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2Nh
bGVuZGFyUGlja2VyLmpzCkBAIC0yNDQsMjEgKzI0NCwyMyBAQCBmdW5jdGlvbiBoYW5kbGVBcmd1
bWVudHNUaW1lb3V0KCkgewogICogQHJldHVybiB7P3N0cmluZ30gQW4gZXJyb3IgbWVzc2FnZSwg
b3IgbnVsbCBpZiB0aGUgYXJndW1lbnQgaGFzIG5vIGVycm9ycy4KICAqLwogZnVuY3Rpb24gdmFs
aWRhdGVBcmd1bWVudHMoYXJncykgewotICAgIGlmICghYXJncy5tb250aExhYmVscykKLSAgICAg
ICAgcmV0dXJuICJObyBtb250aExhYmVscy4iOwotICAgIGlmIChhcmdzLm1vbnRoTGFiZWxzLmxl
bmd0aCAhPSAxMikKLSAgICAgICAgcmV0dXJuICJtb250aExhYmVscyBpcyBub3QgYW4gYXJyYXkg
d2l0aCAxMiBlbGVtZW50cy4iOwotICAgIGlmICghYXJncy5kYXlMYWJlbHMpCi0gICAgICAgIHJl
dHVybiAiTm8gZGF5TGFiZWxzLiI7Ci0gICAgaWYgKGFyZ3MuZGF5TGFiZWxzLmxlbmd0aCAhPSA3
KQotICAgICAgICByZXR1cm4gImRheUxhYmVscyBpcyBub3QgYW4gYXJyYXkgd2l0aCA3IGVsZW1l
bnRzLiI7Ci0gICAgaWYgKCFhcmdzLmNsZWFyTGFiZWwpCi0gICAgICAgIHJldHVybiAiTm8gY2xl
YXJMYWJlbC4iOwotICAgIGlmICghYXJncy50b2RheUxhYmVsKQotICAgICAgICByZXR1cm4gIk5v
IHRvZGF5TGFiZWwuIjsKLSAgICBpZiAoYXJncy53ZWVrU3RhcnREYXkpIHsKLSAgICAgICAgaWYg
KGFyZ3Mud2Vla1N0YXJ0RGF5IDwgMCB8fCBhcmdzLndlZWtTdGFydERheSA+IDYpCi0gICAgICAg
ICAgICByZXR1cm4gIkludmFsaWQgd2Vla1N0YXJ0RGF5OiAiICsgYXJncy53ZWVrU3RhcnREYXk7
CisgICAgaWYgKGFyZ3MuaXNEYXRlUG9wdXApIHsKKyAgICAgICAgaWYgKCFhcmdzLm1vbnRoTGFi
ZWxzKQorICAgICAgICAgICAgcmV0dXJuICJObyBtb250aExhYmVscy4iOworICAgICAgICBpZiAo
YXJncy5tb250aExhYmVscy5sZW5ndGggIT0gMTIpCisgICAgICAgICAgICByZXR1cm4gIm1vbnRo
TGFiZWxzIGlzIG5vdCBhbiBhcnJheSB3aXRoIDEyIGVsZW1lbnRzLiI7CisgICAgICAgIGlmICgh
YXJncy5kYXlMYWJlbHMpCisgICAgICAgICAgICByZXR1cm4gIk5vIGRheUxhYmVscy4iOworICAg
ICAgICBpZiAoYXJncy5kYXlMYWJlbHMubGVuZ3RoICE9IDcpCisgICAgICAgICAgICByZXR1cm4g
ImRheUxhYmVscyBpcyBub3QgYW4gYXJyYXkgd2l0aCA3IGVsZW1lbnRzLiI7CisgICAgICAgIGlm
ICghYXJncy5jbGVhckxhYmVsKQorICAgICAgICAgICAgcmV0dXJuICJObyBjbGVhckxhYmVsLiI7
CisgICAgICAgIGlmICghYXJncy50b2RheUxhYmVsKQorICAgICAgICAgICAgcmV0dXJuICJObyB0
b2RheUxhYmVsLiI7CisgICAgICAgIGlmIChhcmdzLndlZWtTdGFydERheSkgeworICAgICAgICAg
ICAgaWYgKGFyZ3Mud2Vla1N0YXJ0RGF5IDwgMCB8fCBhcmdzLndlZWtTdGFydERheSA+IDYpCisg
ICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIHdlZWtTdGFydERheTogIiArIGFyZ3Mud2Vl
a1N0YXJ0RGF5OworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBudWxsOwogfQpAQCAtMjc3
LDIyICsyNzksMTAxIEBAIGZ1bmN0aW9uIGluaXRpYWxpemUoYXJncykgewogICAgIH0gZWxzZSB7
CiAgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBhcmdzOwogICAgICAgICBjaGVja0xpbWl0cygpOwot
ICAgICAgICBsYXlvdXQoKTsKKyAgICAgICAgb3BlbkNhbGVuZGFyUGlja2VyKCk7CisgICAgfQor
fQorCitmdW5jdGlvbiByZXNldE1haW4oKSB7CisgICAgdmFyIG1haW4gPSAkKCJtYWluIik7Cisg
ICAgbWFpbi5pbm5lckhUTUwgPSAiIjsKKyAgICBtYWluLmNsYXNzTmFtZSA9ICIiOworfTsKKwor
ZnVuY3Rpb24gb3BlbkNhbGVuZGFyUGlja2VyKCkgeworICAgIHJlc2V0TWFpbigpOworICAgIG5l
dyBDYWxlbmRhclBpY2tlcigkKCJtYWluIiksIGdsb2JhbC5wYXJhbXMpOworfTsKIAotICAgICAg
ICB2YXIgaW5pdGlhbERhdGUgPSBwYXJzZURhdGVTdHJpbmcoYXJncy5jdXJyZW50VmFsdWUpOwot
ICAgICAgICBpZiAoaW5pdGlhbERhdGUgPCBnbG9iYWwubWluaW11bURhdGUpCi0gICAgICAgICAg
ICBpbml0aWFsRGF0ZSA9IGdsb2JhbC5taW5pbXVtRGF0ZTsKLSAgICAgICAgZWxzZSBpZiAoaW5p
dGlhbERhdGUgPiBnbG9iYWwubWF4aW11bURhdGUpCi0gICAgICAgICAgICBpbml0aWFsRGF0ZSA9
IGdsb2JhbC5tYXhpbXVtRGF0ZTsKLSAgICAgICAgZ2xvYmFsLmRheXNUYWJsZS5zZWxlY3REYXRl
KGluaXRpYWxEYXRlKTsKK2Z1bmN0aW9uIENhbGVuZGFyUGlja2VyKGVsZW1lbnQsIGNvbmZpZykg
eworICAgIFBpY2tlci5jYWxsKHRoaXMsIGVsZW1lbnQsIGNvbmZpZyk7CisgICAgdGhpcy55ZWFy
TW9udGhDb250cm9sbGVyID0gbmV3IFllYXJNb250aENvbnRyb2xsZXIodGhpcyk7CisgICAgdGhp
cy5kYXlzVGFibGUgPSBuZXcgRGF5c1RhYmxlKHRoaXMpOworICAgIHRoaXMuX2xheW91dCgpOwor
ICAgIHZhciBpbml0aWFsRGF0ZSA9IHBhcnNlRGF0ZVN0cmluZyh0aGlzLl9jb25maWcuY3VycmVu
dFZhbHVlKTsKKyAgICBpZiAoaW5pdGlhbERhdGUgPCBnbG9iYWwubWluaW11bURhdGUpCisgICAg
ICAgIGluaXRpYWxEYXRlID0gZ2xvYmFsLm1pbmltdW1EYXRlOworICAgIGVsc2UgaWYgKGluaXRp
YWxEYXRlID4gZ2xvYmFsLm1heGltdW1EYXRlKQorICAgICAgICBpbml0aWFsRGF0ZSA9IGdsb2Jh
bC5tYXhpbXVtRGF0ZTsKKyAgICB0aGlzLmRheXNUYWJsZS5zZWxlY3REYXRlKGluaXRpYWxEYXRl
KTsKKyAgICB0aGlzLmZpeFdpbmRvd1NpemUoKTsKKyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50
TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJpbmQodGhpcyksIGZhbHNl
KTsKK30KK0NhbGVuZGFyUGlja2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGlja2VyLnBy
b3RvdHlwZSk7CisKK0NhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5fbGF5b3V0ID0gZnVuY3Rpb24o
KSB7CisgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjYWxlbmRhci1waWNrZXIiKTsK
KyAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpcmVjdGlvbiA9IGdsb2JhbC5wYXJhbXMuaXNSVEwg
PyAicnRsIiA6ICJsdHIiOworICAgIHRoaXMueWVhck1vbnRoQ29udHJvbGxlci5hdHRhY2hUbyh0
aGlzLl9lbGVtZW50KTsKKyAgICB0aGlzLmRheXNUYWJsZS5hdHRhY2hUbyh0aGlzLl9lbGVtZW50
KTsKKyAgICB0aGlzLl9sYXlvdXRCdXR0b25zKCk7Cit9OwogCi0gICAgICAgIHNldFRpbWVvdXQo
Zml4V2luZG93U2l6ZSwgMCk7CitDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuX2xheW91dEJ1dHRv
bnMgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2
IiwgQ2xhc3NOYW1lcy5Ub2RheUNsZWFyQXJlYSk7CisgICAgdGhpcy50b2RheSA9IGNyZWF0ZUVs
ZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5Ub2RheUJ1dHRvbik7CisgICAgdGhpcy50b2RheS50
eXBlID0gImJ1dHRvbiI7CisgICAgdGhpcy50b2RheS52YWx1ZSA9IHRoaXMuX2NvbmZpZy50b2Rh
eUxhYmVsOworICAgIHRoaXMudG9kYXkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhh
bmRsZVRvZGF5LmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQo
dGhpcy50b2RheSk7CisgICAgdGhpcy5jbGVhciA9IG51bGw7CisgICAgaWYgKCF0aGlzLl9jb25m
aWcucmVxdWlyZWQpIHsKKyAgICAgICAgdGhpcy5jbGVhciA9IGNyZWF0ZUVsZW1lbnQoImlucHV0
IiwgQ2xhc3NOYW1lcy5DbGVhckJ1dHRvbik7CisgICAgICAgIHRoaXMuY2xlYXIudHlwZSA9ICJi
dXR0b24iOworICAgICAgICB0aGlzLmNsZWFyLnZhbHVlID0gdGhpcy5fY29uZmlnLmNsZWFyTGFi
ZWw7CisgICAgICAgIHRoaXMuY2xlYXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhh
bmRsZUNsZWFyLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENo
aWxkKHRoaXMuY2xlYXIpOwogICAgIH0KKyAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGNv
bnRhaW5lcik7CisKKyAgICB0aGlzLmxhc3RGb2N1c2FibGVDb250cm9sID0gdGhpcy5jbGVhciB8
fCB0aGlzLnRvZGF5OworfTsKKworQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLl9oYW5kbGVLZXlE
b3duID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKKyAg
ICB2YXIga2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcjsKKyAgICBpZiAoa2V5ID09ICJVKzAwMDki
KSB7CisgICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCA9PSBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRyb2wpIHsKKyAgICAgICAgICAgIGV2ZW50LnN0
b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAg
ICAgICAgICAgIHRoaXMuZmlyc3RGb2N1c2FibGVDb250cm9sLmZvY3VzKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9i
YWwuZmlyc3RGb2N1c2FibGVDb250cm9sKSB7CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFn
YXRpb24oKTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAg
ICB0aGlzLmxhc3RGb2N1c2FibGVDb250cm9sLmZvY3VzKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAiVSswMDREIikgeyAvLyAnbScKKyAgICAgICAgdGhpcy55ZWFyTW9udGhD
b250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJv
bGxlci5QcmV2aW91c01vbnRoIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0TW9udGgpOworICAg
IH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTkiKSB7IC8vICd5JworICAgICAgICB0aGlzLnllYXJN
b250aENvbnRyb2xsZXIubW92ZVJlbGF0aXZlbHkoZXZlbnQuc2hpZnRLZXkgPyBZZWFyTW9udGhD
b250cm9sbGVyLlByZXZpb3VzWWVhciA6IFllYXJNb250aENvbnRyb2xsZXIuTmV4dFllYXIpOwor
ICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNDQiKSB7IC8vICdkJworICAgICAgICB0aGlzLnll
YXJNb250aENvbnRyb2xsZXIubW92ZVJlbGF0aXZlbHkoZXZlbnQuc2hpZnRLZXkgPyBZZWFyTW9u
dGhDb250cm9sbGVyLlByZXZpb3VzVGVuWWVhcnMgOiBZZWFyTW9udGhDb250cm9sbGVyLk5leHRU
ZW5ZZWFycyk7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDAxQiIpIC8vIEVTQworICAgICAg
ICB0aGlzLmhhbmRsZUNhbmNlbCgpOwogfQogCi1mdW5jdGlvbiBmaXhXaW5kb3dTaXplKCkgewot
ICAgIHZhciB5ZWFyTW9udGhSaWdodEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKENsYXNzTmFtZXMuWWVhck1vbnRoQnV0dG9uUmlnaHQpWzBdOwotICAgIHZhciBkYXlz
QXJlYUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENsYXNzTmFtZXMu
RGF5c0FyZWEpWzBdOworQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLmhhbmRsZVRvZGF5ID0gZnVu
Y3Rpb24oKSB7CisgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOworICAgIHRoaXMuZGF5c1RhYmxl
LnNlbGVjdERhdGUoZGF0ZSk7CisgICAgdGhpcy5zdWJtaXRWYWx1ZShzZXJpYWxpemVEYXRlKGRh
dGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkpOworfTsK
KworQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLmhhbmRsZUNsZWFyID0gZnVuY3Rpb24oKSB7Cisg
ICAgdGhpcy5zdWJtaXRWYWx1ZSgiIik7Cit9OworCitDYWxlbmRhclBpY2tlci5wcm90b3R5cGUu
Zml4V2luZG93U2l6ZSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB5ZWFyTW9udGhSaWdodEVsZW1l
bnQgPSB0aGlzLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5ZZWFy
TW9udGhCdXR0b25SaWdodClbMF07CisgICAgdmFyIGRheXNBcmVhRWxlbWVudCA9IHRoaXMuX2Vs
ZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDbGFzc05hbWVzLkRheXNBcmVhKVswXTsKICAg
ICB2YXIgaGVhZGVycyA9IGRheXNBcmVhRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENs
YXNzTmFtZXMuRGF5TGFiZWwpOwogICAgIHZhciBtYXhDZWxsV2lkdGggPSAwOwogICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7ICsraSkgewpAQCAtMzAwLDMxICszODEsMjkg
QEAgZnVuY3Rpb24gZml4V2luZG93U2l6ZSgpIHsKICAgICAgICAgICAgIG1heENlbGxXaWR0aCA9
IGhlYWRlcnNbaV0ub2Zmc2V0V2lkdGg7CiAgICAgfQogICAgIHZhciBEYXlzQXJlYUNvbnRhaW5l
ckJvcmRlciA9IDE7Ci0gICAgdmFyIG1haW4gPSAkKCJtYWluIik7CiAgICAgdmFyIHllYXJNb250
aEVuZDsKICAgICB2YXIgZGF5c0FyZWFFbmQ7CiAgICAgaWYgKGdsb2JhbC5wYXJhbXMuaXNSVEwp
IHsKLSAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gbWFpbi5vZmZzZXRMZWZ0ICsgbWFpbi5vZmZz
ZXRXaWR0aDsKKyAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fZWxlbWVudC5vZmZzZXRM
ZWZ0ICsgdGhpcy5fZWxlbWVudC5vZmZzZXRXaWR0aDsKICAgICAgICAgeWVhck1vbnRoRW5kID0g
c3RhcnRPZmZzZXQgLSB5ZWFyTW9udGhSaWdodEVsZW1lbnQub2Zmc2V0TGVmdDsKICAgICAgICAg
ZGF5c0FyZWFFbmQgPSBzdGFydE9mZnNldCAtIChkYXlzQXJlYUVsZW1lbnQub2Zmc2V0TGVmdCAr
IGRheXNBcmVhRWxlbWVudC5vZmZzZXRXaWR0aCkgKyBtYXhDZWxsV2lkdGggKiA3ICsgRGF5c0Fy
ZWFDb250YWluZXJCb3JkZXI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgeWVhck1vbnRoRW5kID0g
eWVhck1vbnRoUmlnaHRFbGVtZW50Lm9mZnNldExlZnQgKyB5ZWFyTW9udGhSaWdodEVsZW1lbnQu
b2Zmc2V0V2lkdGg7CiAgICAgICAgIGRheXNBcmVhRW5kID0gZGF5c0FyZWFFbGVtZW50Lm9mZnNl
dExlZnQgKyBtYXhDZWxsV2lkdGggKiA3ICsgRGF5c0FyZWFDb250YWluZXJCb3JkZXI7CiAgICAg
fQotCiAgICAgdmFyIG1heEVuZCA9IE1hdGgubWF4KHllYXJNb250aEVuZCwgZGF5c0FyZWFFbmQp
OwotICAgIHZhciBNYWluUGFkZGluZyA9IDY7CisgICAgdmFyIE1haW5QYWRkaW5nID0gNjsgLy8g
VE9ETzogRml4IG5hbWUuCiAgICAgdmFyIE1haW5Cb3JkZXIgPSAxOwogICAgIHZhciBkZXNpcmVk
Qm9keVdpZHRoID0gbWF4RW5kICsgTWFpblBhZGRpbmcgKyBNYWluQm9yZGVyOwogCi0gICAgdmFy
IG1haW5IZWlnaHQgPSBtYWluLm9mZnNldEhlaWdodDsKLSAgICBtYWluLnN0eWxlLndpZHRoID0g
ImF1dG8iOworICAgIHZhciBlbGVtZW50SGVpZ2h0ID0gdGhpcy5fZWxlbWVudC5vZmZzZXRIZWln
aHQ7CisgICAgdGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCA9ICJhdXRvIjsKICAgICBkYXlzQXJl
YUVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgZGF5c0FyZWFFbGVtZW50LnN0eWxl
LnRhYmxlTGF5b3V0ID0gImZpeGVkIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKENsYXNzTmFtZXMuWWVhck1vbnRoVXBwZXIpWzBdLnN0eWxlLmRpc3BsYXkgPSAiLXdlYmtp
dC1ib3giOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5N
b250aFNlbGVjdG9yQm94KVswXS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICByZXNpemVX
aW5kb3coZGVzaXJlZEJvZHlXaWR0aCwgbWFpbkhlaWdodCk7Ci19CisgICAgdGhpcy5fZWxlbWVu
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENsYXNzTmFtZXMuWWVhck1vbnRoVXBwZXIpWzBdLnN0
eWxlLmRpc3BsYXkgPSAiLXdlYmtpdC1ib3giOworICAgIHRoaXMuX2VsZW1lbnQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZShDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JCb3gpWzBdLnN0eWxlLmRpc3Bs
YXkgPSAiYmxvY2siOworICAgIHJlc2l6ZVdpbmRvdyhkZXNpcmVkQm9keVdpZHRoLCBlbGVtZW50
SGVpZ2h0KTsKK307CiAKIGZ1bmN0aW9uIGNoZWNrTGltaXRzKCkgewogICAgIC8vIEhhcmQgbGlt
aXRzIG9mIHR5cGU9ZGF0ZS4gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaC4K
QEAgLTM0NSw1MiArNDI0LDEzIEBAIGZ1bmN0aW9uIGNoZWNrTGltaXRzKCkgewogICAgICAgICBn
bG9iYWwuc3RlcCAqPSBnbG9iYWwucGFyYW1zLnN0ZXA7CiB9CiAKLWZ1bmN0aW9uIGxheW91dCgp
IHsKLSAgICBpZiAoZ2xvYmFsLnBhcmFtcy5pc1JUTCkKLSAgICAgICAgZG9jdW1lbnQuYm9keS5k
aXIgPSAicnRsIjsKLSAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmJvZHkuZGlyID0gImx0ciI7
Ci0gICAgdmFyIG1haW4gPSAkKCJtYWluIik7Ci0gICAgdmFyIHBhcmFtcyA9IGdsb2JhbC5wYXJh
bXM7Ci0gICAgbWFpbi5yZW1vdmVDaGlsZChtYWluLmZpcnN0Q2hpbGQpOwotICAgIGRvY3VtZW50
LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGhhbmRsZUdsb2JhbEtleSwgZmFsc2Up
OwotCi0gICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIgPSBuZXcgWWVhck1vbnRoQ29udHJv
bGxlcigpOwotICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLmF0dGFjaFRvKG1haW4pOwot
ICAgIGdsb2JhbC5kYXlzVGFibGUgPSBuZXcgRGF5c1RhYmxlKCk7Ci0gICAgZ2xvYmFsLmRheXNU
YWJsZS5hdHRhY2hUbyhtYWluKTsKLSAgICBsYXlvdXRCdXR0b25zKG1haW4pOwotfQotCi0vKioK
LSAqIEBwYXJhbSB7RWxlbWVudH0gbWFpbgotICovCi1mdW5jdGlvbiBsYXlvdXRCdXR0b25zKG1h
aW4pIHsKLSAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1l
cy5Ub2RheUNsZWFyQXJlYSk7Ci0gICAgZ2xvYmFsLnRvZGF5ID0gY3JlYXRlRWxlbWVudCgiaW5w
dXQiLCBDbGFzc05hbWVzLlRvZGF5QnV0dG9uKTsKLSAgICBnbG9iYWwudG9kYXkudHlwZSA9ICJi
dXR0b24iOwotICAgIGdsb2JhbC50b2RheS52YWx1ZSA9IGdsb2JhbC5wYXJhbXMudG9kYXlMYWJl
bDsKLSAgICBnbG9iYWwudG9kYXkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBoYW5kbGVUb2Rh
eSwgZmFsc2UpOwotICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChnbG9iYWwudG9kYXkpOwotICAg
IGdsb2JhbC5jbGVhciA9IG51bGw7Ci0gICAgaWYgKCFnbG9iYWwucGFyYW1zLnJlcXVpcmVkKSB7
Ci0gICAgICAgIGdsb2JhbC5jbGVhciA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1l
cy5DbGVhckJ1dHRvbik7Ci0gICAgICAgIGdsb2JhbC5jbGVhci50eXBlID0gImJ1dHRvbiI7Ci0g
ICAgICAgIGdsb2JhbC5jbGVhci52YWx1ZSA9IGdsb2JhbC5wYXJhbXMuY2xlYXJMYWJlbDsKLSAg
ICAgICAgZ2xvYmFsLmNsZWFyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaGFuZGxlQ2xlYXIs
IGZhbHNlKTsKLSAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGdsb2JhbC5jbGVhcik7Ci0g
ICAgfQotICAgIG1haW4uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLQotICAgIGdsb2JhbC5sYXN0
Rm9jdXNhYmxlQ29udHJvbCA9IGdsb2JhbC5jbGVhciB8fCBnbG9iYWwudG9kYXk7Ci19Ci0KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqLwotZnVuY3Rpb24gWWVhck1vbnRo
Q29udHJvbGxlcigpIHsKK2Z1bmN0aW9uIFllYXJNb250aENvbnRyb2xsZXIocGlja2VyKSB7Cisg
ICAgdGhpcy5waWNrZXIgPSBwaWNrZXI7CiAgICAgLyoqCiAgICAgICogQHR5cGUgeyFudW1iZXJ9
CiAgICAgICovCkBAIC00MDIsOSArNDQyLDkgQEAgZnVuY3Rpb24gWWVhck1vbnRoQ29udHJvbGxl
cigpIHsKIH0KIAogLyoqCi0gKiBAcGFyYW0geyFFbGVtZW50fSBtYWluCisgKiBAcGFyYW0geyFF
bGVtZW50fSBlbGVtZW50CiAgKi8KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmF0dGFj
aFRvID0gZnVuY3Rpb24obWFpbikgeworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuYXR0
YWNoVG8gPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgdmFyIG91dGVyQ29udGFpbmVyID0gY3Jl
YXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhBcmVhKTsKIAogICAgIHZhciBp
bm5lckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuWWVhck1vbnRo
VXBwZXIpOwpAQCAtNDE2LDI0ICs0NTYsMjQgQEAgWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5
cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihtYWluKSB7CiAgICAgaW5uZXJDb250YWluZXIuYXBwZW5k
Q2hpbGQoYm94KTsKICAgICAvLyBXZSBjYW4ndCB1c2UgPHNlbGVjdD4gcG9wdXAgaW4gUGFnZVBv
cHVwLgogICAgIHRoaXMuX21vbnRoUG9wdXAgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05h
bWVzLk1vbnRoU2VsZWN0b3JQb3B1cCk7Ci0gICAgdGhpcy5fbW9udGhQb3B1cC5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlWWVhck1vbnRoQ2hhbmdlLCB0aGlzKSwg
ZmFsc2UpOwotICAgIHRoaXMuX21vbnRoUG9wdXAuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIs
IGJpbmQodGhpcy5faGFuZGxlTW9udGhQb3B1cEtleSwgdGhpcyksIGZhbHNlKTsKLSAgICB0aGlz
Ll9tb250aFBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGJpbmQodGhpcy5faGFu
ZGxlTW91c2VNb3ZlLCB0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuX21vbnRoUG9wdXAuYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9oYW5kbGVZZWFyTW9udGhDaGFuZ2UuYmluZCh0aGlz
KSwgZmFsc2UpOworICAgIHRoaXMuX21vbnRoUG9wdXAuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93
biIsIHRoaXMuX2hhbmRsZU1vbnRoUG9wdXBLZXkuYmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRo
aXMuX21vbnRoUG9wdXAuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5faGFuZGxl
TW91c2VNb3ZlLmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLl91cGRhdGVTZWxlY3Rpb25P
bk1vdXNlTW92ZSA9IHRydWU7CiAgICAgdGhpcy5fbW9udGhQb3B1cC50YWJJbmRleCA9IDA7CiAg
ICAgdGhpcy5fbW9udGhQb3B1cENvbnRlbnRzID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NO
YW1lcy5Nb250aFNlbGVjdG9yUG9wdXBDb250ZW50cyk7CiAgICAgdGhpcy5fbW9udGhQb3B1cC5h
cHBlbmRDaGlsZCh0aGlzLl9tb250aFBvcHVwQ29udGVudHMpOwogICAgIGJveC5hcHBlbmRDaGls
ZCh0aGlzLl9tb250aFBvcHVwKTsKICAgICB0aGlzLl9tb250aCA9IGNyZWF0ZUVsZW1lbnQoImRp
diIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3Rvcik7Ci0gICAgdGhpcy5fbW9udGguYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX3Nob3dQb3B1cCwgdGhpcyksIGZhbHNlKTsKKyAg
ICB0aGlzLl9tb250aC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3Nob3dQb3B1cC5i
aW5kKHRoaXMpLCBmYWxzZSk7CiAgICAgYm94LmFwcGVuZENoaWxkKHRoaXMuX21vbnRoKTsKIAog
ICAgIHRoaXMuX2F0dGFjaFJpZ2h0QnV0dG9uc1RvKGlubmVyQ29udGFpbmVyKTsKLSAgICBtYWlu
LmFwcGVuZENoaWxkKG91dGVyQ29udGFpbmVyKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKG91
dGVyQ29udGFpbmVyKTsKIAogICAgIHRoaXMuX3dhbGwgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBD
bGFzc05hbWVzLk1vbnRoU2VsZWN0b3JXYWxsKTsKLSAgICB0aGlzLl93YWxsLmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9jbG9zZVBvcHVwLCB0aGlzKSwgZmFsc2UpOwotICAg
IG1haW4uYXBwZW5kQ2hpbGQodGhpcy5fd2FsbCk7CisgICAgdGhpcy5fd2FsbC5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIHRoaXMuX2Nsb3NlUG9wdXAuYmluZCh0aGlzKSwgZmFsc2UpOworICAg
IGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fd2FsbCk7CiAKICAgICB2YXIgbWF4aW11bVllYXIg
PSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKTsKICAgICB2YXIgbWF4V2lkdGgg
PSAwOwpAQCAtNDY1LDIwICs1MDUsMjAgQEAgWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUu
X2F0dGFjaExlZnRCdXR0b25zVG8gPSBmdW5jdGlvbihwYXJlbnQpIHsKICAgICAgICAgdGhpcy5f
bGVmdDMgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENsYXNzTmFtZXMuWWVhck1vbnRoQnV0dG9u
KTsKICAgICAgICAgdGhpcy5fbGVmdDMudHlwZSA9ICJidXR0b24iOwogICAgICAgICB0aGlzLl9s
ZWZ0My52YWx1ZSA9ICI8PDwiOwotICAgICAgICB0aGlzLl9sZWZ0My5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7Cisg
ICAgICAgIHRoaXMuX2xlZnQzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5faGFuZGxl
QnV0dG9uQ2xpY2suYmluZCh0aGlzKSwgZmFsc2UpOwogICAgICAgICBjb250YWluZXIuYXBwZW5k
Q2hpbGQodGhpcy5fbGVmdDMpOwogICAgIH0KIAogICAgIHRoaXMuX2xlZnQyID0gY3JlYXRlRWxl
bWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7CiAgICAgdGhpcy5fbGVm
dDIudHlwZSA9ICJidXR0b24iOwogICAgIHRoaXMuX2xlZnQyLnZhbHVlID0gIjw8IjsKLSAgICB0
aGlzLl9sZWZ0Mi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0
dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5fbGVmdDIuYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCB0aGlzLl9oYW5kbGVCdXR0b25DbGljay5iaW5kKHRoaXMpLCBmYWxzZSk7CiAg
ICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xlZnQyKTsKIAogICAgIHRoaXMuX2xlZnQx
ID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7CiAg
ICAgdGhpcy5fbGVmdDEudHlwZSA9ICJidXR0b24iOwogICAgIHRoaXMuX2xlZnQxLnZhbHVlID0g
IjwiOwotICAgIHRoaXMuX2xlZnQxLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlz
Ll9oYW5kbGVCdXR0b25DbGljaywgdGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLl9sZWZ0MS5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLmJpbmQodGhpcyks
IGZhbHNlKTsKICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fbGVmdDEpOwogfTsKIApA
QCAtNDkxLDIwICs1MzEsMjAgQEAgWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2F0dGFj
aFJpZ2h0QnV0dG9uc1RvID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgdGhpcy5fcmlnaHQxID0g
Y3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7CiAgICAg
dGhpcy5fcmlnaHQxLnR5cGUgPSAiYnV0dG9uIjsKICAgICB0aGlzLl9yaWdodDEudmFsdWUgPSAi
PiI7Ci0gICAgdGhpcy5fcmlnaHQxLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlz
Ll9oYW5kbGVCdXR0b25DbGljaywgdGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLl9yaWdodDEuYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9oYW5kbGVCdXR0b25DbGljay5iaW5kKHRoaXMp
LCBmYWxzZSk7CiAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JpZ2h0MSk7CiAKICAg
ICB0aGlzLl9yaWdodDIgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENsYXNzTmFtZXMuWWVhck1v
bnRoQnV0dG9uKTsKICAgICB0aGlzLl9yaWdodDIudHlwZSA9ICJidXR0b24iOwogICAgIHRoaXMu
X3JpZ2h0Mi52YWx1ZSA9ICI+PiI7Ci0gICAgdGhpcy5fcmlnaHQyLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgYmluZCh0aGlzLl9oYW5kbGVCdXR0b25DbGljaywgdGhpcyksIGZhbHNlKTsKKyAg
ICB0aGlzLl9yaWdodDIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9oYW5kbGVCdXR0
b25DbGljay5iaW5kKHRoaXMpLCBmYWxzZSk7CiAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRo
aXMuX3JpZ2h0Mik7CiAKICAgICBpZiAoWWVhck1vbnRoQ29udHJvbGxlci5hZGRUZW5ZZWFyc0J1
dHRvbnMpIHsKICAgICAgICAgdGhpcy5fcmlnaHQzID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBD
bGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7CiAgICAgICAgIHRoaXMuX3JpZ2h0My50eXBlID0g
ImJ1dHRvbiI7CiAgICAgICAgIHRoaXMuX3JpZ2h0My52YWx1ZSA9ICI+Pj4iOwotICAgICAgICB0
aGlzLl9yaWdodDMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZUJ1
dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOworICAgICAgICB0aGlzLl9yaWdodDMuYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCB0aGlzLl9oYW5kbGVCdXR0b25DbGljay5iaW5kKHRoaXMpLCBmYWxz
ZSk7CiAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yaWdodDMpOwogICAgIH0K
IH07CkBAIC02ODAsNyArNzIwLDcgQEAgWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2hh
bmRsZVllYXJNb250aENoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICByZXR1cm47CiAgICAg
dmFyIG5ld1llYXIgPSBOdW1iZXIocmVzdWx0WzFdKTsKICAgICB2YXIgbmV3TW9udGggPSBOdW1i
ZXIocmVzdWx0WzJdKTsKLSAgICBnbG9iYWwuZGF5c1RhYmxlLm5hdmlnYXRlVG9Nb250aEFuZEtl
ZXBTZWxlY3Rpb25Qb3NpdGlvbihuZXdZZWFyLCBuZXdNb250aCk7CisgICAgdGhpcy5waWNrZXIu
ZGF5c1RhYmxlLm5hdmlnYXRlVG9Nb250aEFuZEtlZXBTZWxlY3Rpb25Qb3NpdGlvbihuZXdZZWFy
LCBuZXdNb250aCk7CiB9OwogCiAvKgpAQCAtNzQ4LDcgKzc4OCw3IEBAIFllYXJNb250aENvbnRy
b2xsZXIucHJvdG90eXBlLm1vdmVSZWxhdGl2ZWx5ID0gZnVuY3Rpb24oYW1vdW50KSB7CiAgICAg
ICAgIHVwZGF0ZWQgPSBjdXJyZW50ICsgYW1vdW50IDw9IG1heCA/IGN1cnJlbnQgKyBhbW91bnQg
OiBtYXg7CiAgICAgaWYgKHVwZGF0ZWQgPT0gY3VycmVudCkKICAgICAgICAgcmV0dXJuOwotICAg
IGdsb2JhbC5kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVjdGlvblBvc2l0aW9u
KE1hdGguZmxvb3IodXBkYXRlZCAvIDEyKSwgdXBkYXRlZCAlIDEyKTsKKyAgICB0aGlzLnBpY2tl
ci5kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVjdGlvblBvc2l0aW9uKE1hdGgu
Zmxvb3IodXBkYXRlZCAvIDEyKSwgdXBkYXRlZCAlIDEyKTsKIH07CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTc1Niw3ICs3OTYsOCBAQCBZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5tb3ZlUmVsYXRp
dmVseSA9IGZ1bmN0aW9uKGFtb3VudCkgewogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqLwotZnVu
Y3Rpb24gRGF5c1RhYmxlKCkgeworZnVuY3Rpb24gRGF5c1RhYmxlKHBpY2tlcikgeworICAgIHRo
aXMucGlja2VyID0gcGlja2VyOwogICAgIC8qKgogICAgICAqIEB0eXBlIHshbnVtYmVyfQogICAg
ICAqLwpAQCAtNzkwLDE0ICs4MzEsMTQgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5faGFzU2VsZWN0
aW9uID0gZnVuY3Rpb24oKSB7CiBEYXlzVGFibGUuX1dlZWtzID0gNjsKIAogLyoqCi0gKiBAcGFy
YW0geyFFbGVtZW50fSBtYWluCisgKiBAcGFyYW0geyFFbGVtZW50fSBlbGVtZW50CiAgKi8KLURh
eXNUYWJsZS5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihtYWluKSB7CitEYXlzVGFibGUu
cHJvdG90eXBlLmF0dGFjaFRvID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgIHRoaXMuX2RheXND
b250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJ0YWJsZSIsIENsYXNzTmFtZXMuRGF5c0FyZWEpOwot
ICAgIHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRo
aXMuX2hhbmRsZURheUNsaWNrLCB0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX2RheXNDb250YWlu
ZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIiwgYmluZCh0aGlzLl9oYW5kbGVNb3VzZU92
ZXIsIHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hZGRFdmVudExpc3Rl
bmVyKCJtb3VzZW91dCIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VPdXQsIHRoaXMpLCBmYWxzZSk7
Ci0gICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRUcmFuc2l0
aW9uRW5kIiwgYmluZCh0aGlzLl9tb3ZlSW5EYXlzLCB0aGlzKSwgZmFsc2UpOworICAgIHRoaXMu
X2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9oYW5kbGVEYXlD
bGljay5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hZGRFdmVu
dExpc3RlbmVyKCJtb3VzZW92ZXIiLCB0aGlzLl9oYW5kbGVNb3VzZU92ZXIuYmluZCh0aGlzKSwg
ZmFsc2UpOworICAgIHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vv
dXQiLCB0aGlzLl9oYW5kbGVNb3VzZU91dC5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5f
ZGF5c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRUcmFuc2l0aW9uRW5kIiwgdGhp
cy5fbW92ZUluRGF5cy5iaW5kKHRoaXMpLCBmYWxzZSk7CiAgICAgdmFyIGNvbnRhaW5lciA9IGNy
ZWF0ZUVsZW1lbnQoInRyIiwgQ2xhc3NOYW1lcy5EYXlMYWJlbENvbnRhaW5lcik7CiAgICAgdmFy
IHdlZWtTdGFydERheSA9IGdsb2JhbC5wYXJhbXMud2Vla1N0YXJ0RGF5IHx8IDA7CiAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCA3OyBpKyspCkBAIC04MjAsOCArODYxLDggQEAgRGF5c1RhYmxlLnBy
b3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKG1haW4pIHsKICAgICBjb250YWluZXIgPSBjcmVh
dGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLkRheXNBcmVhQ29udGFpbmVyKTsKICAgICBjb250
YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZGF5c0NvbnRhaW5lcik7CiAgICAgY29udGFpbmVyLnRh
YkluZGV4ID0gMDsKLSAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJp
bmQodGhpcy5faGFuZGxlS2V5LCB0aGlzKSwgZmFsc2UpOwotICAgIG1haW4uYXBwZW5kQ2hpbGQo
Y29udGFpbmVyKTsKKyAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRo
aXMuX2hhbmRsZUtleS5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgZWxlbWVudC5hcHBlbmRDaGls
ZChjb250YWluZXIpOwogCiAgICAgY29udGFpbmVyLmZvY3VzKCk7CiB9OwpAQCAtODkyLDcgKzkz
Myw3IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoID0gZnVuY3Rpb24oeWVhciwg
bW9udGgpIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIGdsb2JhbC50b2RheS5kaXNhYmxlZCA9
ICFpc1ZhbGlkRGF0ZShwYXJzZURhdGVTdHJpbmcoKS5nZXRUaW1lKCkpOworICAgIHRoaXMucGlj
a2VyLnRvZGF5LmRpc2FibGVkID0gIWlzVmFsaWREYXRlKHBhcnNlRGF0ZVN0cmluZygpLmdldFRp
bWUoKSk7CiB9OwogCiAvKioKQEAgLTkwMCw3ICs5NDEsNyBAQCBEYXlzVGFibGUucHJvdG90eXBl
Ll9yZW5kZXJNb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CiAgKiBAcGFyYW0geyFudW1i
ZXJ9IG1vbnRoCiAgKi8KIERheXNUYWJsZS5wcm90b3R5cGUuX25hdmlnYXRlVG9Nb250aCA9IGZ1
bmN0aW9uKHllYXIsIG1vbnRoKSB7Ci0gICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIuc2V0
WWVhck1vbnRoKHllYXIsIG1vbnRoKTsKKyAgICB0aGlzLnBpY2tlci55ZWFyTW9udGhDb250cm9s
bGVyLnNldFllYXJNb250aCh5ZWFyLCBtb250aCk7CiAgICAgdGhpcy5fcmVuZGVyTW9udGgoeWVh
ciwgbW9udGgpOwogfTsKIApAQCAtMTAwOSw3ICsxMDUwLDcgQEAgRGF5c1RhYmxlLnByb3RvdHlw
ZS5fbWF5YmVTZXROZXh0TW9udGggPSBmdW5jdGlvbigpIHsKICAqLwogRGF5c1RhYmxlLnByb3Rv
dHlwZS5faGFuZGxlRGF5Q2xpY2sgPSBmdW5jdGlvbihldmVudCkgewogICAgIGlmIChldmVudC50
YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMuQXZhaWxhYmxlKSkKLSAgICAgICAg
c3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQuc3VibWl0VmFsdWUpOworICAgICAgICB0
aGlzLnBpY2tlci5zdWJtaXRWYWx1ZShldmVudC50YXJnZXQuZGF0YXNldC5zdWJtaXRWYWx1ZSk7
CiB9OwogCiAvKioKQEAgLTExMTAsNyArMTE1MSw3IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX2hh
bmRsZUtleSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgfSBlbHNlIGlmICh0aGlzLl9oYXNTZWxl
Y3Rpb24oKSAmJiBrZXkgPT0gIkVudGVyIikgewogICAgICAgICB2YXIgZGF5Tm9kZSA9IHRoaXMu
X2RheXNbeV1beF07CiAgICAgICAgIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhDbGFz
c05hbWVzLkF2YWlsYWJsZSkpIHsKLSAgICAgICAgICAgIHN1Ym1pdFZhbHVlKGRheU5vZGUuZGF0
YXNldC5zdWJtaXRWYWx1ZSk7CisgICAgICAgICAgICB0aGlzLnBpY2tlci5zdWJtaXRWYWx1ZShk
YXlOb2RlLmRhdGFzZXQuc3VibWl0VmFsdWUpOwogICAgICAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7CiAgICAgICAgIH0KIApAQCAtMTEzOSw1NSArMTE4MCw2IEBAIERheXNUYWJsZS5w
cm90b3R5cGUudXBkYXRlU2VsZWN0aW9uID0gZnVuY3Rpb24oZXZlbnQsIHgsIHkpIHsKICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1mdW5jdGlvbiBoYW5k
bGVUb2RheSgpIHsKLSAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7Ci0gICAgZ2xvYmFsLmRheXNU
YWJsZS5zZWxlY3REYXRlKGRhdGUpOwotICAgIHN1Ym1pdFZhbHVlKHNlcmlhbGl6ZURhdGUoZGF0
ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSk7Ci19Ci0K
LWZ1bmN0aW9uIGhhbmRsZUNsZWFyKCkgewotICAgIHN1Ym1pdFZhbHVlKCIiKTsKLX0KLQotLyoq
Ci0gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUKLSAqLwotZnVuY3Rpb24gc3VibWl0VmFsdWUodmFs
dWUpIHsKLSAgICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9w
dXAoMCwgdmFsdWUpOwotfQotCi1mdW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7Ci0gICAgd2luZG93
LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKC0xLCAiIik7Ci19Ci0K
LS8qKgotICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAqLwotZnVuY3Rpb24gaGFuZGxlR2xvYmFs
S2V5KGV2ZW50KSB7Ci0gICAgbWF5YmVVcGRhdGVGb2N1c1N0eWxlKCk7Ci0gICAgdmFyIGtleSA9
IGV2ZW50LmtleUlkZW50aWZpZXI7Ci0gICAgaWYgKGtleSA9PSAiVSswMDA5IikgewotICAgICAg
ICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZ2xvYmFs
Lmxhc3RGb2N1c2FibGVDb250cm9sKSB7Ci0gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRp
b24oKTsKLSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICBn
bG9iYWwuZmlyc3RGb2N1c2FibGVDb250cm9sLmZvY3VzKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
ZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9iYWwuZmlyc3RG
b2N1c2FibGVDb250cm9sKSB7Ci0gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsK
LSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICBnbG9iYWwu
bGFzdEZvY3VzYWJsZUNvbnRyb2wuZm9jdXMoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
a2V5ID09ICJVKzAwNEQiKSB7IC8vICdtJwotICAgICAgICBnbG9iYWwueWVhck1vbnRoQ29udHJv
bGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENvbnRyb2xsZXIu
UHJldmlvdXNNb250aCA6IFllYXJNb250aENvbnRyb2xsZXIuTmV4dE1vbnRoKTsKLSAgICB9IGVs
c2UgaWYgKGtleSA9PSAiVSswMDU5IikgeyAvLyAneScKLSAgICAgICAgZ2xvYmFsLnllYXJNb250
aENvbnRyb2xsZXIubW92ZVJlbGF0aXZlbHkoZXZlbnQuc2hpZnRLZXkgPyBZZWFyTW9udGhDb250
cm9sbGVyLlByZXZpb3VzWWVhciA6IFllYXJNb250aENvbnRyb2xsZXIuTmV4dFllYXIpOwotICAg
IH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNDQiKSB7IC8vICdkJwotICAgICAgICBnbG9iYWwueWVh
ck1vbnRoQ29udHJvbGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250
aENvbnRyb2xsZXIuUHJldmlvdXNUZW5ZZWFycyA6IFllYXJNb250aENvbnRyb2xsZXIuTmV4dFRl
blllYXJzKTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiVSswMDFCIikgLy8gRVNDCi0gICAgICAg
IGhhbmRsZUNhbmNlbCgpOwotfQotCiBmdW5jdGlvbiBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKSB7
CiAgICAgaWYgKGdsb2JhbC5oYWRLZXlFdmVudCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JTdWdnZXN0aW9uUGlj
a2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JTdWdnZXN0
aW9uUGlja2VyLmpzCmluZGV4IGQ0OGNiOTZlN2ZjMTY0NTI2ZDYyYzc1MWUyYmU2OTY0Njc2ZTBk
NDMuLjRkNzBkYWJmZGM2NGFjZmNmODRkZTBmMmFiOTRlMzIwNmUyMmZjMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NvbG9yU3VnZ2VzdGlvblBpY2tl
ci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jb2xvclN1Z2dl
c3Rpb25QaWNrZXIuanMKQEAgLTc0LDI5ICs3NCw4IEBAIGZ1bmN0aW9uIHZhbGlkYXRlQXJndW1l
bnRzKGFyZ3MpIHsKICAgICByZXR1cm4gbnVsbDsKIH0KIAotdmFyIEFjdGlvbnMgPSB7Ci0gICAg
Q2hvb3NlT3RoZXJDb2xvcjogLTIsCi0gICAgQ2FuY2VsOiAtMSwKLSAgICBTZXRWYWx1ZTogMAot
fTsKLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUKLSAqLwotZnVuY3Rpb24gc3VibWl0
VmFsdWUodmFsdWUpIHsKLSAgICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFu
ZENsb3NlUG9wdXAoQWN0aW9ucy5TZXRWYWx1ZSwgdmFsdWUpOwotfQotCi1mdW5jdGlvbiBoYW5k
bGVDYW5jZWwoKSB7Ci0gICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRD
bG9zZVBvcHVwKEFjdGlvbnMuQ2FuY2VsLCAiIik7Ci19Ci0KLWZ1bmN0aW9uIGNob29zZU90aGVy
Q29sb3IoKSB7Ci0gICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9z
ZVBvcHVwKEFjdGlvbnMuQ2hvb3NlT3RoZXJDb2xvciwgIiIpOwotfQotCiBmdW5jdGlvbiBDb2xv
clBpY2tlcihlbGVtZW50LCBjb25maWcpIHsKLSAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsK
KyAgICBQaWNrZXIuY2FsbCh0aGlzLCBlbGVtZW50LCBjb25maWcpOwogICAgIHRoaXMuX2NvbmZp
ZyA9IGNvbmZpZzsKICAgICBpZiAodGhpcy5fY29uZmlnLnZhbHVlcy5sZW5ndGggPT09IDApCiAg
ICAgICAgIHRoaXMuX2NvbmZpZy52YWx1ZXMgPSBEZWZhdWx0Q29sb3JQYWxldHRlOwpAQCAtMTA2
LDYgKzg1LDcgQEAgZnVuY3Rpb24gQ29sb3JQaWNrZXIoZWxlbWVudCwgY29uZmlnKSB7CiAgICAg
dGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBiaW5kKHRoaXMuX2hh
bmRsZU1vdXNlTW92ZSwgdGhpcykpOwogICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigibW91c2Vkb3duIiwgYmluZCh0aGlzLl9oYW5kbGVNb3VzZURvd24sIHRoaXMpKTsKIH0KK0Nv
bG9yUGlja2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGlja2VyLnByb3RvdHlwZSk7CiAK
IHZhciBTd2F0Y2hCb3JkZXJCb3hXaWR0aCA9IDI0OyAvLyBrZWVwIGluIHN5bmMgd2l0aCBDU1MK
IHZhciBTd2F0Y2hCb3JkZXJCb3hIZWlnaHQgPSAyNDsgLy8ga2VlcCBpbiBzeW5jIHdpdGggQ1NT
CkBAIC0xMzAsNyArMTEwLDcgQEAgQ29sb3JQaWNrZXIucHJvdG90eXBlLl9sYXlvdXQgPSBmdW5j
dGlvbigpIHsKICAgICBjb250YWluZXIuc3R5bGUubWF4SGVpZ2h0ID0gKFN3YXRjaEJvcmRlckJv
eEhlaWdodCAqIFN3YXRjaGVzTWF4Um93KSArICJweCI7CiAgICAgdGhpcy5fZWxlbWVudC5hcHBl
bmRDaGlsZChjb250YWluZXIpOwogICAgIHZhciBvdGhlckJ1dHRvbiA9IGNyZWF0ZUVsZW1lbnQo
ImJ1dHRvbiIsICJvdGhlci1jb2xvciIsIHRoaXMuX2NvbmZpZy5vdGhlckNvbG9yTGFiZWwpOwot
ICAgIG90aGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2hvb3NlT3RoZXJDb2xv
ciwgZmFsc2UpOworICAgIG90aGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhp
cy5jaG9vc2VPdGhlckNvbG9yLmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLl9lbGVtZW50
LmFwcGVuZENoaWxkKG90aGVyQnV0dG9uKTsKICAgICB0aGlzLl9jb250YWluZXIgPSBjb250YWlu
ZXI7CiAgICAgdGhpcy5fb3RoZXJCdXR0b24gPSBvdGhlckJ1dHRvbjsKQEAgLTE1OCw3ICsxMzgs
NyBAQCBDb2xvclBpY2tlci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRG93biA9IGZ1bmN0aW9uKGV2
ZW50KSB7CiBDb2xvclBpY2tlci5wcm90b3R5cGUuX2hhbmRsZUtleURvd24gPSBmdW5jdGlvbihl
dmVudCkgewogICAgIHZhciBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVyOwogICAgIGlmIChrZXkg
PT09ICJVKzAwMUIiKSAvLyBFU0MKLSAgICAgICAgaGFuZGxlQ2FuY2VsKCk7CisgICAgICAgIHRo
aXMuaGFuZGxlQ2FuY2VsKCk7CiAgICAgZWxzZSBpZiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0g
IlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSB7CiAgICAgICAgIHZhciBz
ZWxlY3RlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OwogICAgICAgICB2YXIgaW5k
ZXggPSAwOwpAQCAtMTk0LDcgKzE3NCw3IEBAIENvbG9yUGlja2VyLnByb3RvdHlwZS5faGFuZGxl
S2V5RG93biA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAKIENvbG9yUGlja2VyLnByb3RvdHlwZS5faGFu
ZGxlU3dhdGNoQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgewogICAgIGlmIChldmVudC50YXJnZXQu
Y2xhc3NMaXN0LmNvbnRhaW5zKCJjb2xvci1zd2F0Y2giKSkKLSAgICAgICAgc3VibWl0VmFsdWUo
ZXZlbnQudGFyZ2V0LmRhdGFzZXQudmFsdWUpOworICAgICAgICB0aGlzLnN1Ym1pdFZhbHVlKGV2
ZW50LnRhcmdldC5kYXRhc2V0LnZhbHVlKTsKIH07CiAKIGlmICh3aW5kb3cuZGlhbG9nQXJndW1l
bnRzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9w
aWNrZXJDb21tb24uanMgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9waWNr
ZXJDb21tb24uanMKaW5kZXggZGZiMjkxODE0OWU1YzljNmY1ODAxMjc2NWJkZDg1NzE1Yzc4NTNm
Yi4uYzY2YjQzNDI4M2ZiMWYxMjExNjNiMWVlYjQwYWE5Mzg2YzEwN2FkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvcGlja2VyQ29tbW9uLmpzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL3BpY2tlckNvbW1vbi5qcwpAQCAt
NzYsMyArNzYsMjYgQEAgZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyV2lkdGgoKSB7CiAgICAgfQogICAg
IHJldHVybiB3aW5kb3cuc2Nyb2xsYmFyV2lkdGg7CiB9CisKK2Z1bmN0aW9uIFBpY2tlcihlbGVt
ZW50LCBjb25maWcpIHsKKyAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudCB8fCBjcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICB0aGlzLl9jb25maWcgPSBjb25maWc7Cit9CisKK1BpY2tlci5BY3Rp
b25zID0geworICAgIFNldFZhbHVlOiAwLAorICAgIENhbmNlbDogLTEsCisgICAgQ2hvb3NlT3Ro
ZXJDb2xvcjogLTIKK307CisKK1BpY2tlci5wcm90b3R5cGUuc3VibWl0VmFsdWUgPSBmdW5jdGlv
bih2YWx1ZSkgeworICAgIHdpbmRvdy5wYWdlUG9wdXBDb250cm9sbGVyLnNldFZhbHVlQW5kQ2xv
c2VQb3B1cChQaWNrZXIuQWN0aW9ucy5TZXRWYWx1ZSwgdmFsdWUpOworfQorCitQaWNrZXIucHJv
dG90eXBlLmhhbmRsZUNhbmNlbCA9IGZ1bmN0aW9uKCkgeworICAgIHdpbmRvdy5wYWdlUG9wdXBD
b250cm9sbGVyLnNldFZhbHVlQW5kQ2xvc2VQb3B1cChQaWNrZXIuQWN0aW9ucy5DYW5jZWwsICIi
KTsKK30KKworUGlja2VyLnByb3RvdHlwZS5jaG9vc2VPdGhlckNvbG9yID0gZnVuY3Rpb24oKSB7
CisgICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKFBp
Y2tlci5BY3Rpb25zLkNob29zZU90aGVyQ29sb3IsICIiKTsKK30KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3Y2VmMjk3MDVi
NzMzYTFkYWY3NjRmM2I4ZDllOWQ3ZTI3ZmM2Mzk0Li5jZGY3MGZhMGQ2ODY3MzUwZGQ1OThkZDM0
MmJiMjQ3NmM2MzBhNzY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDktMDUgIEtlaXNo
aSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVmYWN0b3IgQ2FsZW5k
YXJQaWNrZXIgdG8gbm90IHVzZSBnbG9iYWwgdmFyaWFibGVzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU4MzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZm9ybXMvZGF0ZS9jYWxlbmRhci1w
aWNrZXItYXBwZWFyYW5jZS1wcmUtMTAwLmh0bWw6CisKIDIwMTItMDktMDQgIFNlcmdleSBHbGF6
dW5vdiAgPHNlcmcuZ2xhenVub3ZAZ21haWwuY29tPgogCiAgICAgICAgIEZyYW1lIGVsZW1lbnQg
ZG9lc24ndCBhbHdheXMgdW5sb2FkIGl0cyBjaGlsZCBmcmFtZS4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvZGF0ZS9jYWxlbmRhci1waWNrZXItYXBwZWFyYW5jZS1wcmUtMTAw
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2RhdGUvY2FsZW5kYXItcGlja2VyLWFwcGVh
cmFuY2UtcHJlLTEwMC5odG1sCmluZGV4IGQyYTE0NmIxZDUzNzNkNDMyMmE4OTViYmRjNTczMGMx
OTUxYWU3NjQuLjgyZDRlMjZkZDM2ZmI5ODU5YjgyNTZkMTI3ZjJkY2YyOWFjZTMyYTEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZGF0ZS9jYWxlbmRhci1waWNrZXItYXBwZWFy
YW5jZS1wcmUtMTAwLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9kYXRlL2NhbGVu
ZGFyLXBpY2tlci1hcHBlYXJhbmNlLXByZS0xMDAuaHRtbApAQCAtOCwxNiArOCwxNyBAQAogPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CiA8aW5wdXQgdHlwZT1kYXRlIGlkPWRhdGUgdmFsdWU9IjAw
MDItMDItMDIiPgogPHNjcmlwdD4KLWZ1bmN0aW9uIHNlbmRLZXkoaW5wdXQsIGtleU5hbWUpIHsK
K2Z1bmN0aW9uIHNlbmRLZXkoZWxlbWVudCwga2V5TmFtZSkgewogICAgIHZhciBldmVudCA9IGRv
Y3VtZW50LmNyZWF0ZUV2ZW50KCdLZXlib2FyZEV2ZW50Jyk7CiAgICAgZXZlbnQuaW5pdEtleWJv
YXJkRXZlbnQoJ2tleWRvd24nLCB0cnVlLCB0cnVlLCBkb2N1bWVudC5kZWZhdWx0Vmlldywga2V5
TmFtZSk7Ci0gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgZWxlbWVudC5kaXNw
YXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKICAgICBwaWNr
ZXJXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZmluaXNoVGVzdCk7Ci0gICAg
c2VuZEtleShwaWNrZXJXaW5kb3cuZ2xvYmFsLmRheXNUYWJsZS5fZGF5c0NvbnRhaW5lciwgJ1Jp
Z2h0Jyk7Ci0gICAgc2VuZEtleShwaWNrZXJXaW5kb3cuZ2xvYmFsLmRheXNUYWJsZS5fZGF5c0Nv
bnRhaW5lciwgJ0VudGVyJyk7CisgICAgdmFyIGRheXNDb250YWluZXIgPSBwaWNrZXJXaW5kb3cu
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZGF5cy1hcmVhIilbMF07CisgICAgc2Vu
ZEtleShkYXlzQ29udGFpbmVyLCAnUmlnaHQnKTsKKyAgICBzZW5kS2V5KGRheXNDb250YWluZXIs
ICdFbnRlcicpOwogICAgIHNob3VsZEJlKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZSIp
LnZhbHVlJywgJyIwMDAyLTAyLTAzIicpOwogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZp
bmlzaEpTVGVzdCgpOyB9LCAwKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162215</attachid>
            <date>2012-09-05 04:29:34 -0700</date>
            <delta_ts>2012-09-05 21:25:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95830-20120905202914.patch</filename>
            <type>text/plain</type>
            <size>28372</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWNmNTQ4N2FjNTYyMmY3
ZTAzY2RmNjAzNDdiYjI4NDJkNTYwZjgxZi4uODgwYzEyYmJhMGZhNTJiNDBlMmI3NzdlNmJhNGM1
OGQwNTg4NjgzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA5LTA1ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlZmFjdG9yIENhbGVu
ZGFyUGlja2VyIHRvIG5vdCB1c2UgZ2xvYmFsIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIENhbGVuZGFyUGlja2VyIHNv
IHdlIGNhbiBoYXZlIG11bHRpcGxlIFBpY2tlcnMgaW4gb25lIHBhZ2UKKyAgICAgICAgcG9wdXAg
aW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGJlaGF2aW9yIGNoYW5n
ZS4KKworICAgICAgICAqIFJlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzOgor
ICAgICAgICAoaW5pdGlhbGl6ZSk6CisgICAgICAgIChyZXNldE1haW4pOgorICAgICAgICAob3Bl
bkNhbGVuZGFyUGlja2VyKToKKyAgICAgICAgKENhbGVuZGFyUGlja2VyKToKKyAgICAgICAgKENh
bGVuZGFyUGlja2VyLnByb3RvdHlwZS5fbGF5b3V0KToKKyAgICAgICAgKENhbGVuZGFyUGlja2Vy
LnByb3RvdHlwZS5oYW5kbGVUb2RheSk6CisgICAgICAgIChDYWxlbmRhclBpY2tlci5wcm90b3R5
cGUuaGFuZGxlQ2xlYXIpOgorICAgICAgICAoQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLmZpeFdp
bmRvd1NpemUpOgorICAgICAgICAoQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLl9sYXlvdXRCdXR0
b25zKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIpOgorICAgICAgICAoWWVhck1vbnRo
Q29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8pOgorICAgICAgICAoWWVhck1vbnRoQ29udHJv
bGxlci5wcm90b3R5cGUuX3JlZHJhdyk6CisgICAgICAgIChZZWFyTW9udGhDb250cm9sbGVyLnBy
b3RvdHlwZS5faGFuZGxlWWVhck1vbnRoQ2hhbmdlKToKKyAgICAgICAgKFllYXJNb250aENvbnRy
b2xsZXIucHJvdG90eXBlLm1vdmVSZWxhdGl2ZWx5KToKKyAgICAgICAgKERheXNUYWJsZSk6Cisg
ICAgICAgIChEYXlzVGFibGUucHJvdG90eXBlLmF0dGFjaFRvKToKKyAgICAgICAgKENhbGVuZGFy
UGlja2VyLnByb3RvdHlwZS5zdGVwTWlzbWF0Y2gpOgorICAgICAgICAoQ2FsZW5kYXJQaWNrZXIu
cHJvdG90eXBlLm91dE9mUmFuZ2UpOgorICAgICAgICAoQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBl
LmlzVmFsaWREYXRlKToKKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRo
KToKKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX25hdmlnYXRlVG9Nb250aCk6CisgICAg
ICAgIChEYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldFByZXZpb3VzTW9udGgpOgorICAgICAg
ICAoRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXROZXh0TW9udGgpOgorICAgICAgICAoRGF5
c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlRGF5Q2xpY2spOgorICAgICAgICAoRGF5c1RhYmxlLnBy
b3RvdHlwZS5faGFuZGxlS2V5KToKKyAgICAgICAgKENhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5f
aGFuZGxlQm9keUtleURvd24pOgorICAgICAgICAqIFJlc291cmNlcy9wYWdlcG9wdXBzL2NvbG9y
U3VnZ2VzdGlvblBpY2tlci5qczoKKyAgICAgICAgKENvbG9yUGlja2VyKToKKyAgICAgICAgKENv
bG9yUGlja2VyLnByb3RvdHlwZS5fbGF5b3V0KToKKyAgICAgICAgKENvbG9yUGlja2VyLnByb3Rv
dHlwZS5faGFuZGxlS2V5RG93bik6CisgICAgICAgIChDb2xvclBpY2tlci5wcm90b3R5cGUuX2hh
bmRsZVN3YXRjaENsaWNrKToKKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBvcHVwcy9waWNrZXJD
b21tb24uanM6CisgICAgICAgIChQaWNrZXIpOgorICAgICAgICAoUGlja2VyLnByb3RvdHlwZS5z
dWJtaXRWYWx1ZSk6CisgICAgICAgIChQaWNrZXIucHJvdG90eXBlLmhhbmRsZUNhbmNlbCk6Cisg
ICAgICAgIChQaWNrZXIucHJvdG90eXBlLmNob29zZU90aGVyQ29sb3IpOgorCiAyMDEyLTA5LTA1
ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxk
IGZpeCBmb3IgV2luQ0UgYWZ0ZXIgcjEyNzUyNS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKaW5kZXggOTI2Zjc2ZWQxYjc4
ZGJmY2I4NWJkZTM2M2RlMjU4YTc2NjYzMDc3NC4uYTU4Mzk1YTEwNDQ4MjE5MDI1ODhlNzg2MTJl
NjE5ZWY0OGIwYzhmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vw
b3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3Bh
Z2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKQEAgLTczLDcgKzczLDkgQEAgdmFyIENsYXNzTmFt
ZXMgPSB7CiB2YXIgZ2xvYmFsID0gewogICAgIGFyZ3VtZW50c1JlY2VpdmVkOiBmYWxzZSwKICAg
ICBoYWRLZXlFdmVudDogZmFsc2UsCi0gICAgcGFyYW1zOiBudWxsCisgICAgcGFyYW1zOiBudWxs
LAorICAgIG1pbmltdW1EYXRlOiBuZXcgRGF0ZSgtNjIxMzU1OTY4MDAwMDAuMCksCisgICAgbWF4
aW11bURhdGU6IG5ldyBEYXRlKDg2NDAwMDAwMDAwMDAwMDAuMCkKIH07CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTI3NiwyMyArMjc4LDczIEBAIGZ1bmN0aW9uIGluaXRpYWxpemUoYXJncykgewogICAgICAg
ICByZXNpemVXaW5kb3cobWFpbi5vZmZzZXRXaWR0aCwgbWFpbi5vZmZzZXRIZWlnaHQpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBhcmdzOwotICAgICAgICBjaGVja0xp
bWl0cygpOwotICAgICAgICBsYXlvdXQoKTsKKyAgICAgICAgb3BlbkNhbGVuZGFyUGlja2VyKCk7
CisgICAgfQorfQogCi0gICAgICAgIHZhciBpbml0aWFsRGF0ZSA9IHBhcnNlRGF0ZVN0cmluZyhh
cmdzLmN1cnJlbnRWYWx1ZSk7Ci0gICAgICAgIGlmIChpbml0aWFsRGF0ZSA8IGdsb2JhbC5taW5p
bXVtRGF0ZSkKLSAgICAgICAgICAgIGluaXRpYWxEYXRlID0gZ2xvYmFsLm1pbmltdW1EYXRlOwot
ICAgICAgICBlbHNlIGlmIChpbml0aWFsRGF0ZSA+IGdsb2JhbC5tYXhpbXVtRGF0ZSkKLSAgICAg
ICAgICAgIGluaXRpYWxEYXRlID0gZ2xvYmFsLm1heGltdW1EYXRlOwotICAgICAgICBnbG9iYWwu
ZGF5c1RhYmxlLnNlbGVjdERhdGUoaW5pdGlhbERhdGUpOworZnVuY3Rpb24gcmVzZXRNYWluKCkg
eworICAgIHZhciBtYWluID0gJCgibWFpbiIpOworICAgIG1haW4uaW5uZXJIVE1MID0gIiI7Cisg
ICAgbWFpbi5jbGFzc05hbWUgPSAiIjsKK307CiAKLSAgICAgICAgc2V0VGltZW91dChmaXhXaW5k
b3dTaXplLCAwKTsKLSAgICB9CitmdW5jdGlvbiBvcGVuQ2FsZW5kYXJQaWNrZXIoKSB7CisgICAg
cmVzZXRNYWluKCk7CisgICAgbmV3IENhbGVuZGFyUGlja2VyKCQoIm1haW4iKSwgZ2xvYmFsLnBh
cmFtcyk7Cit9OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHs/RWxlbWVudH0g
ZWxlbWVudAorICogQHBhcmFtIHshT2JqZWN0fSBjb25maWcKKyAqLworZnVuY3Rpb24gQ2FsZW5k
YXJQaWNrZXIoZWxlbWVudCwgY29uZmlnKSB7CisgICAgUGlja2VyLmNhbGwodGhpcywgZWxlbWVu
dCwgY29uZmlnKTsKKyAgICAvLyBXZSBhc3N1bWUgdGhpcy5fY29uZmlnLm1pbiBpcyBhIHZhbGlk
IGRhdGUuCisgICAgdGhpcy5taW5pbXVtRGF0ZSA9ICh0eXBlb2YgdGhpcy5fY29uZmlnLm1pbiAh
PT0gInVuZGVmaW5lZCIpID8gcGFyc2VEYXRlU3RyaW5nKHRoaXMuX2NvbmZpZy5taW4pIDogQ2Fs
ZW5kYXJQaWNrZXIuTWluaW11bVBvc3NpYmxlRGF0ZTsKKyAgICAvLyBXZSBhc3N1bWUgdGhpcy5f
Y29uZmlnLm1heCBpcyBhIHZhbGlkIGRhdGUuCisgICAgdGhpcy5tYXhpbXVtRGF0ZSA9ICh0eXBl
b2YgdGhpcy5fY29uZmlnLm1heCAhPT0gInVuZGVmaW5lZCIpID8gcGFyc2VEYXRlU3RyaW5nKHRo
aXMuX2NvbmZpZy5tYXgpIDogQ2FsZW5kYXJQaWNrZXIuTWF4aW11bVBvc3NpYmxlRGF0ZTsKKyAg
ICB0aGlzLnN0ZXAgPSAodHlwZW9mIHRoaXMuX2NvbmZpZy5zdGVwICE9PSB1bmRlZmluZWQpID8g
dGhpcy5fY29uZmlnLnN0ZXAgKiBDYWxlbmRhclBpY2tlci5CYXNlU3RlcCA6IENhbGVuZGFyUGlj
a2VyLkJhc2VTdGVwOworICAgIHRoaXMueWVhck1vbnRoQ29udHJvbGxlciA9IG5ldyBZZWFyTW9u
dGhDb250cm9sbGVyKHRoaXMpOworICAgIHRoaXMuZGF5c1RhYmxlID0gbmV3IERheXNUYWJsZSh0
aGlzKTsKKyAgICB0aGlzLl9sYXlvdXQoKTsKKyAgICB2YXIgaW5pdGlhbERhdGUgPSBwYXJzZURh
dGVTdHJpbmcodGhpcy5fY29uZmlnLmN1cnJlbnRWYWx1ZSk7CisgICAgaWYgKGluaXRpYWxEYXRl
IDwgdGhpcy5taW5pbXVtRGF0ZSkKKyAgICAgICAgaW5pdGlhbERhdGUgPSB0aGlzLm1pbmltdW1E
YXRlOworICAgIGVsc2UgaWYgKGluaXRpYWxEYXRlID4gdGhpcy5tYXhpbXVtRGF0ZSkKKyAgICAg
ICAgaW5pdGlhbERhdGUgPSB0aGlzLm1heGltdW1EYXRlOworICAgIHRoaXMuZGF5c1RhYmxlLnNl
bGVjdERhdGUoaW5pdGlhbERhdGUpOworICAgIHRoaXMuZml4V2luZG93U2l6ZSgpOworICAgIGRv
Y3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxl
Qm9keUtleURvd24sIHRoaXMpLCBmYWxzZSk7CiB9CitDYWxlbmRhclBpY2tlci5wcm90b3R5cGUg
PSBPYmplY3QuY3JlYXRlKFBpY2tlci5wcm90b3R5cGUpOworCisvLyBIYXJkIGxpbWl0cyBvZiB0
eXBlPWRhdGUuIFNlZSBXZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmguCitDYWxlbmRh
clBpY2tlci5NaW5pbXVtUG9zc2libGVEYXRlID0gbmV3IERhdGUoLTYyMTM1NTk2ODAwMDAwLjAp
OworQ2FsZW5kYXJQaWNrZXIuTWF4aW11bVBvc3NpYmxlRGF0ZSA9IG5ldyBEYXRlKDg2NDAwMDAw
MDAwMDAwMDAuMCk7CisvLyBTZWUgV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwLgorQ2Fs
ZW5kYXJQaWNrZXIuQmFzZVN0ZXAgPSA4NjQwMDAwMDsKKworQ2FsZW5kYXJQaWNrZXIucHJvdG90
eXBlLl9sYXlvdXQgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpcmVj
dGlvbiA9IGdsb2JhbC5wYXJhbXMuaXNSVEwgPyAicnRsIiA6ICJsdHIiOworICAgIHRoaXMueWVh
ck1vbnRoQ29udHJvbGxlci5hdHRhY2hUbyh0aGlzLl9lbGVtZW50KTsKKyAgICB0aGlzLmRheXNU
YWJsZS5hdHRhY2hUbyh0aGlzLl9lbGVtZW50KTsKKyAgICB0aGlzLl9sYXlvdXRCdXR0b25zKCk7
Cit9OworCitDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuaGFuZGxlVG9kYXkgPSBmdW5jdGlvbigp
IHsKKyAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgdGhpcy5kYXlzVGFibGUuc2VsZWN0
RGF0ZShkYXRlKTsKKyAgICB0aGlzLnN1Ym1pdFZhbHVlKHNlcmlhbGl6ZURhdGUoZGF0ZS5nZXRG
dWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSk7Cit9OworCitDYWxl
bmRhclBpY2tlci5wcm90b3R5cGUuaGFuZGxlQ2xlYXIgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
LnN1Ym1pdFZhbHVlKCIiKTsKK307CiAKLWZ1bmN0aW9uIGZpeFdpbmRvd1NpemUoKSB7Ci0gICAg
dmFyIHllYXJNb250aFJpZ2h0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b25SaWdodClbMF07Ci0gICAgdmFyIGRheXNBcmVh
RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5EYXlz
QXJlYSlbMF07CitDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuZml4V2luZG93U2l6ZSA9IGZ1bmN0
aW9uKCkgeworICAgIHZhciB5ZWFyTW9udGhSaWdodEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50Lmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b25SaWdodClbMF07
CisgICAgdmFyIGRheXNBcmVhRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZShDbGFzc05hbWVzLkRheXNBcmVhKVswXTsKICAgICB2YXIgaGVhZGVycyA9IGRheXNB
cmVhRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENsYXNzTmFtZXMuRGF5TGFiZWwpOwog
ICAgIHZhciBtYXhDZWxsV2lkdGggPSAwOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVy
cy5sZW5ndGg7ICsraSkgewpAQCAtMzAwLDk3ICszNTIsNTcgQEAgZnVuY3Rpb24gZml4V2luZG93
U2l6ZSgpIHsKICAgICAgICAgICAgIG1heENlbGxXaWR0aCA9IGhlYWRlcnNbaV0ub2Zmc2V0V2lk
dGg7CiAgICAgfQogICAgIHZhciBEYXlzQXJlYUNvbnRhaW5lckJvcmRlciA9IDE7Ci0gICAgdmFy
IG1haW4gPSAkKCJtYWluIik7CiAgICAgdmFyIHllYXJNb250aEVuZDsKICAgICB2YXIgZGF5c0Fy
ZWFFbmQ7CiAgICAgaWYgKGdsb2JhbC5wYXJhbXMuaXNSVEwpIHsKLSAgICAgICAgdmFyIHN0YXJ0
T2Zmc2V0ID0gbWFpbi5vZmZzZXRMZWZ0ICsgbWFpbi5vZmZzZXRXaWR0aDsKKyAgICAgICAgdmFy
IHN0YXJ0T2Zmc2V0ID0gdGhpcy5fZWxlbWVudC5vZmZzZXRMZWZ0ICsgdGhpcy5fZWxlbWVudC5v
ZmZzZXRXaWR0aDsKICAgICAgICAgeWVhck1vbnRoRW5kID0gc3RhcnRPZmZzZXQgLSB5ZWFyTW9u
dGhSaWdodEVsZW1lbnQub2Zmc2V0TGVmdDsKICAgICAgICAgZGF5c0FyZWFFbmQgPSBzdGFydE9m
ZnNldCAtIChkYXlzQXJlYUVsZW1lbnQub2Zmc2V0TGVmdCArIGRheXNBcmVhRWxlbWVudC5vZmZz
ZXRXaWR0aCkgKyBtYXhDZWxsV2lkdGggKiA3ICsgRGF5c0FyZWFDb250YWluZXJCb3JkZXI7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgeWVhck1vbnRoRW5kID0geWVhck1vbnRoUmlnaHRFbGVtZW50
Lm9mZnNldExlZnQgKyB5ZWFyTW9udGhSaWdodEVsZW1lbnQub2Zmc2V0V2lkdGg7CiAgICAgICAg
IGRheXNBcmVhRW5kID0gZGF5c0FyZWFFbGVtZW50Lm9mZnNldExlZnQgKyBtYXhDZWxsV2lkdGgg
KiA3ICsgRGF5c0FyZWFDb250YWluZXJCb3JkZXI7CiAgICAgfQotCiAgICAgdmFyIG1heEVuZCA9
IE1hdGgubWF4KHllYXJNb250aEVuZCwgZGF5c0FyZWFFbmQpOwotICAgIHZhciBNYWluUGFkZGlu
ZyA9IDY7CisgICAgdmFyIE1haW5QYWRkaW5nID0gNjsgLy8gVE9ETzogRml4IG5hbWUuCiAgICAg
dmFyIE1haW5Cb3JkZXIgPSAxOwogICAgIHZhciBkZXNpcmVkQm9keVdpZHRoID0gbWF4RW5kICsg
TWFpblBhZGRpbmcgKyBNYWluQm9yZGVyOwogCi0gICAgdmFyIG1haW5IZWlnaHQgPSBtYWluLm9m
ZnNldEhlaWdodDsKLSAgICBtYWluLnN0eWxlLndpZHRoID0gImF1dG8iOworICAgIHZhciBlbGVt
ZW50SGVpZ2h0ID0gdGhpcy5fZWxlbWVudC5vZmZzZXRIZWlnaHQ7CisgICAgdGhpcy5fZWxlbWVu
dC5zdHlsZS53aWR0aCA9ICJhdXRvIjsKICAgICBkYXlzQXJlYUVsZW1lbnQuc3R5bGUud2lkdGgg
PSAiMTAwJSI7CiAgICAgZGF5c0FyZWFFbGVtZW50LnN0eWxlLnRhYmxlTGF5b3V0ID0gImZpeGVk
IjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENsYXNzTmFtZXMuWWVhck1v
bnRoVXBwZXIpWzBdLnN0eWxlLmRpc3BsYXkgPSAiLXdlYmtpdC1ib3giOwotICAgIGRvY3VtZW50
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5Nb250aFNlbGVjdG9yQm94KVswXS5z
dHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICByZXNpemVXaW5kb3coZGVzaXJlZEJvZHlXaWR0
aCwgbWFpbkhlaWdodCk7Ci19Ci0KLWZ1bmN0aW9uIGNoZWNrTGltaXRzKCkgewotICAgIC8vIEhh
cmQgbGltaXRzIG9mIHR5cGU9ZGF0ZS4gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVu
dHMuaC4KLSAgICBnbG9iYWwubWluaW11bURhdGUgPSBuZXcgRGF0ZSgtNjIxMzU1OTY4MDAwMDAu
MCk7Ci0gICAgZ2xvYmFsLm1heGltdW1EYXRlID0gbmV3IERhdGUoODY0MDAwMDAwMDAwMDAwMC4w
KTsKLSAgICAvLyBTZWUgV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwLgotICAgIGdsb2Jh
bC5zdGVwID0gODY0MDAwMDA7Ci0KLSAgICBpZiAoZ2xvYmFsLnBhcmFtcy5taW4pIHsKLSAgICAg
ICAgLy8gV2UgYXNzdW1lIHBhcmFtcy5taW4gaXMgYSB2YWxpZCBkYXRlLgotICAgICAgICBnbG9i
YWwubWluaW11bURhdGUgPSBwYXJzZURhdGVTdHJpbmcoZ2xvYmFsLnBhcmFtcy5taW4pOwotICAg
IH0KLSAgICBpZiAoZ2xvYmFsLnBhcmFtcy5tYXgpIHsKLSAgICAgICAgLy8gV2UgYXNzdW1lIHBh
cmFtcy5tYXggaXMgYSB2YWxpZCBkYXRlLgotICAgICAgICBnbG9iYWwubWF4aW11bURhdGUgPSBw
YXJzZURhdGVTdHJpbmcoZ2xvYmFsLnBhcmFtcy5tYXgpOwotICAgIH0KLSAgICBpZiAoZ2xvYmFs
LnBhcmFtcy5zdGVwKQotICAgICAgICBnbG9iYWwuc3RlcCAqPSBnbG9iYWwucGFyYW1zLnN0ZXA7
Ci19Ci0KLWZ1bmN0aW9uIGxheW91dCgpIHsKLSAgICBpZiAoZ2xvYmFsLnBhcmFtcy5pc1JUTCkK
LSAgICAgICAgZG9jdW1lbnQuYm9keS5kaXIgPSAicnRsIjsKLSAgICBlbHNlCi0gICAgICAgIGRv
Y3VtZW50LmJvZHkuZGlyID0gImx0ciI7Ci0gICAgdmFyIG1haW4gPSAkKCJtYWluIik7Ci0gICAg
dmFyIHBhcmFtcyA9IGdsb2JhbC5wYXJhbXM7Ci0gICAgbWFpbi5yZW1vdmVDaGlsZChtYWluLmZp
cnN0Q2hpbGQpOwotICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIs
IGhhbmRsZUdsb2JhbEtleSwgZmFsc2UpOwotCi0gICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xs
ZXIgPSBuZXcgWWVhck1vbnRoQ29udHJvbGxlcigpOwotICAgIGdsb2JhbC55ZWFyTW9udGhDb250
cm9sbGVyLmF0dGFjaFRvKG1haW4pOwotICAgIGdsb2JhbC5kYXlzVGFibGUgPSBuZXcgRGF5c1Rh
YmxlKCk7Ci0gICAgZ2xvYmFsLmRheXNUYWJsZS5hdHRhY2hUbyhtYWluKTsKLSAgICBsYXlvdXRC
dXR0b25zKG1haW4pOwotfQorICAgIHRoaXMuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZShDbGFzc05hbWVzLlllYXJNb250aFVwcGVyKVswXS5zdHlsZS5kaXNwbGF5ID0gIi13ZWJraXQt
Ym94IjsKKyAgICB0aGlzLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1l
cy5Nb250aFNlbGVjdG9yQm94KVswXS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICByZXNp
emVXaW5kb3coZGVzaXJlZEJvZHlXaWR0aCwgZWxlbWVudEhlaWdodCk7Cit9OwogCi0vKioKLSAq
IEBwYXJhbSB7RWxlbWVudH0gbWFpbgotICovCi1mdW5jdGlvbiBsYXlvdXRCdXR0b25zKG1haW4p
IHsKK0NhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5fbGF5b3V0QnV0dG9ucyA9IGZ1bmN0aW9uKCkg
ewogICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLlRv
ZGF5Q2xlYXJBcmVhKTsKLSAgICBnbG9iYWwudG9kYXkgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIs
IENsYXNzTmFtZXMuVG9kYXlCdXR0b24pOwotICAgIGdsb2JhbC50b2RheS50eXBlID0gImJ1dHRv
biI7Ci0gICAgZ2xvYmFsLnRvZGF5LnZhbHVlID0gZ2xvYmFsLnBhcmFtcy50b2RheUxhYmVsOwot
ICAgIGdsb2JhbC50b2RheS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGhhbmRsZVRvZGF5LCBm
YWxzZSk7Ci0gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGdsb2JhbC50b2RheSk7Ci0gICAgZ2xv
YmFsLmNsZWFyID0gbnVsbDsKLSAgICBpZiAoIWdsb2JhbC5wYXJhbXMucmVxdWlyZWQpIHsKLSAg
ICAgICAgZ2xvYmFsLmNsZWFyID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLkNs
ZWFyQnV0dG9uKTsKLSAgICAgICAgZ2xvYmFsLmNsZWFyLnR5cGUgPSAiYnV0dG9uIjsKLSAgICAg
ICAgZ2xvYmFsLmNsZWFyLnZhbHVlID0gZ2xvYmFsLnBhcmFtcy5jbGVhckxhYmVsOwotICAgICAg
ICBnbG9iYWwuY2xlYXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBoYW5kbGVDbGVhciwgZmFs
c2UpOwotICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZ2xvYmFsLmNsZWFyKTsKKyAgICB0
aGlzLnRvZGF5ID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlRvZGF5QnV0dG9u
KTsKKyAgICB0aGlzLnRvZGF5LnR5cGUgPSAiYnV0dG9uIjsKKyAgICB0aGlzLnRvZGF5LnZhbHVl
ID0gdGhpcy5fY29uZmlnLnRvZGF5TGFiZWw7CisgICAgdGhpcy50b2RheS5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIGJpbmQodGhpcy5oYW5kbGVUb2RheSwgdGhpcyksIGZhbHNlKTsKKyAgICBj
b250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50b2RheSk7CisgICAgdGhpcy5jbGVhciA9IG51bGw7
CisgICAgaWYgKCF0aGlzLl9jb25maWcucmVxdWlyZWQpIHsKKyAgICAgICAgdGhpcy5jbGVhciA9
IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5DbGVhckJ1dHRvbik7CisgICAgICAg
IHRoaXMuY2xlYXIudHlwZSA9ICJidXR0b24iOworICAgICAgICB0aGlzLmNsZWFyLnZhbHVlID0g
dGhpcy5fY29uZmlnLmNsZWFyTGFiZWw7CisgICAgICAgIHRoaXMuY2xlYXIuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuaGFuZGxlQ2xlYXIsIHRoaXMpLCBmYWxzZSk7CisgICAg
ICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNsZWFyKTsKICAgICB9Ci0gICAgbWFpbi5h
cHBlbmRDaGlsZChjb250YWluZXIpOworICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoY29u
dGFpbmVyKTsKIAotICAgIGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJvbCA9IGdsb2JhbC5jbGVh
ciB8fCBnbG9iYWwudG9kYXk7Ci19CisgICAgdGhpcy5sYXN0Rm9jdXNhYmxlQ29udHJvbCA9IHRo
aXMuY2xlYXIgfHwgdGhpcy50b2RheTsKK307CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLyoqCiAgKiBAY29u
c3RydWN0b3IKICAqLwotZnVuY3Rpb24gWWVhck1vbnRoQ29udHJvbGxlcigpIHsKK2Z1bmN0aW9u
IFllYXJNb250aENvbnRyb2xsZXIocGlja2VyKSB7CisgICAgdGhpcy5waWNrZXIgPSBwaWNrZXI7
CiAgICAgLyoqCiAgICAgICogQHR5cGUgeyFudW1iZXJ9CiAgICAgICovCkBAIC00MDIsOSArNDE0
LDkgQEAgZnVuY3Rpb24gWWVhck1vbnRoQ29udHJvbGxlcigpIHsKIH0KIAogLyoqCi0gKiBAcGFy
YW0geyFFbGVtZW50fSBtYWluCisgKiBAcGFyYW0geyFFbGVtZW50fSBlbGVtZW50CiAgKi8KLVll
YXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmF0dGFjaFRvID0gZnVuY3Rpb24obWFpbikgewor
WWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihlbGVtZW50
KSB7CiAgICAgdmFyIG91dGVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NO
YW1lcy5ZZWFyTW9udGhBcmVhKTsKIAogICAgIHZhciBpbm5lckNvbnRhaW5lciA9IGNyZWF0ZUVs
ZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuWWVhck1vbnRoVXBwZXIpOwpAQCAtNDI5LDEzICs0NDEs
MTMgQEAgWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbiht
YWluKSB7CiAgICAgYm94LmFwcGVuZENoaWxkKHRoaXMuX21vbnRoKTsKIAogICAgIHRoaXMuX2F0
dGFjaFJpZ2h0QnV0dG9uc1RvKGlubmVyQ29udGFpbmVyKTsKLSAgICBtYWluLmFwcGVuZENoaWxk
KG91dGVyQ29udGFpbmVyKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKG91dGVyQ29udGFpbmVy
KTsKIAogICAgIHRoaXMuX3dhbGwgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1v
bnRoU2VsZWN0b3JXYWxsKTsKICAgICB0aGlzLl93YWxsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr
IiwgYmluZCh0aGlzLl9jbG9zZVBvcHVwLCB0aGlzKSwgZmFsc2UpOwotICAgIG1haW4uYXBwZW5k
Q2hpbGQodGhpcy5fd2FsbCk7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl93YWxsKTsK
IAotICAgIHZhciBtYXhpbXVtWWVhciA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVh
cigpOworICAgIHZhciBtYXhpbXVtWWVhciA9IHRoaXMucGlja2VyLm1heGltdW1EYXRlLmdldFVU
Q0Z1bGxZZWFyKCk7CiAgICAgdmFyIG1heFdpZHRoID0gMDsKICAgICBmb3IgKHZhciBtID0gMDsg
bSA8IDEyOyArK20pIHsKICAgICAgICAgdGhpcy5fbW9udGgudGV4dENvbnRlbnQgPSBmb3JtYXRZ
ZWFyTW9udGgobWF4aW11bVllYXIsIG0pOwpAQCAtNTM0LDggKzU0Niw4IEBAIFllYXJNb250aENv
bnRyb2xsZXIucHJvdG90eXBlLnNldFllYXJNb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7
CiB9OwogCiBZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5fcmVkcmF3ID0gZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIG1pbiA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICog
MTIgKyBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDTW9udGgoKTsKLSAgICB2YXIgbWF4ID0gZ2xv
YmFsLm1heGltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGdsb2JhbC5tYXhpbXVtRGF0
ZS5nZXRVVENNb250aCgpOworICAgIHZhciBtaW4gPSB0aGlzLnBpY2tlci5taW5pbXVtRGF0ZS5n
ZXRVVENGdWxsWWVhcigpICogMTIgKyB0aGlzLnBpY2tlci5taW5pbXVtRGF0ZS5nZXRVVENNb250
aCgpOworICAgIHZhciBtYXggPSB0aGlzLnBpY2tlci5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVh
cigpICogMTIgKyB0aGlzLnBpY2tlci5tYXhpbXVtRGF0ZS5nZXRVVENNb250aCgpOwogICAgIHZh
ciBjdXJyZW50ID0gdGhpcy5fY3VycmVudFllYXIgKiAxMiArIHRoaXMuX2N1cnJlbnRNb250aDsK
ICAgICBpZiAodGhpcy5fbGVmdDMpCiAgICAgICAgIHRoaXMuX2xlZnQzLmRpc2FibGVkID0gY3Vy
cmVudCAtIDEzIDwgbWluOwpAQCAtNjgwLDcgKzY5Miw3IEBAIFllYXJNb250aENvbnRyb2xsZXIu
cHJvdG90eXBlLl9oYW5kbGVZZWFyTW9udGhDaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAg
cmV0dXJuOwogICAgIHZhciBuZXdZZWFyID0gTnVtYmVyKHJlc3VsdFsxXSk7CiAgICAgdmFyIG5l
d01vbnRoID0gTnVtYmVyKHJlc3VsdFsyXSk7Ci0gICAgZ2xvYmFsLmRheXNUYWJsZS5uYXZpZ2F0
ZVRvTW9udGhBbmRLZWVwU2VsZWN0aW9uUG9zaXRpb24obmV3WWVhciwgbmV3TW9udGgpOworICAg
IHRoaXMucGlja2VyLmRheXNUYWJsZS5uYXZpZ2F0ZVRvTW9udGhBbmRLZWVwU2VsZWN0aW9uUG9z
aXRpb24obmV3WWVhciwgbmV3TW9udGgpOwogfTsKIAogLyoKQEAgLTczOCw4ICs3NTAsOCBAQCBZ
ZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlQnV0dG9uQ2xpY2sgPSBmdW5jdGlv
bihldmVudCkgewogICogQHBhcmFtIHshbnVtYmVyfSBhbW91bnQKICAqLwogWWVhck1vbnRoQ29u
dHJvbGxlci5wcm90b3R5cGUubW92ZVJlbGF0aXZlbHkgPSBmdW5jdGlvbihhbW91bnQpIHsKLSAg
ICB2YXIgbWluID0gZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGds
b2JhbC5taW5pbXVtRGF0ZS5nZXRVVENNb250aCgpOwotICAgIHZhciBtYXggPSBnbG9iYWwubWF4
aW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1heGltdW1EYXRlLmdldFVU
Q01vbnRoKCk7CisgICAgdmFyIG1pbiA9IHRoaXMucGlja2VyLm1pbmltdW1EYXRlLmdldFVUQ0Z1
bGxZZWFyKCkgKiAxMiArIHRoaXMucGlja2VyLm1pbmltdW1EYXRlLmdldFVUQ01vbnRoKCk7Cisg
ICAgdmFyIG1heCA9IHRoaXMucGlja2VyLm1heGltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAx
MiArIHRoaXMucGlja2VyLm1heGltdW1EYXRlLmdldFVUQ01vbnRoKCk7CiAgICAgdmFyIGN1cnJl
bnQgPSB0aGlzLl9jdXJyZW50WWVhciAqIDEyICsgdGhpcy5fY3VycmVudE1vbnRoOwogICAgIHZh
ciB1cGRhdGVkID0gY3VycmVudDsKICAgICBpZiAoYW1vdW50IDwgMCkKQEAgLTc0OCw3ICs3NjAs
NyBAQCBZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5tb3ZlUmVsYXRpdmVseSA9IGZ1bmN0
aW9uKGFtb3VudCkgewogICAgICAgICB1cGRhdGVkID0gY3VycmVudCArIGFtb3VudCA8PSBtYXgg
PyBjdXJyZW50ICsgYW1vdW50IDogbWF4OwogICAgIGlmICh1cGRhdGVkID09IGN1cnJlbnQpCiAg
ICAgICAgIHJldHVybjsKLSAgICBnbG9iYWwuZGF5c1RhYmxlLm5hdmlnYXRlVG9Nb250aEFuZEtl
ZXBTZWxlY3Rpb25Qb3NpdGlvbihNYXRoLmZsb29yKHVwZGF0ZWQgLyAxMiksIHVwZGF0ZWQgJSAx
Mik7CisgICAgdGhpcy5waWNrZXIuZGF5c1RhYmxlLm5hdmlnYXRlVG9Nb250aEFuZEtlZXBTZWxl
Y3Rpb25Qb3NpdGlvbihNYXRoLmZsb29yKHVwZGF0ZWQgLyAxMiksIHVwZGF0ZWQgJSAxMik7CiB9
OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC03NTYsNyArNzY4LDggQEAgWWVhck1vbnRoQ29udHJvbGxlci5w
cm90b3R5cGUubW92ZVJlbGF0aXZlbHkgPSBmdW5jdGlvbihhbW91bnQpIHsKIC8qKgogICogQGNv
bnN0cnVjdG9yCiAgKi8KLWZ1bmN0aW9uIERheXNUYWJsZSgpIHsKK2Z1bmN0aW9uIERheXNUYWJs
ZShwaWNrZXIpIHsKKyAgICB0aGlzLnBpY2tlciA9IHBpY2tlcjsKICAgICAvKioKICAgICAgKiBA
dHlwZSB7IW51bWJlcn0KICAgICAgKi8KQEAgLTc5MCw5ICs4MDMsOSBAQCBEYXlzVGFibGUucHJv
dG90eXBlLl9oYXNTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKIERheXNUYWJsZS5fV2Vla3MgPSA2
OwogCiAvKioKLSAqIEBwYXJhbSB7IUVsZW1lbnR9IG1haW4KKyAqIEBwYXJhbSB7IUVsZW1lbnR9
IGVsZW1lbnQKICAqLwotRGF5c1RhYmxlLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKG1h
aW4pIHsKK0RheXNUYWJsZS5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihlbGVtZW50KSB7
CiAgICAgdGhpcy5fZGF5c0NvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoInRhYmxlIiwgQ2xhc3NO
YW1lcy5EYXlzQXJlYSk7CiAgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlRGF5Q2xpY2ssIHRoaXMpLCBmYWxzZSk7CiAgICAg
dGhpcy5fZGF5c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLCBiaW5kKHRo
aXMuX2hhbmRsZU1vdXNlT3ZlciwgdGhpcyksIGZhbHNlKTsKQEAgLTgyMSw3ICs4MzQsNyBAQCBE
YXlzVGFibGUucHJvdG90eXBlLmF0dGFjaFRvID0gZnVuY3Rpb24obWFpbikgewogICAgIGNvbnRh
aW5lci5hcHBlbmRDaGlsZCh0aGlzLl9kYXlzQ29udGFpbmVyKTsKICAgICBjb250YWluZXIudGFi
SW5kZXggPSAwOwogICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgYmlu
ZCh0aGlzLl9oYW5kbGVLZXksIHRoaXMpLCBmYWxzZSk7Ci0gICAgbWFpbi5hcHBlbmRDaGlsZChj
b250YWluZXIpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKIAogICAgIGNv
bnRhaW5lci5mb2N1cygpOwogfTsKQEAgLTgzMCwyNCArODQzLDI0IEBAIERheXNUYWJsZS5wcm90
b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihtYWluKSB7CiAgKiBAcGFyYW0geyFudW1iZXJ9IHRp
bWUgZGF0ZSBpbiBtaWxsaXNlY29uZC4KICAqIEByZXR1cm4geyFib29sZWFufQogICovCi1mdW5j
dGlvbiBzdGVwTWlzbWF0Y2godGltZSkgewotICAgIHJldHVybiAodGltZSAtIGdsb2JhbC5taW5p
bXVtRGF0ZS5nZXRUaW1lKCkpICUgZ2xvYmFsLnN0ZXAgIT0gMDsKK0NhbGVuZGFyUGlja2VyLnBy
b3RvdHlwZS5zdGVwTWlzbWF0Y2ggPSBmdW5jdGlvbih0aW1lKSB7CisgICAgcmV0dXJuICh0aW1l
IC0gdGhpcy5taW5pbXVtRGF0ZS5nZXRUaW1lKCkpICUgdGhpcy5zdGVwICE9IDA7CiB9CiAKIC8q
KgogICogQHBhcmFtIHshbnVtYmVyfSB0aW1lIGRhdGUgaW4gbWlsbGlzZWNvbmQuCiAgKiBAcmV0
dXJuIHshYm9vbGVhbn0KICAqLwotZnVuY3Rpb24gb3V0T2ZSYW5nZSh0aW1lKSB7Ci0gICAgcmV0
dXJuIHRpbWUgPCBnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpIHx8IHRpbWUgPiBnbG9iYWwu
bWF4aW11bURhdGUuZ2V0VGltZSgpOworQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLm91dE9mUmFu
Z2UgPSBmdW5jdGlvbih0aW1lKSB7CisgICAgcmV0dXJuIHRpbWUgPCB0aGlzLm1pbmltdW1EYXRl
LmdldFRpbWUoKSB8fCB0aW1lID4gdGhpcy5tYXhpbXVtRGF0ZS5nZXRUaW1lKCk7CiB9CiAKIC8q
KgogICogQHBhcmFtIHshbnVtYmVyfSB0aW1lIGRhdGUgaW4gbWlsbGlzZWNvbmQuCiAgKiBAcmV0
dXJuIHshYm9vbGVhbn0KICAqLwotZnVuY3Rpb24gaXNWYWxpZERhdGUodGltZSkgewotICAgIHJl
dHVybiAhb3V0T2ZSYW5nZSh0aW1lKSAmJiAhc3RlcE1pc21hdGNoKHRpbWUpOworQ2FsZW5kYXJQ
aWNrZXIucHJvdG90eXBlLmlzVmFsaWREYXRlID0gZnVuY3Rpb24odGltZSkgeworICAgIHJldHVy
biAhdGhpcy5vdXRPZlJhbmdlKHRpbWUpICYmICF0aGlzLnN0ZXBNaXNtYXRjaCh0aW1lKTsKIH0K
IAogLyoqCkBAIC04NzMsOSArODg2LDkgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5fcmVuZGVyTW9u
dGggPSBmdW5jdGlvbih5ZWFyLCBtb250aCkgewogICAgICAgICAgICAgZWxlbWVudC5pbm5lclRl
eHQgPSBsb2NhbGl6ZU51bWJlcihkYXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOwogICAgICAgICAg
ICAgZWxlbWVudC5jbGFzc05hbWUgPSBDbGFzc05hbWVzLkRheTsKICAgICAgICAgICAgIGVsZW1l
bnQuZGF0YXNldC5zdWJtaXRWYWx1ZSA9IHNlcmlhbGl6ZURhdGUoaXRlclllYXIsIGl0ZXJNb250
aCwgZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsKLSAgICAgICAgICAgIGlmIChvdXRPZlJhbmdl
KHRpbWUpKQorICAgICAgICAgICAgaWYgKHRoaXMucGlja2VyLm91dE9mUmFuZ2UodGltZSkpCiAg
ICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuVW5hdmFpbGFi
bGUpOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RlcE1pc21hdGNoKHRpbWUpKQorICAgICAgICAg
ICAgZWxzZSBpZiAodGhpcy5waWNrZXIuc3RlcE1pc21hdGNoKHRpbWUpKQogICAgICAgICAgICAg
ICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlVuYXZhaWxhYmxlKTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKChpdGVyWWVhciA9PSB5ZWFyICYmIGRheUl0ZXJhdG9yLmdldFVUQ01v
bnRoKCkgPCBtb250aCkgfHwgKG1vbnRoID09IDAgJiYgaXRlck1vbnRoID09IDExKSkgewogICAg
ICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLkF2YWlsYWJsZSk7
CkBAIC04OTIsNyArOTA1LDcgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5fcmVuZGVyTW9udGggPSBm
dW5jdGlvbih5ZWFyLCBtb250aCkgewogICAgICAgICB9CiAgICAgfQogCi0gICAgZ2xvYmFsLnRv
ZGF5LmRpc2FibGVkID0gIWlzVmFsaWREYXRlKHBhcnNlRGF0ZVN0cmluZygpLmdldFRpbWUoKSk7
CisgICAgdGhpcy5waWNrZXIudG9kYXkuZGlzYWJsZWQgPSAhdGhpcy5waWNrZXIuaXNWYWxpZERh
dGUocGFyc2VEYXRlU3RyaW5nKCkuZ2V0VGltZSgpKTsKIH07CiAKIC8qKgpAQCAtOTAwLDcgKzkx
Myw3IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoID0gZnVuY3Rpb24oeWVhciwg
bW9udGgpIHsKICAqIEBwYXJhbSB7IW51bWJlcn0gbW9udGgKICAqLwogRGF5c1RhYmxlLnByb3Rv
dHlwZS5fbmF2aWdhdGVUb01vbnRoID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKLSAgICBnbG9i
YWwueWVhck1vbnRoQ29udHJvbGxlci5zZXRZZWFyTW9udGgoeWVhciwgbW9udGgpOworICAgIHRo
aXMucGlja2VyLnllYXJNb250aENvbnRyb2xsZXIuc2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKTsK
ICAgICB0aGlzLl9yZW5kZXJNb250aCh5ZWFyLCBtb250aCk7CiB9OwogCkBAIC05NzUsNyArOTg4
LDcgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXRQcmV2aW91c01vbnRoID0gZnVuY3Rp
b24oKSB7CiAgICAgdmFyIHllYXIgPSBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci55ZWFyKCk7
CiAgICAgdmFyIG1vbnRoID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIubW9udGgoKTsKICAg
ICB2YXIgdGhpc01vbnRoU3RhcnRUaW1lID0gY3JlYXRlVVRDRGF0ZSh5ZWFyLCBtb250aCwgMSku
Z2V0VGltZSgpOwotICAgIGlmIChnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpID49IHRoaXNN
b250aFN0YXJ0VGltZSkKKyAgICBpZiAodGhpcy5taW5pbXVtRGF0ZS5nZXRUaW1lKCkgPj0gdGhp
c01vbnRoU3RhcnRUaW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG1vbnRoID09
IDApIHsKICAgICAgICAgeWVhci0tOwpAQCAtOTk4LDcgKzEwMTEsNyBAQCBEYXlzVGFibGUucHJv
dG90eXBlLl9tYXliZVNldE5leHRNb250aCA9IGZ1bmN0aW9uKCkgewogICAgIH0gZWxzZQogICAg
ICAgICBtb250aCsrOwogICAgIHZhciBuZXh0TW9udGhTdGFydFRpbWUgPSBjcmVhdGVVVENEYXRl
KHllYXIsIG1vbnRoLCAxKS5nZXRUaW1lKCk7Ci0gICAgaWYgKGdsb2JhbC5tYXhpbXVtRGF0ZS5n
ZXRUaW1lKCkgPCBuZXh0TW9udGhTdGFydFRpbWUpCisgICAgaWYgKHRoaXMucGlja2VyLm1heGlt
dW1EYXRlLmdldFRpbWUoKSA8IG5leHRNb250aFN0YXJ0VGltZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHRoaXMuX25hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24oeWVhciwgbW9udGgp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMTAwOSw3ICsxMDIyLDcgQEAgRGF5c1RhYmxlLnByb3Rv
dHlwZS5fbWF5YmVTZXROZXh0TW9udGggPSBmdW5jdGlvbigpIHsKICAqLwogRGF5c1RhYmxlLnBy
b3RvdHlwZS5faGFuZGxlRGF5Q2xpY2sgPSBmdW5jdGlvbihldmVudCkgewogICAgIGlmIChldmVu
dC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMuQXZhaWxhYmxlKSkKLSAgICAg
ICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQuc3VibWl0VmFsdWUpOworICAgICAg
ICB0aGlzLnBpY2tlci5zdWJtaXRWYWx1ZShldmVudC50YXJnZXQuZGF0YXNldC5zdWJtaXRWYWx1
ZSk7CiB9OwogCiAvKioKQEAgLTExMTAsNyArMTEyMyw3IEBAIERheXNUYWJsZS5wcm90b3R5cGUu
X2hhbmRsZUtleSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgfSBlbHNlIGlmICh0aGlzLl9oYXNT
ZWxlY3Rpb24oKSAmJiBrZXkgPT0gIkVudGVyIikgewogICAgICAgICB2YXIgZGF5Tm9kZSA9IHRo
aXMuX2RheXNbeV1beF07CiAgICAgICAgIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhD
bGFzc05hbWVzLkF2YWlsYWJsZSkpIHsKLSAgICAgICAgICAgIHN1Ym1pdFZhbHVlKGRheU5vZGUu
ZGF0YXNldC5zdWJtaXRWYWx1ZSk7CisgICAgICAgICAgICB0aGlzLnBpY2tlci5zdWJtaXRWYWx1
ZShkYXlOb2RlLmRhdGFzZXQuc3VibWl0VmFsdWUpOwogICAgICAgICAgICAgZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKCk7CiAgICAgICAgIH0KIApAQCAtMTEzOSw1MyArMTE1MiwzMCBAQCBEYXlzVGFi
bGUucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50LCB4LCB5KSB7CiAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKIH07CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZnVuY3Rpb24g
aGFuZGxlVG9kYXkoKSB7Ci0gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwotICAgIGdsb2JhbC5k
YXlzVGFibGUuc2VsZWN0RGF0ZShkYXRlKTsKLSAgICBzdWJtaXRWYWx1ZShzZXJpYWxpemVEYXRl
KGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkpOwot
fQotCi1mdW5jdGlvbiBoYW5kbGVDbGVhcigpIHsKLSAgICBzdWJtaXRWYWx1ZSgiIik7Ci19Ci0K
IC8qKgotICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCi0gKi8KLWZ1bmN0aW9uIHN1Ym1pdFZhbHVl
KHZhbHVlKSB7Ci0gICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9z
ZVBvcHVwKDAsIHZhbHVlKTsKLX0KLQotZnVuY3Rpb24gaGFuZGxlQ2FuY2VsKCkgewotICAgIHdp
bmRvdy5wYWdlUG9wdXBDb250cm9sbGVyLnNldFZhbHVlQW5kQ2xvc2VQb3B1cCgtMSwgIiIpOwot
fQotCi0vKioKLSAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKiBAcGFyYW0geyFFdmVudH0gZXZl
bnQKICAqLwotZnVuY3Rpb24gaGFuZGxlR2xvYmFsS2V5KGV2ZW50KSB7CitDYWxlbmRhclBpY2tl
ci5wcm90b3R5cGUuX2hhbmRsZUJvZHlLZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICBt
YXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKICAgICB2YXIga2V5ID0gZXZlbnQua2V5SWRlbnRpZmll
cjsKICAgICBpZiAoa2V5ID09ICJVKzAwMDkiKSB7CiAgICAgICAgIGlmICghZXZlbnQuc2hpZnRL
ZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRy
b2wpIHsKICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIGdsb2JhbC5maXJzdEZvY3VzYWJs
ZUNvbnRyb2wuZm9jdXMoKTsKKyAgICAgICAgICAgIHRoaXMuZmlyc3RGb2N1c2FibGVDb250cm9s
LmZvY3VzKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQu
YWN0aXZlRWxlbWVudCA9PSBnbG9iYWwuZmlyc3RGb2N1c2FibGVDb250cm9sKSB7CiAgICAgICAg
ICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7Ci0gICAgICAgICAgICBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRyb2wuZm9jdXMo
KTsKKyAgICAgICAgICAgIHRoaXMubGFzdEZvY3VzYWJsZUNvbnRyb2wuZm9jdXMoKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNEQiKSB7IC8vICdtJwotICAgICAgICBn
bG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/
IFllYXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNNb250aCA6IFllYXJNb250aENvbnRyb2xsZXIu
TmV4dE1vbnRoKTsKKyAgICAgICAgdGhpcy55ZWFyTW9udGhDb250cm9sbGVyLm1vdmVSZWxhdGl2
ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c01vbnRoIDog
WWVhck1vbnRoQ29udHJvbGxlci5OZXh0TW9udGgpOwogICAgIH0gZWxzZSBpZiAoa2V5ID09ICJV
KzAwNTkiKSB7IC8vICd5JwotICAgICAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5tb3Zl
UmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNZ
ZWFyIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0WWVhcik7CisgICAgICAgIHRoaXMueWVhck1v
bnRoQ29udHJvbGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENv
bnRyb2xsZXIuUHJldmlvdXNZZWFyIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0WWVhcik7CiAg
ICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA0NCIpIHsgLy8gJ2QnCi0gICAgICAgIGdsb2JhbC55
ZWFyTW9udGhDb250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1v
bnRoQ29udHJvbGxlci5QcmV2aW91c1RlblllYXJzIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0
VGVuWWVhcnMpOworICAgICAgICB0aGlzLnllYXJNb250aENvbnRyb2xsZXIubW92ZVJlbGF0aXZl
bHkoZXZlbnQuc2hpZnRLZXkgPyBZZWFyTW9udGhDb250cm9sbGVyLlByZXZpb3VzVGVuWWVhcnMg
OiBZZWFyTW9udGhDb250cm9sbGVyLk5leHRUZW5ZZWFycyk7CiAgICAgfSBlbHNlIGlmIChrZXkg
PT0gIlUrMDAxQiIpIC8vIEVTQwotICAgICAgICBoYW5kbGVDYW5jZWwoKTsKKyAgICAgICAgdGhp
cy5oYW5kbGVDYW5jZWwoKTsKIH0KIAogZnVuY3Rpb24gbWF5YmVVcGRhdGVGb2N1c1N0eWxlKCkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JT
dWdnZXN0aW9uUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMv
Y29sb3JTdWdnZXN0aW9uUGlja2VyLmpzCmluZGV4IGQ0OGNiOTZlN2ZjMTY0NTI2ZDYyYzc1MWUy
YmU2OTY0Njc2ZTBkNDMuLjRkNzBkYWJmZGM2NGFjZmNmODRkZTBmMmFiOTRlMzIwNmUyMmZjMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NvbG9yU3Vn
Z2VzdGlvblBpY2tlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVw
cy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIuanMKQEAgLTc0LDI5ICs3NCw4IEBAIGZ1bmN0aW9uIHZh
bGlkYXRlQXJndW1lbnRzKGFyZ3MpIHsKICAgICByZXR1cm4gbnVsbDsKIH0KIAotdmFyIEFjdGlv
bnMgPSB7Ci0gICAgQ2hvb3NlT3RoZXJDb2xvcjogLTIsCi0gICAgQ2FuY2VsOiAtMSwKLSAgICBT
ZXRWYWx1ZTogMAotfTsKLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUKLSAqLwotZnVu
Y3Rpb24gc3VibWl0VmFsdWUodmFsdWUpIHsKLSAgICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxl
ci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoQWN0aW9ucy5TZXRWYWx1ZSwgdmFsdWUpOwotfQotCi1m
dW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7Ci0gICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIu
c2V0VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMuQ2FuY2VsLCAiIik7Ci19Ci0KLWZ1bmN0aW9u
IGNob29zZU90aGVyQ29sb3IoKSB7Ci0gICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0
VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMuQ2hvb3NlT3RoZXJDb2xvciwgIiIpOwotfQotCiBm
dW5jdGlvbiBDb2xvclBpY2tlcihlbGVtZW50LCBjb25maWcpIHsKLSAgICB0aGlzLl9lbGVtZW50
ID0gZWxlbWVudDsKKyAgICBQaWNrZXIuY2FsbCh0aGlzLCBlbGVtZW50LCBjb25maWcpOwogICAg
IHRoaXMuX2NvbmZpZyA9IGNvbmZpZzsKICAgICBpZiAodGhpcy5fY29uZmlnLnZhbHVlcy5sZW5n
dGggPT09IDApCiAgICAgICAgIHRoaXMuX2NvbmZpZy52YWx1ZXMgPSBEZWZhdWx0Q29sb3JQYWxl
dHRlOwpAQCAtMTA2LDYgKzg1LDcgQEAgZnVuY3Rpb24gQ29sb3JQaWNrZXIoZWxlbWVudCwgY29u
ZmlnKSB7CiAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBi
aW5kKHRoaXMuX2hhbmRsZU1vdXNlTW92ZSwgdGhpcykpOwogICAgIHRoaXMuX2VsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgYmluZCh0aGlzLl9oYW5kbGVNb3VzZURvd24sIHRo
aXMpKTsKIH0KK0NvbG9yUGlja2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGlja2VyLnBy
b3RvdHlwZSk7CiAKIHZhciBTd2F0Y2hCb3JkZXJCb3hXaWR0aCA9IDI0OyAvLyBrZWVwIGluIHN5
bmMgd2l0aCBDU1MKIHZhciBTd2F0Y2hCb3JkZXJCb3hIZWlnaHQgPSAyNDsgLy8ga2VlcCBpbiBz
eW5jIHdpdGggQ1NTCkBAIC0xMzAsNyArMTEwLDcgQEAgQ29sb3JQaWNrZXIucHJvdG90eXBlLl9s
YXlvdXQgPSBmdW5jdGlvbigpIHsKICAgICBjb250YWluZXIuc3R5bGUubWF4SGVpZ2h0ID0gKFN3
YXRjaEJvcmRlckJveEhlaWdodCAqIFN3YXRjaGVzTWF4Um93KSArICJweCI7CiAgICAgdGhpcy5f
ZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgIHZhciBvdGhlckJ1dHRvbiA9IGNy
ZWF0ZUVsZW1lbnQoImJ1dHRvbiIsICJvdGhlci1jb2xvciIsIHRoaXMuX2NvbmZpZy5vdGhlckNv
bG9yTGFiZWwpOwotICAgIG90aGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2hv
b3NlT3RoZXJDb2xvciwgZmFsc2UpOworICAgIG90aGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5jaG9vc2VPdGhlckNvbG9yLmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0
aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKG90aGVyQnV0dG9uKTsKICAgICB0aGlzLl9jb250YWlu
ZXIgPSBjb250YWluZXI7CiAgICAgdGhpcy5fb3RoZXJCdXR0b24gPSBvdGhlckJ1dHRvbjsKQEAg
LTE1OCw3ICsxMzgsNyBAQCBDb2xvclBpY2tlci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRG93biA9
IGZ1bmN0aW9uKGV2ZW50KSB7CiBDb2xvclBpY2tlci5wcm90b3R5cGUuX2hhbmRsZUtleURvd24g
PSBmdW5jdGlvbihldmVudCkgewogICAgIHZhciBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVyOwog
ICAgIGlmIChrZXkgPT09ICJVKzAwMUIiKSAvLyBFU0MKLSAgICAgICAgaGFuZGxlQ2FuY2VsKCk7
CisgICAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsKCk7CiAgICAgZWxzZSBpZiAoa2V5ID09ICJMZWZ0
IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSB7CiAg
ICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OwogICAg
ICAgICB2YXIgaW5kZXggPSAwOwpAQCAtMTk0LDcgKzE3NCw3IEBAIENvbG9yUGlja2VyLnByb3Rv
dHlwZS5faGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAKIENvbG9yUGlja2VyLnBy
b3RvdHlwZS5faGFuZGxlU3dhdGNoQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgewogICAgIGlmIChl
dmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjb2xvci1zd2F0Y2giKSkKLSAgICAgICAg
c3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQudmFsdWUpOworICAgICAgICB0aGlzLnN1
Ym1pdFZhbHVlKGV2ZW50LnRhcmdldC5kYXRhc2V0LnZhbHVlKTsKIH07CiAKIGlmICh3aW5kb3cu
ZGlhbG9nQXJndW1lbnRzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMv
cGFnZXBvcHVwcy9waWNrZXJDb21tb24uanMgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFn
ZXBvcHVwcy9waWNrZXJDb21tb24uanMKaW5kZXggZGZiMjkxODE0OWU1YzljNmY1ODAxMjc2NWJk
ZDg1NzE1Yzc4NTNmYi4uZWY3NGU2OGExN2M4NDk4OTczMDQ5MDdiMGMyMjNmNjU2MDUwYjZjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvcGlja2VyQ29t
bW9uLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL3BpY2tlckNv
bW1vbi5qcwpAQCAtNzYsMyArNzYsMzcgQEAgZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyV2lkdGgoKSB7
CiAgICAgfQogICAgIHJldHVybiB3aW5kb3cuc2Nyb2xsYmFyV2lkdGg7CiB9CisKKy8qKgorICog
QGNvbnN0cnVjdG9yCisgKiBAcGFyYW0gez9FbGVtZW50fSBlbGVtZW50CisgKiBAcGFyYW0geyFP
YmplY3R9IGNvbmZpZworICovCitmdW5jdGlvbiBQaWNrZXIoZWxlbWVudCwgY29uZmlnKSB7Cisg
ICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQgfHwgY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAg
dGhpcy5fY29uZmlnID0gY29uZmlnOworfQorCisvKioKKyAqIEBlbnVtIHtudW1iZXJ9CisgKi8K
K1BpY2tlci5BY3Rpb25zID0geworICAgIFNldFZhbHVlOiAwLAorICAgIENhbmNlbDogLTEsCisg
ICAgQ2hvb3NlT3RoZXJDb2xvcjogLTIKK307CisKKy8qKgorICogQHBhcmFtIHshc3RyaW5nfSB2
YWx1ZQorICovCitQaWNrZXIucHJvdG90eXBlLnN1Ym1pdFZhbHVlID0gZnVuY3Rpb24odmFsdWUp
IHsKKyAgICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAo
UGlja2VyLkFjdGlvbnMuU2V0VmFsdWUsIHZhbHVlKTsKK30KKworUGlja2VyLnByb3RvdHlwZS5o
YW5kbGVDYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxl
ci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoUGlja2VyLkFjdGlvbnMuQ2FuY2VsLCAiIik7Cit9CisK
K1BpY2tlci5wcm90b3R5cGUuY2hvb3NlT3RoZXJDb2xvciA9IGZ1bmN0aW9uKCkgeworICAgIHdp
bmRvdy5wYWdlUG9wdXBDb250cm9sbGVyLnNldFZhbHVlQW5kQ2xvc2VQb3B1cChQaWNrZXIuQWN0
aW9ucy5DaG9vc2VPdGhlckNvbG9yLCAiIik7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmQ0MjU3NDM3MzI4OTIzZjY0
YzYwM2Q5ZGFkMmExNjE4ZmY3MjhlNC4uMWQ1ZmE5ZjkxYjViOGYzMDNiMTA0MDMxMDI5MDA2ZGY2
OTFiMWVjZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA5LTA1ICBLZWlzaGkgSGF0dG9y
aSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlZmFjdG9yIENhbGVuZGFyUGlja2Vy
IHRvIG5vdCB1c2UgZ2xvYmFsIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2RhdGUvY2FsZW5kYXItcGlja2VyLWFw
cGVhcmFuY2UtcHJlLTEwMC5odG1sOgorCiAyMDEyLTA5LTA1ICBab2x0YW4gQXJ2YWkgIDx6YXJ2
YWlAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2RhdGUvY2FsZW5kYXItcGlja2Vy
LWFwcGVhcmFuY2UtcHJlLTEwMC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9kYXRlL2Nh
bGVuZGFyLXBpY2tlci1hcHBlYXJhbmNlLXByZS0xMDAuaHRtbAppbmRleCBkMmExNDZiMWQ1Mzcz
ZDQzMjJhODk1YmJkYzU3MzBjMTk1MWFlNzY0Li44MmQ0ZTI2ZGQzNmZiOTg1OWI4MjU2ZDEyN2Yy
ZGNmMjlhY2UzMmExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2RhdGUvY2Fs
ZW5kYXItcGlja2VyLWFwcGVhcmFuY2UtcHJlLTEwMC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvZGF0ZS9jYWxlbmRhci1waWNrZXItYXBwZWFyYW5jZS1wcmUtMTAwLmh0bWwKQEAg
LTgsMTYgKzgsMTcgQEAKIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogPGlucHV0IHR5cGU9ZGF0
ZSBpZD1kYXRlIHZhbHVlPSIwMDAyLTAyLTAyIj4KIDxzY3JpcHQ+Ci1mdW5jdGlvbiBzZW5kS2V5
KGlucHV0LCBrZXlOYW1lKSB7CitmdW5jdGlvbiBzZW5kS2V5KGVsZW1lbnQsIGtleU5hbWUpIHsK
ICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnS2V5Ym9hcmRFdmVudCcpOwog
ICAgIGV2ZW50LmluaXRLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgdHJ1ZSwgdHJ1ZSwgZG9jdW1l
bnQuZGVmYXVsdFZpZXcsIGtleU5hbWUpOwotICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoZXZlbnQp
OworICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIGZ1bmN0aW9uIGZpbmlz
aFRlc3QoKSB7CiAgICAgcGlja2VyV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScs
IGZpbmlzaFRlc3QpOwotICAgIHNlbmRLZXkocGlja2VyV2luZG93Lmdsb2JhbC5kYXlzVGFibGUu
X2RheXNDb250YWluZXIsICdSaWdodCcpOwotICAgIHNlbmRLZXkocGlja2VyV2luZG93Lmdsb2Jh
bC5kYXlzVGFibGUuX2RheXNDb250YWluZXIsICdFbnRlcicpOworICAgIHZhciBkYXlzQ29udGFp
bmVyID0gcGlja2VyV2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImRheXMt
YXJlYSIpWzBdOworICAgIHNlbmRLZXkoZGF5c0NvbnRhaW5lciwgJ1JpZ2h0Jyk7CisgICAgc2Vu
ZEtleShkYXlzQ29udGFpbmVyLCAnRW50ZXInKTsKICAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImRhdGUiKS52YWx1ZScsICciMDAwMi0wMi0wMyInKTsKICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeyBmaW5pc2hKU1Rlc3QoKTsgfSwgMCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162409</attachid>
            <date>2012-09-05 21:25:32 -0700</date>
            <delta_ts>2012-09-06 04:05:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95830-20120906132512.patch</filename>
            <type>text/plain</type>
            <size>28024</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWNmNTQ4N2FjNTYyMmY3
ZTAzY2RmNjAzNDdiYjI4NDJkNTYwZjgxZi4uODgwYzEyYmJhMGZhNTJiNDBlMmI3NzdlNmJhNGM1
OGQwNTg4NjgzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA5LTA1ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlZmFjdG9yIENhbGVu
ZGFyUGlja2VyIHRvIG5vdCB1c2UgZ2xvYmFsIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1ODMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIENhbGVuZGFyUGlja2VyIHNv
IHdlIGNhbiBoYXZlIG11bHRpcGxlIFBpY2tlcnMgaW4gb25lIHBhZ2UKKyAgICAgICAgcG9wdXAg
aW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGJlaGF2aW9yIGNoYW5n
ZS4KKworICAgICAgICAqIFJlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzOgor
ICAgICAgICAoaW5pdGlhbGl6ZSk6CisgICAgICAgIChyZXNldE1haW4pOgorICAgICAgICAob3Bl
bkNhbGVuZGFyUGlja2VyKToKKyAgICAgICAgKENhbGVuZGFyUGlja2VyKToKKyAgICAgICAgKENh
bGVuZGFyUGlja2VyLnByb3RvdHlwZS5fbGF5b3V0KToKKyAgICAgICAgKENhbGVuZGFyUGlja2Vy
LnByb3RvdHlwZS5oYW5kbGVUb2RheSk6CisgICAgICAgIChDYWxlbmRhclBpY2tlci5wcm90b3R5
cGUuaGFuZGxlQ2xlYXIpOgorICAgICAgICAoQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLmZpeFdp
bmRvd1NpemUpOgorICAgICAgICAoQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLl9sYXlvdXRCdXR0
b25zKToKKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIpOgorICAgICAgICAoWWVhck1vbnRo
Q29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8pOgorICAgICAgICAoWWVhck1vbnRoQ29udHJv
bGxlci5wcm90b3R5cGUuX3JlZHJhdyk6CisgICAgICAgIChZZWFyTW9udGhDb250cm9sbGVyLnBy
b3RvdHlwZS5faGFuZGxlWWVhck1vbnRoQ2hhbmdlKToKKyAgICAgICAgKFllYXJNb250aENvbnRy
b2xsZXIucHJvdG90eXBlLm1vdmVSZWxhdGl2ZWx5KToKKyAgICAgICAgKERheXNUYWJsZSk6Cisg
ICAgICAgIChEYXlzVGFibGUucHJvdG90eXBlLmF0dGFjaFRvKToKKyAgICAgICAgKENhbGVuZGFy
UGlja2VyLnByb3RvdHlwZS5zdGVwTWlzbWF0Y2gpOgorICAgICAgICAoQ2FsZW5kYXJQaWNrZXIu
cHJvdG90eXBlLm91dE9mUmFuZ2UpOgorICAgICAgICAoQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBl
LmlzVmFsaWREYXRlKToKKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRo
KToKKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX25hdmlnYXRlVG9Nb250aCk6CisgICAg
ICAgIChEYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldFByZXZpb3VzTW9udGgpOgorICAgICAg
ICAoRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXROZXh0TW9udGgpOgorICAgICAgICAoRGF5
c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlRGF5Q2xpY2spOgorICAgICAgICAoRGF5c1RhYmxlLnBy
b3RvdHlwZS5faGFuZGxlS2V5KToKKyAgICAgICAgKENhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5f
aGFuZGxlQm9keUtleURvd24pOgorICAgICAgICAqIFJlc291cmNlcy9wYWdlcG9wdXBzL2NvbG9y
U3VnZ2VzdGlvblBpY2tlci5qczoKKyAgICAgICAgKENvbG9yUGlja2VyKToKKyAgICAgICAgKENv
bG9yUGlja2VyLnByb3RvdHlwZS5fbGF5b3V0KToKKyAgICAgICAgKENvbG9yUGlja2VyLnByb3Rv
dHlwZS5faGFuZGxlS2V5RG93bik6CisgICAgICAgIChDb2xvclBpY2tlci5wcm90b3R5cGUuX2hh
bmRsZVN3YXRjaENsaWNrKToKKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBvcHVwcy9waWNrZXJD
b21tb24uanM6CisgICAgICAgIChQaWNrZXIpOgorICAgICAgICAoUGlja2VyLnByb3RvdHlwZS5z
dWJtaXRWYWx1ZSk6CisgICAgICAgIChQaWNrZXIucHJvdG90eXBlLmhhbmRsZUNhbmNlbCk6Cisg
ICAgICAgIChQaWNrZXIucHJvdG90eXBlLmNob29zZU90aGVyQ29sb3IpOgorCiAyMDEyLTA5LTA1
ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxk
IGZpeCBmb3IgV2luQ0UgYWZ0ZXIgcjEyNzUyNS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKaW5kZXggOTI2Zjc2ZWQxYjc4
ZGJmY2I4NWJkZTM2M2RlMjU4YTc2NjYzMDc3NC4uZTM2YTkyMDQ3MTA0MzdkNzJhN2MyYjY2ZDZl
MTE0NzM4NDY2NThkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vw
b3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3Bh
Z2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKQEAgLTI3NiwyMyArMjc2LDczIEBAIGZ1bmN0aW9u
IGluaXRpYWxpemUoYXJncykgewogICAgICAgICByZXNpemVXaW5kb3cobWFpbi5vZmZzZXRXaWR0
aCwgbWFpbi5vZmZzZXRIZWlnaHQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGdsb2JhbC5wYXJh
bXMgPSBhcmdzOwotICAgICAgICBjaGVja0xpbWl0cygpOwotICAgICAgICBsYXlvdXQoKTsKKyAg
ICAgICAgb3BlbkNhbGVuZGFyUGlja2VyKCk7CisgICAgfQorfQogCi0gICAgICAgIHZhciBpbml0
aWFsRGF0ZSA9IHBhcnNlRGF0ZVN0cmluZyhhcmdzLmN1cnJlbnRWYWx1ZSk7Ci0gICAgICAgIGlm
IChpbml0aWFsRGF0ZSA8IGdsb2JhbC5taW5pbXVtRGF0ZSkKLSAgICAgICAgICAgIGluaXRpYWxE
YXRlID0gZ2xvYmFsLm1pbmltdW1EYXRlOwotICAgICAgICBlbHNlIGlmIChpbml0aWFsRGF0ZSA+
IGdsb2JhbC5tYXhpbXVtRGF0ZSkKLSAgICAgICAgICAgIGluaXRpYWxEYXRlID0gZ2xvYmFsLm1h
eGltdW1EYXRlOwotICAgICAgICBnbG9iYWwuZGF5c1RhYmxlLnNlbGVjdERhdGUoaW5pdGlhbERh
dGUpOworZnVuY3Rpb24gcmVzZXRNYWluKCkgeworICAgIHZhciBtYWluID0gJCgibWFpbiIpOwor
ICAgIG1haW4uaW5uZXJIVE1MID0gIiI7CisgICAgbWFpbi5jbGFzc05hbWUgPSAiIjsKK307CiAK
LSAgICAgICAgc2V0VGltZW91dChmaXhXaW5kb3dTaXplLCAwKTsKLSAgICB9CitmdW5jdGlvbiBv
cGVuQ2FsZW5kYXJQaWNrZXIoKSB7CisgICAgcmVzZXRNYWluKCk7CisgICAgbmV3IENhbGVuZGFy
UGlja2VyKCQoIm1haW4iKSwgZ2xvYmFsLnBhcmFtcyk7Cit9OworCisvKioKKyAqIEBjb25zdHJ1
Y3RvcgorICogQHBhcmFtIHshRWxlbWVudH0gZWxlbWVudAorICogQHBhcmFtIHshT2JqZWN0fSBj
b25maWcKKyAqLworZnVuY3Rpb24gQ2FsZW5kYXJQaWNrZXIoZWxlbWVudCwgY29uZmlnKSB7Cisg
ICAgUGlja2VyLmNhbGwodGhpcywgZWxlbWVudCwgY29uZmlnKTsKKyAgICAvLyBXZSBhc3N1bWUg
dGhpcy5fY29uZmlnLm1pbiBpcyBhIHZhbGlkIGRhdGUuCisgICAgdGhpcy5taW5pbXVtRGF0ZSA9
ICh0eXBlb2YgdGhpcy5fY29uZmlnLm1pbiAhPT0gInVuZGVmaW5lZCIpID8gcGFyc2VEYXRlU3Ry
aW5nKHRoaXMuX2NvbmZpZy5taW4pIDogQ2FsZW5kYXJQaWNrZXIuTWluaW11bVBvc3NpYmxlRGF0
ZTsKKyAgICAvLyBXZSBhc3N1bWUgdGhpcy5fY29uZmlnLm1heCBpcyBhIHZhbGlkIGRhdGUuCisg
ICAgdGhpcy5tYXhpbXVtRGF0ZSA9ICh0eXBlb2YgdGhpcy5fY29uZmlnLm1heCAhPT0gInVuZGVm
aW5lZCIpID8gcGFyc2VEYXRlU3RyaW5nKHRoaXMuX2NvbmZpZy5tYXgpIDogQ2FsZW5kYXJQaWNr
ZXIuTWF4aW11bVBvc3NpYmxlRGF0ZTsKKyAgICB0aGlzLnN0ZXAgPSAodHlwZW9mIHRoaXMuX2Nv
bmZpZy5zdGVwICE9PSB1bmRlZmluZWQpID8gdGhpcy5fY29uZmlnLnN0ZXAgKiBDYWxlbmRhclBp
Y2tlci5CYXNlU3RlcCA6IENhbGVuZGFyUGlja2VyLkJhc2VTdGVwOworICAgIHRoaXMueWVhck1v
bnRoQ29udHJvbGxlciA9IG5ldyBZZWFyTW9udGhDb250cm9sbGVyKHRoaXMpOworICAgIHRoaXMu
ZGF5c1RhYmxlID0gbmV3IERheXNUYWJsZSh0aGlzKTsKKyAgICB0aGlzLl9sYXlvdXQoKTsKKyAg
ICB2YXIgaW5pdGlhbERhdGUgPSBwYXJzZURhdGVTdHJpbmcodGhpcy5fY29uZmlnLmN1cnJlbnRW
YWx1ZSk7CisgICAgaWYgKGluaXRpYWxEYXRlIDwgdGhpcy5taW5pbXVtRGF0ZSkKKyAgICAgICAg
aW5pdGlhbERhdGUgPSB0aGlzLm1pbmltdW1EYXRlOworICAgIGVsc2UgaWYgKGluaXRpYWxEYXRl
ID4gdGhpcy5tYXhpbXVtRGF0ZSkKKyAgICAgICAgaW5pdGlhbERhdGUgPSB0aGlzLm1heGltdW1E
YXRlOworICAgIHRoaXMuZGF5c1RhYmxlLnNlbGVjdERhdGUoaW5pdGlhbERhdGUpOworICAgIHRo
aXMuZml4V2luZG93U2l6ZSgpOworICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigi
a2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxlQm9keUtleURvd24sIHRoaXMpLCBmYWxzZSk7CiB9
CitDYWxlbmRhclBpY2tlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBpY2tlci5wcm90b3R5
cGUpOworCisvLyBIYXJkIGxpbWl0cyBvZiB0eXBlPWRhdGUuIFNlZSBXZWJDb3JlL3BsYXRmb3Jt
L0RhdGVDb21wb25lbnRzLmguCitDYWxlbmRhclBpY2tlci5NaW5pbXVtUG9zc2libGVEYXRlID0g
bmV3IERhdGUoLTYyMTM1NTk2ODAwMDAwLjApOworQ2FsZW5kYXJQaWNrZXIuTWF4aW11bVBvc3Np
YmxlRGF0ZSA9IG5ldyBEYXRlKDg2NDAwMDAwMDAwMDAwMDAuMCk7CisvLyBTZWUgV2ViQ29yZS9o
dG1sL0RhdGVJbnB1dFR5cGUuY3BwLgorQ2FsZW5kYXJQaWNrZXIuQmFzZVN0ZXAgPSA4NjQwMDAw
MDsKKworQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLl9sYXlvdXQgPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpcmVjdGlvbiA9IGdsb2JhbC5wYXJhbXMuaXNSVEwgPyAi
cnRsIiA6ICJsdHIiOworICAgIHRoaXMueWVhck1vbnRoQ29udHJvbGxlci5hdHRhY2hUbyh0aGlz
Ll9lbGVtZW50KTsKKyAgICB0aGlzLmRheXNUYWJsZS5hdHRhY2hUbyh0aGlzLl9lbGVtZW50KTsK
KyAgICB0aGlzLl9sYXlvdXRCdXR0b25zKCk7Cit9OworCitDYWxlbmRhclBpY2tlci5wcm90b3R5
cGUuaGFuZGxlVG9kYXkgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7
CisgICAgdGhpcy5kYXlzVGFibGUuc2VsZWN0RGF0ZShkYXRlKTsKKyAgICB0aGlzLnN1Ym1pdFZh
bHVlKHNlcmlhbGl6ZURhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRh
dGUuZ2V0RGF0ZSgpKSk7Cit9OworCitDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuaGFuZGxlQ2xl
YXIgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN1Ym1pdFZhbHVlKCIiKTsKK307CiAKLWZ1bmN0
aW9uIGZpeFdpbmRvd1NpemUoKSB7Ci0gICAgdmFyIHllYXJNb250aFJpZ2h0RWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b25S
aWdodClbMF07Ci0gICAgdmFyIGRheXNBcmVhRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5EYXlzQXJlYSlbMF07CitDYWxlbmRhclBpY2tlci5wcm90
b3R5cGUuZml4V2luZG93U2l6ZSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB5ZWFyTW9udGhSaWdo
dEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1l
cy5ZZWFyTW9udGhCdXR0b25SaWdodClbMF07CisgICAgdmFyIGRheXNBcmVhRWxlbWVudCA9IHRo
aXMuX2VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDbGFzc05hbWVzLkRheXNBcmVhKVsw
XTsKICAgICB2YXIgaGVhZGVycyA9IGRheXNBcmVhRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKENsYXNzTmFtZXMuRGF5TGFiZWwpOwogICAgIHZhciBtYXhDZWxsV2lkdGggPSAwOwogICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7ICsraSkgewpAQCAtMzAwLDk3ICsz
NTAsNTggQEAgZnVuY3Rpb24gZml4V2luZG93U2l6ZSgpIHsKICAgICAgICAgICAgIG1heENlbGxX
aWR0aCA9IGhlYWRlcnNbaV0ub2Zmc2V0V2lkdGg7CiAgICAgfQogICAgIHZhciBEYXlzQXJlYUNv
bnRhaW5lckJvcmRlciA9IDE7Ci0gICAgdmFyIG1haW4gPSAkKCJtYWluIik7CiAgICAgdmFyIHll
YXJNb250aEVuZDsKICAgICB2YXIgZGF5c0FyZWFFbmQ7CiAgICAgaWYgKGdsb2JhbC5wYXJhbXMu
aXNSVEwpIHsKLSAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gbWFpbi5vZmZzZXRMZWZ0ICsgbWFp
bi5vZmZzZXRXaWR0aDsKKyAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fZWxlbWVudC5v
ZmZzZXRMZWZ0ICsgdGhpcy5fZWxlbWVudC5vZmZzZXRXaWR0aDsKICAgICAgICAgeWVhck1vbnRo
RW5kID0gc3RhcnRPZmZzZXQgLSB5ZWFyTW9udGhSaWdodEVsZW1lbnQub2Zmc2V0TGVmdDsKICAg
ICAgICAgZGF5c0FyZWFFbmQgPSBzdGFydE9mZnNldCAtIChkYXlzQXJlYUVsZW1lbnQub2Zmc2V0
TGVmdCArIGRheXNBcmVhRWxlbWVudC5vZmZzZXRXaWR0aCkgKyBtYXhDZWxsV2lkdGggKiA3ICsg
RGF5c0FyZWFDb250YWluZXJCb3JkZXI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgeWVhck1vbnRo
RW5kID0geWVhck1vbnRoUmlnaHRFbGVtZW50Lm9mZnNldExlZnQgKyB5ZWFyTW9udGhSaWdodEVs
ZW1lbnQub2Zmc2V0V2lkdGg7CiAgICAgICAgIGRheXNBcmVhRW5kID0gZGF5c0FyZWFFbGVtZW50
Lm9mZnNldExlZnQgKyBtYXhDZWxsV2lkdGggKiA3ICsgRGF5c0FyZWFDb250YWluZXJCb3JkZXI7
CiAgICAgfQotCiAgICAgdmFyIG1heEVuZCA9IE1hdGgubWF4KHllYXJNb250aEVuZCwgZGF5c0Fy
ZWFFbmQpOwotICAgIHZhciBNYWluUGFkZGluZyA9IDY7CisgICAgdmFyIE1haW5QYWRkaW5nID0g
NjsgLy8gRklYTUU6IEZpeCBuYW1lLgogICAgIHZhciBNYWluQm9yZGVyID0gMTsKICAgICB2YXIg
ZGVzaXJlZEJvZHlXaWR0aCA9IG1heEVuZCArIE1haW5QYWRkaW5nICsgTWFpbkJvcmRlcjsKIAot
ICAgIHZhciBtYWluSGVpZ2h0ID0gbWFpbi5vZmZzZXRIZWlnaHQ7Ci0gICAgbWFpbi5zdHlsZS53
aWR0aCA9ICJhdXRvIjsKKyAgICB2YXIgZWxlbWVudEhlaWdodCA9IHRoaXMuX2VsZW1lbnQub2Zm
c2V0SGVpZ2h0OworICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGggPSAiYXV0byI7CiAgICAg
ZGF5c0FyZWFFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgIGRheXNBcmVhRWxlbWVu
dC5zdHlsZS50YWJsZUxheW91dCA9ICJmaXhlZCI7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZShDbGFzc05hbWVzLlllYXJNb250aFVwcGVyKVswXS5zdHlsZS5kaXNwbGF5ID0g
Ii13ZWJraXQtYm94IjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENsYXNz
TmFtZXMuTW9udGhTZWxlY3RvckJveClbMF0uc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gICAg
cmVzaXplV2luZG93KGRlc2lyZWRCb2R5V2lkdGgsIG1haW5IZWlnaHQpOwotfQotCi1mdW5jdGlv
biBjaGVja0xpbWl0cygpIHsKLSAgICAvLyBIYXJkIGxpbWl0cyBvZiB0eXBlPWRhdGUuIFNlZSBX
ZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmguCi0gICAgZ2xvYmFsLm1pbmltdW1EYXRl
ID0gbmV3IERhdGUoLTYyMTM1NTk2ODAwMDAwLjApOwotICAgIGdsb2JhbC5tYXhpbXVtRGF0ZSA9
IG5ldyBEYXRlKDg2NDAwMDAwMDAwMDAwMDAuMCk7Ci0gICAgLy8gU2VlIFdlYkNvcmUvaHRtbC9E
YXRlSW5wdXRUeXBlLmNwcC4KLSAgICBnbG9iYWwuc3RlcCA9IDg2NDAwMDAwOwotCi0gICAgaWYg
KGdsb2JhbC5wYXJhbXMubWluKSB7Ci0gICAgICAgIC8vIFdlIGFzc3VtZSBwYXJhbXMubWluIGlz
IGEgdmFsaWQgZGF0ZS4KLSAgICAgICAgZ2xvYmFsLm1pbmltdW1EYXRlID0gcGFyc2VEYXRlU3Ry
aW5nKGdsb2JhbC5wYXJhbXMubWluKTsKLSAgICB9Ci0gICAgaWYgKGdsb2JhbC5wYXJhbXMubWF4
KSB7Ci0gICAgICAgIC8vIFdlIGFzc3VtZSBwYXJhbXMubWF4IGlzIGEgdmFsaWQgZGF0ZS4KLSAg
ICAgICAgZ2xvYmFsLm1heGltdW1EYXRlID0gcGFyc2VEYXRlU3RyaW5nKGdsb2JhbC5wYXJhbXMu
bWF4KTsKLSAgICB9Ci0gICAgaWYgKGdsb2JhbC5wYXJhbXMuc3RlcCkKLSAgICAgICAgZ2xvYmFs
LnN0ZXAgKj0gZ2xvYmFsLnBhcmFtcy5zdGVwOwotfQotCi1mdW5jdGlvbiBsYXlvdXQoKSB7Ci0g
ICAgaWYgKGdsb2JhbC5wYXJhbXMuaXNSVEwpCi0gICAgICAgIGRvY3VtZW50LmJvZHkuZGlyID0g
InJ0bCI7Ci0gICAgZWxzZQotICAgICAgICBkb2N1bWVudC5ib2R5LmRpciA9ICJsdHIiOwotICAg
IHZhciBtYWluID0gJCgibWFpbiIpOwotICAgIHZhciBwYXJhbXMgPSBnbG9iYWwucGFyYW1zOwot
ICAgIG1haW4ucmVtb3ZlQ2hpbGQobWFpbi5maXJzdENoaWxkKTsKLSAgICBkb2N1bWVudC5ib2R5
LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBoYW5kbGVHbG9iYWxLZXksIGZhbHNlKTsKLQot
ICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyID0gbmV3IFllYXJNb250aENvbnRyb2xsZXIo
KTsKLSAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5hdHRhY2hUbyhtYWluKTsKLSAgICBn
bG9iYWwuZGF5c1RhYmxlID0gbmV3IERheXNUYWJsZSgpOwotICAgIGdsb2JhbC5kYXlzVGFibGUu
YXR0YWNoVG8obWFpbik7Ci0gICAgbGF5b3V0QnV0dG9ucyhtYWluKTsKLX0KKyAgICB0aGlzLl9l
bGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5ZZWFyTW9udGhVcHBlcilb
MF0uc3R5bGUuZGlzcGxheSA9ICItd2Via2l0LWJveCI7CisgICAgdGhpcy5fZWxlbWVudC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKENsYXNzTmFtZXMuTW9udGhTZWxlY3RvckJveClbMF0uc3R5bGUu
ZGlzcGxheSA9ICJibG9jayI7CisgICAgcmVzaXplV2luZG93KGRlc2lyZWRCb2R5V2lkdGgsIGVs
ZW1lbnRIZWlnaHQpOworfTsKIAotLyoqCi0gKiBAcGFyYW0ge0VsZW1lbnR9IG1haW4KLSAqLwot
ZnVuY3Rpb24gbGF5b3V0QnV0dG9ucyhtYWluKSB7CitDYWxlbmRhclBpY2tlci5wcm90b3R5cGUu
X2xheW91dEJ1dHRvbnMgPSBmdW5jdGlvbigpIHsKICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRl
RWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5Ub2RheUNsZWFyQXJlYSk7Ci0gICAgZ2xvYmFsLnRv
ZGF5ID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlRvZGF5QnV0dG9uKTsKLSAg
ICBnbG9iYWwudG9kYXkudHlwZSA9ICJidXR0b24iOwotICAgIGdsb2JhbC50b2RheS52YWx1ZSA9
IGdsb2JhbC5wYXJhbXMudG9kYXlMYWJlbDsKLSAgICBnbG9iYWwudG9kYXkuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCBoYW5kbGVUb2RheSwgZmFsc2UpOwotICAgIGNvbnRhaW5lci5hcHBlbmRD
aGlsZChnbG9iYWwudG9kYXkpOwotICAgIGdsb2JhbC5jbGVhciA9IG51bGw7Ci0gICAgaWYgKCFn
bG9iYWwucGFyYW1zLnJlcXVpcmVkKSB7Ci0gICAgICAgIGdsb2JhbC5jbGVhciA9IGNyZWF0ZUVs
ZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5DbGVhckJ1dHRvbik7Ci0gICAgICAgIGdsb2JhbC5j
bGVhci50eXBlID0gImJ1dHRvbiI7Ci0gICAgICAgIGdsb2JhbC5jbGVhci52YWx1ZSA9IGdsb2Jh
bC5wYXJhbXMuY2xlYXJMYWJlbDsKLSAgICAgICAgZ2xvYmFsLmNsZWFyLmFkZEV2ZW50TGlzdGVu
ZXIoImNsaWNrIiwgaGFuZGxlQ2xlYXIsIGZhbHNlKTsKLSAgICAgICAgY29udGFpbmVyLmFwcGVu
ZENoaWxkKGdsb2JhbC5jbGVhcik7CisgICAgdGhpcy50b2RheSA9IGNyZWF0ZUVsZW1lbnQoImlu
cHV0IiwgQ2xhc3NOYW1lcy5Ub2RheUJ1dHRvbik7CisgICAgdGhpcy50b2RheS50eXBlID0gImJ1
dHRvbiI7CisgICAgdGhpcy50b2RheS52YWx1ZSA9IHRoaXMuX2NvbmZpZy50b2RheUxhYmVsOwor
ICAgIHRoaXMudG9kYXkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuaGFuZGxl
VG9kYXksIHRoaXMpLCBmYWxzZSk7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudG9k
YXkpOworICAgIHRoaXMuY2xlYXIgPSBudWxsOworICAgIGlmICghdGhpcy5fY29uZmlnLnJlcXVp
cmVkKSB7CisgICAgICAgIHRoaXMuY2xlYXIgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENsYXNz
TmFtZXMuQ2xlYXJCdXR0b24pOworICAgICAgICB0aGlzLmNsZWFyLnR5cGUgPSAiYnV0dG9uIjsK
KyAgICAgICAgdGhpcy5jbGVhci52YWx1ZSA9IHRoaXMuX2NvbmZpZy5jbGVhckxhYmVsOworICAg
ICAgICB0aGlzLmNsZWFyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLmhhbmRs
ZUNsZWFyLCB0aGlzKSwgZmFsc2UpOworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhp
cy5jbGVhcik7CiAgICAgfQotICAgIG1haW4uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICB0
aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAKLSAgICBnbG9iYWwubGFzdEZv
Y3VzYWJsZUNvbnRyb2wgPSBnbG9iYWwuY2xlYXIgfHwgZ2xvYmFsLnRvZGF5OwotfQorICAgIHRo
aXMubGFzdEZvY3VzYWJsZUNvbnRyb2wgPSB0aGlzLmNsZWFyIHx8IHRoaXMudG9kYXk7Cit9Owog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIC8qKgogICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0geyFDYWxlbmRh
clBpY2tlcn0gcGlja2VyCiAgKi8KLWZ1bmN0aW9uIFllYXJNb250aENvbnRyb2xsZXIoKSB7Citm
dW5jdGlvbiBZZWFyTW9udGhDb250cm9sbGVyKHBpY2tlcikgeworICAgIHRoaXMucGlja2VyID0g
cGlja2VyOwogICAgIC8qKgogICAgICAqIEB0eXBlIHshbnVtYmVyfQogICAgICAqLwpAQCAtNDAy
LDkgKzQxMyw5IEBAIGZ1bmN0aW9uIFllYXJNb250aENvbnRyb2xsZXIoKSB7CiB9CiAKIC8qKgot
ICogQHBhcmFtIHshRWxlbWVudH0gbWFpbgorICogQHBhcmFtIHshRWxlbWVudH0gZWxlbWVudAog
ICovCi1ZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKG1h
aW4pIHsKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmF0dGFjaFRvID0gZnVuY3Rpb24o
ZWxlbWVudCkgewogICAgIHZhciBvdXRlckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIs
IENsYXNzTmFtZXMuWWVhck1vbnRoQXJlYSk7CiAKICAgICB2YXIgaW5uZXJDb250YWluZXIgPSBj
cmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLlllYXJNb250aFVwcGVyKTsKQEAgLTQyOSwx
MyArNDQwLDEzIEBAIFllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmF0dGFjaFRvID0gZnVu
Y3Rpb24obWFpbikgewogICAgIGJveC5hcHBlbmRDaGlsZCh0aGlzLl9tb250aCk7CiAKICAgICB0
aGlzLl9hdHRhY2hSaWdodEJ1dHRvbnNUbyhpbm5lckNvbnRhaW5lcik7Ci0gICAgbWFpbi5hcHBl
bmRDaGlsZChvdXRlckNvbnRhaW5lcik7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZChvdXRlckNv
bnRhaW5lcik7CiAKICAgICB0aGlzLl93YWxsID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NO
YW1lcy5Nb250aFNlbGVjdG9yV2FsbCk7CiAgICAgdGhpcy5fd2FsbC5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIGJpbmQodGhpcy5fY2xvc2VQb3B1cCwgdGhpcyksIGZhbHNlKTsKLSAgICBtYWlu
LmFwcGVuZENoaWxkKHRoaXMuX3dhbGwpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5f
d2FsbCk7CiAKLSAgICB2YXIgbWF4aW11bVllYXIgPSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRD
RnVsbFllYXIoKTsKKyAgICB2YXIgbWF4aW11bVllYXIgPSB0aGlzLnBpY2tlci5tYXhpbXVtRGF0
ZS5nZXRVVENGdWxsWWVhcigpOwogICAgIHZhciBtYXhXaWR0aCA9IDA7CiAgICAgZm9yICh2YXIg
bSA9IDA7IG0gPCAxMjsgKyttKSB7CiAgICAgICAgIHRoaXMuX21vbnRoLnRleHRDb250ZW50ID0g
Zm9ybWF0WWVhck1vbnRoKG1heGltdW1ZZWFyLCBtKTsKQEAgLTUzNCw4ICs1NDUsOCBAQCBZZWFy
TW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5zZXRZZWFyTW9udGggPSBmdW5jdGlvbih5ZWFyLCBt
b250aCkgewogfTsKIAogWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX3JlZHJhdyA9IGZ1
bmN0aW9uKCkgewotICAgIHZhciBtaW4gPSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDRnVsbFll
YXIoKSAqIDEyICsgZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ01vbnRoKCk7Ci0gICAgdmFyIG1h
eCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwubWF4
aW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgbWluID0gdGhpcy5waWNrZXIubWluaW11
bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsgdGhpcy5waWNrZXIubWluaW11bURhdGUuZ2V0
VVRDTW9udGgoKTsKKyAgICB2YXIgbWF4ID0gdGhpcy5waWNrZXIubWF4aW11bURhdGUuZ2V0VVRD
RnVsbFllYXIoKSAqIDEyICsgdGhpcy5waWNrZXIubWF4aW11bURhdGUuZ2V0VVRDTW9udGgoKTsK
ICAgICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnRZZWFyICogMTIgKyB0aGlzLl9jdXJyZW50
TW9udGg7CiAgICAgaWYgKHRoaXMuX2xlZnQzKQogICAgICAgICB0aGlzLl9sZWZ0My5kaXNhYmxl
ZCA9IGN1cnJlbnQgLSAxMyA8IG1pbjsKQEAgLTY4MCw3ICs2OTEsNyBAQCBZZWFyTW9udGhDb250
cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlWWVhck1vbnRoQ2hhbmdlID0gZnVuY3Rpb24oKSB7CiAg
ICAgICAgIHJldHVybjsKICAgICB2YXIgbmV3WWVhciA9IE51bWJlcihyZXN1bHRbMV0pOwogICAg
IHZhciBuZXdNb250aCA9IE51bWJlcihyZXN1bHRbMl0pOwotICAgIGdsb2JhbC5kYXlzVGFibGUu
bmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVjdGlvblBvc2l0aW9uKG5ld1llYXIsIG5ld01vbnRo
KTsKKyAgICB0aGlzLnBpY2tlci5kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVj
dGlvblBvc2l0aW9uKG5ld1llYXIsIG5ld01vbnRoKTsKIH07CiAKIC8qCkBAIC03MzgsOCArNzQ5
LDggQEAgWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUJ1dHRvbkNsaWNrID0g
ZnVuY3Rpb24oZXZlbnQpIHsKICAqIEBwYXJhbSB7IW51bWJlcn0gYW1vdW50CiAgKi8KIFllYXJN
b250aENvbnRyb2xsZXIucHJvdG90eXBlLm1vdmVSZWxhdGl2ZWx5ID0gZnVuY3Rpb24oYW1vdW50
KSB7Ci0gICAgdmFyIG1pbiA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICog
MTIgKyBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDTW9udGgoKTsKLSAgICB2YXIgbWF4ID0gZ2xv
YmFsLm1heGltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGdsb2JhbC5tYXhpbXVtRGF0
ZS5nZXRVVENNb250aCgpOworICAgIHZhciBtaW4gPSB0aGlzLnBpY2tlci5taW5pbXVtRGF0ZS5n
ZXRVVENGdWxsWWVhcigpICogMTIgKyB0aGlzLnBpY2tlci5taW5pbXVtRGF0ZS5nZXRVVENNb250
aCgpOworICAgIHZhciBtYXggPSB0aGlzLnBpY2tlci5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVh
cigpICogMTIgKyB0aGlzLnBpY2tlci5tYXhpbXVtRGF0ZS5nZXRVVENNb250aCgpOwogICAgIHZh
ciBjdXJyZW50ID0gdGhpcy5fY3VycmVudFllYXIgKiAxMiArIHRoaXMuX2N1cnJlbnRNb250aDsK
ICAgICB2YXIgdXBkYXRlZCA9IGN1cnJlbnQ7CiAgICAgaWYgKGFtb3VudCA8IDApCkBAIC03NDgs
MTUgKzc1OSwxNyBAQCBZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5tb3ZlUmVsYXRpdmVs
eSA9IGZ1bmN0aW9uKGFtb3VudCkgewogICAgICAgICB1cGRhdGVkID0gY3VycmVudCArIGFtb3Vu
dCA8PSBtYXggPyBjdXJyZW50ICsgYW1vdW50IDogbWF4OwogICAgIGlmICh1cGRhdGVkID09IGN1
cnJlbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBnbG9iYWwuZGF5c1RhYmxlLm5hdmlnYXRlVG9N
b250aEFuZEtlZXBTZWxlY3Rpb25Qb3NpdGlvbihNYXRoLmZsb29yKHVwZGF0ZWQgLyAxMiksIHVw
ZGF0ZWQgJSAxMik7CisgICAgdGhpcy5waWNrZXIuZGF5c1RhYmxlLm5hdmlnYXRlVG9Nb250aEFu
ZEtlZXBTZWxlY3Rpb25Qb3NpdGlvbihNYXRoLmZsb29yKHVwZGF0ZWQgLyAxMiksIHVwZGF0ZWQg
JSAxMik7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8qKgogICogQGNvbnN0cnVjdG9yCisgKiBAcGFy
YW0geyFDYWxlbmRhclBpY2tlcn0gcGlja2VyCiAgKi8KLWZ1bmN0aW9uIERheXNUYWJsZSgpIHsK
K2Z1bmN0aW9uIERheXNUYWJsZShwaWNrZXIpIHsKKyAgICB0aGlzLnBpY2tlciA9IHBpY2tlcjsK
ICAgICAvKioKICAgICAgKiBAdHlwZSB7IW51bWJlcn0KICAgICAgKi8KQEAgLTc5MCw5ICs4MDMs
OSBAQCBEYXlzVGFibGUucHJvdG90eXBlLl9oYXNTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKIERh
eXNUYWJsZS5fV2Vla3MgPSA2OwogCiAvKioKLSAqIEBwYXJhbSB7IUVsZW1lbnR9IG1haW4KKyAq
IEBwYXJhbSB7IUVsZW1lbnR9IGVsZW1lbnQKICAqLwotRGF5c1RhYmxlLnByb3RvdHlwZS5hdHRh
Y2hUbyA9IGZ1bmN0aW9uKG1haW4pIHsKK0RheXNUYWJsZS5wcm90b3R5cGUuYXR0YWNoVG8gPSBm
dW5jdGlvbihlbGVtZW50KSB7CiAgICAgdGhpcy5fZGF5c0NvbnRhaW5lciA9IGNyZWF0ZUVsZW1l
bnQoInRhYmxlIiwgQ2xhc3NOYW1lcy5EYXlzQXJlYSk7CiAgICAgdGhpcy5fZGF5c0NvbnRhaW5l
ci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlRGF5Q2xpY2ssIHRo
aXMpLCBmYWxzZSk7CiAgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJt
b3VzZW92ZXIiLCBiaW5kKHRoaXMuX2hhbmRsZU1vdXNlT3ZlciwgdGhpcyksIGZhbHNlKTsKQEAg
LTgyMSw3ICs4MzQsNyBAQCBEYXlzVGFibGUucHJvdG90eXBlLmF0dGFjaFRvID0gZnVuY3Rpb24o
bWFpbikgewogICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9kYXlzQ29udGFpbmVyKTsK
ICAgICBjb250YWluZXIudGFiSW5kZXggPSAwOwogICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3Rl
bmVyKCJrZXlkb3duIiwgYmluZCh0aGlzLl9oYW5kbGVLZXksIHRoaXMpLCBmYWxzZSk7Ci0gICAg
bWFpbi5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29u
dGFpbmVyKTsKIAogICAgIGNvbnRhaW5lci5mb2N1cygpOwogfTsKQEAgLTgzMCwyNCArODQzLDI0
IEBAIERheXNUYWJsZS5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihtYWluKSB7CiAgKiBA
cGFyYW0geyFudW1iZXJ9IHRpbWUgZGF0ZSBpbiBtaWxsaXNlY29uZC4KICAqIEByZXR1cm4geyFi
b29sZWFufQogICovCi1mdW5jdGlvbiBzdGVwTWlzbWF0Y2godGltZSkgewotICAgIHJldHVybiAo
dGltZSAtIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkpICUgZ2xvYmFsLnN0ZXAgIT0gMDsK
K0NhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5zdGVwTWlzbWF0Y2ggPSBmdW5jdGlvbih0aW1lKSB7
CisgICAgcmV0dXJuICh0aW1lIC0gdGhpcy5taW5pbXVtRGF0ZS5nZXRUaW1lKCkpICUgdGhpcy5z
dGVwICE9IDA7CiB9CiAKIC8qKgogICogQHBhcmFtIHshbnVtYmVyfSB0aW1lIGRhdGUgaW4gbWls
bGlzZWNvbmQuCiAgKiBAcmV0dXJuIHshYm9vbGVhbn0KICAqLwotZnVuY3Rpb24gb3V0T2ZSYW5n
ZSh0aW1lKSB7Ci0gICAgcmV0dXJuIHRpbWUgPCBnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgp
IHx8IHRpbWUgPiBnbG9iYWwubWF4aW11bURhdGUuZ2V0VGltZSgpOworQ2FsZW5kYXJQaWNrZXIu
cHJvdG90eXBlLm91dE9mUmFuZ2UgPSBmdW5jdGlvbih0aW1lKSB7CisgICAgcmV0dXJuIHRpbWUg
PCB0aGlzLm1pbmltdW1EYXRlLmdldFRpbWUoKSB8fCB0aW1lID4gdGhpcy5tYXhpbXVtRGF0ZS5n
ZXRUaW1lKCk7CiB9CiAKIC8qKgogICogQHBhcmFtIHshbnVtYmVyfSB0aW1lIGRhdGUgaW4gbWls
bGlzZWNvbmQuCiAgKiBAcmV0dXJuIHshYm9vbGVhbn0KICAqLwotZnVuY3Rpb24gaXNWYWxpZERh
dGUodGltZSkgewotICAgIHJldHVybiAhb3V0T2ZSYW5nZSh0aW1lKSAmJiAhc3RlcE1pc21hdGNo
KHRpbWUpOworQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLmlzVmFsaWREYXRlID0gZnVuY3Rpb24o
dGltZSkgeworICAgIHJldHVybiAhdGhpcy5vdXRPZlJhbmdlKHRpbWUpICYmICF0aGlzLnN0ZXBN
aXNtYXRjaCh0aW1lKTsKIH0KIAogLyoqCkBAIC04NzMsOSArODg2LDkgQEAgRGF5c1RhYmxlLnBy
b3RvdHlwZS5fcmVuZGVyTW9udGggPSBmdW5jdGlvbih5ZWFyLCBtb250aCkgewogICAgICAgICAg
ICAgZWxlbWVudC5pbm5lclRleHQgPSBsb2NhbGl6ZU51bWJlcihkYXlJdGVyYXRvci5nZXRVVENE
YXRlKCkpOwogICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBDbGFzc05hbWVzLkRheTsK
ICAgICAgICAgICAgIGVsZW1lbnQuZGF0YXNldC5zdWJtaXRWYWx1ZSA9IHNlcmlhbGl6ZURhdGUo
aXRlclllYXIsIGl0ZXJNb250aCwgZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsKLSAgICAgICAg
ICAgIGlmIChvdXRPZlJhbmdlKHRpbWUpKQorICAgICAgICAgICAgaWYgKHRoaXMucGlja2VyLm91
dE9mUmFuZ2UodGltZSkpCiAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENs
YXNzTmFtZXMuVW5hdmFpbGFibGUpOwotICAgICAgICAgICAgZWxzZSBpZiAoc3RlcE1pc21hdGNo
KHRpbWUpKQorICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5waWNrZXIuc3RlcE1pc21hdGNoKHRp
bWUpKQogICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlVu
YXZhaWxhYmxlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKChpdGVyWWVhciA9PSB5ZWFyICYmIGRh
eUl0ZXJhdG9yLmdldFVUQ01vbnRoKCkgPCBtb250aCkgfHwgKG1vbnRoID09IDAgJiYgaXRlck1v
bnRoID09IDExKSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFz
c05hbWVzLkF2YWlsYWJsZSk7CkBAIC04OTIsNyArOTA1LDcgQEAgRGF5c1RhYmxlLnByb3RvdHlw
ZS5fcmVuZGVyTW9udGggPSBmdW5jdGlvbih5ZWFyLCBtb250aCkgewogICAgICAgICB9CiAgICAg
fQogCi0gICAgZ2xvYmFsLnRvZGF5LmRpc2FibGVkID0gIWlzVmFsaWREYXRlKHBhcnNlRGF0ZVN0
cmluZygpLmdldFRpbWUoKSk7CisgICAgdGhpcy5waWNrZXIudG9kYXkuZGlzYWJsZWQgPSAhdGhp
cy5waWNrZXIuaXNWYWxpZERhdGUocGFyc2VEYXRlU3RyaW5nKCkuZ2V0VGltZSgpKTsKIH07CiAK
IC8qKgpAQCAtOTAwLDcgKzkxMyw3IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRo
ID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKICAqIEBwYXJhbSB7IW51bWJlcn0gbW9udGgKICAq
LwogRGF5c1RhYmxlLnByb3RvdHlwZS5fbmF2aWdhdGVUb01vbnRoID0gZnVuY3Rpb24oeWVhciwg
bW9udGgpIHsKLSAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5zZXRZZWFyTW9udGgoeWVh
ciwgbW9udGgpOworICAgIHRoaXMucGlja2VyLnllYXJNb250aENvbnRyb2xsZXIuc2V0WWVhck1v
bnRoKHllYXIsIG1vbnRoKTsKICAgICB0aGlzLl9yZW5kZXJNb250aCh5ZWFyLCBtb250aCk7CiB9
OwogCkBAIC05NzUsNyArOTg4LDcgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXRQcmV2
aW91c01vbnRoID0gZnVuY3Rpb24oKSB7CiAgICAgdmFyIHllYXIgPSBnbG9iYWwueWVhck1vbnRo
Q29udHJvbGxlci55ZWFyKCk7CiAgICAgdmFyIG1vbnRoID0gZ2xvYmFsLnllYXJNb250aENvbnRy
b2xsZXIubW9udGgoKTsKICAgICB2YXIgdGhpc01vbnRoU3RhcnRUaW1lID0gY3JlYXRlVVRDRGF0
ZSh5ZWFyLCBtb250aCwgMSkuZ2V0VGltZSgpOwotICAgIGlmIChnbG9iYWwubWluaW11bURhdGUu
Z2V0VGltZSgpID49IHRoaXNNb250aFN0YXJ0VGltZSkKKyAgICBpZiAodGhpcy5taW5pbXVtRGF0
ZS5nZXRUaW1lKCkgPj0gdGhpc01vbnRoU3RhcnRUaW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKG1vbnRoID09IDApIHsKICAgICAgICAgeWVhci0tOwpAQCAtOTk4LDcgKzEwMTEs
NyBAQCBEYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldE5leHRNb250aCA9IGZ1bmN0aW9uKCkg
ewogICAgIH0gZWxzZQogICAgICAgICBtb250aCsrOwogICAgIHZhciBuZXh0TW9udGhTdGFydFRp
bWUgPSBjcmVhdGVVVENEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXRUaW1lKCk7Ci0gICAgaWYgKGds
b2JhbC5tYXhpbXVtRGF0ZS5nZXRUaW1lKCkgPCBuZXh0TW9udGhTdGFydFRpbWUpCisgICAgaWYg
KHRoaXMucGlja2VyLm1heGltdW1EYXRlLmdldFRpbWUoKSA8IG5leHRNb250aFN0YXJ0VGltZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHRoaXMuX25hdmlnYXRlVG9Nb250aFdpdGhBbmlt
YXRpb24oeWVhciwgbW9udGgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTAwOSw3ICsxMDIyLDcg
QEAgRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXROZXh0TW9udGggPSBmdW5jdGlvbigpIHsK
ICAqLwogRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlRGF5Q2xpY2sgPSBmdW5jdGlvbihldmVu
dCkgewogICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMu
QXZhaWxhYmxlKSkKLSAgICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQuc3Vi
bWl0VmFsdWUpOworICAgICAgICB0aGlzLnBpY2tlci5zdWJtaXRWYWx1ZShldmVudC50YXJnZXQu
ZGF0YXNldC5zdWJtaXRWYWx1ZSk7CiB9OwogCiAvKioKQEAgLTExMTAsNyArMTEyMyw3IEBAIERh
eXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZUtleSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgfSBl
bHNlIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24oKSAmJiBrZXkgPT0gIkVudGVyIikgewogICAgICAg
ICB2YXIgZGF5Tm9kZSA9IHRoaXMuX2RheXNbeV1beF07CiAgICAgICAgIGlmIChkYXlOb2RlLmNs
YXNzTGlzdC5jb250YWlucyhDbGFzc05hbWVzLkF2YWlsYWJsZSkpIHsKLSAgICAgICAgICAgIHN1
Ym1pdFZhbHVlKGRheU5vZGUuZGF0YXNldC5zdWJtaXRWYWx1ZSk7CisgICAgICAgICAgICB0aGlz
LnBpY2tlci5zdWJtaXRWYWx1ZShkYXlOb2RlLmRhdGFzZXQuc3VibWl0VmFsdWUpOwogICAgICAg
ICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgIH0KIApAQCAtMTEzOSw1MyAr
MTE1MiwzMCBAQCBEYXlzVGFibGUucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9u
KGV2ZW50LCB4LCB5KSB7CiAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKIH07CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotZnVuY3Rpb24gaGFuZGxlVG9kYXkoKSB7Ci0gICAgdmFyIGRhdGUgPSBuZXcgRGF0
ZSgpOwotICAgIGdsb2JhbC5kYXlzVGFibGUuc2VsZWN0RGF0ZShkYXRlKTsKLSAgICBzdWJtaXRW
YWx1ZShzZXJpYWxpemVEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBk
YXRlLmdldERhdGUoKSkpOwotfQotCi1mdW5jdGlvbiBoYW5kbGVDbGVhcigpIHsKLSAgICBzdWJt
aXRWYWx1ZSgiIik7Ci19Ci0KIC8qKgotICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCi0gKi8KLWZ1
bmN0aW9uIHN1Ym1pdFZhbHVlKHZhbHVlKSB7Ci0gICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xs
ZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKDAsIHZhbHVlKTsKLX0KLQotZnVuY3Rpb24gaGFuZGxl
Q2FuY2VsKCkgewotICAgIHdpbmRvdy5wYWdlUG9wdXBDb250cm9sbGVyLnNldFZhbHVlQW5kQ2xv
c2VQb3B1cCgtMSwgIiIpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKiBA
cGFyYW0geyFFdmVudH0gZXZlbnQKICAqLwotZnVuY3Rpb24gaGFuZGxlR2xvYmFsS2V5KGV2ZW50
KSB7CitDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuX2hhbmRsZUJvZHlLZXlEb3duID0gZnVuY3Rp
b24oZXZlbnQpIHsKICAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKICAgICB2YXIga2V5ID0g
ZXZlbnQua2V5SWRlbnRpZmllcjsKICAgICBpZiAoa2V5ID09ICJVKzAwMDkiKSB7CiAgICAgICAg
IGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9iYWwu
bGFzdEZvY3VzYWJsZUNvbnRyb2wpIHsKICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlv
bigpOwogICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIGds
b2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wuZm9jdXMoKTsKKyAgICAgICAgICAgIHRoaXMuZmly
c3RGb2N1c2FibGVDb250cm9sLmZvY3VzKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hp
ZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9iYWwuZmlyc3RGb2N1c2FibGVD
b250cm9sKSB7CiAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICBnbG9iYWwubGFzdEZvY3Vz
YWJsZUNvbnRyb2wuZm9jdXMoKTsKKyAgICAgICAgICAgIHRoaXMubGFzdEZvY3VzYWJsZUNvbnRy
b2wuZm9jdXMoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNEQiKSB7
IC8vICdtJwotICAgICAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5tb3ZlUmVsYXRpdmVs
eShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNNb250aCA6IFll
YXJNb250aENvbnRyb2xsZXIuTmV4dE1vbnRoKTsKKyAgICAgICAgdGhpcy55ZWFyTW9udGhDb250
cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxl
ci5QcmV2aW91c01vbnRoIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0TW9udGgpOwogICAgIH0g
ZWxzZSBpZiAoa2V5ID09ICJVKzAwNTkiKSB7IC8vICd5JwotICAgICAgICBnbG9iYWwueWVhck1v
bnRoQ29udHJvbGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENv
bnRyb2xsZXIuUHJldmlvdXNZZWFyIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0WWVhcik7Cisg
ICAgICAgIHRoaXMueWVhck1vbnRoQ29udHJvbGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlm
dEtleSA/IFllYXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNZZWFyIDogWWVhck1vbnRoQ29udHJv
bGxlci5OZXh0WWVhcik7CiAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA0NCIpIHsgLy8gJ2Qn
Ci0gICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50
LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1RlblllYXJzIDogWWVhck1v
bnRoQ29udHJvbGxlci5OZXh0VGVuWWVhcnMpOworICAgICAgICB0aGlzLnllYXJNb250aENvbnRy
b2xsZXIubW92ZVJlbGF0aXZlbHkoZXZlbnQuc2hpZnRLZXkgPyBZZWFyTW9udGhDb250cm9sbGVy
LlByZXZpb3VzVGVuWWVhcnMgOiBZZWFyTW9udGhDb250cm9sbGVyLk5leHRUZW5ZZWFycyk7CiAg
ICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDAxQiIpIC8vIEVTQwotICAgICAgICBoYW5kbGVDYW5j
ZWwoKTsKKyAgICAgICAgdGhpcy5oYW5kbGVDYW5jZWwoKTsKIH0KIAogZnVuY3Rpb24gbWF5YmVV
cGRhdGVGb2N1c1N0eWxlKCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2Vz
L3BhZ2Vwb3B1cHMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVz
b3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzCmluZGV4IGQ0OGNiOTZl
N2ZjMTY0NTI2ZDYyYzc1MWUyYmU2OTY0Njc2ZTBkNDMuLjRkNzBkYWJmZGM2NGFjZmNmODRkZTBm
MmFiOTRlMzIwNmUyMmZjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9w
YWdlcG9wdXBzL2NvbG9yU3VnZ2VzdGlvblBpY2tlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9S
ZXNvdXJjZXMvcGFnZXBvcHVwcy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIuanMKQEAgLTc0LDI5ICs3
NCw4IEBAIGZ1bmN0aW9uIHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpIHsKICAgICByZXR1cm4gbnVs
bDsKIH0KIAotdmFyIEFjdGlvbnMgPSB7Ci0gICAgQ2hvb3NlT3RoZXJDb2xvcjogLTIsCi0gICAg
Q2FuY2VsOiAtMSwKLSAgICBTZXRWYWx1ZTogMAotfTsKLQotLyoqCi0gKiBAcGFyYW0ge3N0cmlu
Z30gdmFsdWUKLSAqLwotZnVuY3Rpb24gc3VibWl0VmFsdWUodmFsdWUpIHsKLSAgICB3aW5kb3cu
cGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoQWN0aW9ucy5TZXRWYWx1
ZSwgdmFsdWUpOwotfQotCi1mdW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7Ci0gICAgd2luZG93LnBh
Z2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMuQ2FuY2VsLCAi
Iik7Ci19Ci0KLWZ1bmN0aW9uIGNob29zZU90aGVyQ29sb3IoKSB7Ci0gICAgd2luZG93LnBhZ2VQ
b3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMuQ2hvb3NlT3RoZXJD
b2xvciwgIiIpOwotfQotCiBmdW5jdGlvbiBDb2xvclBpY2tlcihlbGVtZW50LCBjb25maWcpIHsK
LSAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKKyAgICBQaWNrZXIuY2FsbCh0aGlzLCBlbGVt
ZW50LCBjb25maWcpOwogICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZzsKICAgICBpZiAodGhpcy5f
Y29uZmlnLnZhbHVlcy5sZW5ndGggPT09IDApCiAgICAgICAgIHRoaXMuX2NvbmZpZy52YWx1ZXMg
PSBEZWZhdWx0Q29sb3JQYWxldHRlOwpAQCAtMTA2LDYgKzg1LDcgQEAgZnVuY3Rpb24gQ29sb3JQ
aWNrZXIoZWxlbWVudCwgY29uZmlnKSB7CiAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJtb3VzZW1vdmUiLCBiaW5kKHRoaXMuX2hhbmRsZU1vdXNlTW92ZSwgdGhpcykpOwogICAg
IHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgYmluZCh0aGlzLl9o
YW5kbGVNb3VzZURvd24sIHRoaXMpKTsKIH0KK0NvbG9yUGlja2VyLnByb3RvdHlwZSA9IE9iamVj
dC5jcmVhdGUoUGlja2VyLnByb3RvdHlwZSk7CiAKIHZhciBTd2F0Y2hCb3JkZXJCb3hXaWR0aCA9
IDI0OyAvLyBrZWVwIGluIHN5bmMgd2l0aCBDU1MKIHZhciBTd2F0Y2hCb3JkZXJCb3hIZWlnaHQg
PSAyNDsgLy8ga2VlcCBpbiBzeW5jIHdpdGggQ1NTCkBAIC0xMzAsNyArMTEwLDcgQEAgQ29sb3JQ
aWNrZXIucHJvdG90eXBlLl9sYXlvdXQgPSBmdW5jdGlvbigpIHsKICAgICBjb250YWluZXIuc3R5
bGUubWF4SGVpZ2h0ID0gKFN3YXRjaEJvcmRlckJveEhlaWdodCAqIFN3YXRjaGVzTWF4Um93KSAr
ICJweCI7CiAgICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgIHZh
ciBvdGhlckJ1dHRvbiA9IGNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIsICJvdGhlci1jb2xvciIsIHRo
aXMuX2NvbmZpZy5vdGhlckNvbG9yTGFiZWwpOwotICAgIG90aGVyQnV0dG9uLmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgY2hvb3NlT3RoZXJDb2xvciwgZmFsc2UpOworICAgIG90aGVyQnV0dG9u
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5jaG9vc2VPdGhlckNvbG9yLmJpbmQodGhp
cyksIGZhbHNlKTsKICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKG90aGVyQnV0dG9uKTsK
ICAgICB0aGlzLl9jb250YWluZXIgPSBjb250YWluZXI7CiAgICAgdGhpcy5fb3RoZXJCdXR0b24g
PSBvdGhlckJ1dHRvbjsKQEAgLTE1OCw3ICsxMzgsNyBAQCBDb2xvclBpY2tlci5wcm90b3R5cGUu
X2hhbmRsZU1vdXNlRG93biA9IGZ1bmN0aW9uKGV2ZW50KSB7CiBDb2xvclBpY2tlci5wcm90b3R5
cGUuX2hhbmRsZUtleURvd24gPSBmdW5jdGlvbihldmVudCkgewogICAgIHZhciBrZXkgPSBldmVu
dC5rZXlJZGVudGlmaWVyOwogICAgIGlmIChrZXkgPT09ICJVKzAwMUIiKSAvLyBFU0MKLSAgICAg
ICAgaGFuZGxlQ2FuY2VsKCk7CisgICAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsKCk7CiAgICAgZWxz
ZSBpZiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBr
ZXkgPT0gIkRvd24iKSB7CiAgICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBkb2N1bWVudC5h
Y3RpdmVFbGVtZW50OwogICAgICAgICB2YXIgaW5kZXggPSAwOwpAQCAtMTk0LDcgKzE3NCw3IEBA
IENvbG9yUGlja2VyLnByb3RvdHlwZS5faGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uKGV2ZW50KSB7
CiAKIENvbG9yUGlja2VyLnByb3RvdHlwZS5faGFuZGxlU3dhdGNoQ2xpY2sgPSBmdW5jdGlvbihl
dmVudCkgewogICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjb2xvci1z
d2F0Y2giKSkKLSAgICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQudmFsdWUp
OworICAgICAgICB0aGlzLnN1Ym1pdFZhbHVlKGV2ZW50LnRhcmdldC5kYXRhc2V0LnZhbHVlKTsK
IH07CiAKIGlmICh3aW5kb3cuZGlhbG9nQXJndW1lbnRzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9waWNrZXJDb21tb24uanMgYi9Tb3VyY2UvV2Vi
Q29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9waWNrZXJDb21tb24uanMKaW5kZXggZGZiMjkxODE0
OWU1YzljNmY1ODAxMjc2NWJkZDg1NzE1Yzc4NTNmYi4uNDU5ODZmMmY3M2JkYzBhNmIyZDc3ZDcw
NmQzNzI5MzU4MTEzYzg2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3Bh
Z2Vwb3B1cHMvcGlja2VyQ29tbW9uLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9w
YWdlcG9wdXBzL3BpY2tlckNvbW1vbi5qcwpAQCAtNzYsMyArNzYsMzcgQEAgZnVuY3Rpb24gZ2V0
U2Nyb2xsYmFyV2lkdGgoKSB7CiAgICAgfQogICAgIHJldHVybiB3aW5kb3cuc2Nyb2xsYmFyV2lk
dGg7CiB9CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0geyFFbGVtZW50fSBlbGVt
ZW50CisgKiBAcGFyYW0geyFPYmplY3R9IGNvbmZpZworICovCitmdW5jdGlvbiBQaWNrZXIoZWxl
bWVudCwgY29uZmlnKSB7CisgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgdGhpcy5f
Y29uZmlnID0gY29uZmlnOworfQorCisvKioKKyAqIEBlbnVtIHtudW1iZXJ9CisgKi8KK1BpY2tl
ci5BY3Rpb25zID0geworICAgIFNldFZhbHVlOiAwLAorICAgIENhbmNlbDogLTEsCisgICAgQ2hv
b3NlT3RoZXJDb2xvcjogLTIKK307CisKKy8qKgorICogQHBhcmFtIHshc3RyaW5nfSB2YWx1ZQor
ICovCitQaWNrZXIucHJvdG90eXBlLnN1Ym1pdFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAg
ICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoUGlja2Vy
LkFjdGlvbnMuU2V0VmFsdWUsIHZhbHVlKTsKK30KKworUGlja2VyLnByb3RvdHlwZS5oYW5kbGVD
YW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5zZXRW
YWx1ZUFuZENsb3NlUG9wdXAoUGlja2VyLkFjdGlvbnMuQ2FuY2VsLCAiIik7Cit9CisKK1BpY2tl
ci5wcm90b3R5cGUuY2hvb3NlT3RoZXJDb2xvciA9IGZ1bmN0aW9uKCkgeworICAgIHdpbmRvdy5w
YWdlUG9wdXBDb250cm9sbGVyLnNldFZhbHVlQW5kQ2xvc2VQb3B1cChQaWNrZXIuQWN0aW9ucy5D
aG9vc2VPdGhlckNvbG9yLCAiIik7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmQ0MjU3NDM3MzI4OTIzZjY0YzYwM2Q5
ZGFkMmExNjE4ZmY3MjhlNC4uMWQ1ZmE5ZjkxYjViOGYzMDNiMTA0MDMxMDI5MDA2ZGY2OTFiMWVj
ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA5LTA1ICBLZWlzaGkgSGF0dG9yaSAgPGtl
aXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlZmFjdG9yIENhbGVuZGFyUGlja2VyIHRvIG5v
dCB1c2UgZ2xvYmFsIHZhcmlhYmxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTk1ODMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2RhdGUvY2FsZW5kYXItcGlja2VyLWFwcGVhcmFu
Y2UtcHJlLTEwMC5odG1sOgorCiAyMDEyLTA5LTA1ICBab2x0YW4gQXJ2YWkgIDx6YXJ2YWlAaW5m
LnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2RhdGUvY2FsZW5kYXItcGlja2VyLWFwcGVh
cmFuY2UtcHJlLTEwMC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9kYXRlL2NhbGVuZGFy
LXBpY2tlci1hcHBlYXJhbmNlLXByZS0xMDAuaHRtbAppbmRleCBkMmExNDZiMWQ1MzczZDQzMjJh
ODk1YmJkYzU3MzBjMTk1MWFlNzY0Li44MmQ0ZTI2ZGQzNmZiOTg1OWI4MjU2ZDEyN2YyZGNmMjlh
Y2UzMmExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2RhdGUvY2FsZW5kYXIt
cGlja2VyLWFwcGVhcmFuY2UtcHJlLTEwMC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvZGF0ZS9jYWxlbmRhci1waWNrZXItYXBwZWFyYW5jZS1wcmUtMTAwLmh0bWwKQEAgLTgsMTYg
KzgsMTcgQEAKIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogPGlucHV0IHR5cGU9ZGF0ZSBpZD1k
YXRlIHZhbHVlPSIwMDAyLTAyLTAyIj4KIDxzY3JpcHQ+Ci1mdW5jdGlvbiBzZW5kS2V5KGlucHV0
LCBrZXlOYW1lKSB7CitmdW5jdGlvbiBzZW5kS2V5KGVsZW1lbnQsIGtleU5hbWUpIHsKICAgICB2
YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnS2V5Ym9hcmRFdmVudCcpOwogICAgIGV2
ZW50LmluaXRLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgdHJ1ZSwgdHJ1ZSwgZG9jdW1lbnQuZGVm
YXVsdFZpZXcsIGtleU5hbWUpOwotICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAg
IGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIGZ1bmN0aW9uIGZpbmlzaFRlc3Qo
KSB7CiAgICAgcGlja2VyV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZpbmlz
aFRlc3QpOwotICAgIHNlbmRLZXkocGlja2VyV2luZG93Lmdsb2JhbC5kYXlzVGFibGUuX2RheXND
b250YWluZXIsICdSaWdodCcpOwotICAgIHNlbmRLZXkocGlja2VyV2luZG93Lmdsb2JhbC5kYXlz
VGFibGUuX2RheXNDb250YWluZXIsICdFbnRlcicpOworICAgIHZhciBkYXlzQ29udGFpbmVyID0g
cGlja2VyV2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImRheXMtYXJlYSIp
WzBdOworICAgIHNlbmRLZXkoZGF5c0NvbnRhaW5lciwgJ1JpZ2h0Jyk7CisgICAgc2VuZEtleShk
YXlzQ29udGFpbmVyLCAnRW50ZXInKTsKICAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImRhdGUiKS52YWx1ZScsICciMDAwMi0wMi0wMyInKTsKICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeyBmaW5pc2hKU1Rlc3QoKTsgfSwgMCk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>