<?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>35148</bug_id>
          
          <creation_ts>2010-02-19 05:32:32 -0800</creation_ts>
          <short_desc>Web Inspector: support debugging of workers.</short_desc>
          <delta_ts>2010-02-25 03:25:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrey Kosyakov">caseq</reporter>
          <assigned_to name="Andrey Kosyakov">caseq</assigned_to>
          <cc>ap</cc>
    
    <cc>bweinstein</cc>
    
    <cc>caseq</cc>
    
    <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>191874</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-02-19 05:32:32 -0800</bug_when>
    <thetext>Currently, scripts started as workers are not shown in inspector&apos;s script pane and hence can&apos;t be debugged.
It is suggested that we implement a workaround first, by injecting a script that overrides Worker constructor with a mock implementation that simulates Workers using a separate iframe. This requires inspector to be able to inject a script into inspected page on an early stage (i.e. before any user JS code is parsed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193280</commentid>
    <comment_count>1</comment_count>
      <attachid>49369</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-02-24 02:35:18 -0800</bug_when>
    <thetext>Created attachment 49369
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193294</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-02-24 03:40:01 -0800</bug_when>
    <thetext>Why no r? and obsolete?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193310</commentid>
    <comment_count>3</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-02-24 05:14:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Why no r? and obsolete?

There are some problems with this patch, the right version is coming on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193311</commentid>
    <comment_count>4</comment_count>
      <attachid>49380</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-02-24 05:18:44 -0800</bug_when>
    <thetext>Created attachment 49380
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193317</commentid>
    <comment_count>5</comment_count>
      <attachid>49380</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-24 05:26:12 -0800</bug_when>
    <thetext>Comment on attachment 49380
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled

&gt; +            &apos;inspector/front-end/InjectedFakeWorkers.js&apos;,

Rename to InjectedFrameWorker.js?

&gt;  
&gt; +void InjectedScriptHost::addScriptToEvaluateOnLoad(const String&amp; source)
&gt; +{
&gt; +    m_scriptsToEvaluateOnLoad.append(source);
&gt; +}
&gt; +

&gt; +void InjectedScriptHost::removeAllScriptsEvaluatedOnLoad()
&gt; +{

Name is misleading - you don&apos;t really remove evaluated scripts. removeAllScriptsToEvaluateOnLoad() ?


&gt; +void InjectedScriptHost::evaluateOnLoadScripts(Frame *frame)
&gt; +{

This could be done in InspectorBackend (or InspectorController) explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193335</commentid>
    <comment_count>6</comment_count>
      <attachid>49388</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-02-24 06:52:18 -0800</bug_when>
    <thetext>Created attachment 49388
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (review suggestions addressed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193355</commentid>
    <comment_count>7</comment_count>
      <attachid>49388</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-24 07:55:23 -0800</bug_when>
    <thetext>Comment on attachment 49388
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (review suggestions addressed)

A bunch of style nits, otherwise looks good. Please go through the { } alignment, blank lines and wrapped lines, then we can do cq+!
Btw, where is the injecting code itself?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193371</commentid>
    <comment_count>8</comment_count>
      <attachid>49397</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-02-24 08:28:53 -0800</bug_when>
    <thetext>Created attachment 49397
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (nits picked)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193372</commentid>
    <comment_count>9</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-02-24 08:32:19 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 49388 [details])
&gt; Btw, where is the injecting code itself?

It&apos;s not there yet, as it needs to be done conditionally on a UI option (i.e. &quot;enable workers debugging&quot;) -- I&apos;m working on it right now. I&apos;m planning to submit it as a separate change soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193621</commentid>
    <comment_count>10</comment_count>
      <attachid>49397</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-24 20:51:47 -0800</bug_when>
    <thetext>Comment on attachment 49397
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (nits picked)

Rejecting patch 49397 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Pavel Feldman&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
ipping patch.
1 out of 1 hunk ignored
can&apos;t find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: inspector/front-end/inspector.html
|===================================================================
|--- inspector/front-end/inspector.html	(revision 55161)
|+++ inspector/front-end/inspector.html	(working copy)
--------------------------
No file to patch.  Skipping patch.
1 out of 1 hunk ignored

Full output: http://webkit-commit-queue.appspot.com/results/308353</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193663</commentid>
    <comment_count>11</comment_count>
      <attachid>49471</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-02-25 02:59:15 -0800</bug_when>
    <thetext>Created attachment 49471
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (rebased to correct root path)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193664</commentid>
    <comment_count>12</comment_count>
      <attachid>49397</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2010-02-25 03:00:15 -0800</bug_when>
    <thetext>Comment on attachment 49397
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (nits picked)

Invalid base path</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193666</commentid>
    <comment_count>13</comment_count>
      <attachid>49471</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-25 03:24:59 -0800</bug_when>
    <thetext>Comment on attachment 49471
A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (rebased to correct root path)

Clearing flags on attachment: 49471

Committed r55227: &lt;http://trac.webkit.org/changeset/55227&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193667</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-25 03:25:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49369</attachid>
            <date>2010-02-24 02:35:18 -0800</date>
            <delta_ts>2010-02-24 02:39:30 -0800</delta_ts>
            <desc>A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled</desc>
            <filename>diff-13684a</filename>
            <type>text/plain</type>
            <size>16229</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">SW5kZXg6IEU6L2Nhc2VxL2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gRTovY2FzZXEvY2hy
b21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmgJKHJldmlzaW9uIDU1MTYxKQ0KKysrIEU6L2Nhc2VxL2Nocm9taXVtL3NyYy90aGly
ZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtMTAxLDYgKzEwMSw4IEBADQogDQogICAgIHZvaWQgZ2V0UHJvZmlsZUhl
YWRlcnMobG9uZyBjYWxsSWQpOw0KICAgICB2b2lkIGdldFByb2ZpbGUobG9uZyBjYWxsSWQsIHVu
c2lnbmVkIHVpZCk7DQorICAgIHZvaWQgYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChjb25zdCBT
dHJpbmcmIHNvdXJjZSk7DQorICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c0V2YWx1YXRlZE9uTG9h
ZCgpOw0KICNlbmRpZg0KIA0KICAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0
IFN0cmluZyYgc291cmNlKTsNCkluZGV4OiBFOi9jYXNlcS9jaHJvbWl1bS9zcmMvdGhpcmRfcGFy
dHkvV2ViS2l0L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gRTovY2FzZXEvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAkocmV2aXNpb24gNTUxNjEpDQorKysgRTov
Y2FzZXEvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmlkbAkod29ya2luZyBjb3B5KQ0KQEAgLTc2LDYgKzc2LDkgQEANCiAN
CiAgICAgICAgIHZvaWQgZ2V0UHJvZmlsZUhlYWRlcnMoaW4gbG9uZyBjYWxsSWQpOw0KICAgICAg
ICAgdm9pZCBnZXRQcm9maWxlKGluIGxvbmcgY2FsbElkLCBpbiB1bnNpZ25lZCBsb25nIHVpZCk7
DQorDQorICAgICAgICB2b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoaW4gRE9NU3RyaW5n
IHNjcmlwdFNvdXJjZSk7DQorICAgICAgICB2b2lkIHJlbW92ZUFsbFNjcmlwdHNFdmFsdWF0ZWRP
bkxvYWQoKTsNCiAjZW5kaWYNCiAgICAgICAgIHZvaWQgc2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2Uo
aW4gRE9NU3RyaW5nIHNjcmlwdFNvdXJjZSk7DQogICAgICAgICB2b2lkIGRpc3BhdGNoT25Jbmpl
Y3RlZFNjcmlwdChpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBpbmplY3RlZFNjcmlwdElkLCBpbiBE
T01TdHJpbmcgbWV0aG9kTmFtZSwgaW4gRE9NU3RyaW5nIGFyZ3VtZW50cywgaW4gYm9vbGVhbiBh
c3luYyk7DQpJbmRleDogRTovY2FzZXEvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtlV29ya2Vycy5qcw0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIEU6L2Nhc2VxL2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkRmFrZVdvcmtlcnMuanMJKHJldmlzaW9uIDAp
DQorKysgRTovY2FzZXEvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtlV29ya2Vycy5qcwkocmV2aXNpb24gMCkNCkBA
IC0wLDAgKzEsMjcyIEBADQorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUNCisgKiBtZXQ6DQorICoNCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlDQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiBkaXN0cmlidXRpb24uDQorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cw0KKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VA0KKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUg0KKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKw0KK3Zh
ciBJbmplY3RlZEZha2VXb3JrZXJzID0gZnVuY3Rpb24oKQ0KK3sNCisNCitXb3JrZXIgPSBmdW5j
dGlvbih1cmwpDQorew0KKyAgICB2YXIgaW1wbCA9IG5ldyBGYWtlV29ya2VyKHRoaXMsIHVybCk7
DQorICAgIGlmIChpbXBsID09PSBudWxsKQ0KKyAgICAgICAgcmV0dXJuIG51bGw7DQorDQorICAg
IHRoaXMuaXNGYWtlID0gdHJ1ZTsNCisgICAgdGhpcy5wb3N0TWVzc2FnZSA9IGJpbmQoaW1wbC5w
b3N0TWVzc2FnZSwgaW1wbCk7DQorICAgIHRoaXMudGVybWluYXRlID0gYmluZChpbXBsLnRlcm1p
bmF0ZSwgaW1wbCk7DQorICAgIHRoaXMub25tZXNzYWdlID0gbm9vcDsNCit9DQorDQorZnVuY3Rp
b24gRmFrZVdvcmtlcih3b3JrZXIsIHVybCkNCit7DQorICAgIHZhciBzY3JpcHRVUkwgPSBuZXcg
VVJMKGRvY3VtZW50LmJhc2VVUkkpLmNvbXBsZXRlV2l0aCh1cmwpOw0KKw0KKyAgICBpZiAoIXNj
cmlwdFVSTC5zYW1lT3JpZ2luKGxvY2F0aW9uLmhyZWYpKQ0KKyAgICAgICAgdGhyb3cgbmV3IERP
TUNvcmVFeGNlcHRpb24oIlNFQ1VSSVRZX0VSUiIsMTgpOw0KKw0KKyAgICB0aGlzLl93b3JrZXIg
PSB3b3JrZXI7DQorICAgIHRoaXMuX2J1aWxkV29ya2VyKHNjcmlwdFVSTCk7DQorfQ0KKw0KK0Zh
a2VXb3JrZXIucHJvdG90eXBlID0gew0KKw0KKyAgICBwb3N0TWVzc2FnZTogZnVuY3Rpb24obXNn
KQ0KKyAgICB7DQorICAgICAgICBpZiAodGhpcy5fZnJhbWUgIT0gbnVsbCkNCisgICAgICAgICAg
ICB0aGlzLl9kaXNwYXRjaE1lc3NhZ2UodGhpcy5fZnJhbWUsIGJpbmQodGhpcy5fb25tZXNzYWdl
V3JhcHBlciwgdGhpcyksIG1zZyk7DQorICAgIH0sDQorDQorICAgIHRlcm1pbmF0ZTogZnVuY3Rp
b24oKQ0KKyAgICB7DQorICAgICAgICBpZiAodGhpcy5fZnJhbWUgIT0gbnVsbCkgew0KKyAgICAg
ICAgICAgIHRoaXMuX2ZyYW1lLm9ubWVzc2FnZSA9IHRoaXMuX3dvcmtlci5vbm1lc3NhZ2UgPSBu
b29wOw0KKyAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmZyYW1lRWxlbWVudC5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKHRoaXMuX2ZyYW1lLmZyYW1lRWxlbWVudCk7DQorICAgICAgICB9DQorICAgICAg
ICB0aGlzLl9mcmFtZSA9IG51bGw7DQorICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsOyAvLyBC
cmVhayByZWZlcmVuY2UgbG9vcC4NCisgICAgfSwNCisNCisgICAgX29ubWVzc2FnZVdyYXBwZXI6
IGZ1bmN0aW9uKG1zZykNCisgICAgew0KKyAgICAgICAgLy8gU2hvcnRjdXQgLS0gaWYgbm8gZXhj
ZXB0aW9uIGhhbmRsZXJzIGluc3RhbGxlZCwgYXZvaWQgdHJ5L2NhdGNoIHNvIGFzIG5vdCB0byBv
YnNjdXJlIGxpbmUgbnVtYmVyLg0KKyAgICAgICAgaWYgKCF0aGlzLl9mcmFtZS5vbmVycm9yICYm
ICF0aGlzLl93b3JrZXIub25lcnJvcikNCisgICAgICAgIHsNCisgICAgICAgICAgICB0aGlzLl9m
cmFtZS5vbm1lc3NhZ2UobXNnKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQor
DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubWVzc2FnZShtc2cp
Ow0KKyAgICAgICAgfSBjYXRjaCAoZSkgew0KKyAgICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2Vw
dGlvbihlLCB0aGlzLl9mcmFtZS5vbmVycm9yLCB0aGlzLl93b3JrZXIub25lcnJvcik7DQorICAg
ICAgICB9DQorICAgIH0sDQorDQorICAgIF9kaXNwYXRjaE1lc3NhZ2U6IGZ1bmN0aW9uKHRhcmdl
dFdpbmRvdywgaGFuZGxlciwgbXNnKQ0KKyAgICB7DQorICAgICAgICB2YXIgZXZlbnQgPSB0aGlz
Ll9kb2N1bWVudC5jcmVhdGVFdmVudCgiTWVzc2FnZUV2ZW50Iik7DQorICAgICAgICBldmVudC5p
bml0TWVzc2FnZUV2ZW50KCJNZXNzYWdlRXZlbnQiLCBmYWxzZSwgZmFsc2UsIG1zZyk7DQorICAg
ICAgICB0YXJnZXRXaW5kb3cuc2V0VGltZW91dChoYW5kbGVyLCAwLCBldmVudCk7DQorICAgIH0s
DQorDQorICAgIF9oYW5kbGVFeGNlcHRpb246IGZ1bmN0aW9uKGUpDQorICAgIHsNCisgICAgICAg
IC8vIE5COiBpdCBzaG91bGQgYmUgYW4gRXJyb3JFdmVudCwgYnV0IGNyZWF0aW5nIGl0IGZyb20g
c2NyaXB0IGlzIG5vdA0KKyAgICAgICAgLy8gY3VycmVudGx5IHN1cHBvcnRlZCwgdG8gZW11bGF0
ZSBpdCBvbiB0b3Agb2YgcGxhaW4gdmFuaWxsYSBFdmVudC4NCisgICAgICAgIHZhciBlcnJvckV2
ZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iik7DQorICAgICAgICBlcnJv
ckV2ZW50LmluaXRFdmVudCgiRXZlbnQiLCBmYWxzZSwgZmFsc2UpOw0KKyAgICAgICAgZXJyb3JF
dmVudC5tZXNzYWdlID0gIlVuY2F1Z2h0IGV4Y2VwdGlvbiI7DQorDQorICAgICAgICBmb3IgKHZh
ciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgew0KKyAgICAgICAgICAgIGlmIChh
cmd1bWVudHNbaV0gJiYgYXJndW1lbnRzW2ldKGVycm9yRXZlbnQpKQ0KKyAgICAgICAgICAgICAg
ICByZXR1cm47DQorICAgICAgICB9DQorDQorICAgICAgICB0aHJvdyBlOw0KKyAgICB9LA0KKw0K
KyAgICBfYnVpbGRXb3JrZXI6IGZ1bmN0aW9uKHVybCkNCisgICAgew0KKyAgICAgICAgdmFyIGNv
ZGUgPSB0aGlzLl9sb2FkU2NyaXB0KHVybC51cmwpOw0KKyAgICAgICAgdmFyIGlmcmFtZUVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsNCisgICAgICAgIGlmcmFtZUVs
ZW1lbnQuc3R5bGUuZGlzcGxheSA9ICJub25lIjsNCisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoaWZyYW1lRWxlbWVudCk7DQorDQorICAgICAgICB2YXIgZnJhbWUgPSB3aW5kb3cu
ZnJhbWVzW3dpbmRvdy5mcmFtZXMubGVuZ3RoIC0gMV07DQorDQorICAgICAgICB0aGlzLl9kb2N1
bWVudCA9IGRvY3VtZW50Ow0KKyAgICAgICAgdGhpcy5fZnJhbWUgPSBmcmFtZTsNCisNCisgICAg
ICAgIHRoaXMuX3NldHVwV29ya2VyQ29udGV4dChmcmFtZSwgdXJsKTsNCisNCisgICAgICAgIHZh
ciBmcmFtZUNvbnRlbnRzID0gJyhmdW5jdGlvbihsb2NhdGlvbiwgd2luZG93KSB7ICcgKw0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlICsNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ30pKF9fZGV2dG9vbHMubG9jYXRpb24sIHVuZGVmaW5lZCk7XG4nICsNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJy8vQCBzb3VyY2VVUkw9JyArIHVybC51cmw7DQorDQorICAg
ICAgICBmcmFtZS5ldmFsKGZyYW1lQ29udGVudHMpOw0KKyAgICB9LA0KKw0KKyAgICBfc2V0dXBX
b3JrZXJDb250ZXh0OiBmdW5jdGlvbih3b3JrZXJGcmFtZSwgdXJsKQ0KKyAgICB7DQorICAgICAg
ICB3b3JrZXJGcmFtZS5fX2RldnRvb2xzID0gew0KKyAgICAgICAgICAgIGhhbmRsZUV4Y2VwdGlv
bjogYmluZCh0aGlzLl9oYW5kbGVFeGNlcHRpb24sIHRoaXMpLA0KKyAgICAgICAgICAgIGxvY2F0
aW9uOiB1cmwubW9ja0xvY2F0aW9uKCkNCisgICAgICAgIH07DQorICAgICAgICB2YXIgd29ya2Vy
ID0gdGhpcy5fd29ya2VyOw0KKw0KKyAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihldmVudCkgLy8g
TGF0ZSBiaW5kaW5nIHRvIG9ubWVzc2FnZSBkZXNpcmVkLCBzbyBubyBiaW5kKCkgaGVyZS4NCisg
ICAgICAgIHsNCisgICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlKGV2ZW50KTsNCisgICAgICAg
IH0NCisNCisgICAgICAgIHdvcmtlckZyYW1lLm9ubWVzc2FnZSA9IG5vb3A7DQorICAgICAgICB3
b3JrZXJGcmFtZS5wb3N0TWVzc2FnZSA9IGJpbmQodGhpcy5fZGlzcGF0Y2hNZXNzYWdlLCB0aGlz
LCB3aW5kb3csIGhhbmRsZXIpOw0KKyAgICAgICAgd29ya2VyRnJhbWUuaW1wb3J0U2NyaXB0cyA9
IGJpbmQodGhpcy5faW1wb3J0U2NyaXB0cywgdGhpcywgd29ya2VyRnJhbWUpOw0KKyAgICAgICAg
d29ya2VyRnJhbWUuY2xvc2UgPSBiaW5kKHRoaXMudGVybWluYXRlLCB0aGlzKTsNCisgICAgfSwN
CisNCisgICAgX2ltcG9ydFNjcmlwdHM6IGZ1bmN0aW9uKGV2YWxUYXJnZXQpDQorICAgIHsNCisg
ICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQ0KKyAgICAg
ICAgICAgIGV2YWxUYXJnZXQuZXZhbCh0aGlzLl9sb2FkU2NyaXB0KGFyZ3VtZW50c1tpXSkpOw0K
KyAgICB9LA0KKw0KKyAgICBfbG9hZFNjcmlwdDogZnVuY3Rpb24odXJsKQ0KKyAgICB7DQorICAg
ICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQorICAgICAgICB4aHIub3Blbigi
R0VUIiwgdXJsLCBmYWxzZSk7DQorICAgICAgICB4aHIuc2VuZChudWxsKTsNCisNCisgICAgICAg
IHZhciB0ZXh0ID0geGhyLnJlc3BvbnNlVGV4dDsNCisgICAgICAgIGlmICh4aHIuc3RhdHVzICE9
IDAgJiYgeGhyLnN0YXR1cy8xMDAgIT09IDIpIC8vIFdlJ3JlIGdldHRpbmcgc3RhdHVzID09PSAw
IHdoZW4gdXNpbmcgZmlsZTovLy4NCisgICAgICAgIHsNCisgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJGYWlsZWQgdG8gbG9hZCB3b3JrZXI6ICIgKyB1cmwgKyAiWyIgKyB4aHIuc3RhdHVzICsg
Il0iKTsNCisgICAgICAgICAgICB0ZXh0ID0gIiI7IC8vIFdlJ3ZlIGdvdCBlcnJvciBtZXNzYWdl
LCBub3Qgd29ya2VyIGNvZGUuDQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gdGV4dDsNCisg
ICAgfQ0KK307DQorDQorZnVuY3Rpb24gVVJMKHVybCkNCit7DQorICAgIHRoaXMudXJsID0gdXJs
Ow0KKyAgICB0aGlzLnNwbGl0KCk7DQorfQ0KKw0KK1VSTC5wcm90b3R5cGUgPSB7DQorDQorICAg
IHVybFJlZ0V4OiAoL14oaHR0cFtzXT98ZmlsZSk6XC9cLyhbXlwvOl0qKSg6W1xkXSspPyg/Oihc
L1teIz9dKikoXD9bXiNdKik/KD86IyguKikpPyk/JC9pKSwNCisNCisgICAgc3BsaXQ6IGZ1bmN0
aW9uKCkNCisgICAgew0KKyAgICAgICAgZnVuY3Rpb24gZW1wdHlJZk51bGwoc3RyKQ0KKyAgICAg
ICAgew0KKyAgICAgICAgICAgIHJldHVybiBzdHIgPT0gbnVsbCA/ICIiIDogc3RyOw0KKyAgICAg
ICAgfQ0KKyAgICAgICAgdmFyIHBhcnRzID0gdGhpcy51cmxSZWdFeC5leGVjKHRoaXMudXJsKTsN
CisNCisgICAgICAgIHRoaXMuc2NoZW1hID0gcGFydHNbMV07DQorICAgICAgICB0aGlzLmhvc3Qg
PSBwYXJ0c1syXTsNCisgICAgICAgIHRoaXMucG9ydCA9IGVtcHR5SWZOdWxsKHBhcnRzWzNdKTsN
CisgICAgICAgIHRoaXMucGF0aCA9IGVtcHR5SWZOdWxsKHBhcnRzWzRdKTsNCisgICAgICAgIHRo
aXMucXVlcnkgPSBlbXB0eUlmTnVsbChwYXJ0c1s1XSk7DQorICAgICAgICB0aGlzLmZyYWdtZW50
ID0gZW1wdHlJZk51bGwocGFydHNbNl0pOw0KKyAgICB9LA0KKw0KKyAgICBtb2NrTG9jYXRpb246
IGZ1bmN0aW9uKCkNCisgICAgew0KKyAgICAgICAgdmFyIGhvc3QgPSB0aGlzLmhvc3QucmVwbGFj
ZSgvXlteQF0qQC8sICIiKTsNCisNCisgICAgICAgIHJldHVybiB7DQorICAgICAgICAgICAgaHJl
ZjogICAgIHRoaXMudXJsLA0KKyAgICAgICAgICAgIHByb3RvY29sOiB0aGlzLnNjaGVtYSArICI6
IiwNCisgICAgICAgICAgICBob3N0OiAgICAgaG9zdCwNCisgICAgICAgICAgICBob3N0bmFtZTog
aG9zdCwNCisgICAgICAgICAgICBwb3J0OiAgICAgdGhpcy5wb3J0LA0KKyAgICAgICAgICAgIHBh
dGhuYW1lOiB0aGlzLnBhdGgsDQorICAgICAgICAgICAgc2VhcmNoOiAgIHRoaXMucXVlcnksDQor
ICAgICAgICAgICAgaGFzaDogICAgIHRoaXMuZnJhZ21lbnQNCisgICAgICAgIH07DQorICAgIH0s
DQorDQorICAgIGNvbXBsZXRlV2l0aDogZnVuY3Rpb24odXJsKQ0KKyAgICB7DQorICAgICAgICBp
ZiAodXJsID09PSAiIiB8fCAvXlteL10qOi8uZXhlYyh1cmwpKSAvLyBJZiBnaXZlbiBhYnNvbHV0
ZSB1cmwsIHJldHVybiBhcyBpcyBub3cuDQorICAgICAgICAgICAgcmV0dXJuIG5ldyBVUkwodXJs
KTsNCisNCisgICAgICAgIHZhciByZWxQYXJ0cyA9IC9eKFteIz9dKikoLiopJC8uZXhlYyh1cmwp
OyAvLyA9PiBbIHVybCwgcGF0aCwgcXVlcnktYW5kb3ItZnJhZ21lbnQgXQ0KKw0KKyAgICAgICAg
dmFyIHBhdGggPSAocmVsUGFydHNbMV0uc2xpY2UoMCwgMSkgPT09ICIvIiA/ICIiIDogdGhpcy5w
YXRoLnJlcGxhY2UoL1teL10qJC8sICIiKSkgKyByZWxQYXJ0c1sxXTsNCisgICAgICAgIHBhdGgg
PSBwYXRoLnJlcGxhY2UoLyhcL1wuKSsoXC98JCkvZywgIi8iKS5yZXBsYWNlKC9bXi9dKlwvXC5c
LihcL3wkKS9nLCAiIik7DQorDQorICAgICAgICByZXR1cm4gbmV3IFVSTCh0aGlzLnNjaGVtYSAr
ICI6Ly8iICsgdGhpcy5ob3N0ICsgdGhpcy5wb3J0ICsgcGF0aCArIHJlbFBhcnRzWzJdKTsNCisg
ICAgfSwNCisNCisgICAgc2FtZU9yaWdpbjogZnVuY3Rpb24odXJsKQ0KKyAgICB7DQorICAgICAg
ICBmdW5jdGlvbiBub3JtYWxpemVQb3J0KHNjaGVtYSwgcG9ydCkNCisgICAgICAgIHsNCisgICAg
ICAgICAgICB2YXIgcG9ydE5vID0gcG9ydC5zbGljZSgxKTsNCisgICAgICAgICAgICByZXR1cm4g
KHNjaGVtYSA9PT0gImh0dHBzIiAmJiBwb3J0Tm8gPT0gNDQzIHx8IHNjaGVtYSA9PT0gImh0dHAi
ICYmIHBvcnRObyA9PSA4MCkgPyAiIiA6IHBvcnQ7DQorICAgICAgICB9DQorDQorICAgICAgICB2
YXIgb3RoZXIgPSBuZXcgVVJMKHVybCk7DQorDQorICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWEg
PT09IG90aGVyLnNjaGVtYSAmJg0KKyAgICAgICAgICAgIHRoaXMuaG9zdCA9PT0gb3RoZXIuaG9z
dCAmJg0KKyAgICAgICAgICAgIG5vcm1hbGl6ZVBvcnQodGhpcy5zY2hlbWEsIHRoaXMucG9ydCkg
PT09IG5vcm1hbGl6ZVBvcnQob3RoZXIuc2NoZW1hLCBvdGhlci5wb3J0KTsNCisgICAgfQ0KK307
DQorDQorZnVuY3Rpb24gRE9NQ29yZUV4Y2VwdGlvbihuYW1lLCBjb2RlKQ0KK3sNCisgICAgZnVu
Y3Rpb24gZm9ybWF0RXJyb3IoKQ0KKyAgICB7DQorICAgICAgICByZXR1cm4gIkVycm9yOiAiICsg
dGhpcy5tZXNzYWdlOw0KKyAgICB9DQorDQorICAgIHRoaXMubmFtZSA9IG5hbWU7DQorICAgIHRo
aXMubWVzc2FnZSA9IG5hbWUgKyAiOiBET00gRXhjZXB0aW9uICIgKyBjb2RlOw0KKyAgICB0aGlz
LmNvZGUgPSBjb2RlOw0KKyAgICB0aGlzLnRvU3RyaW5nID0gYmluZChmb3JtYXRFcnJvciwgdGhp
cyk7DQorfQ0KKw0KK2Z1bmN0aW9uIGJpbmQoZnVuYywgdGhpc09iamVjdCkNCit7DQorICAgIHZh
ciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsNCisgICAg
cmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gZnVuYy5hcHBseSh0aGlzT2JqZWN0LCBhcmdzLmNv
bmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKSk7IH07DQorfQ0K
Kw0KK2Z1bmN0aW9uIG5vb3AoKQ0KK3sNCit9DQorDQorfQ0KSW5kZXg6IEU6L2Nhc2VxL2Nocm9t
aXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBFOi9jYXNlcS9jaHJvbWl1bS9zcmMvdGhpcmRfcGFy
dHkvV2ViS2l0L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCShyZXZpc2lv
biA1NTE2MSkNCisrKyBFOi9jYXNlcS9jaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAt
MjcwLDYgKzI3MCwxOCBAQA0KICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQ0KICAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5nZXRQcm9maWxlKGNhbGxJZCwgdWlkKTsNCiB9DQor
DQordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGNvbnN0
IFN0cmluZyYgc291cmNlKQ0KK3sNCisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikNCisg
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPmFkZFNj
cmlwdFRvRXZhbHVhdGVPbkxvYWQoc291cmNlKTsNCit9DQorDQordm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpyZW1vdmVBbGxTY3JpcHRzRXZhbHVhdGVkT25Mb2FkKCkNCit7DQorICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIpDQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVj
dGVkU2NyaXB0SG9zdCgpLT5yZW1vdmVBbGxTY3JpcHRzRXZhbHVhdGVkT25Mb2FkKCk7DQorfQ0K
ICNlbmRpZg0KIA0KIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0SW5qZWN0ZWRTY3JpcHRTb3Vy
Y2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpDQpJbmRleDogRTovY2FzZXEvY2hyb21pdW0vc3JjL3Ro
aXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3Bw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gRTovY2FzZXEvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktp
dC9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCShyZXZpc2lvbiA1NTE2
MSkNCisrKyBFOi9jYXNlcS9jaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0xOTQs
NiArMTk0LDI1IEBADQogICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZnJvbnRl
bmQuZ2V0KCk7DQogfQ0KIA0KK3ZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjphZGRTY3JpcHRUb0V2
YWx1YXRlT25Mb2FkKGNvbnN0IFN0cmluZyYgc291cmNlKQ0KK3sNCisgICAgbV9zY3JpcHRzVG9F
dmFsdWF0ZU9uTG9hZC5hcHBlbmQoc291cmNlKTsNCit9DQorDQordm9pZCBJbmplY3RlZFNjcmlw
dEhvc3Q6OnJlbW92ZUFsbFNjcmlwdHNFdmFsdWF0ZWRPbkxvYWQoKQ0KK3sNCisgICAgbV9zY3Jp
cHRzVG9FdmFsdWF0ZU9uTG9hZC5jbGVhcigpOw0KK30NCisNCit2b2lkIEluamVjdGVkU2NyaXB0
SG9zdDo6ZXZhbHVhdGVPbkxvYWRTY3JpcHRzKEZyYW1lICpmcmFtZSkNCit7DQorICAgIGZvciAo
VmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5i
ZWdpbigpOw0KKyAgICAgICAgIGl0ICE9IG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuZW5kKCk7
ICsraXQpIHsNCisgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc2NyaXB0U291cmNlQ29kZSgqaXQp
Ow0KKyAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZShzY3JpcHRTb3VyY2VDb2RlKTsN
CisgICAgfQ0KK30NCisNCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQogDQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpDQpJbmRleDogRTovY2FzZXEvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5
L1dlYktpdC9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIEU6L2Nhc2VxL2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHJldmlzaW9uIDU1MTYxKQ0KKysrIEU6L2Nh
c2VxL2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmgJKHdvcmtpbmcgY29weSkNCkBAIC0zNSw2ICszNSw3IEBADQogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiDQogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiDQogDQor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4NCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4NCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4NCiANCkBAIC02MSw2ICs2MiwxMCBAQA0KIA0KICAgICB2
b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKSB7IG1faW5q
ZWN0ZWRTY3JpcHRTb3VyY2UgPSBzb3VyY2U7IH0NCiANCisgICAgdm9pZCBhZGRTY3JpcHRUb0V2
YWx1YXRlT25Mb2FkKGNvbnN0IFN0cmluZyYgc291cmNlKTsNCisgICAgdm9pZCByZW1vdmVBbGxT
Y3JpcHRzRXZhbHVhdGVkT25Mb2FkKCk7DQorICAgIHZvaWQgZXZhbHVhdGVPbkxvYWRTY3JpcHRz
KEZyYW1lICpmcmFtZSk7DQorDQogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIoKSB7IHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXI7IH0NCiAgICAgdm9pZCBk
aXNjb25uZWN0Q29udHJvbGxlcigpIHsgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsgfQ0KIA0K
QEAgLTk3LDYgKzEwMiw3IEBADQogICAgIGxvbmcgbV9uZXh0SW5qZWN0ZWRTY3JpcHRJZDsNCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPGxvbmcsIEluamVjdGVkU2NyaXB0PiBJZFRvSW5qZWN0ZWRTY3Jp
cHRNYXA7DQogICAgIElkVG9JbmplY3RlZFNjcmlwdE1hcCBtX2lkVG9JbmplY3RlZFNjcmlwdDsN
CisgICAgVmVjdG9yPFN0cmluZz4gbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZDsNCiB9Ow0KIA0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCkluZGV4OiBFOi9jYXNlcS9jaHJvbWl1bS9zcmMvdGhp
cmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gRTovY2FzZXEvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktp
dC9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNTUx
NjEpDQorKysgRTovY2FzZXEvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTgx
MSw2ICs4MTEsOCBAQA0KICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGxvYWRlci0+ZnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGxvYWRlci0+ZnJhbWUo
KSkpDQogICAgICAgICBpZiAoUmVzb3VyY2VzTWFwKiByZXNvdXJjZU1hcCA9IG1fZnJhbWVSZXNv
dXJjZXMuZ2V0KGZyYW1lKSkNCiAgICAgICAgICAgICBwcnVuZVJlc291cmNlcyhyZXNvdXJjZU1h
cCwgbG9hZGVyKTsNCisNCisgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmV2YWx1YXRlT25Mb2Fk
U2NyaXB0cyhsb2FkZXItPmZyYW1lKCkpOw0KIH0NCiANCiB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50KEZyYW1lKiBmcmFtZSkNCkluZGV4OiBFOi9jYXNl
cS9jaHJvbWl1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuaHRtbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEU6L2Nhc2VxL2Nocm9taXVtL3Ny
Yy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5odG1sCShyZXZpc2lvbiA1NTE2MSkNCisrKyBFOi9jYXNlcS9jaHJvbWl1bS9zcmMvdGhpcmRf
cGFydHkvV2ViS2l0L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAko
d29ya2luZyBjb3B5KQ0KQEAgLTQyLDYgKzQyLDcgQEANCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iT2JqZWN0LmpzIj48L3NjcmlwdD4NCiAgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2V0dGluZ3MuanMiPjwvc2NyaXB0Pg0KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb250ZXh0TWVudS5qcyI+PC9zY3JpcHQ+
DQorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkdlYXJNZW51LmpzIj48
L3NjcmlwdD4NCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iS2V5Ym9h
cmRTaG9ydGN1dC5qcyI+PC9zY3JpcHQ+DQogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IlRleHRQcm9tcHQuanMiPjwvc2NyaXB0Pg0KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJQb3BvdmVyLmpzIj48L3NjcmlwdD4NCkBAIC04NSw2ICs4Niw3
IEBADQogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlN1bW1hcnlCYXIu
anMiPjwvc2NyaXB0Pg0KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJF
bGVtZW50c1BhbmVsLmpzIj48L3NjcmlwdD4NCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iUmVzb3VyY2VzUGFuZWwuanMiPjwvc2NyaXB0Pg0KKyAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJJbmplY3RlZEZha2VXb3JrZXJzLmpzIj48L3Njcmlw
dD4NCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0c1BhbmVs
LmpzIj48L3NjcmlwdD4NCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
U3RvcmFnZVBhbmVsLmpzIj48L3NjcmlwdD4NCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iUHJvZmlsZXNQYW5lbC5qcyI+PC9zY3JpcHQ+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49380</attachid>
            <date>2010-02-24 05:18:44 -0800</date>
            <delta_ts>2010-02-24 06:52:18 -0800</delta_ts>
            <desc>A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled</desc>
            <filename>q</filename>
            <type>text/plain</type>
            <size>18562</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gNTUx
ODUpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0w
Mi0yNCAgIkFuZHJleSBLb3N5YWtvdiIgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFrZSB3b3JrZXJzIGltcGxl
bWVudGF0aW9uIHRoYXQgc2ltdWxhdGVzIHdvcmtlcnMgdXNpbmcgaWZyYW1lIGFuZCB0aW1lciwK
KyAgICAgICAgbmVlZGVkIHRvIHN1cHBvcnQgd29ya2VycyBkZWJ1Z2dpbmcuIEFsc28sIGEgZmFj
aWxpdHkgdG8gaW5qZWN0IHNjcmlwdHMgaW50bworICAgICAgICBpbnNwZWN0ZWQgcGFnZSB1cG9u
IGxvYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NTE0OAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjphZGRTY3JpcHRUb0V2
YWx1YXRlT25Mb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6cmVt
b3ZlQWxsU2NyaXB0c0V2YWx1YXRlZE9uTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdEhvc3Q6OmV2YWx1YXRlT25Mb2FkU2NyaXB0cyk6CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmFkZFNjcmlwdFRv
RXZhbHVhdGVPbkxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6cmVt
b3ZlQWxsU2NyaXB0c0V2YWx1YXRlZE9uTG9hZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGw6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZEZha2VXb3JrZXJzLmpzOiBBZGRlZC4KKyAgICAg
ICAgKEluamVjdGVkRmFrZVdvcmtlcnMuV29ya2VyKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdv
cmtlcnMuRmFrZVdvcmtlcik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXJzLkZha2VXb3Jr
ZXIucHJvdG90eXBlLnBvc3RNZXNzYWdlKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlcnMu
RmFrZVdvcmtlci5wcm90b3R5cGUudGVybWluYXRlKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdv
cmtlcnMuRmFrZVdvcmtlci5wcm90b3R5cGUuX29ubWVzc2FnZVdyYXBwZXIpOgorICAgICAgICAo
SW5qZWN0ZWRGYWtlV29ya2Vycy5GYWtlV29ya2VyLnByb3RvdHlwZS5fZGlzcGF0Y2hNZXNzYWdl
KToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlcnMuRmFrZVdvcmtlci5wcm90b3R5cGUuX2hh
bmRsZUV4Y2VwdGlvbik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXJzLkZha2VXb3JrZXIu
cHJvdG90eXBlLl9idWlsZFdvcmtlcik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXJzLkZh
a2VXb3JrZXIucHJvdG90eXBlLl9zZXR1cFdvcmtlckNvbnRleHQuaGFuZGxlcik6CisgICAgICAg
IChJbmplY3RlZEZha2VXb3JrZXJzLkZha2VXb3JrZXIucHJvdG90eXBlLl9zZXR1cFdvcmtlckNv
bnRleHQpOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2Vycy5GYWtlV29ya2VyLnByb3RvdHlw
ZS5faW1wb3J0U2NyaXB0cyk6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXJzLkZha2VXb3Jr
ZXIucHJvdG90eXBlLl9sb2FkU2NyaXB0KToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlcnMu
VVJMKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlcnMuVVJMLnByb3RvdHlwZS51cmxSZWdF
eC5zcGxpdCk6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXJzLlVSTC5wcm90b3R5cGUubW9j
a0xvY2F0aW9uKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlcnMuVVJMLnByb3RvdHlwZS5j
b21wbGV0ZVdpdGgpOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2Vycy5VUkwucHJvdG90eXBl
LnNhbWVPcmlnaW4pOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2Vycy5ET01Db3JlRXhjZXB0
aW9uLmZvcm1hdEVycm9yKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlcnMuRE9NQ29yZUV4
Y2VwdGlvbik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXJzLm5vb3ApOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAyMDEwLTAyLTIzICBHZW9mZiBHYXJlbiAgPGdnYXJl
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBX
ZWJDb3JlLmd5cGkNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU1MTYx
KQorKysgV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQyLDYgKzM3NDIsNyBAQAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VWaWV3LmpzJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMn
LAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtlV29ya2Vycy5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcycs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMnLApJbmRl
eDogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNTUxNjEpCisrKyBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDI4NDAsNiArNDI4NDAsMTAgQEAK
IAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcSW5qZWN0ZWRGYWtlV29ya2Vycy5qcyINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXEluamVjdGVkU2NyaXB0LmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRl
eDogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHANCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBpbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkocmV2aXNpb24gNTUxNjEpCisrKyBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCwy
NSBAQCBJbnNwZWN0b3JGcm9udGVuZCogSW5qZWN0ZWRTY3JpcHRIb3N0OjppCiAgICAgcmV0dXJu
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9mcm9udGVuZC5nZXQoKTsKIH0KIAordm9pZCBJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBz
b3VyY2UpCit7CisgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5hcHBlbmQoc291cmNlKTsK
K30KKwordm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OnJlbW92ZUFsbFNjcmlwdHNFdmFsdWF0ZWRP
bkxvYWQoKQoreworICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuY2xlYXIoKTsKK30KKwor
dm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmV2YWx1YXRlT25Mb2FkU2NyaXB0cyhGcmFtZSAqZnJh
bWUpCit7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHNU
b0V2YWx1YXRlT25Mb2FkLmJlZ2luKCk7CisgICAgICAgICBpdCAhPSBtX3NjcmlwdHNUb0V2YWx1
YXRlT25Mb2FkLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUgc2NyaXB0
U291cmNlQ29kZSgqaXQpOworICAgICAgICBmcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlKHNjcmlw
dFNvdXJjZUNvZGUpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhv
c3QuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaAkocmV2
aXNpb24gNTUxNjEpCisrKyBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC02MSw2
ICs2MiwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGNv
bnN0IFN0cmluZyYgc291cmNlKSB7IG1faW5qZWN0ZWRTY3JpcHRTb3VyY2UgPSBzb3VyY2U7IH0K
IAorICAgIHZvaWQgYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChjb25zdCBTdHJpbmcmIHNvdXJj
ZSk7CisgICAgdm9pZCByZW1vdmVBbGxTY3JpcHRzRXZhbHVhdGVkT25Mb2FkKCk7CisgICAgdm9p
ZCBldmFsdWF0ZU9uTG9hZFNjcmlwdHMoRnJhbWUgKmZyYW1lKTsKKwogICAgIEluc3BlY3RvckNv
bnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2luc3BlY3RvckNvbnRy
b2xsZXI7IH0KICAgICB2b2lkIGRpc2Nvbm5lY3RDb250cm9sbGVyKCkgeyBtX2luc3BlY3RvckNv
bnRyb2xsZXIgPSAwOyB9CiAKQEAgLTk3LDYgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgbG9uZyBt
X25leHRJbmplY3RlZFNjcmlwdElkOwogICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBJbmplY3Rl
ZFNjcmlwdD4gSWRUb0luamVjdGVkU2NyaXB0TWFwOwogICAgIElkVG9JbmplY3RlZFNjcmlwdE1h
cCBtX2lkVG9JbmplY3RlZFNjcmlwdDsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3NjcmlwdHNUb0V2
YWx1YXRlT25Mb2FkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmQuY3BwCShyZXZpc2lvbiA1NTE2MSkKKysrIGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCwxOCBAQCB2b2lkIEluc3Bl
Y3RvckJhY2tlbmQ6OmdldFByb2ZpbGUobG9uZyBjCiAgICAgaWYgKG1faW5zcGVjdG9yQ29udHJv
bGxlcikKICAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5nZXRQcm9maWxlKGNhbGxJZCwg
dWlkKTsKIH0KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjphZGRTY3JpcHRUb0V2YWx1YXRlT25M
b2FkKGNvbnN0IFN0cmluZyYgc291cmNlKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkt
PmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoc291cmNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpyZW1vdmVBbGxTY3JpcHRzRXZhbHVhdGVkT25Mb2FkKCkKK3sKKyAgICBpZiAobV9p
bnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVj
dGVkU2NyaXB0SG9zdCgpLT5yZW1vdmVBbGxTY3JpcHRzRXZhbHVhdGVkT25Mb2FkKCk7Cit9CiAj
ZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShj
b25zdCBTdHJpbmcmIHNvdXJjZSkKSW5kZXg6IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCShyZXZpc2lvbiA1
NTE2MSkKKysrIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSw2ICsxMDEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKGxv
bmcgY2FsbElkKTsKICAgICB2b2lkIGdldFByb2ZpbGUobG9uZyBjYWxsSWQsIHVuc2lnbmVkIHVp
ZCk7CisgICAgdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGNvbnN0IFN0cmluZyYgc291
cmNlKTsKKyAgICB2b2lkIHJlbW92ZUFsbFNjcmlwdHNFdmFsdWF0ZWRPbkxvYWQoKTsKICNlbmRp
ZgogCiAgICAgdm9pZCBzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJj
ZSk7CkluZGV4OiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwJKHJldmlzaW9uIDU1MTYxKQorKysgaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw5
IEBAIG1vZHVsZSBjb3JlIHsKIAogICAgICAgICB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKGluIGxv
bmcgY2FsbElkKTsKICAgICAgICAgdm9pZCBnZXRQcm9maWxlKGluIGxvbmcgY2FsbElkLCBpbiB1
bnNpZ25lZCBsb25nIHVpZCk7CisKKyAgICAgICAgdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25M
b2FkKGluIERPTVN0cmluZyBzY3JpcHRTb3VyY2UpOworICAgICAgICB2b2lkIHJlbW92ZUFsbFNj
cmlwdHNFdmFsdWF0ZWRPbkxvYWQoKTsKICNlbmRpZgogICAgICAgICB2b2lkIHNldEluamVjdGVk
U2NyaXB0U291cmNlKGluIERPTVN0cmluZyBzY3JpcHRTb3VyY2UpOwogICAgICAgICB2b2lkIGRp
c3BhdGNoT25JbmplY3RlZFNjcmlwdChpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBpbmplY3RlZFNj
cmlwdElkLCBpbiBET01TdHJpbmcgbWV0aG9kTmFtZSwgaW4gRE9NU3RyaW5nIGFyZ3VtZW50cywg
aW4gYm9vbGVhbiBhc3luYyk7CkluZGV4OiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDU1MTYxKQorKysgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MTEsNiArODExLDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRDb21taXRMb2FkKAogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbG9hZGVyLT5mcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQobG9hZGVyLT5mcmFtZSgp
KSkKICAgICAgICAgaWYgKFJlc291cmNlc01hcCogcmVzb3VyY2VNYXAgPSBtX2ZyYW1lUmVzb3Vy
Y2VzLmdldChmcmFtZSkpCiAgICAgICAgICAgICBwcnVuZVJlc291cmNlcyhyZXNvdXJjZU1hcCwg
bG9hZGVyKTsKKworICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5ldmFsdWF0ZU9uTG9hZFNjcmlw
dHMobG9hZGVyLT5mcmFtZSgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmcmFt
ZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSogZnJhbWUpCkluZGV4OiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkRmFrZVdvcmtlcnMuanMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBpbnNwZWN0b3IvZnJv
bnQtZW5kL0luamVjdGVkRmFrZVdvcmtlcnMuanMJKHJldmlzaW9uIDApCisrKyBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luamVjdGVkRmFrZVdvcmtlcnMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworCit2YXIgSW5qZWN0ZWRGYWtlV29ya2VycyA9IGZ1bmN0aW9uKCkKK3sKKwor
V29ya2VyID0gZnVuY3Rpb24odXJsKQoreworICAgIHZhciBpbXBsID0gbmV3IEZha2VXb3JrZXIo
dGhpcywgdXJsKTsKKyAgICBpZiAoaW1wbCA9PT0gbnVsbCkKKyAgICAgICAgcmV0dXJuIG51bGw7
CisKKyAgICB0aGlzLmlzRmFrZSA9IHRydWU7CisgICAgdGhpcy5wb3N0TWVzc2FnZSA9IGJpbmQo
aW1wbC5wb3N0TWVzc2FnZSwgaW1wbCk7CisgICAgdGhpcy50ZXJtaW5hdGUgPSBiaW5kKGltcGwu
dGVybWluYXRlLCBpbXBsKTsKKyAgICB0aGlzLm9ubWVzc2FnZSA9IG5vb3A7Cit9CisKK2Z1bmN0
aW9uIEZha2VXb3JrZXIod29ya2VyLCB1cmwpCit7CisgICAgdmFyIHNjcmlwdFVSTCA9IG5ldyBV
UkwoZG9jdW1lbnQuYmFzZVVSSSkuY29tcGxldGVXaXRoKHVybCk7CisKKyAgICBpZiAoIXNjcmlw
dFVSTC5zYW1lT3JpZ2luKGxvY2F0aW9uLmhyZWYpKQorICAgICAgICB0aHJvdyBuZXcgRE9NQ29y
ZUV4Y2VwdGlvbigiU0VDVVJJVFlfRVJSIiwxOCk7CisKKyAgICB0aGlzLl93b3JrZXIgPSB3b3Jr
ZXI7CisgICAgdGhpcy5fYnVpbGRXb3JrZXIoc2NyaXB0VVJMKTsKK30KKworRmFrZVdvcmtlci5w
cm90b3R5cGUgPSB7CisKKyAgICBwb3N0TWVzc2FnZTogZnVuY3Rpb24obXNnKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMuX2ZyYW1lICE9IG51bGwpCisgICAgICAgICAgICB0aGlzLl9kaXNwYXRj
aE1lc3NhZ2UodGhpcy5fZnJhbWUsIGJpbmQodGhpcy5fb25tZXNzYWdlV3JhcHBlciwgdGhpcyks
IG1zZyk7CisgICAgfSwKKworICAgIHRlcm1pbmF0ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMuX2ZyYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9u
bWVzc2FnZSA9IHRoaXMuX3dvcmtlci5vbm1lc3NhZ2UgPSBub29wOworICAgICAgICAgICAgdGhp
cy5fZnJhbWUuZnJhbWVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZnJhbWUu
ZnJhbWVFbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7Cisg
ICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7IC8vIEJyZWFrIHJlZmVyZW5jZSBsb29wLgorICAg
IH0sCisKKyAgICBfb25tZXNzYWdlV3JhcHBlcjogZnVuY3Rpb24obXNnKQorICAgIHsKKyAgICAg
ICAgLy8gU2hvcnRjdXQgLS0gaWYgbm8gZXhjZXB0aW9uIGhhbmRsZXJzIGluc3RhbGxlZCwgYXZv
aWQgdHJ5L2NhdGNoIHNvIGFzIG5vdCB0byBvYnNjdXJlIGxpbmUgbnVtYmVyLgorICAgICAgICBp
ZiAoIXRoaXMuX2ZyYW1lLm9uZXJyb3IgJiYgIXRoaXMuX3dvcmtlci5vbmVycm9yKQorICAgICAg
ICB7CisgICAgICAgICAgICB0aGlzLl9mcmFtZS5vbm1lc3NhZ2UobXNnKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLl9m
cmFtZS5vbm1lc3NhZ2UobXNnKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg
dGhpcy5faGFuZGxlRXhjZXB0aW9uKGUsIHRoaXMuX2ZyYW1lLm9uZXJyb3IsIHRoaXMuX3dvcmtl
ci5vbmVycm9yKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfZGlzcGF0Y2hNZXNzYWdlOiBm
dW5jdGlvbih0YXJnZXRXaW5kb3csIGhhbmRsZXIsIG1zZykKKyAgICB7CisgICAgICAgIHZhciBl
dmVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUV2ZW50KCJNZXNzYWdlRXZlbnQiKTsKKyAgICAg
ICAgZXZlbnQuaW5pdE1lc3NhZ2VFdmVudCgiTWVzc2FnZUV2ZW50IiwgZmFsc2UsIGZhbHNlLCBt
c2cpOworICAgICAgICB0YXJnZXRXaW5kb3cuc2V0VGltZW91dChoYW5kbGVyLCAwLCBldmVudCk7
CisgICAgfSwKKworICAgIF9oYW5kbGVFeGNlcHRpb246IGZ1bmN0aW9uKGUpCisgICAgeworICAg
ICAgICAvLyBOQjogaXQgc2hvdWxkIGJlIGFuIEVycm9yRXZlbnQsIGJ1dCBjcmVhdGluZyBpdCBm
cm9tIHNjcmlwdCBpcyBub3QKKyAgICAgICAgLy8gY3VycmVudGx5IHN1cHBvcnRlZCwgdG8gZW11
bGF0ZSBpdCBvbiB0b3Agb2YgcGxhaW4gdmFuaWxsYSBFdmVudC4KKyAgICAgICAgdmFyIGVycm9y
RXZlbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTsKKyAgICAgICAgZXJy
b3JFdmVudC5pbml0RXZlbnQoIkV2ZW50IiwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgZXJyb3JF
dmVudC5tZXNzYWdlID0gIlVuY2F1Z2h0IGV4Y2VwdGlvbiI7CisKKyAgICAgICAgZm9yICh2YXIg
aSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhcmd1
bWVudHNbaV0gJiYgYXJndW1lbnRzW2ldKGVycm9yRXZlbnQpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRocm93IGU7CisgICAgfSwKKworICAgIF9idWls
ZFdvcmtlcjogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAgICAgdmFyIGNvZGUgPSB0aGlzLl9s
b2FkU2NyaXB0KHVybC51cmwpOworICAgICAgICB2YXIgaWZyYW1lRWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgICAgICBpZnJhbWVFbGVtZW50LnN0eWxlLmRp
c3BsYXkgPSAibm9uZSI7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1l
RWxlbWVudCk7CisKKyAgICAgICAgdmFyIGZyYW1lID0gd2luZG93LmZyYW1lc1t3aW5kb3cuZnJh
bWVzLmxlbmd0aCAtIDFdOworCisgICAgICAgIHRoaXMuX2RvY3VtZW50ID0gZG9jdW1lbnQ7Cisg
ICAgICAgIHRoaXMuX2ZyYW1lID0gZnJhbWU7CisKKyAgICAgICAgdGhpcy5fc2V0dXBXb3JrZXJD
b250ZXh0KGZyYW1lLCB1cmwpOworCisgICAgICAgIHZhciBmcmFtZUNvbnRlbnRzID0gJyhmdW5j
dGlvbihsb2NhdGlvbiwgd2luZG93KSB7ICcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9KShfX2RldnRvb2xzLmxvY2F0
aW9uLCB1bmRlZmluZWQpO1xuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8vQCBz
b3VyY2VVUkw9JyArIHVybC51cmw7CisKKyAgICAgICAgZnJhbWUuZXZhbChmcmFtZUNvbnRlbnRz
KTsKKyAgICB9LAorCisgICAgX3NldHVwV29ya2VyQ29udGV4dDogZnVuY3Rpb24od29ya2VyRnJh
bWUsIHVybCkKKyAgICB7CisgICAgICAgIHdvcmtlckZyYW1lLl9fZGV2dG9vbHMgPSB7CisgICAg
ICAgICAgICBoYW5kbGVFeGNlcHRpb246IGJpbmQodGhpcy5faGFuZGxlRXhjZXB0aW9uLCB0aGlz
KSwKKyAgICAgICAgICAgIGxvY2F0aW9uOiB1cmwubW9ja0xvY2F0aW9uKCkKKyAgICAgICAgfTsK
KyAgICAgICAgdmFyIHdvcmtlciA9IHRoaXMuX3dvcmtlcjsKKworICAgICAgICBmdW5jdGlvbiBo
YW5kbGVyKGV2ZW50KSAvLyBMYXRlIGJpbmRpbmcgdG8gb25tZXNzYWdlIGRlc2lyZWQsIHNvIG5v
IGJpbmQoKSBoZXJlLgorICAgICAgICB7CisgICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlKGV2
ZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHdvcmtlckZyYW1lLm9ubWVzc2FnZSA9IG5vb3A7
CisgICAgICAgIHdvcmtlckZyYW1lLnBvc3RNZXNzYWdlID0gYmluZCh0aGlzLl9kaXNwYXRjaE1l
c3NhZ2UsIHRoaXMsIHdpbmRvdywgaGFuZGxlcik7CisgICAgICAgIHdvcmtlckZyYW1lLmltcG9y
dFNjcmlwdHMgPSBiaW5kKHRoaXMuX2ltcG9ydFNjcmlwdHMsIHRoaXMsIHdvcmtlckZyYW1lKTsK
KyAgICAgICAgd29ya2VyRnJhbWUuY2xvc2UgPSBiaW5kKHRoaXMudGVybWluYXRlLCB0aGlzKTsK
KyAgICB9LAorCisgICAgX2ltcG9ydFNjcmlwdHM6IGZ1bmN0aW9uKGV2YWxUYXJnZXQpCisgICAg
eworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIGV2YWxUYXJnZXQuZXZhbCh0aGlzLl9sb2FkU2NyaXB0KGFyZ3VtZW50c1tpXSkp
OworICAgIH0sCisKKyAgICBfbG9hZFNjcmlwdDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAg
ICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICB4aHIub3BlbigiR0VU
IiwgdXJsLCBmYWxzZSk7CisgICAgICAgIHhoci5zZW5kKG51bGwpOworCisgICAgICAgIHZhciB0
ZXh0ID0geGhyLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgaWYgKHhoci5zdGF0dXMgIT0gMCAmJiB4
aHIuc3RhdHVzLzEwMCAhPT0gMikgLy8gV2UncmUgZ2V0dGluZyBzdGF0dXMgPT09IDAgd2hlbiB1
c2luZyBmaWxlOi8vLgorICAgICAgICB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWls
ZWQgdG8gbG9hZCB3b3JrZXI6ICIgKyB1cmwgKyAiWyIgKyB4aHIuc3RhdHVzICsgIl0iKTsKKyAg
ICAgICAgICAgIHRleHQgPSAiIjsgLy8gV2UndmUgZ290IGVycm9yIG1lc3NhZ2UsIG5vdCB3b3Jr
ZXIgY29kZS4KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGV4dDsKKyAgICB9Cit9OworCitm
dW5jdGlvbiBVUkwodXJsKQoreworICAgIHRoaXMudXJsID0gdXJsOworICAgIHRoaXMuc3BsaXQo
KTsKK30KKworVVJMLnByb3RvdHlwZSA9IHsKKworICAgIHVybFJlZ0V4OiAoL14oaHR0cFtzXT98
ZmlsZSk6XC9cLyhbXlwvOl0qKSg6W1xkXSspPyg/OihcL1teIz9dKikoXD9bXiNdKik/KD86Iygu
KikpPyk/JC9pKSwKKworICAgIHNwbGl0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBmdW5j
dGlvbiBlbXB0eUlmTnVsbChzdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdHIg
PT0gbnVsbCA/ICIiIDogc3RyOworICAgICAgICB9CisgICAgICAgIHZhciBwYXJ0cyA9IHRoaXMu
dXJsUmVnRXguZXhlYyh0aGlzLnVybCk7CisKKyAgICAgICAgdGhpcy5zY2hlbWEgPSBwYXJ0c1sx
XTsKKyAgICAgICAgdGhpcy5ob3N0ID0gcGFydHNbMl07CisgICAgICAgIHRoaXMucG9ydCA9IGVt
cHR5SWZOdWxsKHBhcnRzWzNdKTsKKyAgICAgICAgdGhpcy5wYXRoID0gZW1wdHlJZk51bGwocGFy
dHNbNF0pOworICAgICAgICB0aGlzLnF1ZXJ5ID0gZW1wdHlJZk51bGwocGFydHNbNV0pOworICAg
ICAgICB0aGlzLmZyYWdtZW50ID0gZW1wdHlJZk51bGwocGFydHNbNl0pOworICAgIH0sCisKKyAg
ICBtb2NrTG9jYXRpb246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBob3N0ID0gdGhp
cy5ob3N0LnJlcGxhY2UoL15bXkBdKkAvLCAiIik7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIGhyZWY6ICAgICB0aGlzLnVybCwKKyAgICAgICAgICAgIHByb3RvY29sOiB0aGlzLnNj
aGVtYSArICI6IiwKKyAgICAgICAgICAgIGhvc3Q6ICAgICBob3N0LAorICAgICAgICAgICAgaG9z
dG5hbWU6IGhvc3QsCisgICAgICAgICAgICBwb3J0OiAgICAgdGhpcy5wb3J0LAorICAgICAgICAg
ICAgcGF0aG5hbWU6IHRoaXMucGF0aCwKKyAgICAgICAgICAgIHNlYXJjaDogICB0aGlzLnF1ZXJ5
LAorICAgICAgICAgICAgaGFzaDogICAgIHRoaXMuZnJhZ21lbnQKKyAgICAgICAgfTsKKyAgICB9
LAorCisgICAgY29tcGxldGVXaXRoOiBmdW5jdGlvbih1cmwpCisgICAgeworICAgICAgICBpZiAo
dXJsID09PSAiIiB8fCAvXlteL10qOi8uZXhlYyh1cmwpKSAvLyBJZiBnaXZlbiBhYnNvbHV0ZSB1
cmwsIHJldHVybiBhcyBpcyBub3cuCisgICAgICAgICAgICByZXR1cm4gbmV3IFVSTCh1cmwpOwor
CisgICAgICAgIHZhciByZWxQYXJ0cyA9IC9eKFteIz9dKikoLiopJC8uZXhlYyh1cmwpOyAvLyA9
PiBbIHVybCwgcGF0aCwgcXVlcnktYW5kb3ItZnJhZ21lbnQgXQorCisgICAgICAgIHZhciBwYXRo
ID0gKHJlbFBhcnRzWzFdLnNsaWNlKDAsIDEpID09PSAiLyIgPyAiIiA6IHRoaXMucGF0aC5yZXBs
YWNlKC9bXi9dKiQvLCAiIikpICsgcmVsUGFydHNbMV07CisgICAgICAgIHBhdGggPSBwYXRoLnJl
cGxhY2UoLyhcL1wuKSsoXC98JCkvZywgIi8iKS5yZXBsYWNlKC9bXi9dKlwvXC5cLihcL3wkKS9n
LCAiIik7CisKKyAgICAgICAgcmV0dXJuIG5ldyBVUkwodGhpcy5zY2hlbWEgKyAiOi8vIiArIHRo
aXMuaG9zdCArIHRoaXMucG9ydCArIHBhdGggKyByZWxQYXJ0c1syXSk7CisgICAgfSwKKworICAg
IHNhbWVPcmlnaW46IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIG5vcm1h
bGl6ZVBvcnQoc2NoZW1hLCBwb3J0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcG9ydE5v
ID0gcG9ydC5zbGljZSgxKTsKKyAgICAgICAgICAgIHJldHVybiAoc2NoZW1hID09PSAiaHR0cHMi
ICYmIHBvcnRObyA9PSA0NDMgfHwgc2NoZW1hID09PSAiaHR0cCIgJiYgcG9ydE5vID09IDgwKSA/
ICIiIDogcG9ydDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBvdGhlciA9IG5ldyBVUkwodXJs
KTsKKworICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWEgPT09IG90aGVyLnNjaGVtYSAmJgorICAg
ICAgICAgICAgdGhpcy5ob3N0ID09PSBvdGhlci5ob3N0ICYmCisgICAgICAgICAgICBub3JtYWxp
emVQb3J0KHRoaXMuc2NoZW1hLCB0aGlzLnBvcnQpID09PSBub3JtYWxpemVQb3J0KG90aGVyLnNj
aGVtYSwgb3RoZXIucG9ydCk7CisgICAgfQorfTsKKworZnVuY3Rpb24gRE9NQ29yZUV4Y2VwdGlv
bihuYW1lLCBjb2RlKQoreworICAgIGZ1bmN0aW9uIGZvcm1hdEVycm9yKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAiRXJyb3I6ICIgKyB0aGlzLm1lc3NhZ2U7CisgICAgfQorCisgICAgdGhpcy5u
YW1lID0gbmFtZTsKKyAgICB0aGlzLm1lc3NhZ2UgPSBuYW1lICsgIjogRE9NIEV4Y2VwdGlvbiAi
ICsgY29kZTsKKyAgICB0aGlzLmNvZGUgPSBjb2RlOworICAgIHRoaXMudG9TdHJpbmcgPSBiaW5k
KGZvcm1hdEVycm9yLCB0aGlzKTsKK30KKworZnVuY3Rpb24gYmluZChmdW5jLCB0aGlzT2JqZWN0
KQoreworICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRz
LCAyKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBmdW5jLmFwcGx5KHRoaXNPYmpl
Y3QsIGFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkp
KTsgfTsKK30KKworZnVuY3Rpb24gbm9vcCgpCit7Cit9CisKK30KSW5kZXg6IGluc3BlY3Rvci9m
cm9udC1lbmQvV2ViS2l0LnFyYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluc3BlY3Rvci9mcm9udC1lbmQv
V2ViS2l0LnFyYwkocmV2aXNpb24gNTUxNjEpCisrKyBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktp
dC5xcmMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICAgICA8ZmlsZT5FdmVudExp
c3RlbmVyc1NpZGViYXJQYW5lLmpzPC9maWxlPgogICAgIDxmaWxlPkZvbnRWaWV3LmpzPC9maWxl
PgogICAgIDxmaWxlPkltYWdlVmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5JbmplY3RlZEZha2VX
b3JrZXJzLmpzPC9maWxlPgogICAgIDxmaWxlPkluamVjdGVkU2NyaXB0LmpzPC9maWxlPgogICAg
IDxmaWxlPkluamVjdGVkU2NyaXB0QWNjZXNzLmpzPC9maWxlPgogICAgIDxmaWxlPmluc3BlY3Rv
ci5qczwvZmlsZT4KSW5kZXg6IGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCShyZXZpc2lv
biA1NTE2MSkKKysrIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDYgKzg1LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQTwogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlN1bW1hcnlC
YXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IkVsZW1lbnRzUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IlJlc291cmNlc1BhbmVsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJJbmplY3RlZEZha2VXb3JrZXJzLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHRzUGFuZWwu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlN0
b3JhZ2VQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iUHJvZmlsZXNQYW5lbC5qcyI+PC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="32233"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49388</attachid>
            <date>2010-02-24 06:52:18 -0800</date>
            <delta_ts>2010-02-24 08:28:53 -0800</delta_ts>
            <desc>A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (review suggestions addressed)</desc>
            <filename>workers-patch</filename>
            <type>text/plain</type>
            <size>18928</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gNTUx
OTEpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0w
Mi0yNCAgIkFuZHJleSBLb3N5YWtvdiIgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFrZSB3b3JrZXJzIGltcGxl
bWVudGF0aW9uIHRoYXQgc2ltdWxhdGVzIHdvcmtlcnMgdXNpbmcgaWZyYW1lIGFuZCB0aW1lciwK
KyAgICAgICAgbmVlZGVkIHRvIHN1cHBvcnQgd29ya2VycyBkZWJ1Z2dpbmcuIEFsc28sIGEgZmFj
aWxpdHkgdG8gaW5qZWN0IHNjcmlwdHMgaW50bworICAgICAgICBpbnNwZWN0ZWQgcGFnZSB1cG9u
IGxvYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NTE0OAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmFkZFNjcmlwdFRvRXZhbHVh
dGVPbkxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6cmVtb3ZlQWxs
U2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFs
dWF0ZU9uTG9hZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkRmFrZVdvcmtlci5qczogQWRk
ZWQuCisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuV29ya2VyKToKKyAgICAgICAgKEluamVj
dGVkRmFrZVdvcmtlci5GYWtlV29ya2VyKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5G
YWtlV29ya2VyLnByb3RvdHlwZS5wb3N0TWVzc2FnZSk6CisgICAgICAgIChJbmplY3RlZEZha2VX
b3JrZXIuRmFrZVdvcmtlci5wcm90b3R5cGUudGVybWluYXRlKToKKyAgICAgICAgKEluamVjdGVk
RmFrZVdvcmtlci5GYWtlV29ya2VyLnByb3RvdHlwZS5fb25tZXNzYWdlV3JhcHBlcik6CisgICAg
ICAgIChJbmplY3RlZEZha2VXb3JrZXIuRmFrZVdvcmtlci5wcm90b3R5cGUuX2Rpc3BhdGNoTWVz
c2FnZSk6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRmFrZVdvcmtlci5wcm90b3R5cGUu
X2hhbmRsZUV4Y2VwdGlvbik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRmFrZVdvcmtl
ci5wcm90b3R5cGUuX2J1aWxkV29ya2VyKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5G
YWtlV29ya2VyLnByb3RvdHlwZS5fc2V0dXBXb3JrZXJDb250ZXh0LmhhbmRsZXIpOgorICAgICAg
ICAoSW5qZWN0ZWRGYWtlV29ya2VyLkZha2VXb3JrZXIucHJvdG90eXBlLl9zZXR1cFdvcmtlckNv
bnRleHQpOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2VyLkZha2VXb3JrZXIucHJvdG90eXBl
Ll9pbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5GYWtlV29ya2Vy
LnByb3RvdHlwZS5fbG9hZFNjcmlwdCk6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuVVJM
KToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5VUkwucHJvdG90eXBlLnVybFJlZ0V4LnNw
bGl0KToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5VUkwucHJvdG90eXBlLm1vY2tMb2Nh
dGlvbik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuVVJMLnByb3RvdHlwZS5jb21wbGV0
ZVdpdGgpOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2VyLlVSTC5wcm90b3R5cGUuc2FtZU9y
aWdpbik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRE9NQ29yZUV4Y2VwdGlvbi5mb3Jt
YXRFcnJvcik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRE9NQ29yZUV4Y2VwdGlvbik6
CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIubm9vcCk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qczoKKyAgICAgICAgKC5XZWJJbnNwZWN0
b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlLnNldEluamVjdGVkU2NyaXB0U291cmNl
KToKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBl
LmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNw
ZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUucmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxv
YWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAyMDEwLTAyLTI0ICBKb2Nl
bHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgbm9ib2R5LCBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlLmd5cGkNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU1MTYxKQorKysgV2ViQ29yZS5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzQyLDYgKzM3NDIsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtlV29ya2VyLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcycsCkluZGV4OiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvag0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CShyZXZpc2lvbiA1NTE2MSkKKysrIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Mjg0MCw2ICs0Mjg0MCwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4N
CiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxJ
bmplY3RlZEZha2VXb3JrZXIuanMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxJbmplY3RlZFNjcmlw
dC5qcyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cAkocmV2aXNpb24gNTUxNjEpCisrKyBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2OSw2ICs0NjksMTggQEAgTm9kZSogSW5zcGVjdG9yQmFja2VuZDo6
bm9kZUZvcklkKGxvbmcgbgogICAgIHJldHVybiAwOwogfQogCit2b2lkIEluc3BlY3RvckJhY2tl
bmQ6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2UpCit7Cisg
ICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKHNvdXJjZSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQmFja2VuZDo6cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKQoreworICAgIGlm
IChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6IGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBpbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5oCShyZXZpc2lvbiA1NTE2MSkKKysrIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKTsKICAgICB2b2lkIGRp
c3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgbG9uZyBpbmplY3RlZFNjcmlwdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29s
IGFzeW5jKTsKKyAgICB2b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5n
JiBzb3VyY2UpOworICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsK
ICAgICB2b2lkIGdldENoaWxkTm9kZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2
b2lkIHNldEF0dHJpYnV0ZShsb25nIGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUo
bG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUpOwpJbmRleDog
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuaWRsCShyZXZpc2lvbiA1NTE2MSkKKysrIGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmlkbAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOSBAQCBtb2R1bGUg
Y29yZSB7CiAgICAgICAgIHZvaWQgc2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoaW4gRE9NU3RyaW5n
IHNjcmlwdFNvdXJjZSk7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGlu
IGxvbmcgY2FsbElkLCBpbiBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIERPTVN0cmluZyBtZXRo
b2ROYW1lLCBpbiBET01TdHJpbmcgYXJndW1lbnRzLCBpbiBib29sZWFuIGFzeW5jKTsKIAorICAg
ICAgICB2b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoaW4gRE9NU3RyaW5nIHNjcmlwdFNv
dXJjZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsK
KwogICAgICAgICB2b2lkIGdldENoaWxkTm9kZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9k
ZUlkKTsKICAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcg
ZWxlbWVudElkLCBpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZhbHVlKTsKICAgICAg
ICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgZWxlbWVudElk
LCBpbiBET01TdHJpbmcgbmFtZSk7CkluZGV4OiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDU1MTYxKQorKysgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MTEsNiArODExLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkQ29tbWl0TG9hZCgKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGxvYWRlci0+ZnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGxvYWRlci0+ZnJh
bWUoKSkpCiAgICAgICAgIGlmIChSZXNvdXJjZXNNYXAqIHJlc291cmNlTWFwID0gbV9mcmFtZVJl
c291cmNlcy5nZXQoZnJhbWUpKQogICAgICAgICAgICAgcHJ1bmVSZXNvdXJjZXMocmVzb3VyY2VN
YXAsIGxvYWRlcik7CisKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IG1f
c2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuYmVnaW4oKTsKKyAgICAgICAgIGl0ICE9IG1fc2NyaXB0
c1RvRXZhbHVhdGVPbkxvYWQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgU2NyaXB0U291cmNlQ29k
ZSBzY3JpcHRTb3VyY2VDb2RlKCppdCk7CisgICAgICAgIGxvYWRlci0+ZnJhbWUoKS0+c2NyaXB0
KCktPmV2YWx1YXRlKHNjcmlwdFNvdXJjZUNvZGUpOworICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSogZnJhbWUpCkBAIC0x
OTA5LDYgKzE5MTUsMTYgQEAgSW5qZWN0ZWRTY3JpcHQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5q
ZQogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogfQogCit2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2UpCit7
CisgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5hcHBlbmQoc291cmNlKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgp
Cit7CisgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5jbGVhcigpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6
IGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA1NTE2MSkKKysrIGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw2ICsyNTAsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIHNjcmlwdCk7CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dEZvck5vZGVJZChsb25nIGlkKTsKKyAgICB2b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQo
Y29uc3QgU3RyaW5nJiBzb3VyY2UpOworICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVh
dGVPbkxvYWQoKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgRnJv
bnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lOwpAQCAtMzQ5LDYgKzM1MSw3IEBAIHByaXZhdGU6CiAg
ICAgbXV0YWJsZSBTZXR0aW5ncyBtX3NldHRpbmdzOwogCiAgICAgVmVjdG9yPHBhaXI8bG9uZywg
U3RyaW5nPiA+IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzOworICAgIFZlY3RvcjxTdHJp
bmc+IG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQ7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiAgICAgYm9vbCBtX2RlYnVnZ2VyRW5hYmxlZDsKICAgICBib29sIG1fYXR0YWNoRGVi
dWdnZXJXaGVuU2hvd247CkluZGV4OiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkRmFrZVdv
cmtlci5qcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtl
V29ya2VyLmpzCShyZXZpc2lvbiAwKQorKysgaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZEZh
a2VXb3JrZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCit2YXIgSW5q
ZWN0ZWRGYWtlV29ya2VyID0gZnVuY3Rpb24oKQoreworCitXb3JrZXIgPSBmdW5jdGlvbih1cmwp
Cit7CisgICAgdmFyIGltcGwgPSBuZXcgRmFrZVdvcmtlcih0aGlzLCB1cmwpOworICAgIGlmIChp
bXBsID09PSBudWxsKQorICAgICAgICByZXR1cm4gbnVsbDsKKworICAgIHRoaXMuaXNGYWtlID0g
dHJ1ZTsKKyAgICB0aGlzLnBvc3RNZXNzYWdlID0gYmluZChpbXBsLnBvc3RNZXNzYWdlLCBpbXBs
KTsKKyAgICB0aGlzLnRlcm1pbmF0ZSA9IGJpbmQoaW1wbC50ZXJtaW5hdGUsIGltcGwpOworICAg
IHRoaXMub25tZXNzYWdlID0gbm9vcDsKK30KKworZnVuY3Rpb24gRmFrZVdvcmtlcih3b3JrZXIs
IHVybCkKK3sKKyAgICB2YXIgc2NyaXB0VVJMID0gbmV3IFVSTChkb2N1bWVudC5iYXNlVVJJKS5j
b21wbGV0ZVdpdGgodXJsKTsKKworICAgIGlmICghc2NyaXB0VVJMLnNhbWVPcmlnaW4obG9jYXRp
b24uaHJlZikpCisgICAgICAgIHRocm93IG5ldyBET01Db3JlRXhjZXB0aW9uKCJTRUNVUklUWV9F
UlIiLDE4KTsKKworICAgIHRoaXMuX3dvcmtlciA9IHdvcmtlcjsKKyAgICB0aGlzLl9idWlsZFdv
cmtlcihzY3JpcHRVUkwpOworfQorCitGYWtlV29ya2VyLnByb3RvdHlwZSA9IHsKKworICAgIHBv
c3RNZXNzYWdlOiBmdW5jdGlvbihtc2cpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZnJhbWUg
IT0gbnVsbCkKKyAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoTWVzc2FnZSh0aGlzLl9mcmFtZSwg
YmluZCh0aGlzLl9vbm1lc3NhZ2VXcmFwcGVyLCB0aGlzKSwgbXNnKTsKKyAgICB9LAorCisgICAg
dGVybWluYXRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZnJhbWUgIT0g
bnVsbCkgeworICAgICAgICAgICAgdGhpcy5fZnJhbWUub25tZXNzYWdlID0gdGhpcy5fd29ya2Vy
Lm9ubWVzc2FnZSA9IG5vb3A7CisgICAgICAgICAgICB0aGlzLl9mcmFtZS5mcmFtZUVsZW1lbnQu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9mcmFtZS5mcmFtZUVsZW1lbnQpOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDsKKyAgICAgICAgdGhpcy5fd29ya2VyID0g
bnVsbDsgLy8gQnJlYWsgcmVmZXJlbmNlIGxvb3AuCisgICAgfSwKKworICAgIF9vbm1lc3NhZ2VX
cmFwcGVyOiBmdW5jdGlvbihtc2cpCisgICAgeworICAgICAgICAvLyBTaG9ydGN1dCAtLSBpZiBu
byBleGNlcHRpb24gaGFuZGxlcnMgaW5zdGFsbGVkLCBhdm9pZCB0cnkvY2F0Y2ggc28gYXMgbm90
IHRvIG9ic2N1cmUgbGluZSBudW1iZXIuCisgICAgICAgIGlmICghdGhpcy5fZnJhbWUub25lcnJv
ciAmJiAhdGhpcy5fd29ya2VyLm9uZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMu
X2ZyYW1lLm9ubWVzc2FnZShtc2cpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubWVzc2FnZShtc2cpOwor
ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICB0aGlzLl9oYW5kbGVFeGNlcHRpb24o
ZSwgdGhpcy5fZnJhbWUub25lcnJvciwgdGhpcy5fd29ya2VyLm9uZXJyb3IpOworICAgICAgICB9
CisgICAgfSwKKworICAgIF9kaXNwYXRjaE1lc3NhZ2U6IGZ1bmN0aW9uKHRhcmdldFdpbmRvdywg
aGFuZGxlciwgbXNnKQorICAgIHsKKyAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5fZG9jdW1lbnQu
Y3JlYXRlRXZlbnQoIk1lc3NhZ2VFdmVudCIpOworICAgICAgICBldmVudC5pbml0TWVzc2FnZUV2
ZW50KCJNZXNzYWdlRXZlbnQiLCBmYWxzZSwgZmFsc2UsIG1zZyk7CisgICAgICAgIHRhcmdldFdp
bmRvdy5zZXRUaW1lb3V0KGhhbmRsZXIsIDAsIGV2ZW50KTsKKyAgICB9LAorCisgICAgX2hhbmRs
ZUV4Y2VwdGlvbjogZnVuY3Rpb24oZSkKKyAgICB7CisgICAgICAgIC8vIE5COiBpdCBzaG91bGQg
YmUgYW4gRXJyb3JFdmVudCwgYnV0IGNyZWF0aW5nIGl0IGZyb20gc2NyaXB0IGlzIG5vdAorICAg
ICAgICAvLyBjdXJyZW50bHkgc3VwcG9ydGVkLCB0byBlbXVsYXRlIGl0IG9uIHRvcCBvZiBwbGFp
biB2YW5pbGxhIEV2ZW50LgorICAgICAgICB2YXIgZXJyb3JFdmVudCA9IHRoaXMuX2RvY3VtZW50
LmNyZWF0ZUV2ZW50KCJFdmVudCIpOworICAgICAgICBlcnJvckV2ZW50LmluaXRFdmVudCgiRXZl
bnQiLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBlcnJvckV2ZW50Lm1lc3NhZ2UgPSAiVW5jYXVn
aHQgZXhjZXB0aW9uIjsKKworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSAmJiBhcmd1bWVudHNb
aV0oZXJyb3JFdmVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgdGhyb3cgZTsKKyAgICB9LAorCisgICAgX2J1aWxkV29ya2VyOiBmdW5jdGlvbih1cmwp
CisgICAgeworICAgICAgICB2YXIgY29kZSA9IHRoaXMuX2xvYWRTY3JpcHQodXJsLnVybCk7Cisg
ICAgICAgIHZhciBpZnJhbWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1l
Iik7CisgICAgICAgIGlmcmFtZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWVFbGVtZW50KTsKKworICAgICAgICB2
YXIgZnJhbWUgPSB3aW5kb3cuZnJhbWVzW3dpbmRvdy5mcmFtZXMubGVuZ3RoIC0gMV07CisKKyAg
ICAgICAgdGhpcy5fZG9jdW1lbnQgPSBkb2N1bWVudDsKKyAgICAgICAgdGhpcy5fZnJhbWUgPSBm
cmFtZTsKKworICAgICAgICB0aGlzLl9zZXR1cFdvcmtlckNvbnRleHQoZnJhbWUsIHVybCk7CisK
KyAgICAgICAgdmFyIGZyYW1lQ29udGVudHMgPSAnKGZ1bmN0aW9uKGxvY2F0aW9uLCB3aW5kb3cp
IHsgJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ30pKF9fZGV2dG9vbHMubG9jYXRpb24sIHVuZGVmaW5lZCk7XG4nICsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLy9AIHNvdXJjZVVSTD0nICsgdXJsLnVybDsK
KworICAgICAgICBmcmFtZS5ldmFsKGZyYW1lQ29udGVudHMpOworICAgIH0sCisKKyAgICBfc2V0
dXBXb3JrZXJDb250ZXh0OiBmdW5jdGlvbih3b3JrZXJGcmFtZSwgdXJsKQorICAgIHsKKyAgICAg
ICAgd29ya2VyRnJhbWUuX19kZXZ0b29scyA9IHsKKyAgICAgICAgICAgIGhhbmRsZUV4Y2VwdGlv
bjogYmluZCh0aGlzLl9oYW5kbGVFeGNlcHRpb24sIHRoaXMpLAorICAgICAgICAgICAgbG9jYXRp
b246IHVybC5tb2NrTG9jYXRpb24oKQorICAgICAgICB9OworICAgICAgICB2YXIgd29ya2VyID0g
dGhpcy5fd29ya2VyOworCisgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIC8vIExhdGUg
YmluZGluZyB0byBvbm1lc3NhZ2UgZGVzaXJlZCwgc28gbm8gYmluZCgpIGhlcmUuCisgICAgICAg
IHsKKyAgICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UoZXZlbnQpOworICAgICAgICB9CisKKyAg
ICAgICAgd29ya2VyRnJhbWUub25tZXNzYWdlID0gbm9vcDsKKyAgICAgICAgd29ya2VyRnJhbWUu
cG9zdE1lc3NhZ2UgPSBiaW5kKHRoaXMuX2Rpc3BhdGNoTWVzc2FnZSwgdGhpcywgd2luZG93LCBo
YW5kbGVyKTsKKyAgICAgICAgd29ya2VyRnJhbWUuaW1wb3J0U2NyaXB0cyA9IGJpbmQodGhpcy5f
aW1wb3J0U2NyaXB0cywgdGhpcywgd29ya2VyRnJhbWUpOworICAgICAgICB3b3JrZXJGcmFtZS5j
bG9zZSA9IGJpbmQodGhpcy50ZXJtaW5hdGUsIHRoaXMpOworICAgIH0sCisKKyAgICBfaW1wb3J0
U2NyaXB0czogZnVuY3Rpb24oZXZhbFRhcmdldCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGkg
PSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZXZhbFRhcmdldC5l
dmFsKHRoaXMuX2xvYWRTY3JpcHQoYXJndW1lbnRzW2ldKSk7CisgICAgfSwKKworICAgIF9sb2Fk
U2NyaXB0OiBmdW5jdGlvbih1cmwpCisgICAgeworICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7CisgICAgICAgIHhoci5vcGVuKCJHRVQiLCB1cmwsIGZhbHNlKTsKKyAgICAg
ICAgeGhyLnNlbmQobnVsbCk7CisKKyAgICAgICAgdmFyIHRleHQgPSB4aHIucmVzcG9uc2VUZXh0
OworICAgICAgICBpZiAoeGhyLnN0YXR1cyAhPSAwICYmIHhoci5zdGF0dXMvMTAwICE9PSAyKSAv
LyBXZSdyZSBnZXR0aW5nIHN0YXR1cyA9PT0gMCB3aGVuIHVzaW5nIGZpbGU6Ly8uCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIHdvcmtlcjogIiAr
IHVybCArICJbIiArIHhoci5zdGF0dXMgKyAiXSIpOworICAgICAgICAgICAgdGV4dCA9ICIiOyAv
LyBXZSd2ZSBnb3QgZXJyb3IgbWVzc2FnZSwgbm90IHdvcmtlciBjb2RlLgorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0ZXh0OworICAgIH0KK307CisKK2Z1bmN0aW9uIFVSTCh1cmwpCit7Cisg
ICAgdGhpcy51cmwgPSB1cmw7CisgICAgdGhpcy5zcGxpdCgpOworfQorCitVUkwucHJvdG90eXBl
ID0geworCisgICAgdXJsUmVnRXg6ICgvXihodHRwW3NdP3xmaWxlKTpcL1wvKFteXC86XSopKDpb
XGRdKyk/KD86KFwvW14jP10qKShcP1teI10qKT8oPzojKC4qKSk/KT8kL2kpLAorCisgICAgc3Bs
aXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGVtcHR5SWZOdWxsKHN0cikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0ciA9PSBudWxsID8gIiIgOiBzdHI7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHBhcnRzID0gdGhpcy51cmxSZWdFeC5leGVjKHRoaXMudXJs
KTsKKworICAgICAgICB0aGlzLnNjaGVtYSA9IHBhcnRzWzFdOworICAgICAgICB0aGlzLmhvc3Qg
PSBwYXJ0c1syXTsKKyAgICAgICAgdGhpcy5wb3J0ID0gZW1wdHlJZk51bGwocGFydHNbM10pOwor
ICAgICAgICB0aGlzLnBhdGggPSBlbXB0eUlmTnVsbChwYXJ0c1s0XSk7CisgICAgICAgIHRoaXMu
cXVlcnkgPSBlbXB0eUlmTnVsbChwYXJ0c1s1XSk7CisgICAgICAgIHRoaXMuZnJhZ21lbnQgPSBl
bXB0eUlmTnVsbChwYXJ0c1s2XSk7CisgICAgfSwKKworICAgIG1vY2tMb2NhdGlvbjogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdmFyIGhvc3QgPSB0aGlzLmhvc3QucmVwbGFjZSgvXlteQF0q
QC8sICIiKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgaHJlZjogICAgIHRoaXMu
dXJsLAorICAgICAgICAgICAgcHJvdG9jb2w6IHRoaXMuc2NoZW1hICsgIjoiLAorICAgICAgICAg
ICAgaG9zdDogICAgIGhvc3QsCisgICAgICAgICAgICBob3N0bmFtZTogaG9zdCwKKyAgICAgICAg
ICAgIHBvcnQ6ICAgICB0aGlzLnBvcnQsCisgICAgICAgICAgICBwYXRobmFtZTogdGhpcy5wYXRo
LAorICAgICAgICAgICAgc2VhcmNoOiAgIHRoaXMucXVlcnksCisgICAgICAgICAgICBoYXNoOiAg
ICAgdGhpcy5mcmFnbWVudAorICAgICAgICB9OworICAgIH0sCisKKyAgICBjb21wbGV0ZVdpdGg6
IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIGlmICh1cmwgPT09ICIiIHx8IC9eW14vXSo6
Ly5leGVjKHVybCkpIC8vIElmIGdpdmVuIGFic29sdXRlIHVybCwgcmV0dXJuIGFzIGlzIG5vdy4K
KyAgICAgICAgICAgIHJldHVybiBuZXcgVVJMKHVybCk7CisKKyAgICAgICAgdmFyIHJlbFBhcnRz
ID0gL14oW14jP10qKSguKikkLy5leGVjKHVybCk7IC8vID0+IFsgdXJsLCBwYXRoLCBxdWVyeS1h
bmRvci1mcmFnbWVudCBdCisKKyAgICAgICAgdmFyIHBhdGggPSAocmVsUGFydHNbMV0uc2xpY2Uo
MCwgMSkgPT09ICIvIiA/ICIiIDogdGhpcy5wYXRoLnJlcGxhY2UoL1teL10qJC8sICIiKSkgKyBy
ZWxQYXJ0c1sxXTsKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvKFwvXC4pKyhcL3wkKS9n
LCAiLyIpLnJlcGxhY2UoL1teL10qXC9cLlwuKFwvfCQpL2csICIiKTsKKworICAgICAgICByZXR1
cm4gbmV3IFVSTCh0aGlzLnNjaGVtYSArICI6Ly8iICsgdGhpcy5ob3N0ICsgdGhpcy5wb3J0ICsg
cGF0aCArIHJlbFBhcnRzWzJdKTsKKyAgICB9LAorCisgICAgc2FtZU9yaWdpbjogZnVuY3Rpb24o
dXJsKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplUG9ydChzY2hlbWEsIHBvcnQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBwb3J0Tm8gPSBwb3J0LnNsaWNlKDEpOworICAg
ICAgICAgICAgcmV0dXJuIChzY2hlbWEgPT09ICJodHRwcyIgJiYgcG9ydE5vID09IDQ0MyB8fCBz
Y2hlbWEgPT09ICJodHRwIiAmJiBwb3J0Tm8gPT0gODApID8gIiIgOiBwb3J0OworICAgICAgICB9
CisKKyAgICAgICAgdmFyIG90aGVyID0gbmV3IFVSTCh1cmwpOworCisgICAgICAgIHJldHVybiB0
aGlzLnNjaGVtYSA9PT0gb3RoZXIuc2NoZW1hICYmCisgICAgICAgICAgICB0aGlzLmhvc3QgPT09
IG90aGVyLmhvc3QgJiYKKyAgICAgICAgICAgIG5vcm1hbGl6ZVBvcnQodGhpcy5zY2hlbWEsIHRo
aXMucG9ydCkgPT09IG5vcm1hbGl6ZVBvcnQob3RoZXIuc2NoZW1hLCBvdGhlci5wb3J0KTsKKyAg
ICB9Cit9OworCitmdW5jdGlvbiBET01Db3JlRXhjZXB0aW9uKG5hbWUsIGNvZGUpCit7CisgICAg
ZnVuY3Rpb24gZm9ybWF0RXJyb3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJFcnJvcjogIiAr
IHRoaXMubWVzc2FnZTsKKyAgICB9CisKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHRoaXMu
bWVzc2FnZSA9IG5hbWUgKyAiOiBET00gRXhjZXB0aW9uICIgKyBjb2RlOworICAgIHRoaXMuY29k
ZSA9IGNvZGU7CisgICAgdGhpcy50b1N0cmluZyA9IGJpbmQoZm9ybWF0RXJyb3IsIHRoaXMpOwor
fQorCitmdW5jdGlvbiBiaW5kKGZ1bmMsIHRoaXNPYmplY3QpCit7CisgICAgdmFyIGFyZ3MgPSBB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOworICAgIHJldHVybiBmdW5j
dGlvbigpIHsgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc09iamVjdCwgYXJncy5jb25jYXQoQXJyYXku
cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSkpOyB9OworfQorCitmdW5jdGlvbiBu
b29wKCkKK3sKK30KKworfQpJbmRleDogaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9y
QmFja2VuZFN0dWIuanMJKHJldmlzaW9uIDU1MTYxKQorKysgaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwxNCBA
QCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90CiAKICAgICBzZXRJbmpl
Y3RlZFNjcmlwdFNvdXJjZTogZnVuY3Rpb24oKQogICAgIHsKKyAgICB9LAorICAgIAorICAgIGFk
ZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgfSwKKworICAg
IHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkOiBmdW5jdGlvbigpCisgICAgewogICAg
IH0KIH0KIApJbmRleDogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCShyZXZpc2lvbiA1NTE2MSkKKysr
IGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogICAgIDxmaWxlPkV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+Rm9udFZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VWaWV3LmpzPC9maWxl
PgorICAgIDxmaWxlPkluamVjdGVkRmFrZVdvcmtlci5qczwvZmlsZT4KICAgICA8ZmlsZT5Jbmpl
Y3RlZFNjcmlwdC5qczwvZmlsZT4KICAgICA8ZmlsZT5JbmplY3RlZFNjcmlwdEFjY2Vzcy5qczwv
ZmlsZT4KICAgICA8ZmlsZT5pbnNwZWN0b3IuanM8L2ZpbGU+CkluZGV4OiBpbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuaHRtbAkocmV2aXNpb24gNTUxNjEpCisrKyBpbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE8KICAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJTdW1tYXJ5QmFyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJFbGVtZW50c1BhbmVsLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZXNQYW5lbC5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSW5qZWN0
ZWRGYWtlV29ya2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJTY3JpcHRzUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IlN0b3JhZ2VQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUHJvZmlsZXNQYW5lbC5qcyI+PC9zY3Jp
cHQ+Cg==
</data>
<flag name="review"
          id="32241"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49397</attachid>
            <date>2010-02-24 08:28:53 -0800</date>
            <delta_ts>2010-02-25 03:00:14 -0800</delta_ts>
            <desc>A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (nits picked)</desc>
            <filename>workers-patch</filename>
            <type>text/plain</type>
            <size>18811</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gNTUx
OTEpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0w
Mi0yNCAgIkFuZHJleSBLb3N5YWtvdiIgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFrZSB3b3JrZXJzIGltcGxl
bWVudGF0aW9uIHRoYXQgc2ltdWxhdGVzIHdvcmtlcnMgdXNpbmcgaWZyYW1lIGFuZCB0aW1lciwK
KyAgICAgICAgbmVlZGVkIHRvIHN1cHBvcnQgd29ya2VycyBkZWJ1Z2dpbmcuIEFsc28sIGEgZmFj
aWxpdHkgdG8gaW5qZWN0IHNjcmlwdHMgaW50bworICAgICAgICBpbnNwZWN0ZWQgcGFnZSB1cG9u
IGxvYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NTE0OAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmFkZFNjcmlwdFRvRXZhbHVh
dGVPbkxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6cmVtb3ZlQWxs
U2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFs
dWF0ZU9uTG9hZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkRmFrZVdvcmtlci5qczogQWRk
ZWQuCisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuV29ya2VyKToKKyAgICAgICAgKEluamVj
dGVkRmFrZVdvcmtlci5GYWtlV29ya2VyKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5G
YWtlV29ya2VyLnByb3RvdHlwZS5wb3N0TWVzc2FnZSk6CisgICAgICAgIChJbmplY3RlZEZha2VX
b3JrZXIuRmFrZVdvcmtlci5wcm90b3R5cGUudGVybWluYXRlKToKKyAgICAgICAgKEluamVjdGVk
RmFrZVdvcmtlci5GYWtlV29ya2VyLnByb3RvdHlwZS5fb25tZXNzYWdlV3JhcHBlcik6CisgICAg
ICAgIChJbmplY3RlZEZha2VXb3JrZXIuRmFrZVdvcmtlci5wcm90b3R5cGUuX2Rpc3BhdGNoTWVz
c2FnZSk6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRmFrZVdvcmtlci5wcm90b3R5cGUu
X2hhbmRsZUV4Y2VwdGlvbik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRmFrZVdvcmtl
ci5wcm90b3R5cGUuX2J1aWxkV29ya2VyKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5G
YWtlV29ya2VyLnByb3RvdHlwZS5fc2V0dXBXb3JrZXJDb250ZXh0LmhhbmRsZXIpOgorICAgICAg
ICAoSW5qZWN0ZWRGYWtlV29ya2VyLkZha2VXb3JrZXIucHJvdG90eXBlLl9zZXR1cFdvcmtlckNv
bnRleHQpOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2VyLkZha2VXb3JrZXIucHJvdG90eXBl
Ll9pbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5GYWtlV29ya2Vy
LnByb3RvdHlwZS5fbG9hZFNjcmlwdCk6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuVVJM
KToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5VUkwucHJvdG90eXBlLnVybFJlZ0V4LnNw
bGl0KToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5VUkwucHJvdG90eXBlLm1vY2tMb2Nh
dGlvbik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuVVJMLnByb3RvdHlwZS5jb21wbGV0
ZVdpdGgpOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2VyLlVSTC5wcm90b3R5cGUuc2FtZU9y
aWdpbik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRE9NQ29yZUV4Y2VwdGlvbi5mb3Jt
YXRFcnJvcik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRE9NQ29yZUV4Y2VwdGlvbik6
CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIubm9vcCk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qczoKKyAgICAgICAgKC5XZWJJbnNwZWN0
b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlLnNldEluamVjdGVkU2NyaXB0U291cmNl
KToKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBl
LmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNw
ZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUucmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxv
YWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAyMDEwLTAyLTI0ICBKb2Nl
bHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgbm9ib2R5LCBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlLmd5cGkNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBXZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU1MTYxKQorKysgV2ViQ29yZS5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzQyLDYgKzM3NDIsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtlV29ya2VyLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcycsCkluZGV4OiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvag0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CShyZXZpc2lvbiA1NTE2MSkKKysrIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Mjg0MCw2ICs0Mjg0MCwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4N
CiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxJ
bmplY3RlZEZha2VXb3JrZXIuanMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxJbmplY3RlZFNjcmlw
dC5qcyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNw
cAkocmV2aXNpb24gNTUxNjEpCisrKyBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2OSw2ICs0NjksMTggQEAgTm9kZSogSW5zcGVjdG9yQmFja2VuZDo6
bm9kZUZvcklkKGxvbmcgbgogICAgIHJldHVybiAwOwogfQogCit2b2lkIEluc3BlY3RvckJhY2tl
bmQ6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2UpCit7Cisg
ICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKHNvdXJjZSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQmFja2VuZDo6cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKQoreworICAgIGlm
IChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6IGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBpbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5oCShyZXZpc2lvbiA1NTE2MSkKKysrIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKTsKICAgICB2b2lkIGRp
c3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgbG9uZyBpbmplY3RlZFNjcmlwdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29s
IGFzeW5jKTsKKyAgICB2b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5n
JiBzb3VyY2UpOworICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsK
ICAgICB2b2lkIGdldENoaWxkTm9kZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2
b2lkIHNldEF0dHJpYnV0ZShsb25nIGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUo
bG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUpOwpJbmRleDog
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuaWRsCShyZXZpc2lvbiA1NTE2MSkKKysrIGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmlkbAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOSBAQCBtb2R1bGUg
Y29yZSB7CiAgICAgICAgIHZvaWQgc2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoaW4gRE9NU3RyaW5n
IHNjcmlwdFNvdXJjZSk7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGlu
IGxvbmcgY2FsbElkLCBpbiBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIERPTVN0cmluZyBtZXRo
b2ROYW1lLCBpbiBET01TdHJpbmcgYXJndW1lbnRzLCBpbiBib29sZWFuIGFzeW5jKTsKIAorICAg
ICAgICB2b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoaW4gRE9NU3RyaW5nIHNjcmlwdFNv
dXJjZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsK
KwogICAgICAgICB2b2lkIGdldENoaWxkTm9kZXMoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9k
ZUlkKTsKICAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcg
ZWxlbWVudElkLCBpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZhbHVlKTsKICAgICAg
ICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgZWxlbWVudElk
LCBpbiBET01TdHJpbmcgbmFtZSk7CkluZGV4OiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDU1MTYxKQorKysgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MTEsNiArODExLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkQ29tbWl0TG9hZCgKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGxvYWRlci0+ZnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGxvYWRlci0+ZnJh
bWUoKSkpCiAgICAgICAgIGlmIChSZXNvdXJjZXNNYXAqIHJlc291cmNlTWFwID0gbV9mcmFtZVJl
c291cmNlcy5nZXQoZnJhbWUpKQogICAgICAgICAgICAgcHJ1bmVSZXNvdXJjZXMocmVzb3VyY2VN
YXAsIGxvYWRlcik7CisKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IG1f
c2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuYmVnaW4oKTsKKyAgICAgICAgIGl0ICE9IG1fc2NyaXB0
c1RvRXZhbHVhdGVPbkxvYWQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgU2NyaXB0U291cmNlQ29k
ZSBzY3JpcHRTb3VyY2VDb2RlKCppdCk7CisgICAgICAgIGxvYWRlci0+ZnJhbWUoKS0+c2NyaXB0
KCktPmV2YWx1YXRlKHNjcmlwdFNvdXJjZUNvZGUpOworICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpmcmFtZURldGFjaGVkRnJvbVBhcmVudChGcmFtZSogZnJhbWUpCkBAIC0x
OTA5LDYgKzE5MTUsMTYgQEAgSW5qZWN0ZWRTY3JpcHQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5q
ZQogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogfQogCit2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2UpCit7
CisgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5hcHBlbmQoc291cmNlKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgp
Cit7CisgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5jbGVhcigpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6
IGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA1NTE2MSkKKysrIGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw2ICsyNTAsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIHNjcmlwdCk7CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dEZvck5vZGVJZChsb25nIGlkKTsKKyAgICB2b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQo
Y29uc3QgU3RyaW5nJiBzb3VyY2UpOworICAgIHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVh
dGVPbkxvYWQoKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgRnJv
bnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lOwpAQCAtMzQ5LDYgKzM1MSw3IEBAIHByaXZhdGU6CiAg
ICAgbXV0YWJsZSBTZXR0aW5ncyBtX3NldHRpbmdzOwogCiAgICAgVmVjdG9yPHBhaXI8bG9uZywg
U3RyaW5nPiA+IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzOworICAgIFZlY3RvcjxTdHJp
bmc+IG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQ7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiAgICAgYm9vbCBtX2RlYnVnZ2VyRW5hYmxlZDsKICAgICBib29sIG1fYXR0YWNoRGVi
dWdnZXJXaGVuU2hvd247CkluZGV4OiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkRmFrZVdv
cmtlci5qcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRGYWtl
V29ya2VyLmpzCShyZXZpc2lvbiAwKQorKysgaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZEZh
a2VXb3JrZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwordmFyIEluamVjdGVkRmFr
ZVdvcmtlciA9IGZ1bmN0aW9uKCkKK3sKKworV29ya2VyID0gZnVuY3Rpb24odXJsKQoreworICAg
IHZhciBpbXBsID0gbmV3IEZha2VXb3JrZXIodGhpcywgdXJsKTsKKyAgICBpZiAoaW1wbCA9PT0g
bnVsbCkKKyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICB0aGlzLmlzRmFrZSA9IHRydWU7Cisg
ICAgdGhpcy5wb3N0TWVzc2FnZSA9IGJpbmQoaW1wbC5wb3N0TWVzc2FnZSwgaW1wbCk7CisgICAg
dGhpcy50ZXJtaW5hdGUgPSBiaW5kKGltcGwudGVybWluYXRlLCBpbXBsKTsKKyAgICB0aGlzLm9u
bWVzc2FnZSA9IG5vb3A7Cit9CisKK2Z1bmN0aW9uIEZha2VXb3JrZXIod29ya2VyLCB1cmwpCit7
CisgICAgdmFyIHNjcmlwdFVSTCA9IG5ldyBVUkwoZG9jdW1lbnQuYmFzZVVSSSkuY29tcGxldGVX
aXRoKHVybCk7CisKKyAgICBpZiAoIXNjcmlwdFVSTC5zYW1lT3JpZ2luKGxvY2F0aW9uLmhyZWYp
KQorICAgICAgICB0aHJvdyBuZXcgRE9NQ29yZUV4Y2VwdGlvbigiU0VDVVJJVFlfRVJSIiwxOCk7
CisKKyAgICB0aGlzLl93b3JrZXIgPSB3b3JrZXI7CisgICAgdGhpcy5fYnVpbGRXb3JrZXIoc2Ny
aXB0VVJMKTsKK30KKworRmFrZVdvcmtlci5wcm90b3R5cGUgPSB7CisgICAgcG9zdE1lc3NhZ2U6
IGZ1bmN0aW9uKG1zZykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9mcmFtZSAhPSBudWxsKQor
ICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hNZXNzYWdlKHRoaXMuX2ZyYW1lLCBiaW5kKHRoaXMu
X29ubWVzc2FnZVdyYXBwZXIsIHRoaXMpLCBtc2cpOworICAgIH0sCisKKyAgICB0ZXJtaW5hdGU6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9mcmFtZSAhPSBudWxsKSB7Cisg
ICAgICAgICAgICB0aGlzLl9mcmFtZS5vbm1lc3NhZ2UgPSB0aGlzLl93b3JrZXIub25tZXNzYWdl
ID0gbm9vcDsKKyAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmZyYW1lRWxlbWVudC5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKHRoaXMuX2ZyYW1lLmZyYW1lRWxlbWVudCk7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fZnJhbWUgPSBudWxsOworICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsOyAvLyBC
cmVhayByZWZlcmVuY2UgbG9vcC4KKyAgICB9LAorCisgICAgX29ubWVzc2FnZVdyYXBwZXI6IGZ1
bmN0aW9uKG1zZykKKyAgICB7CisgICAgICAgIC8vIFNob3J0Y3V0IC0tIGlmIG5vIGV4Y2VwdGlv
biBoYW5kbGVycyBpbnN0YWxsZWQsIGF2b2lkIHRyeS9jYXRjaCBzbyBhcyBub3QgdG8gb2JzY3Vy
ZSBsaW5lIG51bWJlci4KKyAgICAgICAgaWYgKCF0aGlzLl9mcmFtZS5vbmVycm9yICYmICF0aGlz
Ll93b3JrZXIub25lcnJvcikgeworICAgICAgICAgICAgdGhpcy5fZnJhbWUub25tZXNzYWdlKG1z
Zyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAg
ICAgICAgICAgdGhpcy5fZnJhbWUub25tZXNzYWdlKG1zZyk7CisgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbihlLCB0aGlzLl9mcmFtZS5vbmVy
cm9yLCB0aGlzLl93b3JrZXIub25lcnJvcik7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2Rp
c3BhdGNoTWVzc2FnZTogZnVuY3Rpb24odGFyZ2V0V2luZG93LCBoYW5kbGVyLCBtc2cpCisgICAg
eworICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFdmVudCgiTWVzc2Fn
ZUV2ZW50Iik7CisgICAgICAgIGV2ZW50LmluaXRNZXNzYWdlRXZlbnQoIk1lc3NhZ2VFdmVudCIs
IGZhbHNlLCBmYWxzZSwgbXNnKTsKKyAgICAgICAgdGFyZ2V0V2luZG93LnNldFRpbWVvdXQoaGFu
ZGxlciwgMCwgZXZlbnQpOworICAgIH0sCisKKyAgICBfaGFuZGxlRXhjZXB0aW9uOiBmdW5jdGlv
bihlKQorICAgIHsKKyAgICAgICAgLy8gTkI6IGl0IHNob3VsZCBiZSBhbiBFcnJvckV2ZW50LCBi
dXQgY3JlYXRpbmcgaXQgZnJvbSBzY3JpcHQgaXMgbm90CisgICAgICAgIC8vIGN1cnJlbnRseSBz
dXBwb3J0ZWQsIHRvIGVtdWxhdGUgaXQgb24gdG9wIG9mIHBsYWluIHZhbmlsbGEgRXZlbnQuCisg
ICAgICAgIHZhciBlcnJvckV2ZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50
Iik7CisgICAgICAgIGVycm9yRXZlbnQuaW5pdEV2ZW50KCJFdmVudCIsIGZhbHNlLCBmYWxzZSk7
CisgICAgICAgIGVycm9yRXZlbnQubWVzc2FnZSA9ICJVbmNhdWdodCBleGNlcHRpb24iOworCisg
ICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzW2ldICYmIGFyZ3VtZW50c1tpXShlcnJvckV2ZW50KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aHJvdyBlOworICAg
IH0sCisKKyAgICBfYnVpbGRXb3JrZXI6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHZh
ciBjb2RlID0gdGhpcy5fbG9hZFNjcmlwdCh1cmwudXJsKTsKKyAgICAgICAgdmFyIGlmcmFtZUVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgICAgaWZyYW1l
RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGlmcmFtZUVsZW1lbnQpOworCisgICAgICAgIHZhciBmcmFtZSA9IHdpbmRvdy5m
cmFtZXNbd2luZG93LmZyYW1lcy5sZW5ndGggLSAxXTsKKworICAgICAgICB0aGlzLl9kb2N1bWVu
dCA9IGRvY3VtZW50OworICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lOworCisgICAgICAgIHRo
aXMuX3NldHVwV29ya2VyQ29udGV4dChmcmFtZSwgdXJsKTsKKworICAgICAgICB2YXIgZnJhbWVD
b250ZW50cyA9ICcoZnVuY3Rpb24obG9jYXRpb24sIHdpbmRvdykgeyAnICsgY29kZSArICd9KShf
X2RldnRvb2xzLmxvY2F0aW9uLCB1bmRlZmluZWQpO1xuJyArICcvL0Agc291cmNlVVJMPScgKyB1
cmwudXJsOworCisgICAgICAgIGZyYW1lLmV2YWwoZnJhbWVDb250ZW50cyk7CisgICAgfSwKKwor
ICAgIF9zZXR1cFdvcmtlckNvbnRleHQ6IGZ1bmN0aW9uKHdvcmtlckZyYW1lLCB1cmwpCisgICAg
eworICAgICAgICB3b3JrZXJGcmFtZS5fX2RldnRvb2xzID0geworICAgICAgICAgICAgaGFuZGxl
RXhjZXB0aW9uOiBiaW5kKHRoaXMuX2hhbmRsZUV4Y2VwdGlvbiwgdGhpcyksCisgICAgICAgICAg
ICBsb2NhdGlvbjogdXJsLm1vY2tMb2NhdGlvbigpCisgICAgICAgIH07CisgICAgICAgIHZhciB3
b3JrZXIgPSB0aGlzLl93b3JrZXI7CisKKyAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihldmVudCkg
Ly8gTGF0ZSBiaW5kaW5nIHRvIG9ubWVzc2FnZSBkZXNpcmVkLCBzbyBubyBiaW5kKCkgaGVyZS4K
KyAgICAgICAgeworICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZShldmVudCk7CisgICAgICAg
IH0KKworICAgICAgICB3b3JrZXJGcmFtZS5vbm1lc3NhZ2UgPSBub29wOworICAgICAgICB3b3Jr
ZXJGcmFtZS5wb3N0TWVzc2FnZSA9IGJpbmQodGhpcy5fZGlzcGF0Y2hNZXNzYWdlLCB0aGlzLCB3
aW5kb3csIGhhbmRsZXIpOworICAgICAgICB3b3JrZXJGcmFtZS5pbXBvcnRTY3JpcHRzID0gYmlu
ZCh0aGlzLl9pbXBvcnRTY3JpcHRzLCB0aGlzLCB3b3JrZXJGcmFtZSk7CisgICAgICAgIHdvcmtl
ckZyYW1lLmNsb3NlID0gYmluZCh0aGlzLnRlcm1pbmF0ZSwgdGhpcyk7CisgICAgfSwKKworICAg
IF9pbXBvcnRTY3JpcHRzOiBmdW5jdGlvbihldmFsVGFyZ2V0KQorICAgIHsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBldmFs
VGFyZ2V0LmV2YWwodGhpcy5fbG9hZFNjcmlwdChhcmd1bWVudHNbaV0pKTsKKyAgICB9LAorCisg
ICAgX2xvYWRTY3JpcHQ6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHZhciB4aHIgPSBu
ZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgZmFsc2Up
OworICAgICAgICB4aHIuc2VuZChudWxsKTsKKworICAgICAgICB2YXIgdGV4dCA9IHhoci5yZXNw
b25zZVRleHQ7CisgICAgICAgIGlmICh4aHIuc3RhdHVzICE9IDAgJiYgeGhyLnN0YXR1cy8xMDAg
IT09IDIpIHsgLy8gV2UncmUgZ2V0dGluZyBzdGF0dXMgPT09IDAgd2hlbiB1c2luZyBmaWxlOi8v
LgorICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGxvYWQgd29ya2VyOiAiICsg
dXJsICsgIlsiICsgeGhyLnN0YXR1cyArICJdIik7CisgICAgICAgICAgICB0ZXh0ID0gIiI7IC8v
IFdlJ3ZlIGdvdCBlcnJvciBtZXNzYWdlLCBub3Qgd29ya2VyIGNvZGUuCisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRleHQ7CisgICAgfQorfTsKKworZnVuY3Rpb24gVVJMKHVybCkKK3sKKyAg
ICB0aGlzLnVybCA9IHVybDsKKyAgICB0aGlzLnNwbGl0KCk7Cit9CisKK1VSTC5wcm90b3R5cGUg
PSB7CisgICAgdXJsUmVnRXg6ICgvXihodHRwW3NdP3xmaWxlKTpcL1wvKFteXC86XSopKDpbXGRd
Kyk/KD86KFwvW14jP10qKShcP1teI10qKT8oPzojKC4qKSk/KT8kL2kpLAorCisgICAgc3BsaXQ6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGVtcHR5SWZOdWxsKHN0cikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0ciA9PSBudWxsID8gIiIgOiBzdHI7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHBhcnRzID0gdGhpcy51cmxSZWdFeC5leGVjKHRoaXMudXJsKTsK
KworICAgICAgICB0aGlzLnNjaGVtYSA9IHBhcnRzWzFdOworICAgICAgICB0aGlzLmhvc3QgPSBw
YXJ0c1syXTsKKyAgICAgICAgdGhpcy5wb3J0ID0gZW1wdHlJZk51bGwocGFydHNbM10pOworICAg
ICAgICB0aGlzLnBhdGggPSBlbXB0eUlmTnVsbChwYXJ0c1s0XSk7CisgICAgICAgIHRoaXMucXVl
cnkgPSBlbXB0eUlmTnVsbChwYXJ0c1s1XSk7CisgICAgICAgIHRoaXMuZnJhZ21lbnQgPSBlbXB0
eUlmTnVsbChwYXJ0c1s2XSk7CisgICAgfSwKKworICAgIG1vY2tMb2NhdGlvbjogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIGhvc3QgPSB0aGlzLmhvc3QucmVwbGFjZSgvXlteQF0qQC8s
ICIiKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgaHJlZjogICAgIHRoaXMudXJs
LAorICAgICAgICAgICAgcHJvdG9jb2w6IHRoaXMuc2NoZW1hICsgIjoiLAorICAgICAgICAgICAg
aG9zdDogICAgIGhvc3QsCisgICAgICAgICAgICBob3N0bmFtZTogaG9zdCwKKyAgICAgICAgICAg
IHBvcnQ6ICAgICB0aGlzLnBvcnQsCisgICAgICAgICAgICBwYXRobmFtZTogdGhpcy5wYXRoLAor
ICAgICAgICAgICAgc2VhcmNoOiAgIHRoaXMucXVlcnksCisgICAgICAgICAgICBoYXNoOiAgICAg
dGhpcy5mcmFnbWVudAorICAgICAgICB9OworICAgIH0sCisKKyAgICBjb21wbGV0ZVdpdGg6IGZ1
bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIGlmICh1cmwgPT09ICIiIHx8IC9eW14vXSo6Ly5l
eGVjKHVybCkpIC8vIElmIGdpdmVuIGFic29sdXRlIHVybCwgcmV0dXJuIGFzIGlzIG5vdy4KKyAg
ICAgICAgICAgIHJldHVybiBuZXcgVVJMKHVybCk7CisKKyAgICAgICAgdmFyIHJlbFBhcnRzID0g
L14oW14jP10qKSguKikkLy5leGVjKHVybCk7IC8vID0+IFsgdXJsLCBwYXRoLCBxdWVyeS1hbmRv
ci1mcmFnbWVudCBdCisKKyAgICAgICAgdmFyIHBhdGggPSAocmVsUGFydHNbMV0uc2xpY2UoMCwg
MSkgPT09ICIvIiA/ICIiIDogdGhpcy5wYXRoLnJlcGxhY2UoL1teL10qJC8sICIiKSkgKyByZWxQ
YXJ0c1sxXTsKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvKFwvXC4pKyhcL3wkKS9nLCAi
LyIpLnJlcGxhY2UoL1teL10qXC9cLlwuKFwvfCQpL2csICIiKTsKKworICAgICAgICByZXR1cm4g
bmV3IFVSTCh0aGlzLnNjaGVtYSArICI6Ly8iICsgdGhpcy5ob3N0ICsgdGhpcy5wb3J0ICsgcGF0
aCArIHJlbFBhcnRzWzJdKTsKKyAgICB9LAorCisgICAgc2FtZU9yaWdpbjogZnVuY3Rpb24odXJs
KQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplUG9ydChzY2hlbWEsIHBvcnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciBwb3J0Tm8gPSBwb3J0LnNsaWNlKDEpOworICAgICAg
ICAgICAgcmV0dXJuIChzY2hlbWEgPT09ICJodHRwcyIgJiYgcG9ydE5vID09IDQ0MyB8fCBzY2hl
bWEgPT09ICJodHRwIiAmJiBwb3J0Tm8gPT0gODApID8gIiIgOiBwb3J0OworICAgICAgICB9CisK
KyAgICAgICAgdmFyIG90aGVyID0gbmV3IFVSTCh1cmwpOworCisgICAgICAgIHJldHVybiB0aGlz
LnNjaGVtYSA9PT0gb3RoZXIuc2NoZW1hICYmCisgICAgICAgICAgICB0aGlzLmhvc3QgPT09IG90
aGVyLmhvc3QgJiYKKyAgICAgICAgICAgIG5vcm1hbGl6ZVBvcnQodGhpcy5zY2hlbWEsIHRoaXMu
cG9ydCkgPT09IG5vcm1hbGl6ZVBvcnQob3RoZXIuc2NoZW1hLCBvdGhlci5wb3J0KTsKKyAgICB9
Cit9OworCitmdW5jdGlvbiBET01Db3JlRXhjZXB0aW9uKG5hbWUsIGNvZGUpCit7CisgICAgZnVu
Y3Rpb24gZm9ybWF0RXJyb3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJFcnJvcjogIiArIHRo
aXMubWVzc2FnZTsKKyAgICB9CisKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHRoaXMubWVz
c2FnZSA9IG5hbWUgKyAiOiBET00gRXhjZXB0aW9uICIgKyBjb2RlOworICAgIHRoaXMuY29kZSA9
IGNvZGU7CisgICAgdGhpcy50b1N0cmluZyA9IGJpbmQoZm9ybWF0RXJyb3IsIHRoaXMpOworfQor
CitmdW5jdGlvbiBiaW5kKGZ1bmMsIHRoaXNPYmplY3QpCit7CisgICAgdmFyIGFyZ3MgPSBBcnJh
eS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOworICAgIHJldHVybiBmdW5jdGlv
bigpIHsgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc09iamVjdCwgYXJncy5jb25jYXQoQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSkpOyB9OworfQorCitmdW5jdGlvbiBub29w
KCkKK3sKK30KKworfQpJbmRleDogaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5qcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFj
a2VuZFN0dWIuanMJKHJldmlzaW9uIDU1MTYxKQorKysgaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNw
ZWN0b3JCYWNrZW5kU3R1Yi5qcwkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCwxNCBAQCBX
ZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90CiAKICAgICBzZXRJbmplY3Rl
ZFNjcmlwdFNvdXJjZTogZnVuY3Rpb24oKQogICAgIHsKKyAgICB9LAorICAgIAorICAgIGFkZFNj
cmlwdFRvRXZhbHVhdGVPbkxvYWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgfSwKKworICAgIHJl
bW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkOiBmdW5jdGlvbigpCisgICAgewogICAgIH0K
IH0KIApJbmRleDogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCShyZXZpc2lvbiA1NTE2MSkKKysrIGlu
c3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogICAgIDxmaWxlPkV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAgICAg
PGZpbGU+Rm9udFZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VWaWV3LmpzPC9maWxlPgor
ICAgIDxmaWxlPkluamVjdGVkRmFrZVdvcmtlci5qczwvZmlsZT4KICAgICA8ZmlsZT5JbmplY3Rl
ZFNjcmlwdC5qczwvZmlsZT4KICAgICA8ZmlsZT5JbmplY3RlZFNjcmlwdEFjY2Vzcy5qczwvZmls
ZT4KICAgICA8ZmlsZT5pbnNwZWN0b3IuanM8L2ZpbGU+CkluZGV4OiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5odG1sDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuaHRtbAkocmV2aXNpb24gNTUxNjEpCisrKyBpbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE8KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJTdW1tYXJ5QmFyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJFbGVtZW50c1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZXNQYW5lbC5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSW5qZWN0ZWRG
YWtlV29ya2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJTY3JpcHRzUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IlN0b3JhZ2VQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUHJvZmlsZXNQYW5lbC5qcyI+PC9zY3JpcHQ+
Cg==
</data>
<flag name="review"
          id="32249"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="32257"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49471</attachid>
            <date>2010-02-25 02:59:15 -0800</date>
            <delta_ts>2010-02-25 03:24:58 -0800</delta_ts>
            <desc>A patch to enable early injection of script into inspected page and a fake worker implementation to be injected when debugging workers is enabled (rebased to correct root path)</desc>
            <filename>workers-patch</filename>
            <type>text/plain</type>
            <size>19276</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTIyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMDItMjUgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGYWtlIHdvcmtlcnMgaW1wbGVtZW50YXRpb24gdGhhdCBzaW11bGF0ZXMgd29ya2VycyB1c2lu
ZyBpZnJhbWUgYW5kIHRpbWVyLAorICAgICAgICBuZWVkZWQgdG8gc3VwcG9ydCB3b3JrZXJzIGRl
YnVnZ2luZy4gQWxzbywgYSBmYWNpbGl0eSB0byBpbmplY3Qgc2NyaXB0cyBpbnRvCisgICAgICAg
IGluc3BlY3RlZCBwYWdlIHVwb24gbG9hZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM1MTQ4CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2Vu
ZDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCYWNrZW5kOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRTY3JpcHRUb0V2
YWx1YXRlT25Mb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJl
bW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0
ZWRGYWtlV29ya2VyLmpzOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5Xb3Jr
ZXIpOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2VyLkZha2VXb3JrZXIpOgorICAgICAgICAo
SW5qZWN0ZWRGYWtlV29ya2VyLkZha2VXb3JrZXIucHJvdG90eXBlLnBvc3RNZXNzYWdlKToKKyAg
ICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5GYWtlV29ya2VyLnByb3RvdHlwZS50ZXJtaW5hdGUp
OgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2VyLkZha2VXb3JrZXIucHJvdG90eXBlLl9vbm1l
c3NhZ2VXcmFwcGVyKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5GYWtlV29ya2VyLnBy
b3RvdHlwZS5fZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5G
YWtlV29ya2VyLnByb3RvdHlwZS5faGFuZGxlRXhjZXB0aW9uKToKKyAgICAgICAgKEluamVjdGVk
RmFrZVdvcmtlci5GYWtlV29ya2VyLnByb3RvdHlwZS5fYnVpbGRXb3JrZXIpOgorICAgICAgICAo
SW5qZWN0ZWRGYWtlV29ya2VyLkZha2VXb3JrZXIucHJvdG90eXBlLl9zZXR1cFdvcmtlckNvbnRl
eHQuaGFuZGxlcik6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIuRmFrZVdvcmtlci5wcm90
b3R5cGUuX3NldHVwV29ya2VyQ29udGV4dCk6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIu
RmFrZVdvcmtlci5wcm90b3R5cGUuX2ltcG9ydFNjcmlwdHMpOgorICAgICAgICAoSW5qZWN0ZWRG
YWtlV29ya2VyLkZha2VXb3JrZXIucHJvdG90eXBlLl9sb2FkU2NyaXB0KToKKyAgICAgICAgKElu
amVjdGVkRmFrZVdvcmtlci5VUkwpOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2VyLlVSTC5w
cm90b3R5cGUudXJsUmVnRXguc3BsaXQpOgorICAgICAgICAoSW5qZWN0ZWRGYWtlV29ya2VyLlVS
TC5wcm90b3R5cGUubW9ja0xvY2F0aW9uKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5V
UkwucHJvdG90eXBlLmNvbXBsZXRlV2l0aCk6CisgICAgICAgIChJbmplY3RlZEZha2VXb3JrZXIu
VVJMLnByb3RvdHlwZS5zYW1lT3JpZ2luKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5E
T01Db3JlRXhjZXB0aW9uLmZvcm1hdEVycm9yKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtl
ci5ET01Db3JlRXhjZXB0aW9uKToKKyAgICAgICAgKEluamVjdGVkRmFrZVdvcmtlci5ub29wKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOgor
ICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUuc2V0
SW5qZWN0ZWRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JC
YWNrZW5kU3R1Yi5wcm90b3R5cGUuYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCk6CisgICAgICAg
ICguV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZS5yZW1vdmVBbGxT
Y3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9X
ZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6
CisKIDIwMTAtMDItMjQgIE5pY2hvbGFzIFlvdW5nICA8bmljaG9sYXMueW91bmdAbm9raWEuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1
NTIyNikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQ2LDYg
KzM3NDYsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VWaWV3Lmpz
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHVi
LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5k
SG9zdFN0dWIuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRG
YWtlV29ya2VyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2Ny
aXB0QWNjZXNzLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qcycsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9u
IDU1MjI2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDI4NTYsNiArNDI4NTYsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQog
CQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSW5q
ZWN0ZWRGYWtlV29ya2VyLmpzIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQog
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSW5qZWN0ZWRTY3JpcHQu
anMiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmNwcAkocmV2aXNpb24gNTUyMjYpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDYgKzQ2OSwxOCBAQCBOb2Rl
KiBJbnNwZWN0b3JCYWNrZW5kOjpub2RlRm9ySWQobG9uZyBuCiAgICAgcmV0dXJuIDA7CiB9CiAK
K3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChjb25zdCBT
dHJpbmcmIHNvdXJjZSkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoc291cmNl
KTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0
ZU9uTG9hZCgpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5yZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAkocmV2aXNpb24gNTUyMjYp
CisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0
U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKTsKICAgICB2b2lkIGRpc3BhdGNoT25JbmplY3Rl
ZFNjcmlwdChsb25nIGNhbGxJZCwgbG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIGFzeW5jKTsKKyAgICB2
b2lkIGFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2UpOworICAg
IHZvaWQgcmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKTsKICAgICB2b2lkIGdldENo
aWxkTm9kZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2b2lkIHNldEF0dHJpYnV0
ZShsb25nIGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7CiAgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxv
bmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5pZGwJKHJldmlzaW9uIDU1MjI2KQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDkgQEAg
bW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGluIERP
TVN0cmluZyBzY3JpcHRTb3VyY2UpOwogICAgICAgICB2b2lkIGRpc3BhdGNoT25JbmplY3RlZFNj
cmlwdChpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBpbmplY3RlZFNjcmlwdElkLCBpbiBET01TdHJp
bmcgbWV0aG9kTmFtZSwgaW4gRE9NU3RyaW5nIGFyZ3VtZW50cywgaW4gYm9vbGVhbiBhc3luYyk7
CiAKKyAgICAgICAgdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGluIERPTVN0cmluZyBz
Y3JpcHRTb3VyY2UpOworICAgICAgICB2b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25M
b2FkKCk7CisKICAgICAgICAgdm9pZCBnZXRDaGlsZE5vZGVzKGluIGxvbmcgY2FsbElkLCBpbiBs
b25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGluIGxvbmcgY2FsbElkLCBp
biBsb25nIGVsZW1lbnRJZCwgaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2YWx1ZSk7
CiAgICAgICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIGVs
ZW1lbnRJZCwgaW4gRE9NU3RyaW5nIG5hbWUpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDU1MjI2KQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcg
QEAKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgi
CiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2Rl
LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtODAyLDYgKzgwMywxMiBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBs
b2FkZXItPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4
dChsb2FkZXItPmZyYW1lKCkpKQogICAgICAgICBpZiAoUmVzb3VyY2VzTWFwKiByZXNvdXJjZU1h
cCA9IG1fZnJhbWVSZXNvdXJjZXMuZ2V0KGZyYW1lKSkKICAgICAgICAgICAgIHBydW5lUmVzb3Vy
Y2VzKHJlc291cmNlTWFwLCBsb2FkZXIpOworCisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6aXRl
cmF0b3IgaXQgPSBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLmJlZ2luKCk7CisgICAgICAgICBp
dCAhPSBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFNj
cmlwdFNvdXJjZUNvZGUgc2NyaXB0U291cmNlQ29kZSgqaXQpOworICAgICAgICBsb2FkZXItPmZy
YW1lKCktPnNjcmlwdCgpLT5ldmFsdWF0ZShzY3JpcHRTb3VyY2VDb2RlKTsKKyAgICB9CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJhbWVEZXRhY2hlZEZyb21QYXJlbnQoRnJhbWUq
IGZyYW1lKQpAQCAtMTkwMCw2ICsxOTA3LDE2IEBAIEluamVjdGVkU2NyaXB0IEluc3BlY3RvckNv
bnRyb2xsZXI6OmluamUKICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKIH0KIAordm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGNvbnN0IFN0cmlu
ZyYgc291cmNlKQoreworICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuYXBwZW5kKHNvdXJj
ZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQWxsU2NyaXB0c1RvRXZh
bHVhdGVPbkxvYWQoKQoreworICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuY2xlYXIoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogICAgIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZp
c2lvbiA1NTIyNikKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGV2YWx1
YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsK
IAogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yTm9kZUlkKGxvbmcgaWQpOwor
ICAgIHZvaWQgYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChjb25zdCBTdHJpbmcmIHNvdXJjZSk7
CisgICAgdm9pZCByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOwogCiBwcml2YXRl
OgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBGcm9udGVuZFNldHRpbmdzU2V0dGluZ05h
bWU7CkBAIC0zNDksNiArMzUxLDcgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFNldHRpbmdzIG1f
c2V0dGluZ3M7CiAKICAgICBWZWN0b3I8cGFpcjxsb25nLCBTdHJpbmc+ID4gbV9wZW5kaW5nRXZh
bHVhdGVUZXN0Q29tbWFuZHM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9zY3JpcHRzVG9FdmFsdWF0
ZU9uTG9hZDsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBib29sIG1fZGVi
dWdnZXJFbmFibGVkOwogICAgIGJvb2wgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjsKSW5kZXg6
IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZEZha2VXb3JrZXIuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkRmFrZVdvcmtlci5q
cwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZEZh
a2VXb3JrZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwordmFyIEluamVjdGVkRmFr
ZVdvcmtlciA9IGZ1bmN0aW9uKCkKK3sKKworV29ya2VyID0gZnVuY3Rpb24odXJsKQoreworICAg
IHZhciBpbXBsID0gbmV3IEZha2VXb3JrZXIodGhpcywgdXJsKTsKKyAgICBpZiAoaW1wbCA9PT0g
bnVsbCkKKyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICB0aGlzLmlzRmFrZSA9IHRydWU7Cisg
ICAgdGhpcy5wb3N0TWVzc2FnZSA9IGJpbmQoaW1wbC5wb3N0TWVzc2FnZSwgaW1wbCk7CisgICAg
dGhpcy50ZXJtaW5hdGUgPSBiaW5kKGltcGwudGVybWluYXRlLCBpbXBsKTsKKyAgICB0aGlzLm9u
bWVzc2FnZSA9IG5vb3A7Cit9CisKK2Z1bmN0aW9uIEZha2VXb3JrZXIod29ya2VyLCB1cmwpCit7
CisgICAgdmFyIHNjcmlwdFVSTCA9IG5ldyBVUkwoZG9jdW1lbnQuYmFzZVVSSSkuY29tcGxldGVX
aXRoKHVybCk7CisKKyAgICBpZiAoIXNjcmlwdFVSTC5zYW1lT3JpZ2luKGxvY2F0aW9uLmhyZWYp
KQorICAgICAgICB0aHJvdyBuZXcgRE9NQ29yZUV4Y2VwdGlvbigiU0VDVVJJVFlfRVJSIiwxOCk7
CisKKyAgICB0aGlzLl93b3JrZXIgPSB3b3JrZXI7CisgICAgdGhpcy5fYnVpbGRXb3JrZXIoc2Ny
aXB0VVJMKTsKK30KKworRmFrZVdvcmtlci5wcm90b3R5cGUgPSB7CisgICAgcG9zdE1lc3NhZ2U6
IGZ1bmN0aW9uKG1zZykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9mcmFtZSAhPSBudWxsKQor
ICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hNZXNzYWdlKHRoaXMuX2ZyYW1lLCBiaW5kKHRoaXMu
X29ubWVzc2FnZVdyYXBwZXIsIHRoaXMpLCBtc2cpOworICAgIH0sCisKKyAgICB0ZXJtaW5hdGU6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9mcmFtZSAhPSBudWxsKSB7Cisg
ICAgICAgICAgICB0aGlzLl9mcmFtZS5vbm1lc3NhZ2UgPSB0aGlzLl93b3JrZXIub25tZXNzYWdl
ID0gbm9vcDsKKyAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmZyYW1lRWxlbWVudC5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKHRoaXMuX2ZyYW1lLmZyYW1lRWxlbWVudCk7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5fZnJhbWUgPSBudWxsOworICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsOyAvLyBC
cmVhayByZWZlcmVuY2UgbG9vcC4KKyAgICB9LAorCisgICAgX29ubWVzc2FnZVdyYXBwZXI6IGZ1
bmN0aW9uKG1zZykKKyAgICB7CisgICAgICAgIC8vIFNob3J0Y3V0IC0tIGlmIG5vIGV4Y2VwdGlv
biBoYW5kbGVycyBpbnN0YWxsZWQsIGF2b2lkIHRyeS9jYXRjaCBzbyBhcyBub3QgdG8gb2JzY3Vy
ZSBsaW5lIG51bWJlci4KKyAgICAgICAgaWYgKCF0aGlzLl9mcmFtZS5vbmVycm9yICYmICF0aGlz
Ll93b3JrZXIub25lcnJvcikgeworICAgICAgICAgICAgdGhpcy5fZnJhbWUub25tZXNzYWdlKG1z
Zyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAg
ICAgICAgICAgdGhpcy5fZnJhbWUub25tZXNzYWdlKG1zZyk7CisgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2hhbmRsZUV4Y2VwdGlvbihlLCB0aGlzLl9mcmFtZS5vbmVy
cm9yLCB0aGlzLl93b3JrZXIub25lcnJvcik7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2Rp
c3BhdGNoTWVzc2FnZTogZnVuY3Rpb24odGFyZ2V0V2luZG93LCBoYW5kbGVyLCBtc2cpCisgICAg
eworICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFdmVudCgiTWVzc2Fn
ZUV2ZW50Iik7CisgICAgICAgIGV2ZW50LmluaXRNZXNzYWdlRXZlbnQoIk1lc3NhZ2VFdmVudCIs
IGZhbHNlLCBmYWxzZSwgbXNnKTsKKyAgICAgICAgdGFyZ2V0V2luZG93LnNldFRpbWVvdXQoaGFu
ZGxlciwgMCwgZXZlbnQpOworICAgIH0sCisKKyAgICBfaGFuZGxlRXhjZXB0aW9uOiBmdW5jdGlv
bihlKQorICAgIHsKKyAgICAgICAgLy8gTkI6IGl0IHNob3VsZCBiZSBhbiBFcnJvckV2ZW50LCBi
dXQgY3JlYXRpbmcgaXQgZnJvbSBzY3JpcHQgaXMgbm90CisgICAgICAgIC8vIGN1cnJlbnRseSBz
dXBwb3J0ZWQsIHRvIGVtdWxhdGUgaXQgb24gdG9wIG9mIHBsYWluIHZhbmlsbGEgRXZlbnQuCisg
ICAgICAgIHZhciBlcnJvckV2ZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50
Iik7CisgICAgICAgIGVycm9yRXZlbnQuaW5pdEV2ZW50KCJFdmVudCIsIGZhbHNlLCBmYWxzZSk7
CisgICAgICAgIGVycm9yRXZlbnQubWVzc2FnZSA9ICJVbmNhdWdodCBleGNlcHRpb24iOworCisg
ICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzW2ldICYmIGFyZ3VtZW50c1tpXShlcnJvckV2ZW50KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aHJvdyBlOworICAg
IH0sCisKKyAgICBfYnVpbGRXb3JrZXI6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHZh
ciBjb2RlID0gdGhpcy5fbG9hZFNjcmlwdCh1cmwudXJsKTsKKyAgICAgICAgdmFyIGlmcmFtZUVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgICAgaWZyYW1l
RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgICAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGlmcmFtZUVsZW1lbnQpOworCisgICAgICAgIHZhciBmcmFtZSA9IHdpbmRvdy5m
cmFtZXNbd2luZG93LmZyYW1lcy5sZW5ndGggLSAxXTsKKworICAgICAgICB0aGlzLl9kb2N1bWVu
dCA9IGRvY3VtZW50OworICAgICAgICB0aGlzLl9mcmFtZSA9IGZyYW1lOworCisgICAgICAgIHRo
aXMuX3NldHVwV29ya2VyQ29udGV4dChmcmFtZSwgdXJsKTsKKworICAgICAgICB2YXIgZnJhbWVD
b250ZW50cyA9ICcoZnVuY3Rpb24obG9jYXRpb24sIHdpbmRvdykgeyAnICsgY29kZSArICd9KShf
X2RldnRvb2xzLmxvY2F0aW9uLCB1bmRlZmluZWQpO1xuJyArICcvL0Agc291cmNlVVJMPScgKyB1
cmwudXJsOworCisgICAgICAgIGZyYW1lLmV2YWwoZnJhbWVDb250ZW50cyk7CisgICAgfSwKKwor
ICAgIF9zZXR1cFdvcmtlckNvbnRleHQ6IGZ1bmN0aW9uKHdvcmtlckZyYW1lLCB1cmwpCisgICAg
eworICAgICAgICB3b3JrZXJGcmFtZS5fX2RldnRvb2xzID0geworICAgICAgICAgICAgaGFuZGxl
RXhjZXB0aW9uOiBiaW5kKHRoaXMuX2hhbmRsZUV4Y2VwdGlvbiwgdGhpcyksCisgICAgICAgICAg
ICBsb2NhdGlvbjogdXJsLm1vY2tMb2NhdGlvbigpCisgICAgICAgIH07CisgICAgICAgIHZhciB3
b3JrZXIgPSB0aGlzLl93b3JrZXI7CisKKyAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihldmVudCkg
Ly8gTGF0ZSBiaW5kaW5nIHRvIG9ubWVzc2FnZSBkZXNpcmVkLCBzbyBubyBiaW5kKCkgaGVyZS4K
KyAgICAgICAgeworICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZShldmVudCk7CisgICAgICAg
IH0KKworICAgICAgICB3b3JrZXJGcmFtZS5vbm1lc3NhZ2UgPSBub29wOworICAgICAgICB3b3Jr
ZXJGcmFtZS5wb3N0TWVzc2FnZSA9IGJpbmQodGhpcy5fZGlzcGF0Y2hNZXNzYWdlLCB0aGlzLCB3
aW5kb3csIGhhbmRsZXIpOworICAgICAgICB3b3JrZXJGcmFtZS5pbXBvcnRTY3JpcHRzID0gYmlu
ZCh0aGlzLl9pbXBvcnRTY3JpcHRzLCB0aGlzLCB3b3JrZXJGcmFtZSk7CisgICAgICAgIHdvcmtl
ckZyYW1lLmNsb3NlID0gYmluZCh0aGlzLnRlcm1pbmF0ZSwgdGhpcyk7CisgICAgfSwKKworICAg
IF9pbXBvcnRTY3JpcHRzOiBmdW5jdGlvbihldmFsVGFyZ2V0KQorICAgIHsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBldmFs
VGFyZ2V0LmV2YWwodGhpcy5fbG9hZFNjcmlwdChhcmd1bWVudHNbaV0pKTsKKyAgICB9LAorCisg
ICAgX2xvYWRTY3JpcHQ6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHZhciB4aHIgPSBu
ZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgZmFsc2Up
OworICAgICAgICB4aHIuc2VuZChudWxsKTsKKworICAgICAgICB2YXIgdGV4dCA9IHhoci5yZXNw
b25zZVRleHQ7CisgICAgICAgIGlmICh4aHIuc3RhdHVzICE9IDAgJiYgeGhyLnN0YXR1cy8xMDAg
IT09IDIpIHsgLy8gV2UncmUgZ2V0dGluZyBzdGF0dXMgPT09IDAgd2hlbiB1c2luZyBmaWxlOi8v
LgorICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGxvYWQgd29ya2VyOiAiICsg
dXJsICsgIlsiICsgeGhyLnN0YXR1cyArICJdIik7CisgICAgICAgICAgICB0ZXh0ID0gIiI7IC8v
IFdlJ3ZlIGdvdCBlcnJvciBtZXNzYWdlLCBub3Qgd29ya2VyIGNvZGUuCisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRleHQ7CisgICAgfQorfTsKKworZnVuY3Rpb24gVVJMKHVybCkKK3sKKyAg
ICB0aGlzLnVybCA9IHVybDsKKyAgICB0aGlzLnNwbGl0KCk7Cit9CisKK1VSTC5wcm90b3R5cGUg
PSB7CisgICAgdXJsUmVnRXg6ICgvXihodHRwW3NdP3xmaWxlKTpcL1wvKFteXC86XSopKDpbXGRd
Kyk/KD86KFwvW14jP10qKShcP1teI10qKT8oPzojKC4qKSk/KT8kL2kpLAorCisgICAgc3BsaXQ6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGVtcHR5SWZOdWxsKHN0cikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0ciA9PSBudWxsID8gIiIgOiBzdHI7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIHBhcnRzID0gdGhpcy51cmxSZWdFeC5leGVjKHRoaXMudXJsKTsK
KworICAgICAgICB0aGlzLnNjaGVtYSA9IHBhcnRzWzFdOworICAgICAgICB0aGlzLmhvc3QgPSBw
YXJ0c1syXTsKKyAgICAgICAgdGhpcy5wb3J0ID0gZW1wdHlJZk51bGwocGFydHNbM10pOworICAg
ICAgICB0aGlzLnBhdGggPSBlbXB0eUlmTnVsbChwYXJ0c1s0XSk7CisgICAgICAgIHRoaXMucXVl
cnkgPSBlbXB0eUlmTnVsbChwYXJ0c1s1XSk7CisgICAgICAgIHRoaXMuZnJhZ21lbnQgPSBlbXB0
eUlmTnVsbChwYXJ0c1s2XSk7CisgICAgfSwKKworICAgIG1vY2tMb2NhdGlvbjogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIGhvc3QgPSB0aGlzLmhvc3QucmVwbGFjZSgvXlteQF0qQC8s
ICIiKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgaHJlZjogICAgIHRoaXMudXJs
LAorICAgICAgICAgICAgcHJvdG9jb2w6IHRoaXMuc2NoZW1hICsgIjoiLAorICAgICAgICAgICAg
aG9zdDogICAgIGhvc3QsCisgICAgICAgICAgICBob3N0bmFtZTogaG9zdCwKKyAgICAgICAgICAg
IHBvcnQ6ICAgICB0aGlzLnBvcnQsCisgICAgICAgICAgICBwYXRobmFtZTogdGhpcy5wYXRoLAor
ICAgICAgICAgICAgc2VhcmNoOiAgIHRoaXMucXVlcnksCisgICAgICAgICAgICBoYXNoOiAgICAg
dGhpcy5mcmFnbWVudAorICAgICAgICB9OworICAgIH0sCisKKyAgICBjb21wbGV0ZVdpdGg6IGZ1
bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIGlmICh1cmwgPT09ICIiIHx8IC9eW14vXSo6Ly5l
eGVjKHVybCkpIC8vIElmIGdpdmVuIGFic29sdXRlIHVybCwgcmV0dXJuIGFzIGlzIG5vdy4KKyAg
ICAgICAgICAgIHJldHVybiBuZXcgVVJMKHVybCk7CisKKyAgICAgICAgdmFyIHJlbFBhcnRzID0g
L14oW14jP10qKSguKikkLy5leGVjKHVybCk7IC8vID0+IFsgdXJsLCBwYXRoLCBxdWVyeS1hbmRv
ci1mcmFnbWVudCBdCisKKyAgICAgICAgdmFyIHBhdGggPSAocmVsUGFydHNbMV0uc2xpY2UoMCwg
MSkgPT09ICIvIiA/ICIiIDogdGhpcy5wYXRoLnJlcGxhY2UoL1teL10qJC8sICIiKSkgKyByZWxQ
YXJ0c1sxXTsKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvKFwvXC4pKyhcL3wkKS9nLCAi
LyIpLnJlcGxhY2UoL1teL10qXC9cLlwuKFwvfCQpL2csICIiKTsKKworICAgICAgICByZXR1cm4g
bmV3IFVSTCh0aGlzLnNjaGVtYSArICI6Ly8iICsgdGhpcy5ob3N0ICsgdGhpcy5wb3J0ICsgcGF0
aCArIHJlbFBhcnRzWzJdKTsKKyAgICB9LAorCisgICAgc2FtZU9yaWdpbjogZnVuY3Rpb24odXJs
KQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplUG9ydChzY2hlbWEsIHBvcnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciBwb3J0Tm8gPSBwb3J0LnNsaWNlKDEpOworICAgICAg
ICAgICAgcmV0dXJuIChzY2hlbWEgPT09ICJodHRwcyIgJiYgcG9ydE5vID09IDQ0MyB8fCBzY2hl
bWEgPT09ICJodHRwIiAmJiBwb3J0Tm8gPT0gODApID8gIiIgOiBwb3J0OworICAgICAgICB9CisK
KyAgICAgICAgdmFyIG90aGVyID0gbmV3IFVSTCh1cmwpOworCisgICAgICAgIHJldHVybiB0aGlz
LnNjaGVtYSA9PT0gb3RoZXIuc2NoZW1hICYmCisgICAgICAgICAgICB0aGlzLmhvc3QgPT09IG90
aGVyLmhvc3QgJiYKKyAgICAgICAgICAgIG5vcm1hbGl6ZVBvcnQodGhpcy5zY2hlbWEsIHRoaXMu
cG9ydCkgPT09IG5vcm1hbGl6ZVBvcnQob3RoZXIuc2NoZW1hLCBvdGhlci5wb3J0KTsKKyAgICB9
Cit9OworCitmdW5jdGlvbiBET01Db3JlRXhjZXB0aW9uKG5hbWUsIGNvZGUpCit7CisgICAgZnVu
Y3Rpb24gZm9ybWF0RXJyb3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJFcnJvcjogIiArIHRo
aXMubWVzc2FnZTsKKyAgICB9CisKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHRoaXMubWVz
c2FnZSA9IG5hbWUgKyAiOiBET00gRXhjZXB0aW9uICIgKyBjb2RlOworICAgIHRoaXMuY29kZSA9
IGNvZGU7CisgICAgdGhpcy50b1N0cmluZyA9IGJpbmQoZm9ybWF0RXJyb3IsIHRoaXMpOworfQor
CitmdW5jdGlvbiBiaW5kKGZ1bmMsIHRoaXNPYmplY3QpCit7CisgICAgdmFyIGFyZ3MgPSBBcnJh
eS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOworICAgIHJldHVybiBmdW5jdGlv
bigpIHsgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc09iamVjdCwgYXJncy5jb25jYXQoQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSkpOyB9OworfQorCitmdW5jdGlvbiBub29w
KCkKK3sKK30KKworfQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3Rv
ckJhY2tlbmRTdHViLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwkocmV2aXNpb24gNTUyMjYpCisrKyBXZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTI2NCw2ICsyNjQsMTQgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnBy
b3RvdAogCiAgICAgc2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2U6IGZ1bmN0aW9uKCkKICAgICB7Cisg
ICAgfSwKKyAgICAKKyAgICBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkOiBmdW5jdGlvbigpCisg
ICAgeworICAgIH0sCisKKyAgICByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZDogZnVu
Y3Rpb24oKQorICAgIHsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9XZWJLaXQucXJjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9XZWJLaXQucXJjCShyZXZpc2lvbiA1NTIyNikKKysrIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9XZWJLaXQucXJjCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAgICAgPGZp
bGU+RXZlbnRMaXN0ZW5lcnNTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5Gb250Vmll
dy5qczwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZVZpZXcuanM8L2ZpbGU+CisgICAgPGZpbGU+SW5q
ZWN0ZWRGYWtlV29ya2VyLmpzPC9maWxlPgogICAgIDxmaWxlPkluamVjdGVkU2NyaXB0LmpzPC9m
aWxlPgogICAgIDxmaWxlPkluamVjdGVkU2NyaXB0QWNjZXNzLmpzPC9maWxlPgogICAgIDxmaWxl
Pmluc3BlY3Rvci5qczwvZmlsZT4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmh0bWwJKHJldmlzaW9uIDU1MjI2KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE8KICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdW1tYXJ5QmFyLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJFbGVtZW50c1BhbmVsLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZXNQYW5l
bC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
SW5qZWN0ZWRGYWtlV29ya2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJTY3JpcHRzUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlN0b3JhZ2VQYW5lbC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUHJvZmlsZXNQYW5lbC5qcyI+
PC9zY3JpcHQ+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>