<?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>47715</bug_id>
          
          <creation_ts>2010-10-15 02:25:14 -0700</creation_ts>
          <short_desc>Web Inspector: move frontend settings to local storage</short_desc>
          <delta_ts>2010-10-27 01:54:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>beidson</cc>
    
    <cc>bweinstein</cc>
    
    <cc>cevans</cc>
    
    <cc>fishd</cc>
    
    <cc>joepeck</cc>
    
    <cc>jorlow</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>294653</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-15 02:25:14 -0700</bug_when>
    <thetext>We would like to enable access to local storage from Web Inspector. However, there are two problems:

1. privateBrowsingEnabled setting is true for web inspector pages (see WebInspectorClient.mm), this prevents web inspector from modifying local storage (see StorageAreaImpl::setItem). According to comment, this is done to keep inspector out of history.
This can be solved by introducing new setting &quot;excludeFromHistory&quot; and then using it instead of &quot;privateBrowsingEnabled&quot; in WebInspectorClient.

2. chrome registers &quot;chrome:&quot; schema as no access (see RenderThread::EnsureWebKitInitialized), this prevents web inspector from accessing the local storage.
We can add &quot;allowLocalStorageAccess&quot; setting like it&apos;s already done for &quot;allowUniversalAccessFromFileURLs&quot; (see Document::initSecurityContext). But I don&apos;t feel like it&apos;s a good solution.

Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294660</commentid>
    <comment_count>1</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-15 02:35:31 -0700</bug_when>
    <thetext>Chris, do you have thoughts on #2?

#1 sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295644</commentid>
    <comment_count>2</comment_count>
      <attachid>71064</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-18 11:29:09 -0700</bug_when>
    <thetext>Created attachment 71064
Use localStorage to persist front-end settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296077</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-19 02:42:41 -0700</bug_when>
    <thetext>I have 2 concerns:
1) LocalStorage is racy if you use it from 2 threads/processes.  Are you OK with this?
2) It doesn&apos;t seem as though there&apos;s any code to migrate forward settings from the old system to the new.  Is that OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296118</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-19 05:03:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I have 2 concerns:
&gt; 1) LocalStorage is racy if you use it from 2 threads/processes.  Are you OK with this?
That could be a problem, we should probably use Web SQL DB instead.

&gt; 2) It doesn&apos;t seem as though there&apos;s any code to migrate forward settings from the old system to the new.  Is that OK?
There&apos;s very few settings currently. So it&apos;s ok to forget the old settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296138</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-19 06:12:26 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; I have 2 concerns:
&gt; &gt; 1) LocalStorage is racy if you use it from 2 threads/processes.  Are you OK with this?
&gt; That could be a problem, we should probably use Web SQL DB instead.
We just need a dictionary for our settings, and SQL is much more than that. And since we aren&apos;t concerned about atomicity, localStorage should work pretty well for us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297980</commentid>
    <comment_count>6</comment_count>
      <attachid>71564</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-22 08:14:36 -0700</bug_when>
    <thetext>Created attachment 71564
Use shorter keys (no &quot;application&quot; prefix).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297995</commentid>
    <comment_count>7</comment_count>
      <attachid>71564</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-22 08:44:24 -0700</bug_when>
    <thetext>Comment on attachment 71564
Use shorter keys (no &quot;application&quot; prefix).

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

&gt; WebCore/inspector/front-end/Panel.js:37
&gt; +    WebInspector.applicationSettings.installSetting(this._sidebarWidthSettingName(), &quot;application&quot;, undefined);

It should be

WebInspector.settings.installApplicationSetting and
WebInspector.settings.installProjectSetting

&gt; WebCore/inspector/front-end/Settings.js:97
&gt; +            return key + &quot;.&quot; + this._mainResourceURL;

You might want to ignore fragment here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298793</commentid>
    <comment_count>8</comment_count>
      <attachid>71734</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-25 05:02:09 -0700</bug_when>
    <thetext>Created attachment 71734
Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299777</commentid>
    <comment_count>9</comment_count>
      <attachid>71734</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-26 13:47:59 -0700</bug_when>
    <thetext>Comment on attachment 71734
Comments addressed.

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

&gt; WebCore/inspector/front-end/inspector.js:604
&gt; +    WebInspector.applicationSettings.dispatchEventToListeners(&quot;loaded&quot;);

Now that we load settings synchronously, we no longer need the listener. We should always expect them to be available. You can remove this notification and all the places that listen to settings load. Unless we go the DB way...
What about reading from multiple threads / removing keys. fishd had some reservations on that front...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300071</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-27 01:52:51 -0700</bug_when>
    <thetext>Committed r70622: &lt;http://trac.webkit.org/changeset/70622&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300072</commentid>
    <comment_count>11</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-10-27 01:54:40 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 71734 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71734&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/front-end/inspector.js:604
&gt; &gt; +    WebInspector.applicationSettings.dispatchEventToListeners(&quot;loaded&quot;);
&gt; 
&gt; Now that we load settings synchronously, we no longer need the listener. We should always expect them to be available. You can remove this notification and all the places that listen to settings load. Unless we go the DB way...
done

&gt; What about reading from multiple threads / removing keys. fishd had some reservations on that front...
Issue with reading from multiple threads is that localStorage.foo = localStorage.foo + 1 is not atomic, but that&apos;s ok for us.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71064</attachid>
            <date>2010-10-18 11:29:09 -0700</date>
            <delta_ts>2010-10-22 08:14:36 -0700</delta_ts>
            <desc>Use localStorage to persist front-end settings.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>13839</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2M1ZDY4YS4uZjg3MDlmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMC0xMC0xOCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIGZyb250ZW5kIHNldHRp
bmdzIHRvIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ3NzE1CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpJ
bnNwZWN0b3JTdGF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5QYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2V0dGluZ3MucHJvdG90eXBlLmluc3RhbGxTZXR0aW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TZXR0aW5ncy5wcm90b3R5cGUuX2dldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGlu
Z3MucHJvdG90eXBlLl9zZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3Rv
dHlwZS5fZm9ybWF0S2V5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLnJlc2V0KToKKwogMjAxMC0xMC0xOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmlkbAppbmRleCBiN2Y0YTBkLi5kMWJjNzhiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5pZGwKQEAgLTk0LDEzICs5NCw5IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgLy8gVGhp
cyBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYnJva2VuIGRvd24gaW50byBzbWFsbGVyIHBhcnRzLgog
ICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygp
OwogCi0gICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0U2V0dGluZ3Mob3V0IE9i
amVjdCBzZXR0aW5ncyk7CiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0SW5z
cGVjdG9yU3RhdGUob3V0IE9iamVjdCBzdGF0ZSk7CiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xs
ZXJdIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoaW4gU3RyaW5nIHBhbmVsTmFtZSk7CiAKLSAg
ICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhp
biBTdHJpbmcgc2V0dGluZ3MpOwotICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHNh
dmVTZXNzaW9uU2V0dGluZ3MoaW4gU3RyaW5nIHNldHRpbmdzKTsKLQogICAgICAgICBbaGFuZGxl
cj1Db250cm9sbGVyXSB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoaW4gYm9vbGVhbiBlbmFibGVk
LCBvdXQgYm9vbGVhbiBuZXdTdGF0ZSk7CiAKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0g
dm9pZCBzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChpbiBib29sZWFuIGVuYWJsZSwgb3V0IGJvb2xl
YW4gbmV3U3RhdGUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApp
bmRleCA4NDcyYWEyLi43ZTk1MjY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcApAQCAtMTQ0LDcgKzE0NCw2IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3Bl
Y3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAg
LCBtX2RvbUNvbnRlbnRFdmVudFRpbWUoLTEuMCkKICAgICAsIG1fZXhwaXJlZENvbnNvbGVNZXNz
YWdlQ291bnQoMCkKICAgICAsIG1fc2hvd0FmdGVyVmlzaWJsZShMYXN0QWN0aXZlUGFuZWwpCi0g
ICAgLCBtX3Nlc3Npb25TZXR0aW5ncyhJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKQogICAgICwg
bV9ncm91cExldmVsKDApCiAgICAgLCBtX3ByZXZpb3VzTWVzc2FnZSgwKQogICAgICwgbV9zZXR0
aW5nc0xvYWRlZChmYWxzZSkKQEAgLTIzMSwxNiArMjMwLDYgQEAgYm9vbCBJbnNwZWN0b3JDb250
cm9sbGVyOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3Rh
dGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhj
b25zdCBTdHJpbmcmIHNldHRpbmdzKQotewotICAgIG1fc3RhdGUtPnNldFN0cmluZyhJbnNwZWN0
b3JTdGF0ZTo6ZnJvbnRlbmRTZXR0aW5ncywgc2V0dGluZ3MpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNhdmVTZXNzaW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5nc0pT
T04pCi17Ci0gICAgbV9zZXNzaW9uU2V0dGluZ3MgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09O
KHNldHRpbmdzSlNPTik7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SW5zcGVj
dG9yU3RhdGUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0YXRlKQogewogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMjU3LDEzICsyNDYsNiBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBp
bnNwZWN0bwogICAgICAgICBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpnZXRTZXR0aW5ncyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc2V0
dGluZ3MpCi17Ci0gICAgKnNldHRpbmdzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJhcHBsaWNhdGlvbiIsIG1fc3RhdGUtPmdldFN0cmlu
ZyhJbnNwZWN0b3JTdGF0ZTo6ZnJvbnRlbmRTZXR0aW5ncykpOwotICAgICgqc2V0dGluZ3MpLT5z
ZXRTdHJpbmcoInNlc3Npb24iLCBtX3Nlc3Npb25TZXR0aW5ncy0+dG9KU09OU3RyaW5nKCkpOwot
fQotCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3QoTm9kZSogbm9kZSkKIHsKICAg
ICBpZiAoIWVuYWJsZWQoKSkKQEAgLTc4Nyw3ICs3NjksNiBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgdW5i
aW5kQWxsUmVzb3VyY2VzKCk7CiAKICAgICAgICAgbV9jc3NTdG9yZS0+cmVzZXQoKTsKLSAgICAg
ICAgbV9zZXNzaW9uU2V0dGluZ3MgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
ICBpZiAobV9mcm9udGVuZCkgewogICAgICAgICAgICAgbV9mcm9udGVuZC0+cmVzZXQoKTsKICAg
ICAgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmgKaW5kZXggNmQ0ZDllMC4uMThkYjA3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMTI0LDEwICsxMjQsNiBAQCBwdWJsaWM6CiAgICAgUGFn
ZSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQogICAg
IHZvaWQgcmVsb2FkUGFnZSgpOwogCi0gICAgdm9pZCBzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhj
b25zdCBTdHJpbmcmIHNldHRpbmdzKTsKLSAgICB2b2lkIHNhdmVTZXNzaW9uU2V0dGluZ3MoY29u
c3QgU3RyaW5nJik7Ci0gICAgdm9pZCBnZXRTZXR0aW5ncyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiopOwotCiAgICAgdm9pZCByZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0
cmluZyYgaW5zcGVjdG9yQ29va2llKTsKIAogICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CkBAIC0z
NzQsOSArMzcwLDYgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIFN0cmluZyBtX3Nob3dBZnRlclZp
c2libGU7CiAgICAgUmVmUHRyPE5vZGU+IG1faGlnaGxpZ2h0ZWROb2RlOwotI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtX3Nlc3Npb25TZXR0aW5nczsK
LSNlbmRpZgogICAgIHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKICAgICBDb25zb2xlTWVzc2FnZSog
bV9wcmV2aW91c01lc3NhZ2U7CiAgICAgYm9vbCBtX3NldHRpbmdzTG9hZGVkOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3RhdGUuY3BwCmluZGV4IDQ0MDY1YzAuLjZhNTA0YzYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAgSW5zcGVjdG9yU3RhdGU6
Okluc3BlY3RvclN0YXRlKEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgIHJlZ2lzdGVyQm9v
bGVhbih0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UsICJ0aW1lbGluZVByb2ZpbGVyRW5h
YmxlZCIsIChjb25zdCBjaGFyKikwKTsKICAgICByZWdpc3RlckJvb2xlYW4oc2VhcmNoaW5nRm9y
Tm9kZSwgZmFsc2UsICJzZWFyY2hpbmdGb3JOb2RlRW5hYmxlZCIsIChjb25zdCBjaGFyKikwKTsK
ICAgICByZWdpc3RlckJvb2xlYW4ocHJvZmlsZXJBbHdheXNFbmFibGVkLCBmYWxzZSwgKGNvbnN0
IGNoYXIqKTAsICJwcm9maWxlckVuYWJsZWQiKTsKLSAgICByZWdpc3RlclN0cmluZyhmcm9udGVu
ZFNldHRpbmdzLCAiIiwgKGNvbnN0IGNoYXIqKTAsICJmcm9udGVuZFNldHRpbmdzIik7CiAgICAg
cmVnaXN0ZXJCb29sZWFuKGRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgZmFsc2UsIChjb25zdCBjaGFy
KikwLCAiZGVidWdnZXJFbmFibGVkIik7CiAgICAgcmVnaXN0ZXJTdHJpbmcobGFzdEFjdGl2ZVBh
bmVsLCBJbnNwZWN0b3JDb250cm9sbGVyOjpMYXN0QWN0aXZlUGFuZWwsIChjb25zdCBjaGFyKikw
LCAibGFzdEFjdGl2ZVBhbmVsIik7CiAgICAgcmVnaXN0ZXJCb29sZWFuKGluc3BlY3RvclN0YXJ0
c0F0dGFjaGVkLCB0cnVlLCAoY29uc3QgY2hhciopMCwgIkluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
Iik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaAppbmRleCA1NzA3NjAwLi41NjBjMDgxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgKQEAgLTUwLDcgKzUwLDYgQEAgcHVibGljOgog
ICAgICAgICB0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwNCiAgICAgICAgIHNlYXJjaGluZ0Zvck5v
ZGUsDQogICAgICAgICBwcm9maWxlckFsd2F5c0VuYWJsZWQsDQotICAgICAgICBmcm9udGVuZFNl
dHRpbmdzLA0KICAgICAgICAgZGVidWdnZXJBbHdheXNFbmFibGVkLA0KICAgICAgICAgbGFzdEFj
dGl2ZVBhbmVsLA0KICAgICAgICAgaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQsDQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1BhbmVsLmpzCmluZGV4IDJhNDEwNGYuLmY1ZTk2ZGYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvUGFuZWwuanMKQEAgLTM0LDcgKzM0LDcgQEAgV2ViSW5zcGVjdG9yLlBh
bmVsID0gZnVuY3Rpb24obmFtZSkKICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcyhuYW1l
KTsKICAgICB0aGlzLl9wYW5lbE5hbWUgPSBuYW1lOwogCi0gICAgV2ViSW5zcGVjdG9yLmFwcGxp
Y2F0aW9uU2V0dGluZ3MuaW5zdGFsbFNldHRpbmcodGhpcy5fc2lkZWJhcldpZHRoU2V0dGluZ05h
bWUoKSwgdGhpcy5fcGFuZWxOYW1lICsgIi1zaWRlYmFyLXdpZHRoIiwgdW5kZWZpbmVkKTsKKyAg
ICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5pbnN0YWxsU2V0dGluZyh0aGlzLl9z
aWRlYmFyV2lkdGhTZXR0aW5nTmFtZSgpLCAiYXBwbGljYXRpb24iLCB1bmRlZmluZWQpOwogfQog
CiAvLyBTaG91bGQgYnkgaW4gc3luYyB3aXRoIHN0eWxlIGRlY2xhcmF0aW9ucy4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwppbmRleCBjNmRhMTRkLi45MjA4ZDEzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCkBAIC00OCw5MyArNDgsNTIgQEAg
dmFyIFByZWZlcmVuY2VzID0gewogICAgIG5ldHdvcmtQYW5lbEVuYWJsZWQ6IGZhbHNlCiB9CiAK
LVdlYkluc3BlY3Rvci5TZXR0aW5ncyA9IGZ1bmN0aW9uKHNlc3Npb25TY29wZSkKK1dlYkluc3Bl
Y3Rvci5TZXR0aW5ncyA9IGZ1bmN0aW9uKCkKIHsKLSAgICB0aGlzLl9zZXNzaW9uU2NvcGUgPSBz
ZXNzaW9uU2NvcGU7Ci0gICAgdGhpcy5fc3RvcmUgPSB7fTsKLX0KLQotV2ViSW5zcGVjdG9yLlNl
dHRpbmdzLmluaXRpYWxpemUgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLmFwcGxp
Y2F0aW9uU2V0dGluZ3MgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmdzKGZhbHNlKTsKLSAgICBX
ZWJJbnNwZWN0b3Iuc2Vzc2lvblNldHRpbmdzID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5ncyh0
cnVlKTsKLQotICAgIGZ1bmN0aW9uIHBvcHVsYXRlQXBwbGljYXRpb25TZXR0aW5ncyhzZXR0aW5n
c1N0cmluZykKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdz
Ll9sb2FkKHNldHRpbmdzU3RyaW5nKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9u
U2V0dGluZ3MuaW5zdGFsbFNldHRpbmcoImV2ZW50TGlzdGVuZXJzRmlsdGVyIiwgImV2ZW50LWxp
c3RlbmVycy1maWx0ZXIiLCAiYWxsIik7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlv
blNldHRpbmdzLmluc3RhbGxTZXR0aW5nKCJjb2xvckZvcm1hdCIsICJjb2xvci1mb3JtYXQiLCAi
aGV4Iik7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdzLmluc3RhbGxT
ZXR0aW5nKCJyZXNvdXJjZXNMYXJnZVJvd3MiLCAicmVzb3VyY2VzLWxhcmdlLXJvd3MiLCB0cnVl
KTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuaW5zdGFsbFNldHRp
bmcoIndhdGNoRXhwcmVzc2lvbnMiLCAid2F0Y2gtZXhwcmVzc2lvbnMiLCBbXSk7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdzLmluc3RhbGxTZXR0aW5nKCJsYXN0Vmll
d2VkU2NyaXB0RmlsZSIsICJsYXN0LXZpZXdlZC1zY3JpcHQtZmlsZSIpOwotICAgICAgICBXZWJJ
bnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5pbnN0YWxsU2V0dGluZygic2hvd0luaGVyaXRl
ZENvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzIiwgInNob3ctaW5oZXJpdGVkLWNvbXB1dGVkLXN0eWxl
LXByb3BlcnRpZXMiLCBmYWxzZSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNl
dHRpbmdzLmluc3RhbGxTZXR0aW5nKCJzaG93VXNlckFnZW50U3R5bGVzIiwgInNob3ctdXNlci1h
Z2VudC1zdHlsZXMiLCB0cnVlKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0
dGluZ3MuaW5zdGFsbFNldHRpbmcoInJlc291cmNlVmlld1RhYiIsICJyZXNvdXJjZS12aWV3LXRh
YiIsICJjb250ZW50Iik7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdz
Lmluc3RhbGxTZXR0aW5nKCJjb25zb2xlSGlzdG9yeSIsICJjb25zb2xlLWhpc3RvcnkiLCBbXSk7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdzLmluc3RhbGxTZXR0aW5n
KCJyZXNvdXJjZXNTb3J0T3B0aW9ucyIsICJyZXNvdXJjZXMtc29ydC1vcHRpb25zIiwge3RpbWVP
cHRpb246ICJyZXNwb25zZVRpbWUiLCBzaXplT3B0aW9uOiAidHJhbnNmZXJTaXplIn0pOwotCi0g
ICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycygibG9hZGVkIik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcG9wdWxhdGVTZXNzaW9u
U2V0dGluZ3Moc2V0dGluZ3NTdHJpbmcpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iuc2Vz
c2lvblNldHRpbmdzLl9sb2FkKHNldHRpbmdzU3RyaW5nKTsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LnNlc3Npb25TZXR0aW5ncy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxvYWRlZCIpOwotICAg
IH0KLQotICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U2V0dGluZ3MoZnVuY3Rpb24oc2V0dGluZ3Mp
IHsKLSAgICAgICAgcG9wdWxhdGVBcHBsaWNhdGlvblNldHRpbmdzKHNldHRpbmdzLmFwcGxpY2F0
aW9uKTsKLSAgICAgICAgcG9wdWxhdGVTZXNzaW9uU2V0dGluZ3Moc2V0dGluZ3Muc2Vzc2lvbik7
Ci0gICAgfSk7CisgICAgdGhpcy5pbnN0YWxsU2V0dGluZygiYnJlYWtwb2ludHMiLCAicHJvamVj
dCIsIHt9KTsKKyAgICB0aGlzLmluc3RhbGxTZXR0aW5nKCJjb2xvckZvcm1hdCIsICJhcHBsaWNh
dGlvbiIsICJoZXgiKTsKKyAgICB0aGlzLmluc3RhbGxTZXR0aW5nKCJjb25zb2xlSGlzdG9yeSIs
ICJhcHBsaWNhdGlvbiIsIFtdKTsKKyAgICB0aGlzLmluc3RhbGxTZXR0aW5nKCJldmVudExpc3Rl
bmVyc0ZpbHRlciIsICJhcHBsaWNhdGlvbiIsICJhbGwiKTsKKyAgICB0aGlzLmluc3RhbGxTZXR0
aW5nKCJsYXN0Vmlld2VkU2NyaXB0RmlsZSIsICJhcHBsaWNhdGlvbiIpOworICAgIHRoaXMuaW5z
dGFsbFNldHRpbmcoInJlc291cmNlc0xhcmdlUm93cyIsICJhcHBsaWNhdGlvbiIsIHRydWUpOwor
ICAgIHRoaXMuaW5zdGFsbFNldHRpbmcoInJlc291cmNlc1NvcnRPcHRpb25zIiwgImFwcGxpY2F0
aW9uIiwge3RpbWVPcHRpb246ICJyZXNwb25zZVRpbWUiLCBzaXplT3B0aW9uOiAidHJhbnNmZXJT
aXplIn0pOworICAgIHRoaXMuaW5zdGFsbFNldHRpbmcoInJlc291cmNlVmlld1RhYiIsICJhcHBs
aWNhdGlvbiIsICJjb250ZW50Iik7CisgICAgdGhpcy5pbnN0YWxsU2V0dGluZygic2hvd0luaGVy
aXRlZENvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzIiwgImFwcGxpY2F0aW9uIiwgZmFsc2UpOworICAg
IHRoaXMuaW5zdGFsbFNldHRpbmcoInNob3dVc2VyQWdlbnRTdHlsZXMiLCAiYXBwbGljYXRpb24i
LCB0cnVlKTsKKyAgICB0aGlzLmluc3RhbGxTZXR0aW5nKCJ3YXRjaEV4cHJlc3Npb25zIiwgImFw
cGxpY2F0aW9uIiwgW10pOwogfQogCiBXZWJJbnNwZWN0b3IuU2V0dGluZ3MucHJvdG90eXBlID0g
ewotICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgaW5zdGFsbFNldHRpbmc6IGZ1bmN0aW9uKGtl
eSwgc2NvcGUsIGRlZmF1bHRWYWx1ZSkKICAgICB7Ci0gICAgICAgIHRoaXMuX3N0b3JlID0ge307
Ci0gICAgICAgIC8vIEZJWE1FOiByZXN0b3JlIGRlZmF1bHQgdmFsdWVzIChidWcgNDI4MjApCi0g
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJsb2FkZWQiKTsKKyAgICAgICAg
dGhpcy5fX2RlZmluZUdldHRlcl9fKGtleSwgdGhpcy5fZ2V0LmJpbmQodGhpcywga2V5LCBzY29w
ZSwgZGVmYXVsdFZhbHVlKSk7CisgICAgICAgIHRoaXMuX19kZWZpbmVTZXR0ZXJfXyhrZXksIHRo
aXMuX3NldC5iaW5kKHRoaXMsIGtleSwgc2NvcGUpKTsKICAgICB9LAogCi0gICAgX2xvYWQ6IGZ1
bmN0aW9uKHNldHRpbmdzU3RyaW5nKQorICAgIF9nZXQ6IGZ1bmN0aW9uKGtleSwgc2NvcGUsIGRl
ZmF1bHRWYWx1ZSkKICAgICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgbG9hZGVk
U3RvcmUgPSBKU09OLnBhcnNlKHNldHRpbmdzU3RyaW5nKTsKLSAgICAgICAgfSBjYXRjaCAoZSkg
ewotICAgICAgICAgICAgLy8gTWF5IGZhaWw7Ci0gICAgICAgICAgICBsb2FkZWRTdG9yZSA9IHt9
OworICAgICAgICB2YXIgZnVsbEtleSA9IHRoaXMuX2Zvcm1hdEtleShrZXksIHNjb3BlKTsKKyAg
ICAgICAgaWYgKGZ1bGxLZXkgaW4gd2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9y
YWdlW2Z1bGxLZXldKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGlmICghbG9hZGVkU3RvcmUpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBsb2FkZWRTdG9yZSkKLSAgICAgICAg
ICAgIHRoaXMuX3N0b3JlW3Byb3BlcnR5TmFtZV0gPSBsb2FkZWRTdG9yZVtwcm9wZXJ0eU5hbWVd
OworICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgIH0sCiAKLSAgICBpbnN0YWxsU2V0
dGluZzogZnVuY3Rpb24obmFtZSwgcHJvcGVydHlOYW1lLCBkZWZhdWx0VmFsdWUpCisgICAgX3Nl
dDogZnVuY3Rpb24oa2V5LCBzY29wZSwgdmFsdWUpCiAgICAgewotICAgICAgICB0aGlzLl9fZGVm
aW5lR2V0dGVyX18obmFtZSwgdGhpcy5fZ2V0LmJpbmQodGhpcywgcHJvcGVydHlOYW1lKSk7Ci0g
ICAgICAgIHRoaXMuX19kZWZpbmVTZXR0ZXJfXyhuYW1lLCB0aGlzLl9zZXQuYmluZCh0aGlzLCBw
cm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgaWYgKCEocHJvcGVydHlOYW1lIGluIHRoaXMuX3N0b3Jl
KSkKLSAgICAgICAgICAgIHRoaXMuX3N0b3JlW3Byb3BlcnR5TmFtZV0gPSBkZWZhdWx0VmFsdWU7
CisgICAgICAgIHZhciBmdWxsS2V5ID0gdGhpcy5fZm9ybWF0S2V5KGtleSwgc2NvcGUpOworICAg
ICAgICB3aW5kb3cubG9jYWxTdG9yYWdlW2Z1bGxLZXldID0gSlNPTi5zdHJpbmdpZnkodmFsdWUp
OwogICAgIH0sCiAKLSAgICBfZ2V0OiBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpCisgICAgX2Zvcm1h
dEtleTogZnVuY3Rpb24oa2V5LCBzY29wZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9z
dG9yZVtwcm9wZXJ0eU5hbWVdOwotICAgIH0sCi0KLSAgICBfc2V0OiBmdW5jdGlvbihwcm9wZXJ0
eU5hbWUsIG5ld1ZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy5fc3RvcmVbcHJvcGVydHlOYW1l
XSA9IG5ld1ZhbHVlOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHN0b3JlID0gSlNP
Ti5zdHJpbmdpZnkodGhpcy5fc3RvcmUpOwotICAgICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25T
Y29wZSkKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNhdmVTZXNzaW9uU2V0dGlu
Z3Moc3RvcmUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuc2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3Moc3RvcmUpOwotICAgICAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgICAgICAvLyBNYXkgZmFpbDsKLSAgICAgICAgfQorICAgICAgICBpZiAoc2Nv
cGUgPT09ICJhcHBsaWNhdGlvbiIpCisgICAgICAgICAgICByZXR1cm4gc2NvcGUgKyAiLiIgKyBr
ZXk7CisgICAgICAgIGlmIChzY29wZSA9PT0gInByb2plY3QiKQorICAgICAgICAgICAgcmV0dXJu
IHNjb3BlICsgIi4iICsgdGhpcy5fbWFpblJlc291cmNlVVJMICsgIi4iICsga2V5OwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggNDExNjQx
Ny4uYTBjOTYzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBA
IC00OTMsOCArNDkzLDggQEAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSA9IGZ1bmN0aW9uKCkK
ICAgICBkb2N1bWVudC5ib2R5LmFkZFN0eWxlQ2xhc3MoInBvcnQtIiArIHBvcnQpOwogCiAgICAg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRlZCgpOwotICAgIFdlYkluc3BlY3Rvci5TZXR0aW5n
cy5pbml0aWFsaXplKCk7Ci0gICAgCisgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGlu
Z3MgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmdzKCk7CisKICAgICB0aGlzLl9yZWdpc3RlclNo
b3J0Y3V0cygpOwogCiAgICAgLy8gc2V0IG9yZGVyIG9mIHNvbWUgc2VjdGlvbnMgZXhwbGljaXRs
eQpAQCAtNTk5LDYgKzU5OSw4IEBAIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUgPSBmdW5jdGlv
bigpCiAKICAgICAvLyBBcyBhIERPTUFnZW50IG1ldGhvZCwgdGhpcyBuZWVkcyB0byBoYXBwZW4g
YWZ0ZXIgdGhlIGZyb250ZW5kIGhhcyBsb2FkZWQgYW5kIHRoZSBhZ2VudCBpcyBhdmFpbGFibGUu
CiAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFdlYkluc3Bl
Y3Rvci5DU1NDb21wbGV0aW9ucy5fbG9hZCk7CisKKyAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRp
b25TZXR0aW5ncy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxvYWRlZCIpOwogfQogCiBXZWJJ
bnNwZWN0b3IuYWRkUGFuZWxUb29sYmFySWNvbiA9IGZ1bmN0aW9uKHRvb2xiYXJFbGVtZW50LCBw
YW5lbCwgcHJldmlvdXNUb29sYmFySXRlbSkKQEAgLTE0NDcsOCArMTQ0OSw2IEBAIFdlYkluc3Bl
Y3Rvci5yZXNldCA9IGZ1bmN0aW9uKCkKICAgICAgICAgICAgIHBhbmVsLnJlc2V0KCk7CiAgICAg
fQogCi0gICAgdGhpcy5zZXNzaW9uU2V0dGluZ3MucmVzZXQoKTsKLQogICAgIGZvciAodmFyIGNh
dGVnb3J5IGluIHRoaXMucmVzb3VyY2VDYXRlZ29yaWVzKQogICAgICAgICB0aGlzLnJlc291cmNl
Q2F0ZWdvcmllc1tjYXRlZ29yeV0ucmVtb3ZlQWxsUmVzb3VyY2VzKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71564</attachid>
            <date>2010-10-22 08:14:36 -0700</date>
            <delta_ts>2010-10-25 05:02:09 -0700</delta_ts>
            <desc>Use shorter keys (no &quot;application&quot; prefix).</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>13867</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTU1OTc3Yy4uY2IzMjE0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMC0xMC0xOCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIGZyb250ZW5kIHNldHRp
bmdzIHRvIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ3NzE1CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpJ
bnNwZWN0b3JTdGF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5QYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2V0dGluZ3MucHJvdG90eXBlLmluc3RhbGxTZXR0aW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TZXR0aW5ncy5wcm90b3R5cGUuX2dldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2V0dGlu
Z3MucHJvdG90eXBlLl9zZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3Rv
dHlwZS5fZm9ybWF0S2V5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLnJlc2V0KToKKwogMjAxMC0xMC0yMSAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNv
bXBhbnkxMDAubmV0PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGwKaW5kZXggYjVhNDM4OC4uM2I4OTUzYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuaWRsCkBAIC05NCwxMyArOTQsOSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGlzIGdvaW5nIHRvIGJlIGJyb2tlbiBkb3duIGludG8gc21hbGxlciBwYXJ0cy4KICAg
ICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsK
IAotICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGdldFNldHRpbmdzKG91dCBPYmpl
Y3Qgc2V0dGluZ3MpOwogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGdldEluc3Bl
Y3RvclN0YXRlKG91dCBPYmplY3Qgc3RhdGUpOwogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVy
XSB2b2lkIHN0b3JlTGFzdEFjdGl2ZVBhbmVsKGluIFN0cmluZyBwYW5lbE5hbWUpOwogCi0gICAg
ICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgc2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MoaW4g
U3RyaW5nIHNldHRpbmdzKTsKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBzYXZl
U2Vzc2lvblNldHRpbmdzKGluIFN0cmluZyBzZXR0aW5ncyk7Ci0KICAgICAgICAgW2hhbmRsZXI9
Q29udHJvbGxlcl0gdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGluIGJvb2xlYW4gZW5hYmxlZCwg
b3V0IGJvb2xlYW4gbmV3U3RhdGUpOwogCiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZv
aWQgc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoaW4gYm9vbGVhbiBlbmFibGUsIG91dCBib29sZWFu
IG5ld1N0YXRlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5k
ZXggMDBhMTE2Ni4uOGMwOTQyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKQEAgLTE0NCw3ICsxNDQsNiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0
b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwg
bV9kb21Db250ZW50RXZlbnRUaW1lKC0xLjApCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVzc2Fn
ZUNvdW50KDApCiAgICAgLCBtX3Nob3dBZnRlclZpc2libGUoTGFzdEFjdGl2ZVBhbmVsKQotICAg
ICwgbV9zZXNzaW9uU2V0dGluZ3MoSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSkKICAgICAsIG1f
Z3JvdXBMZXZlbCgwKQogICAgICwgbV9wcmV2aW91c01lc3NhZ2UoMCkKICAgICAsIG1fc2V0dGlu
Z3NMb2FkZWQoZmFsc2UpCkBAIC0yMzEsMTYgKzIzMCw2IEBAIGJvb2wgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX3N0YXRl
LT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MoY29u
c3QgU3RyaW5nJiBzZXR0aW5ncykKLXsKLSAgICBtX3N0YXRlLT5zZXRTdHJpbmcoSW5zcGVjdG9y
U3RhdGU6OmZyb250ZW5kU2V0dGluZ3MsIHNldHRpbmdzKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3NKU09O
KQotewotICAgIG1fc2Vzc2lvblNldHRpbmdzID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihz
ZXR0aW5nc0pTT04pOwotfQotCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEluc3BlY3Rv
clN0YXRlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzdGF0ZSkKIHsKICNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKQEAgLTI1NywxMyArMjQ2LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5z
cGVjdG8KICAgICAgICAgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6Z2V0U2V0dGluZ3MoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHNldHRp
bmdzKQotewotICAgICpzZXR0aW5ncyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
KCpzZXR0aW5ncyktPnNldFN0cmluZygiYXBwbGljYXRpb24iLCBtX3N0YXRlLT5nZXRTdHJpbmco
SW5zcGVjdG9yU3RhdGU6OmZyb250ZW5kU2V0dGluZ3MpKTsKLSAgICAoKnNldHRpbmdzKS0+c2V0
U3RyaW5nKCJzZXNzaW9uIiwgbV9zZXNzaW9uU2V0dGluZ3MtPnRvSlNPTlN0cmluZygpKTsKLX0K
LQogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAg
aWYgKCFlbmFibGVkKCkpCkBAIC03ODcsNyArNzY5LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIHVuYmlu
ZEFsbFJlc291cmNlcygpOwogCiAgICAgICAgIG1fY3NzU3RvcmUtPnJlc2V0KCk7Ci0gICAgICAg
IG1fc2Vzc2lvblNldHRpbmdzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAg
aWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAgICAgIG1fZnJvbnRlbmQtPnJlc2V0KCk7CiAgICAg
ICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCmluZGV4IDZkNGQ5ZTAuLjE4ZGIwN2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKQEAgLTEyNCwxMCArMTI0LDYgQEAgcHVibGljOgogICAgIFBhZ2Uq
IGluc3BlY3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KICAgICB2
b2lkIHJlbG9hZFBhZ2UoKTsKIAotICAgIHZvaWQgc2F2ZUFwcGxpY2F0aW9uU2V0dGluZ3MoY29u
c3QgU3RyaW5nJiBzZXR0aW5ncyk7Ci0gICAgdm9pZCBzYXZlU2Vzc2lvblNldHRpbmdzKGNvbnN0
IFN0cmluZyYpOwotICAgIHZvaWQgZ2V0U2V0dGluZ3MoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
KTsKLQogICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJp
bmcmIGluc3BlY3RvckNvb2tpZSk7CiAKICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwpAQCAtMzc0
LDkgKzM3MCw2IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBTdHJpbmcgbV9zaG93QWZ0ZXJWaXNp
YmxlOwogICAgIFJlZlB0cjxOb2RlPiBtX2hpZ2hsaWdodGVkTm9kZTsKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbV9zZXNzaW9uU2V0dGluZ3M7Ci0j
ZW5kaWYKICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7CiAgICAgQ29uc29sZU1lc3NhZ2UqIG1f
cHJldmlvdXNNZXNzYWdlOwogICAgIGJvb2wgbV9zZXR0aW5nc0xvYWRlZDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0YXRlLmNwcAppbmRleCA0NDA2NWMwLi42YTUwNGM2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3RhdGUuY3BwCkBAIC00NSw3ICs0NSw2IEBAIEluc3BlY3RvclN0YXRlOjpJ
bnNwZWN0b3JTdGF0ZShJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICByZWdpc3RlckJvb2xl
YW4odGltZWxpbmVQcm9maWxlckVuYWJsZWQsIGZhbHNlLCAidGltZWxpbmVQcm9maWxlckVuYWJs
ZWQiLCAoY29uc3QgY2hhciopMCk7CiAgICAgcmVnaXN0ZXJCb29sZWFuKHNlYXJjaGluZ0Zvck5v
ZGUsIGZhbHNlLCAic2VhcmNoaW5nRm9yTm9kZUVuYWJsZWQiLCAoY29uc3QgY2hhciopMCk7CiAg
ICAgcmVnaXN0ZXJCb29sZWFuKHByb2ZpbGVyQWx3YXlzRW5hYmxlZCwgZmFsc2UsIChjb25zdCBj
aGFyKikwLCAicHJvZmlsZXJFbmFibGVkIik7Ci0gICAgcmVnaXN0ZXJTdHJpbmcoZnJvbnRlbmRT
ZXR0aW5ncywgIiIsIChjb25zdCBjaGFyKikwLCAiZnJvbnRlbmRTZXR0aW5ncyIpOwogICAgIHJl
Z2lzdGVyQm9vbGVhbihkZWJ1Z2dlckFsd2F5c0VuYWJsZWQsIGZhbHNlLCAoY29uc3QgY2hhciop
MCwgImRlYnVnZ2VyRW5hYmxlZCIpOwogICAgIHJlZ2lzdGVyU3RyaW5nKGxhc3RBY3RpdmVQYW5l
bCwgSW5zcGVjdG9yQ29udHJvbGxlcjo6TGFzdEFjdGl2ZVBhbmVsLCAoY29uc3QgY2hhciopMCwg
Imxhc3RBY3RpdmVQYW5lbCIpOwogICAgIHJlZ2lzdGVyQm9vbGVhbihpbnNwZWN0b3JTdGFydHNB
dHRhY2hlZCwgdHJ1ZSwgKGNvbnN0IGNoYXIqKTAsICJJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCIp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmgKaW5kZXggNTcwNzYwMC4uNTYwYzA4MSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuaAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oCkBAIC01MCw3ICs1MCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgdGltZWxpbmVQcm9maWxlckVuYWJsZWQsDQogICAgICAgICBzZWFyY2hpbmdGb3JOb2Rl
LA0KICAgICAgICAgcHJvZmlsZXJBbHdheXNFbmFibGVkLA0KLSAgICAgICAgZnJvbnRlbmRTZXR0
aW5ncywNCiAgICAgICAgIGRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwNCiAgICAgICAgIGxhc3RBY3Rp
dmVQYW5lbCwNCiAgICAgICAgIGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkLA0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9QYW5lbC5qcwppbmRleCAyYTQxMDRmLi5mNWU5NmRmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1BhbmVsLmpzCkBAIC0zNCw3ICszNCw3IEBAIFdlYkluc3BlY3Rvci5QYW5l
bCA9IGZ1bmN0aW9uKG5hbWUpCiAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MobmFtZSk7
CiAgICAgdGhpcy5fcGFuZWxOYW1lID0gbmFtZTsKIAotICAgIFdlYkluc3BlY3Rvci5hcHBsaWNh
dGlvblNldHRpbmdzLmluc3RhbGxTZXR0aW5nKHRoaXMuX3NpZGViYXJXaWR0aFNldHRpbmdOYW1l
KCksIHRoaXMuX3BhbmVsTmFtZSArICItc2lkZWJhci13aWR0aCIsIHVuZGVmaW5lZCk7CisgICAg
V2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuaW5zdGFsbFNldHRpbmcodGhpcy5fc2lk
ZWJhcldpZHRoU2V0dGluZ05hbWUoKSwgImFwcGxpY2F0aW9uIiwgdW5kZWZpbmVkKTsKIH0KIAog
Ly8gU2hvdWxkIGJ5IGluIHN5bmMgd2l0aCBzdHlsZSBkZWNsYXJhdGlvbnMuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKaW5kZXggYzZkYTE0ZC4uM2E0MmY3NiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwpAQCAtNDgsOTMgKzQ4LDUzIEBAIHZh
ciBQcmVmZXJlbmNlcyA9IHsKICAgICBuZXR3b3JrUGFuZWxFbmFibGVkOiBmYWxzZQogfQogCi1X
ZWJJbnNwZWN0b3IuU2V0dGluZ3MgPSBmdW5jdGlvbihzZXNzaW9uU2NvcGUpCitXZWJJbnNwZWN0
b3IuU2V0dGluZ3MgPSBmdW5jdGlvbigpCiB7Ci0gICAgdGhpcy5fc2Vzc2lvblNjb3BlID0gc2Vz
c2lvblNjb3BlOwotICAgIHRoaXMuX3N0b3JlID0ge307Ci19Ci0KLVdlYkluc3BlY3Rvci5TZXR0
aW5ncy5pbml0aWFsaXplID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5hcHBsaWNh
dGlvblNldHRpbmdzID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5ncyhmYWxzZSk7Ci0gICAgV2Vi
SW5zcGVjdG9yLnNlc3Npb25TZXR0aW5ncyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZ3ModHJ1
ZSk7Ci0KLSAgICBmdW5jdGlvbiBwb3B1bGF0ZUFwcGxpY2F0aW9uU2V0dGluZ3Moc2V0dGluZ3NT
dHJpbmcpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5f
bG9hZChzZXR0aW5nc1N0cmluZyk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNl
dHRpbmdzLmluc3RhbGxTZXR0aW5nKCJldmVudExpc3RlbmVyc0ZpbHRlciIsICJldmVudC1saXN0
ZW5lcnMtZmlsdGVyIiwgImFsbCIpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25T
ZXR0aW5ncy5pbnN0YWxsU2V0dGluZygiY29sb3JGb3JtYXQiLCAiY29sb3ItZm9ybWF0IiwgImhl
eCIpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5pbnN0YWxsU2V0
dGluZygicmVzb3VyY2VzTGFyZ2VSb3dzIiwgInJlc291cmNlcy1sYXJnZS1yb3dzIiwgdHJ1ZSk7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdzLmluc3RhbGxTZXR0aW5n
KCJ3YXRjaEV4cHJlc3Npb25zIiwgIndhdGNoLWV4cHJlc3Npb25zIiwgW10pOwotICAgICAgICBX
ZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5pbnN0YWxsU2V0dGluZygibGFzdFZpZXdl
ZFNjcmlwdEZpbGUiLCAibGFzdC12aWV3ZWQtc2NyaXB0LWZpbGUiKTsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuaW5zdGFsbFNldHRpbmcoInNob3dJbmhlcml0ZWRD
b21wdXRlZFN0eWxlUHJvcGVydGllcyIsICJzaG93LWluaGVyaXRlZC1jb21wdXRlZC1zdHlsZS1w
cm9wZXJ0aWVzIiwgZmFsc2UpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0
aW5ncy5pbnN0YWxsU2V0dGluZygic2hvd1VzZXJBZ2VudFN0eWxlcyIsICJzaG93LXVzZXItYWdl
bnQtc3R5bGVzIiwgdHJ1ZSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRp
bmdzLmluc3RhbGxTZXR0aW5nKCJyZXNvdXJjZVZpZXdUYWIiLCAicmVzb3VyY2Utdmlldy10YWIi
LCAiY29udGVudCIpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5p
bnN0YWxsU2V0dGluZygiY29uc29sZUhpc3RvcnkiLCAiY29uc29sZS1oaXN0b3J5IiwgW10pOwot
ICAgICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5pbnN0YWxsU2V0dGluZygi
cmVzb3VyY2VzU29ydE9wdGlvbnMiLCAicmVzb3VyY2VzLXNvcnQtb3B0aW9ucyIsIHt0aW1lT3B0
aW9uOiAicmVzcG9uc2VUaW1lIiwgc2l6ZU9wdGlvbjogInRyYW5zZmVyU2l6ZSJ9KTsKLQotICAg
ICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoImxvYWRlZCIpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBvcHVsYXRlU2Vzc2lvblNl
dHRpbmdzKHNldHRpbmdzU3RyaW5nKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnNlc3Np
b25TZXR0aW5ncy5fbG9hZChzZXR0aW5nc1N0cmluZyk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5z
ZXNzaW9uU2V0dGluZ3MuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJsb2FkZWQiKTsKLSAgICB9
Ci0KLSAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFNldHRpbmdzKGZ1bmN0aW9uKHNldHRpbmdzKSB7
Ci0gICAgICAgIHBvcHVsYXRlQXBwbGljYXRpb25TZXR0aW5ncyhzZXR0aW5ncy5hcHBsaWNhdGlv
bik7Ci0gICAgICAgIHBvcHVsYXRlU2Vzc2lvblNldHRpbmdzKHNldHRpbmdzLnNlc3Npb24pOwot
ICAgIH0pOworICAgIHRoaXMuaW5zdGFsbFNldHRpbmcoImJyZWFrcG9pbnRzIiwgInByb2plY3Qi
LCB7fSk7CisgICAgdGhpcy5pbnN0YWxsU2V0dGluZygiY29sb3JGb3JtYXQiLCAiYXBwbGljYXRp
b24iLCAiaGV4Iik7CisgICAgdGhpcy5pbnN0YWxsU2V0dGluZygiY29uc29sZUhpc3RvcnkiLCAi
YXBwbGljYXRpb24iLCBbXSk7CisgICAgdGhpcy5pbnN0YWxsU2V0dGluZygiZXZlbnRMaXN0ZW5l
cnNGaWx0ZXIiLCAiYXBwbGljYXRpb24iLCAiYWxsIik7CisgICAgdGhpcy5pbnN0YWxsU2V0dGlu
ZygibGFzdFZpZXdlZFNjcmlwdEZpbGUiLCAiYXBwbGljYXRpb24iKTsKKyAgICB0aGlzLmluc3Rh
bGxTZXR0aW5nKCJyZXNvdXJjZXNMYXJnZVJvd3MiLCAiYXBwbGljYXRpb24iLCB0cnVlKTsKKyAg
ICB0aGlzLmluc3RhbGxTZXR0aW5nKCJyZXNvdXJjZXNTb3J0T3B0aW9ucyIsICJhcHBsaWNhdGlv
biIsIHt0aW1lT3B0aW9uOiAicmVzcG9uc2VUaW1lIiwgc2l6ZU9wdGlvbjogInRyYW5zZmVyU2l6
ZSJ9KTsKKyAgICB0aGlzLmluc3RhbGxTZXR0aW5nKCJyZXNvdXJjZVZpZXdUYWIiLCAiYXBwbGlj
YXRpb24iLCAiY29udGVudCIpOworICAgIHRoaXMuaW5zdGFsbFNldHRpbmcoInNob3dJbmhlcml0
ZWRDb21wdXRlZFN0eWxlUHJvcGVydGllcyIsICJhcHBsaWNhdGlvbiIsIGZhbHNlKTsKKyAgICB0
aGlzLmluc3RhbGxTZXR0aW5nKCJzaG93VXNlckFnZW50U3R5bGVzIiwgImFwcGxpY2F0aW9uIiwg
dHJ1ZSk7CisgICAgdGhpcy5pbnN0YWxsU2V0dGluZygid2F0Y2hFeHByZXNzaW9ucyIsICJhcHBs
aWNhdGlvbiIsIFtdKTsKIH0KIAogV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3RvdHlwZSA9IHsK
LSAgICByZXNldDogZnVuY3Rpb24oKQorICAgIGluc3RhbGxTZXR0aW5nOiBmdW5jdGlvbihrZXks
IHNjb3BlLCBkZWZhdWx0VmFsdWUpCiAgICAgewotICAgICAgICB0aGlzLl9zdG9yZSA9IHt9Owot
ICAgICAgICAvLyBGSVhNRTogcmVzdG9yZSBkZWZhdWx0IHZhbHVlcyAoYnVnIDQyODIwKQotICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygibG9hZGVkIik7CisgICAgICAgIHRo
aXMuX19kZWZpbmVHZXR0ZXJfXyhrZXksIHRoaXMuX2dldC5iaW5kKHRoaXMsIGtleSwgc2NvcGUs
IGRlZmF1bHRWYWx1ZSkpOworICAgICAgICB0aGlzLl9fZGVmaW5lU2V0dGVyX18oa2V5LCB0aGlz
Ll9zZXQuYmluZCh0aGlzLCBrZXksIHNjb3BlKSk7CiAgICAgfSwKIAotICAgIF9sb2FkOiBmdW5j
dGlvbihzZXR0aW5nc1N0cmluZykKKyAgICBfZ2V0OiBmdW5jdGlvbihrZXksIHNjb3BlLCBkZWZh
dWx0VmFsdWUpCiAgICAgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIGxvYWRlZFN0
b3JlID0gSlNPTi5wYXJzZShzZXR0aW5nc1N0cmluZyk7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsK
LSAgICAgICAgICAgIC8vIE1heSBmYWlsOwotICAgICAgICAgICAgbG9hZGVkU3RvcmUgPSB7fTsK
KyAgICAgICAgdmFyIGZ1bGxLZXkgPSB0aGlzLl9mb3JtYXRLZXkoa2V5LCBzY29wZSk7CisgICAg
ICAgIGlmIChmdWxsS2V5IGluIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFn
ZVtmdWxsS2V5XSk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICB3
aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZnVsbEtleSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKCFsb2FkZWRTdG9yZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZm9yICh2YXIgcHJvcGVydHlOYW1lIGluIGxvYWRlZFN0b3JlKQotICAgICAgICAg
ICAgdGhpcy5fc3RvcmVbcHJvcGVydHlOYW1lXSA9IGxvYWRlZFN0b3JlW3Byb3BlcnR5TmFtZV07
CisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiAgICAgfSwKIAotICAgIGluc3RhbGxTZXR0
aW5nOiBmdW5jdGlvbihuYW1lLCBwcm9wZXJ0eU5hbWUsIGRlZmF1bHRWYWx1ZSkKKyAgICBfc2V0
OiBmdW5jdGlvbihrZXksIHNjb3BlLCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHRoaXMuX19kZWZp
bmVHZXR0ZXJfXyhuYW1lLCB0aGlzLl9nZXQuYmluZCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsKLSAg
ICAgICAgdGhpcy5fX2RlZmluZVNldHRlcl9fKG5hbWUsIHRoaXMuX3NldC5iaW5kKHRoaXMsIHBy
b3BlcnR5TmFtZSkpOwotICAgICAgICBpZiAoIShwcm9wZXJ0eU5hbWUgaW4gdGhpcy5fc3RvcmUp
KQotICAgICAgICAgICAgdGhpcy5fc3RvcmVbcHJvcGVydHlOYW1lXSA9IGRlZmF1bHRWYWx1ZTsK
KyAgICAgICAgdmFyIGZ1bGxLZXkgPSB0aGlzLl9mb3JtYXRLZXkoa2V5LCBzY29wZSk7CisgICAg
ICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2VbZnVsbEtleV0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7
CiAgICAgfSwKIAotICAgIF9nZXQ6IGZ1bmN0aW9uKHByb3BlcnR5TmFtZSkKKyAgICBfZm9ybWF0
S2V5OiBmdW5jdGlvbihrZXksIHNjb3BlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0
b3JlW3Byb3BlcnR5TmFtZV07Ci0gICAgfSwKLQotICAgIF9zZXQ6IGZ1bmN0aW9uKHByb3BlcnR5
TmFtZSwgbmV3VmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLl9zdG9yZVtwcm9wZXJ0eU5hbWVd
ID0gbmV3VmFsdWU7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgc3RvcmUgPSBKU09O
LnN0cmluZ2lmeSh0aGlzLl9zdG9yZSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5fc2Vzc2lvblNj
b3BlKQotICAgICAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2F2ZVNlc3Npb25TZXR0aW5n
cyhzdG9yZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5zYXZlQXBwbGljYXRpb25TZXR0aW5ncyhzdG9yZSk7Ci0gICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgIC8vIE1heSBmYWlsOwotICAgICAgICB9CisgICAgICAgIGlmIChzY29w
ZSA9PT0gImFwcGxpY2F0aW9uIikKKyAgICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgIGlm
IChzY29wZSA9PT0gInByb2plY3QiKQorICAgICAgICAgICAgcmV0dXJuIGtleSArICIuIiArIHRo
aXMuX21haW5SZXNvdXJjZVVSTDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCmluZGV4IDRhZmM0NzQuLjJjOWI1YWEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNDkzLDggKzQ5Myw4IEBAIFdlYkluc3BlY3Rv
ci5kb0xvYWRlZERvbmUgPSBmdW5jdGlvbigpCiAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNs
YXNzKCJwb3J0LSIgKyBwb3J0KTsKIAogICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkZWQo
KTsKLSAgICBXZWJJbnNwZWN0b3IuU2V0dGluZ3MuaW5pdGlhbGl6ZSgpOwotICAgIAorICAgIFdl
Ykluc3BlY3Rvci5hcHBsaWNhdGlvblNldHRpbmdzID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5n
cygpOworCiAgICAgdGhpcy5fcmVnaXN0ZXJTaG9ydGN1dHMoKTsKIAogICAgIC8vIHNldCBvcmRl
ciBvZiBzb21lIHNlY3Rpb25zIGV4cGxpY2l0bHkKQEAgLTYwMCw2ICs2MDAsOCBAQCBXZWJJbnNw
ZWN0b3IuZG9Mb2FkZWREb25lID0gZnVuY3Rpb24oKQogCiAgICAgLy8gQXMgYSBET01BZ2VudCBt
ZXRob2QsIHRoaXMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHRoZSBmcm9udGVuZCBoYXMgbG9hZGVk
IGFuZCB0aGUgYWdlbnQgaXMgYXZhaWxhYmxlLgogICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3Vw
cG9ydGVkQ1NTUHJvcGVydGllcyhXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMuX2xvYWQpOwor
CisgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKCJsb2FkZWQiKTsKIH0KIAogV2ViSW5zcGVjdG9yLmFkZFBhbmVsVG9vbGJhckljb24g
PSBmdW5jdGlvbih0b29sYmFyRWxlbWVudCwgcGFuZWwsIHByZXZpb3VzVG9vbGJhckl0ZW0pCkBA
IC0xNDQ5LDggKzE0NTEsNiBAQCBXZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlvbigpCiAgICAg
ICAgICAgICBwYW5lbC5yZXNldCgpOwogICAgIH0KIAotICAgIHRoaXMuc2Vzc2lvblNldHRpbmdz
LnJlc2V0KCk7Ci0KICAgICBmb3IgKHZhciBjYXRlZ29yeSBpbiB0aGlzLnJlc291cmNlQ2F0ZWdv
cmllcykKICAgICAgICAgdGhpcy5yZXNvdXJjZUNhdGVnb3JpZXNbY2F0ZWdvcnldLnJlbW92ZUFs
bFJlc291cmNlcygpOwogCg==
</data>
<flag name="review"
          id="61647"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71734</attachid>
            <date>2010-10-25 05:02:09 -0700</date>
            <delta_ts>2010-10-26 13:47:59 -0700</delta_ts>
            <desc>Comments addressed.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14475</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2Q4MGQ4MC4uYWQ2NjA1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0xMC0yNSAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIGZyb250ZW5kIHNldHRp
bmdzIHRvIGxvY2FsIHN0b3JhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ3NzE1CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0YXRlOjpJ
bnNwZWN0b3JTdGF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0YXRlLmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5QYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2V0dGluZ3MucHJvdG90eXBlLmluc3RhbGxBcHBsaWNhdGlvblNldHRpbmcpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3RvdHlwZS5pbnN0YWxsUHJvamVjdFNldHRpbmcpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNldHRpbmdzLnByb3RvdHlwZS5fZ2V0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TZXR0aW5ncy5wcm90b3R5cGUuX3NldCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU2V0dGluZ3MucHJvdG90eXBlLl9nZXRQcm9qZWN0U2V0dGluZyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2V0dGluZ3MucHJvdG90eXBlLl9zZXRQcm9qZWN0U2V0dGluZyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2V0dGluZ3MucHJvdG90eXBlLl9mb3JtYXRQcm9qZWN0S2V5KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5kb0xvYWRlZERvbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnJlc2V0KToK
KwogMjAxMC0xMC0yNCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCAxMDdm
MTU2Li45NzNhMWY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTk0LDEzICs5NCw5IEBA
IG1vZHVsZSBjb3JlIHsKICAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYnJv
a2VuIGRvd24gaW50byBzbWFsbGVyIHBhcnRzLgogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVy
XSB2b2lkIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygpOwogCi0gICAgICAgIFtoYW5kbGVyPUNvbnRy
b2xsZXJdIHZvaWQgZ2V0U2V0dGluZ3Mob3V0IE9iamVjdCBzZXR0aW5ncyk7CiAgICAgICAgIFto
YW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0SW5zcGVjdG9yU3RhdGUob3V0IE9iamVjdCBzdGF0
ZSk7CiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFu
ZWwoaW4gU3RyaW5nIHBhbmVsTmFtZSk7CiAKLSAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0g
dm9pZCBzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhpbiBTdHJpbmcgc2V0dGluZ3MpOwotICAgICAg
ICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHNhdmVTZXNzaW9uU2V0dGluZ3MoaW4gU3RyaW5n
IHNldHRpbmdzKTsKLQogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIHNldFNlYXJj
aGluZ0Zvck5vZGUoaW4gYm9vbGVhbiBlbmFibGVkLCBvdXQgYm9vbGVhbiBuZXdTdGF0ZSk7CiAK
ICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBzZXRNb25pdG9yaW5nWEhSRW5hYmxl
ZChpbiBib29sZWFuIGVuYWJsZSwgb3V0IGJvb2xlYW4gbmV3U3RhdGUpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAwMGExMTY2Li44YzA5NDI3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTQ0LDcgKzE0NCw2
IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwg
SW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2RvbUNvbnRlbnRFdmVudFRpbWUoLTEu
MCkKICAgICAsIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQoMCkKICAgICAsIG1fc2hvd0Fm
dGVyVmlzaWJsZShMYXN0QWN0aXZlUGFuZWwpCi0gICAgLCBtX3Nlc3Npb25TZXR0aW5ncyhJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKQogICAgICwgbV9ncm91cExldmVsKDApCiAgICAgLCBtX3By
ZXZpb3VzTWVzc2FnZSgwKQogICAgICwgbV9zZXR0aW5nc0xvYWRlZChmYWxzZSkKQEAgLTIzMSwx
NiArMjMwLDYgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVRyYWNraW5nRW5h
YmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3Rh
dGU6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKQotewot
ICAgIG1fc3RhdGUtPnNldFN0cmluZyhJbnNwZWN0b3JTdGF0ZTo6ZnJvbnRlbmRTZXR0aW5ncywg
c2V0dGluZ3MpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNhdmVTZXNzaW9uU2V0
dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5nc0pTT04pCi17Ci0gICAgbV9zZXNzaW9uU2V0dGlu
Z3MgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKHNldHRpbmdzSlNPTik7Ci19Ci0KIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0SW5zcGVjdG9yU3RhdGUoUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4qIHN0YXRlKQogewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMjU3
LDEzICsyNDYsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVJbnNwZWN0b3JT
dGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0bwogICAgICAgICBzdGFydFRpbWVs
aW5lUHJvZmlsZXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRTZXR0aW5n
cyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc2V0dGluZ3MpCi17Ci0gICAgKnNldHRpbmdzID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAoKnNldHRpbmdzKS0+c2V0U3RyaW5nKCJh
cHBsaWNhdGlvbiIsIG1fc3RhdGUtPmdldFN0cmluZyhJbnNwZWN0b3JTdGF0ZTo6ZnJvbnRlbmRT
ZXR0aW5ncykpOwotICAgICgqc2V0dGluZ3MpLT5zZXRTdHJpbmcoInNlc3Npb24iLCBtX3Nlc3Np
b25TZXR0aW5ncy0+dG9KU09OU3RyaW5nKCkpOwotfQotCiB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6Omluc3BlY3QoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKQEAgLTc4Nyw3
ICs3NjksNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgdW5iaW5kQWxsUmVzb3VyY2VzKCk7CiAKICAgICAg
ICAgbV9jc3NTdG9yZS0+cmVzZXQoKTsKLSAgICAgICAgbV9zZXNzaW9uU2V0dGluZ3MgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBpZiAobV9mcm9udGVuZCkgewogICAgICAg
ICAgICAgbV9mcm9udGVuZC0+cmVzZXQoKTsKICAgICAgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggNmQ0ZDllMC4u
MThkYjA3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMTI0
LDEwICsxMjQsNiBAQCBwdWJsaWM6CiAgICAgUGFnZSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQogICAgIHZvaWQgcmVsb2FkUGFnZSgpOwogCi0gICAg
dm9pZCBzYXZlQXBwbGljYXRpb25TZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKTsKLSAg
ICB2b2lkIHNhdmVTZXNzaW9uU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBnZXRT
ZXR0aW5ncyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiopOwotCiAgICAgdm9pZCByZXN0b3JlSW5z
cGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yQ29va2llKTsKIAog
ICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CkBAIC0zNzQsOSArMzcwLDYgQEAgcHJpdmF0ZToKICNl
bmRpZgogICAgIFN0cmluZyBtX3Nob3dBZnRlclZpc2libGU7CiAgICAgUmVmUHRyPE5vZGU+IG1f
aGlnaGxpZ2h0ZWROb2RlOwotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBtX3Nlc3Npb25TZXR0aW5nczsKLSNlbmRpZgogICAgIHVuc2lnbmVkIG1fZ3Jv
dXBMZXZlbDsKICAgICBDb25zb2xlTWVzc2FnZSogbV9wcmV2aW91c01lc3NhZ2U7CiAgICAgYm9v
bCBtX3NldHRpbmdzTG9hZGVkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3RhdGUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RhdGUuY3BwCmluZGV4
IDQ0MDY1YzAuLjZhNTA0YzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0YXRlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5jcHAKQEAg
LTQ1LDcgKzQ1LDYgQEAgSW5zcGVjdG9yU3RhdGU6Okluc3BlY3RvclN0YXRlKEluc3BlY3RvckNs
aWVudCogY2xpZW50KQogICAgIHJlZ2lzdGVyQm9vbGVhbih0aW1lbGluZVByb2ZpbGVyRW5hYmxl
ZCwgZmFsc2UsICJ0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCIsIChjb25zdCBjaGFyKikwKTsKICAg
ICByZWdpc3RlckJvb2xlYW4oc2VhcmNoaW5nRm9yTm9kZSwgZmFsc2UsICJzZWFyY2hpbmdGb3JO
b2RlRW5hYmxlZCIsIChjb25zdCBjaGFyKikwKTsKICAgICByZWdpc3RlckJvb2xlYW4ocHJvZmls
ZXJBbHdheXNFbmFibGVkLCBmYWxzZSwgKGNvbnN0IGNoYXIqKTAsICJwcm9maWxlckVuYWJsZWQi
KTsKLSAgICByZWdpc3RlclN0cmluZyhmcm9udGVuZFNldHRpbmdzLCAiIiwgKGNvbnN0IGNoYXIq
KTAsICJmcm9udGVuZFNldHRpbmdzIik7CiAgICAgcmVnaXN0ZXJCb29sZWFuKGRlYnVnZ2VyQWx3
YXlzRW5hYmxlZCwgZmFsc2UsIChjb25zdCBjaGFyKikwLCAiZGVidWdnZXJFbmFibGVkIik7CiAg
ICAgcmVnaXN0ZXJTdHJpbmcobGFzdEFjdGl2ZVBhbmVsLCBJbnNwZWN0b3JDb250cm9sbGVyOjpM
YXN0QWN0aXZlUGFuZWwsIChjb25zdCBjaGFyKikwLCAibGFzdEFjdGl2ZVBhbmVsIik7CiAgICAg
cmVnaXN0ZXJCb29sZWFuKGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkLCB0cnVlLCAoY29uc3QgY2hh
ciopMCwgIkluc3BlY3RvclN0YXJ0c0F0dGFjaGVkIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdGF0ZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3Rh
dGUuaAppbmRleCA1NzA3NjAwLi41NjBjMDgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdGF0ZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0YXRl
LmgKQEAgLTUwLDcgKzUwLDYgQEAgcHVibGljOgogICAgICAgICB0aW1lbGluZVByb2ZpbGVyRW5h
YmxlZCwNCiAgICAgICAgIHNlYXJjaGluZ0Zvck5vZGUsDQogICAgICAgICBwcm9maWxlckFsd2F5
c0VuYWJsZWQsDQotICAgICAgICBmcm9udGVuZFNldHRpbmdzLA0KICAgICAgICAgZGVidWdnZXJB
bHdheXNFbmFibGVkLA0KICAgICAgICAgbGFzdEFjdGl2ZVBhbmVsLA0KICAgICAgICAgaW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWQsDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzCmluZGV4
IDJhNDEwNGYuLmVjOTI1MGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9QYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGFuZWwuanMKQEAg
LTM0LDcgKzM0LDcgQEAgV2ViSW5zcGVjdG9yLlBhbmVsID0gZnVuY3Rpb24obmFtZSkKICAgICB0
aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcyhuYW1lKTsKICAgICB0aGlzLl9wYW5lbE5hbWUgPSBu
YW1lOwogCi0gICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuaW5zdGFsbFNldHRp
bmcodGhpcy5fc2lkZWJhcldpZHRoU2V0dGluZ05hbWUoKSwgdGhpcy5fcGFuZWxOYW1lICsgIi1z
aWRlYmFyLXdpZHRoIiwgdW5kZWZpbmVkKTsKKyAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25T
ZXR0aW5ncy5pbnN0YWxsQXBwbGljYXRpb25TZXR0aW5nKHRoaXMuX3NpZGViYXJXaWR0aFNldHRp
bmdOYW1lKCksIHVuZGVmaW5lZCk7CiB9CiAKIC8vIFNob3VsZCBieSBpbiBzeW5jIHdpdGggc3R5
bGUgZGVjbGFyYXRpb25zLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NldHRpbmdzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCmlu
ZGV4IGM2ZGExNGQuLmQxZjgwNTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TZXR0aW5ncy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGlu
Z3MuanMKQEAgLTQ4LDkzICs0OCw2OSBAQCB2YXIgUHJlZmVyZW5jZXMgPSB7CiAgICAgbmV0d29y
a1BhbmVsRW5hYmxlZDogZmFsc2UKIH0KIAotV2ViSW5zcGVjdG9yLlNldHRpbmdzID0gZnVuY3Rp
b24oc2Vzc2lvblNjb3BlKQorV2ViSW5zcGVjdG9yLlNldHRpbmdzID0gZnVuY3Rpb24oKQogewot
ICAgIHRoaXMuX3Nlc3Npb25TY29wZSA9IHNlc3Npb25TY29wZTsKLSAgICB0aGlzLl9zdG9yZSA9
IHt9OwotfQorICAgIHRoaXMuaW5zdGFsbEFwcGxpY2F0aW9uU2V0dGluZygiY29sb3JGb3JtYXQi
LCAiaGV4Iik7CisgICAgdGhpcy5pbnN0YWxsQXBwbGljYXRpb25TZXR0aW5nKCJjb25zb2xlSGlz
dG9yeSIsIFtdKTsKKyAgICB0aGlzLmluc3RhbGxBcHBsaWNhdGlvblNldHRpbmcoImV2ZW50TGlz
dGVuZXJzRmlsdGVyIiwgImFsbCIpOworICAgIHRoaXMuaW5zdGFsbEFwcGxpY2F0aW9uU2V0dGlu
ZygibGFzdFZpZXdlZFNjcmlwdEZpbGUiLCAiYXBwbGljYXRpb24iKTsKKyAgICB0aGlzLmluc3Rh
bGxBcHBsaWNhdGlvblNldHRpbmcoInJlc291cmNlc0xhcmdlUm93cyIsIHRydWUpOworICAgIHRo
aXMuaW5zdGFsbEFwcGxpY2F0aW9uU2V0dGluZygicmVzb3VyY2VzU29ydE9wdGlvbnMiLCB7dGlt
ZU9wdGlvbjogInJlc3BvbnNlVGltZSIsIHNpemVPcHRpb246ICJ0cmFuc2ZlclNpemUifSk7Cisg
ICAgdGhpcy5pbnN0YWxsQXBwbGljYXRpb25TZXR0aW5nKCJyZXNvdXJjZVZpZXdUYWIiLCAiY29u
dGVudCIpOworICAgIHRoaXMuaW5zdGFsbEFwcGxpY2F0aW9uU2V0dGluZygic2hvd0luaGVyaXRl
ZENvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzIiwgZmFsc2UpOworICAgIHRoaXMuaW5zdGFsbEFwcGxp
Y2F0aW9uU2V0dGluZygic2hvd1VzZXJBZ2VudFN0eWxlcyIsIHRydWUpOworICAgIHRoaXMuaW5z
dGFsbEFwcGxpY2F0aW9uU2V0dGluZygid2F0Y2hFeHByZXNzaW9ucyIsIFtdKTsKIAotV2ViSW5z
cGVjdG9yLlNldHRpbmdzLmluaXRpYWxpemUgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVj
dG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmdzKGZhbHNl
KTsKLSAgICBXZWJJbnNwZWN0b3Iuc2Vzc2lvblNldHRpbmdzID0gbmV3IFdlYkluc3BlY3Rvci5T
ZXR0aW5ncyh0cnVlKTsKKyAgICB0aGlzLmluc3RhbGxQcm9qZWN0U2V0dGluZygiYnJlYWtwb2lu
dHMiLCB7fSk7Cit9CiAKLSAgICBmdW5jdGlvbiBwb3B1bGF0ZUFwcGxpY2F0aW9uU2V0dGluZ3Mo
c2V0dGluZ3NTdHJpbmcpCitXZWJJbnNwZWN0b3IuU2V0dGluZ3MucHJvdG90eXBlID0geworICAg
IGluc3RhbGxBcHBsaWNhdGlvblNldHRpbmc6IGZ1bmN0aW9uKGtleSwgZGVmYXVsdFZhbHVlKQog
ICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuX2xvYWQoc2V0
dGluZ3NTdHJpbmcpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5p
bnN0YWxsU2V0dGluZygiZXZlbnRMaXN0ZW5lcnNGaWx0ZXIiLCAiZXZlbnQtbGlzdGVuZXJzLWZp
bHRlciIsICJhbGwiKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3Mu
aW5zdGFsbFNldHRpbmcoImNvbG9yRm9ybWF0IiwgImNvbG9yLWZvcm1hdCIsICJoZXgiKTsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuaW5zdGFsbFNldHRpbmcoInJl
c291cmNlc0xhcmdlUm93cyIsICJyZXNvdXJjZXMtbGFyZ2Utcm93cyIsIHRydWUpOwotICAgICAg
ICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5pbnN0YWxsU2V0dGluZygid2F0Y2hF
eHByZXNzaW9ucyIsICJ3YXRjaC1leHByZXNzaW9ucyIsIFtdKTsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuaW5zdGFsbFNldHRpbmcoImxhc3RWaWV3ZWRTY3JpcHRG
aWxlIiwgImxhc3Qtdmlld2VkLXNjcmlwdC1maWxlIik7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5h
cHBsaWNhdGlvblNldHRpbmdzLmluc3RhbGxTZXR0aW5nKCJzaG93SW5oZXJpdGVkQ29tcHV0ZWRT
dHlsZVByb3BlcnRpZXMiLCAic2hvdy1pbmhlcml0ZWQtY29tcHV0ZWQtc3R5bGUtcHJvcGVydGll
cyIsIGZhbHNlKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuaW5z
dGFsbFNldHRpbmcoInNob3dVc2VyQWdlbnRTdHlsZXMiLCAic2hvdy11c2VyLWFnZW50LXN0eWxl
cyIsIHRydWUpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYXBwbGljYXRpb25TZXR0aW5ncy5pbnN0
YWxsU2V0dGluZygicmVzb3VyY2VWaWV3VGFiIiwgInJlc291cmNlLXZpZXctdGFiIiwgImNvbnRl
bnQiKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuaW5zdGFsbFNl
dHRpbmcoImNvbnNvbGVIaXN0b3J5IiwgImNvbnNvbGUtaGlzdG9yeSIsIFtdKTsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuaW5zdGFsbFNldHRpbmcoInJlc291cmNl
c1NvcnRPcHRpb25zIiwgInJlc291cmNlcy1zb3J0LW9wdGlvbnMiLCB7dGltZU9wdGlvbjogInJl
c3BvbnNlVGltZSIsIHNpemVPcHRpb246ICJ0cmFuc2ZlclNpemUifSk7Ci0KLSAgICAgICAgV2Vi
SW5zcGVjdG9yLmFwcGxpY2F0aW9uU2V0dGluZ3MuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJs
b2FkZWQiKTsKLSAgICB9CisgICAgICAgIHRoaXMuX19kZWZpbmVHZXR0ZXJfXyhrZXksIHRoaXMu
X2dldC5iaW5kKHRoaXMsIGtleSwgZGVmYXVsdFZhbHVlKSk7CisgICAgICAgIHRoaXMuX19kZWZp
bmVTZXR0ZXJfXyhrZXksIHRoaXMuX3NldC5iaW5kKHRoaXMsIGtleSkpOworICAgIH0sCiAKLSAg
ICBmdW5jdGlvbiBwb3B1bGF0ZVNlc3Npb25TZXR0aW5ncyhzZXR0aW5nc1N0cmluZykKKyAgICBp
bnN0YWxsUHJvamVjdFNldHRpbmc6IGZ1bmN0aW9uKGtleSwgZGVmYXVsdFZhbHVlKQogICAgIHsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLnNlc3Npb25TZXR0aW5ncy5fbG9hZChzZXR0aW5nc1N0cmlu
Zyk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zZXNzaW9uU2V0dGluZ3MuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKCJsb2FkZWQiKTsKLSAgICB9Ci0KLSAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFNl
dHRpbmdzKGZ1bmN0aW9uKHNldHRpbmdzKSB7Ci0gICAgICAgIHBvcHVsYXRlQXBwbGljYXRpb25T
ZXR0aW5ncyhzZXR0aW5ncy5hcHBsaWNhdGlvbik7Ci0gICAgICAgIHBvcHVsYXRlU2Vzc2lvblNl
dHRpbmdzKHNldHRpbmdzLnNlc3Npb24pOwotICAgIH0pOwotfQorICAgICAgICB0aGlzLl9fZGVm
aW5lR2V0dGVyX18oa2V5LCB0aGlzLl9nZXRQcm9qZWN0U2V0dGluZy5iaW5kKHRoaXMsIGtleSwg
ZGVmYXVsdFZhbHVlKSk7CisgICAgICAgIHRoaXMuX19kZWZpbmVTZXR0ZXJfXyhrZXksIHRoaXMu
X3NldFByb2plY3RTZXR0aW5nLmJpbmQodGhpcywga2V5KSk7CisgICAgfSwKIAotV2ViSW5zcGVj
dG9yLlNldHRpbmdzLnByb3RvdHlwZSA9IHsKLSAgICByZXNldDogZnVuY3Rpb24oKQorICAgIF9n
ZXQ6IGZ1bmN0aW9uKGtleSwgZGVmYXVsdFZhbHVlKQogICAgIHsKLSAgICAgICAgdGhpcy5fc3Rv
cmUgPSB7fTsKLSAgICAgICAgLy8gRklYTUU6IHJlc3RvcmUgZGVmYXVsdCB2YWx1ZXMgKGJ1ZyA0
MjgyMCkKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxvYWRlZCIpOwor
ICAgICAgICBpZiAoa2V5IGluIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFn
ZVtrZXldKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAgIHdpbmRv
dy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CiAgICAgfSwKIAotICAgIF9sb2FkOiBmdW5j
dGlvbihzZXR0aW5nc1N0cmluZykKKyAgICBfc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKQogICAg
IHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBsb2FkZWRTdG9yZSA9IEpTT04ucGFy
c2Uoc2V0dGluZ3NTdHJpbmcpOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAv
LyBNYXkgZmFpbDsKLSAgICAgICAgICAgIGxvYWRlZFN0b3JlID0ge307Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCFsb2FkZWRTdG9yZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZm9y
ICh2YXIgcHJvcGVydHlOYW1lIGluIGxvYWRlZFN0b3JlKQotICAgICAgICAgICAgdGhpcy5fc3Rv
cmVbcHJvcGVydHlOYW1lXSA9IGxvYWRlZFN0b3JlW3Byb3BlcnR5TmFtZV07CisgICAgICAgIHdp
bmRvdy5sb2NhbFN0b3JhZ2Vba2V5XSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTsKICAgICB9LAog
Ci0gICAgaW5zdGFsbFNldHRpbmc6IGZ1bmN0aW9uKG5hbWUsIHByb3BlcnR5TmFtZSwgZGVmYXVs
dFZhbHVlKQorICAgIF9nZXRQcm9qZWN0U2V0dGluZzogZnVuY3Rpb24oa2V5LCBkZWZhdWx0VmFs
dWUpCiAgICAgewotICAgICAgICB0aGlzLl9fZGVmaW5lR2V0dGVyX18obmFtZSwgdGhpcy5fZ2V0
LmJpbmQodGhpcywgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIHRoaXMuX19kZWZpbmVTZXR0ZXJf
XyhuYW1lLCB0aGlzLl9zZXQuYmluZCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgaWYg
KCEocHJvcGVydHlOYW1lIGluIHRoaXMuX3N0b3JlKSkKLSAgICAgICAgICAgIHRoaXMuX3N0b3Jl
W3Byb3BlcnR5TmFtZV0gPSBkZWZhdWx0VmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXQo
dGhpcy5fZm9ybWF0UHJvamVjdEtleShrZXkpLCBkZWZhdWx0VmFsdWUpOwogICAgIH0sCiAKLSAg
ICBfZ2V0OiBmdW5jdGlvbihwcm9wZXJ0eU5hbWUpCisgICAgX3NldFByb2plY3RTZXR0aW5nOiBm
dW5jdGlvbihrZXksIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlW3By
b3BlcnR5TmFtZV07CisgICAgICAgIHJldHVybiB0aGlzLl9zZXQodGhpcy5fZm9ybWF0UHJvamVj
dEtleShrZXkpLCB2YWx1ZSk7CiAgICAgfSwKIAotICAgIF9zZXQ6IGZ1bmN0aW9uKHByb3BlcnR5
TmFtZSwgbmV3VmFsdWUpCisgICAgX2Zvcm1hdFByb2plY3RLZXk6IGZ1bmN0aW9uKGtleSkKICAg
ICB7Ci0gICAgICAgIHRoaXMuX3N0b3JlW3Byb3BlcnR5TmFtZV0gPSBuZXdWYWx1ZTsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBzdG9yZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuX3N0
b3JlKTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9zZXNzaW9uU2NvcGUpCi0gICAgICAgICAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5zYXZlU2Vzc2lvblNldHRpbmdzKHN0b3JlKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNhdmVBcHBsaWNhdGlv
blNldHRpbmdzKHN0b3JlKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgLy8g
TWF5IGZhaWw7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIHVybCA9IHRoaXMuX21haW5SZXNvdXJj
ZVVSTDsKKyAgICAgICAgdmFyIGZyYWdtZW50SW5kZXggPSB1cmwuaW5kZXhPZigiIyIpOworICAg
ICAgICBpZiAoZnJhZ21lbnRJbmRleCAhPT0gLTEpCisgICAgICAgICAgICB1cmwgPSB1cmwuc3Vi
c3RyaW5nKDAsIGZyYWdtZW50SW5kZXgpOworICAgICAgICByZXR1cm4ga2V5ICsgIi4iICsgdXJs
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5k
ZXggNGFmYzQ3NC4uMmM5YjVhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzCkBAIC00OTMsOCArNDkzLDggQEAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSA9IGZ1
bmN0aW9uKCkKICAgICBkb2N1bWVudC5ib2R5LmFkZFN0eWxlQ2xhc3MoInBvcnQtIiArIHBvcnQp
OwogCiAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRlZCgpOwotICAgIFdlYkluc3BlY3Rv
ci5TZXR0aW5ncy5pbml0aWFsaXplKCk7Ci0gICAgCisgICAgV2ViSW5zcGVjdG9yLmFwcGxpY2F0
aW9uU2V0dGluZ3MgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmdzKCk7CisKICAgICB0aGlzLl9y
ZWdpc3RlclNob3J0Y3V0cygpOwogCiAgICAgLy8gc2V0IG9yZGVyIG9mIHNvbWUgc2VjdGlvbnMg
ZXhwbGljaXRseQpAQCAtNjAwLDYgKzYwMCw4IEBAIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUg
PSBmdW5jdGlvbigpCiAKICAgICAvLyBBcyBhIERPTUFnZW50IG1ldGhvZCwgdGhpcyBuZWVkcyB0
byBoYXBwZW4gYWZ0ZXIgdGhlIGZyb250ZW5kIGhhcyBsb2FkZWQgYW5kIHRoZSBhZ2VudCBpcyBh
dmFpbGFibGUuCiAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVz
KFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5fbG9hZCk7CisKKyAgICBXZWJJbnNwZWN0b3Iu
YXBwbGljYXRpb25TZXR0aW5ncy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxvYWRlZCIpOwog
fQogCiBXZWJJbnNwZWN0b3IuYWRkUGFuZWxUb29sYmFySWNvbiA9IGZ1bmN0aW9uKHRvb2xiYXJF
bGVtZW50LCBwYW5lbCwgcHJldmlvdXNUb29sYmFySXRlbSkKQEAgLTE0NDksOCArMTQ1MSw2IEBA
IFdlYkluc3BlY3Rvci5yZXNldCA9IGZ1bmN0aW9uKCkKICAgICAgICAgICAgIHBhbmVsLnJlc2V0
KCk7CiAgICAgfQogCi0gICAgdGhpcy5zZXNzaW9uU2V0dGluZ3MucmVzZXQoKTsKLQogICAgIGZv
ciAodmFyIGNhdGVnb3J5IGluIHRoaXMucmVzb3VyY2VDYXRlZ29yaWVzKQogICAgICAgICB0aGlz
LnJlc291cmNlQ2F0ZWdvcmllc1tjYXRlZ29yeV0ucmVtb3ZlQWxsUmVzb3VyY2VzKCk7CiAK
</data>
<flag name="review"
          id="61840"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="61841"
          type_id="3"
          status="-"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>