<?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>170978</bug_id>
          
          <creation_ts>2017-04-18 20:22:35 -0700</creation_ts>
          <short_desc>Add Automator service to copy permalink to Clipboard</short_desc>
          <delta_ts>2017-08-14 10:25:51 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>macOS 10.12</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>joepeck</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1298590</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-04-18 20:22:35 -0700</bug_when>
    <thetext>I frequently find it helpful to refer to specific line of code in code reviews, IRC and email discussions using a Trac permalink. It&apos;s tedious to create such a link using the trac.webkit.org web app. So, I wrote an Automator service workflow for Xcode that copies a Trac permalink to the currently selected line in the active document to the Clipboard. An example of a Trac permalink that is copied to the clipboard is: &lt;http://trac.webkit.org/browser/trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp?rev=215365#L83&gt;. Holding down the Option key when the service runs will copy a Trac permalink with blame annotations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298592</commentid>
    <comment_count>1</comment_count>
      <attachid>307458</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-04-18 20:32:00 -0700</bug_when>
    <thetext>Created attachment 307458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300059</commentid>
    <comment_count>2</comment_count>
      <attachid>307458</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-04-21 18:57:58 -0700</bug_when>
    <thetext>Comment on attachment 307458
Patch

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

Neat! r=me

&gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:120
&gt; +    return `http://trac.webkit.org/browser/${branch}/${path}${revision}${withBlame}${lineNumber}`;

Nit: `https` will save a redirect.

&gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:145
&gt; +        documentName.substr(0, documentName.lastIndexOf(editedSuffix));

The result of this expression is not saved. You probably wanted to update documentName:

    documentName = documentName.substr(...);

&gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:157
&gt; +    var beginPosition = range[0] - 1;
&gt; +    if (!beginPosition)

Is it possible that the first location would be 0, and this produces -1? Or is the first possible position 1?

&gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:243
&gt; +    return { &quot;branch&quot;: branch, &quot;revision&quot;: revision, &quot;repositoryURL&quot;: repositoryURL };

Style: You could just do:

    return { branch, revision, repositoryURL };

Which is equivalent shorthand for:

    return { &quot;branch&quot;: branch, &quot;revision&quot;: revision, &quot;repositoryURL&quot;: repositoryURL };

I see you use destructuring later, so using ES6 features should not be a concern.

&gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:264
&gt; +    for (var i = 0, length = lines.length; i &amp;lt; length; ++i) {
&gt; +        var [key, value] = lines[i].split(&quot;: &quot;, 2);

You could simplify a bit with for..of:

    for (var line of lines) {
        var [key, value] = line.split(&quot;: &quot;, 2);

Since you don&apos;t use `i` or `length` outside of the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338382</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-08-14 10:19:31 -0700</bug_when>
    <thetext>(In reply to Joseph Pecoraro from comment #2)
&gt; &gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:120
&gt; &gt; +    return `http://trac.webkit.org/browser/${branch}/${path}${revision}${withBlame}${lineNumber}`;
&gt; 
&gt; Nit: `https` will save a redirect.
&gt; 

Will fix.

&gt; &gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:145
&gt; &gt; +        documentName.substr(0, documentName.lastIndexOf(editedSuffix));
&gt; 
&gt; The result of this expression is not saved. You probably wanted to update
&gt; documentName:
&gt; 
&gt;     documentName = documentName.substr(...);
&gt; 

Will fix.

&gt; &gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:157
&gt; &gt; +    var beginPosition = range[0] - 1;
&gt; &gt; +    if (!beginPosition)
&gt; 
&gt; Is it possible that the first location would be 0, and this produces -1? Or
&gt; is the first possible position 1?
&gt; 
&gt; &gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:243
&gt; &gt; +    return { &quot;branch&quot;: branch, &quot;revision&quot;: revision, &quot;repositoryURL&quot;: repositoryURL };
&gt; 
&gt; Style: You could just do:
&gt; 
&gt;     return { branch, revision, repositoryURL };
&gt; 

Will fix.

&gt; &gt; Tools/CopyPermalink/Copy WebKit Permalink.workflow/Contents/document.wflow:264
&gt; &gt; +    for (var i = 0, length = lines.length; i &amp;lt; length; ++i) {
&gt; &gt; +        var [key, value] = lines[i].split(&quot;: &quot;, 2);
&gt; 
&gt; You could simplify a bit with for..of:
&gt; 
&gt;     for (var line of lines) {
&gt;         var [key, value] = line.split(&quot;: &quot;, 2);
&gt; 
&gt; Since you don&apos;t use `i` or `length` outside of the loop.

Will change to use for-of loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338383</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-08-14 10:20:05 -0700</bug_when>
    <thetext>This Automator service works under Xcode 8 or Xcode 9 beta 5 (9M202q) or later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338387</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-08-14 10:25:26 -0700</bug_when>
    <thetext>Committed r220705: &lt;http://trac.webkit.org/changeset/220705&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338389</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-14 10:25:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/33877779&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307458</attachid>
            <date>2017-04-18 20:32:00 -0700</date>
            <delta_ts>2017-04-21 18:57:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170978-20170418203200.patch</filename>
            <type>text/plain</type>
            <size>16299</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NDk4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTFhYjI4MDI0Yjk5ZjdjM2JlYjFmZjE0ZmZlNWQ3ZmI0
MTU5NDJhNy4uZDA3MTk0MTcxN2I2ZDQ4MWVmYzU3Njg4OTMzZDQyMWVjZDVjZTQzYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIw
IEBACisyMDE3LTA0LTE4ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgQXV0b21hdG9yIHNlcnZpY2UgdG8gY29weSBwZXJtYWxpbmsgdG8gQ2xpcGJvYXJk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA5NzgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBo
ZWxwZnVsIHRvIHJlZmVyZW5jZSB1c2luZyBhIGh5cGVybGluayBhIHBhcnRpY3VsYXIgbGluZSBv
ZiBjb2RlIHdoZW4gaGF2aW5nCisgICAgICAgIGEgZGlzY3Vzc2lvbiBvbiBJUkMgb3IgaW4gYSBi
dWcuIFlvdSBjYW4gZ2V0IHN1Y2ggYSBsaW5rIGJ5IG5hdmlnYXRpbmcgdG8gdGhlIGZpbGUKKyAg
ICAgICAgaW4gdGhlIFRyYWMgQnJvd3NlIFNvdXJjZSB2aWV3ZXIgYW5kIHNlbGVjdGluZyB0aGUg
bGluZSB5b3VyIGFyZSBpbnRlcmVzdGVkIGluLgorICAgICAgICBJIGZvdW5kIG15c2VsZiBkb2lu
ZyB0aGlzIG9mdGVuIGVub3VnaCB0aGF0IEkgd3JvdGUgYW4gQXV0b21hdG9yIHNlcnZpY2UgdG8g
ZG8gaXQKKyAgICAgICAgZm9yIG1lLgorCisgICAgICAgICogQ29weVBlcm1hbGluay9Db3B5IFdl
YktpdCBQZXJtYWxpbmsud29ya2Zsb3cvQ29udGVudHMvSW5mby5wbGlzdDogQWRkZWQuCisgICAg
ICAgICogQ29weVBlcm1hbGluay9Db3B5IFdlYktpdCBQZXJtYWxpbmsud29ya2Zsb3cvQ29udGVu
dHMvZG9jdW1lbnQud2Zsb3c6IEFkZGVkLgorICAgICAgICAqIENvcHlQZXJtYWxpbmsvUkVBRE1F
OiBBZGRlZC4KKwogMjAxNy0wNC0xOCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBNYWtlIFdlYkNvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4o
KSByZXR1cm4gImxvY2FsaG9zdCIgZm9yIGxvY2FsaG9zdApkaWZmIC0tZ2l0IGEvVG9vbHMvQ29w
eVBlcm1hbGluay9Db3B5IFdlYktpdCBQZXJtYWxpbmsud29ya2Zsb3cvQ29udGVudHMvSW5mby5w
bGlzdCBiL1Rvb2xzL0NvcHlQZXJtYWxpbmsvQ29weSBXZWJLaXQgUGVybWFsaW5rLndvcmtmbG93
L0NvbnRlbnRzL0luZm8ucGxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTlkMjZhNGM4YzQzY2YwOWIwZmIwNDcz
MWMxNTkwM2EzNWYyMzU4YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0NvcHlQZXJtYWxpbmsv
Q29weSBXZWJLaXQgUGVybWFsaW5rLndvcmtmbG93L0NvbnRlbnRzL0luZm8ucGxpc3QJCkBAIC0w
LDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURP
Q1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8v
d3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9u
PSIxLjAiPgorPGRpY3Q+CisJPGtleT5OU1NlcnZpY2VzPC9rZXk+CisJPGFycmF5PgorCQk8ZGlj
dD4KKwkJCTxrZXk+TlNNZW51SXRlbTwva2V5PgorCQkJPGRpY3Q+CisJCQkJPGtleT5kZWZhdWx0
PC9rZXk+CisJCQkJPHN0cmluZz5Db3B5IFdlYktpdCBQZXJtYWxpbms8L3N0cmluZz4KKwkJCTwv
ZGljdD4KKwkJCTxrZXk+TlNNZXNzYWdlPC9rZXk+CisJCQk8c3RyaW5nPnJ1bldvcmtmbG93QXNT
ZXJ2aWNlPC9zdHJpbmc+CisJCQk8a2V5Pk5TUmVxdWlyZWRDb250ZXh0PC9rZXk+CisJCQk8ZGlj
dD4KKwkJCQk8a2V5Pk5TQXBwbGljYXRpb25JZGVudGlmaWVyPC9rZXk+CisJCQkJPHN0cmluZz5j
b20uYXBwbGUuZHQuWGNvZGU8L3N0cmluZz4KKwkJCTwvZGljdD4KKwkJPC9kaWN0PgorCTwvYXJy
YXk+Cis8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ29weVBlcm1hbGluay9D
b3B5IFdlYktpdCBQZXJtYWxpbmsud29ya2Zsb3cvQ29udGVudHMvZG9jdW1lbnQud2Zsb3cgYi9U
b29scy9Db3B5UGVybWFsaW5rL0NvcHkgV2ViS2l0IFBlcm1hbGluay53b3JrZmxvdy9Db250ZW50
cy9kb2N1bWVudC53ZmxvdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDk3YzNkOTVjMGM5YWYyMzA3MWQ2NmFhMWI2
NWRhNjUzMDM1NTg1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvQ29weVBlcm1hbGluay9Db3B5
IFdlYktpdCBQZXJtYWxpbmsud29ya2Zsb3cvQ29udGVudHMvZG9jdW1lbnQud2Zsb3cJCkBAIC0w
LDAgKzEsNDA4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFE
T0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDov
L3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lv
bj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+QU1BcHBsaWNhdGlvbkJ1aWxkPC9rZXk+CisJPHN0cmlu
Zz40Mjg8L3N0cmluZz4KKwk8a2V5PkFNQXBwbGljYXRpb25WZXJzaW9uPC9rZXk+CisJPHN0cmlu
Zz4yLjc8L3N0cmluZz4KKwk8a2V5PkFNRG9jdW1lbnRWZXJzaW9uPC9rZXk+CisJPHN0cmluZz4y
PC9zdHJpbmc+CisJPGtleT5hY3Rpb25zPC9rZXk+CisJPGFycmF5PgorCQk8ZGljdD4KKwkJCTxr
ZXk+YWN0aW9uPC9rZXk+CisJCQk8ZGljdD4KKwkJCQk8a2V5PkFNQWNjZXB0czwva2V5PgorCQkJ
CTxkaWN0PgorCQkJCQk8a2V5PkNvbnRhaW5lcjwva2V5PgorCQkJCQk8c3RyaW5nPkxpc3Q8L3N0
cmluZz4KKwkJCQkJPGtleT5PcHRpb25hbDwva2V5PgorCQkJCQk8dHJ1ZS8+CisJCQkJCTxrZXk+
VHlwZXM8L2tleT4KKwkJCQkJPGFycmF5PgorCQkJCQkJPHN0cmluZz5jb20uYXBwbGUuYXBwbGVz
Y3JpcHQub2JqZWN0PC9zdHJpbmc+CisJCQkJCTwvYXJyYXk+CisJCQkJPC9kaWN0PgorCQkJCTxr
ZXk+QU1BY3Rpb25WZXJzaW9uPC9rZXk+CisJCQkJPHN0cmluZz4xLjA8L3N0cmluZz4KKwkJCQk8
a2V5PkFNQXBwbGljYXRpb248L2tleT4KKwkJCQk8YXJyYXk+CisJCQkJCTxzdHJpbmc+QXV0b21h
dG9yPC9zdHJpbmc+CisJCQkJPC9hcnJheT4KKwkJCQk8a2V5PkFNUGFyYW1ldGVyUHJvcGVydGll
czwva2V5PgorCQkJCTxkaWN0PgorCQkJCQk8a2V5PnNvdXJjZTwva2V5PgorCQkJCQk8ZGljdC8+
CisJCQkJPC9kaWN0PgorCQkJCTxrZXk+QU1Qcm92aWRlczwva2V5PgorCQkJCTxkaWN0PgorCQkJ
CQk8a2V5PkNvbnRhaW5lcjwva2V5PgorCQkJCQk8c3RyaW5nPkxpc3Q8L3N0cmluZz4KKwkJCQkJ
PGtleT5UeXBlczwva2V5PgorCQkJCQk8YXJyYXk+CisJCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5h
cHBsZXNjcmlwdC5vYmplY3Q8L3N0cmluZz4KKwkJCQkJPC9hcnJheT4KKwkJCQk8L2RpY3Q+CisJ
CQkJPGtleT5BY3Rpb25CdW5kbGVQYXRoPC9rZXk+CisJCQkJPHN0cmluZz4vU3lzdGVtL0xpYnJh
cnkvQXV0b21hdG9yL1J1biBKYXZhU2NyaXB0LmFjdGlvbjwvc3RyaW5nPgorCQkJCTxrZXk+QWN0
aW9uTmFtZTwva2V5PgorCQkJCTxzdHJpbmc+UnVuIEphdmFTY3JpcHQ8L3N0cmluZz4KKwkJCQk8
a2V5PkFjdGlvblBhcmFtZXRlcnM8L2tleT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtleT5zb3VyY2U8
L2tleT4KKwkJCQkJPHN0cmluZz4vKgorICogIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogIGFyZSBtZXQ6CisgKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqICBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqICBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqICBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiAgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitPYmpD
LmltcG9ydCgiQ29jb2EiKTsKKwordmFyIGdfaXNTVk47Cit2YXIgZ19pc0dpdDsKK3ZhciBnX2lz
R2l0U1ZOOwordmFyIGdfbGFzdFNWTkluZm87CisKK3ZhciBBcHAgPSBBcHBsaWNhdGlvbi5jdXJy
ZW50QXBwbGljYXRpb24oKTsKK0FwcC5pbmNsdWRlU3RhbmRhcmRBZGRpdGlvbnMgPSB0cnVlOwor
CitmdW5jdGlvbiBydW4oaW5wdXQsIHBhcmFtZXRlcnMpIHsKKyAgICB2YXIgeGNvZGVEb2N1bWVu
dCA9IHhjb2RlQWN0aXZlRG9jdW1lbnQoKTsKKyAgICBpZiAoIXhjb2RlRG9jdW1lbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIHZhciB4Y29kZURvY3VtZW50UGF0aCA9IHhjb2RlRG9jdW1lbnQu
cGF0aCgpOworICAgIGRldGVybWluZVZDU0Zyb21QYXRoKHhjb2RlRG9jdW1lbnRQYXRoKTsKKwor
ICAgIGlmICghcGF0aElzSW5XZWJLaXRDaGVja291dCh4Y29kZURvY3VtZW50UGF0aCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHZhciBsaW5lTnVtYmVyID0geGNvZGVTZWxlY3RlZExpbmVJbkRv
Y3VtZW50KHhjb2RlRG9jdW1lbnQpOworICAgIHZhciBwYXRoID0gcGF0aFJlbGF0aXZlVG9SZXBv
c2l0b3J5Um9vdEZvclBhdGgoeGNvZGVEb2N1bWVudFBhdGgpOworICAgIHZhciByZXZpc2lvbklu
Zm8gPSByZXZpc2lvbkluZm9Gb3JQYXRoKHhjb2RlRG9jdW1lbnRQYXRoKTsKKyAgICB2YXIgYW5u
b3RhdGVCbGFtZSA9ICQuTlNFdmVudC5tb2RpZmllckZsYWdzICZhbXA7ICQuTlNBbHRlcm5hdGVL
ZXlNYXNrOworCisgICAgQXBwLnNldFRoZUNsaXBib2FyZFRvKHBlcm1hbGlua0ZvclBhdGgocGF0
aCwgbGluZU51bWJlciwgcmV2aXNpb25JbmZvLCBhbm5vdGF0ZUJsYW1lKSk7Cit9CisKK2Z1bmN0
aW9uIHBhdGhJc0luV2ViS2l0Q2hlY2tvdXQocGF0aCkKK3sKKyAgICB2YXIgcmVwb3NpdG9yeVVS
TCA9IHJldmlzaW9uSW5mb0ZvclBhdGgoeGNvZGVEb2N1bWVudFBhdGgpLnJlcG9zaXRvcnlVUkw7
CisgICAgcmV0dXJuICEhcmVwb3NpdG9yeVVSTC5tYXRjaCgvXlx3KzpcL1wvXHcrXC53ZWJraXQu
b3JnLyk7Cit9CisKK2Z1bmN0aW9uIHBlcm1hbGlua0ZvclBhdGgocGF0aCwgbGluZU51bWJlciwg
cmV2aXNpb25JbmZvLCBhbm5vdGF0ZUJsYW1lKQoreworICAgIHZhciByZXZpc2lvbiA9IHJldmlz
aW9uSW5mby5yZXZpc2lvbiA/ICI/cmV2PSIgKyByZXZpc2lvbkluZm8ucmV2aXNpb24gOiAiIjsK
KyAgICB2YXIgbGluZU51bWJlciA9IGxpbmVOdW1iZXIgPyAiI0wiICsgbGluZU51bWJlciA6ICIi
OworICAgIHZhciBicmFuY2ggPSByZXZpc2lvbkluZm8uYnJhbmNoIHx8ICJ0cnVuayI7CisgICAg
dmFyIHdpdGhCbGFtZSA9IGFubm90YXRlQmxhbWUgPyAiJmFtcDthbm5vdGF0ZT1ibGFtZSIgOiAi
IjsKKyAgICByZXR1cm4gYGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci8ke2JyYW5jaH0v
JHtwYXRofSR7cmV2aXNpb259JHt3aXRoQmxhbWV9JHtsaW5lTnVtYmVyfWA7Cit9CisKKy8vIE1B
Uks6IFhjb2RlCisKK2Z1bmN0aW9uIHhjb2RlQWN0aXZlRG9jdW1lbnQoKQoreworICAgIHZhciB4
Y29kZSA9IEFwcGxpY2F0aW9uKCJYY29kZSIpOworICAgIHZhciB3aW5kb3dzID0geGNvZGUud2lu
ZG93cygpOworICAgIHZhciBudW1iZXJPZldpbmRvd3MgPSB3aW5kb3dzLmxlbmd0aDsKKyAgICBp
ZiAoIW51bWJlck9mV2luZG93cykKKyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAvLyBUaGUg
dGl0bGUgb2YgYW4gWGNvZGUgV29ya3NwYWNlIHdpbmRvdyBpcyB0aGUgdGl0bGUgb2YgdGhlIGRv
Y3VtZW50IGluIHRoZSBlZGl0b3IgcGFuZS4KKyAgICAvLyBJZ25vcmUgd2luZG93cyB3aXRob3V0
IGEgbmFtZSAoZS5nLiAiRWRpdCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBzeW1ib2wiIHBvcC11cCBt
ZW51KS4KKyAgICB2YXIgZG9jdW1lbnROYW1lOworICAgIGZvciAodmFyIGkgPSAwOyAhZG9jdW1l
bnROYW1lICZhbXA7JmFtcDsgaSAmbHQ7IG51bWJlck9mV2luZG93czsgKytpKQorICAgICAgICBk
b2N1bWVudE5hbWUgPSB3aW5kb3dzW2ldLm5hbWUoKTsKKyAgICBpZiAoIWRvY3VtZW50TmFtZSkK
KyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAvLyBUaGUgdGl0bGUgb2YgYSBtb2RpZmllZCBk
b2N1bWVudCB0aGF0IGhhcyBub3QgYmVlbiBzYXZlZCB3aWxsIGhhdmUgYSBzdWZmaXguIFJlbW92
ZQorICAgIC8vIHRoZSBzdWZmaXguCisgICAgY29uc3QgZWRpdGVkU3VmZml4ID0gIiDigJQgRWRp
dGVkIjsKKyAgICBpZiAoZG9jdW1lbnROYW1lLmVuZHNXaXRoKGVkaXRlZFN1ZmZpeCkpCisgICAg
ICAgIGRvY3VtZW50TmFtZS5zdWJzdHIoMCwgZG9jdW1lbnROYW1lLmxhc3RJbmRleE9mKGVkaXRl
ZFN1ZmZpeCkpOworICAgIHJldHVybiB4Y29kZS5maWxlRG9jdW1lbnRzLmJ5TmFtZShkb2N1bWVu
dE5hbWUpOworfQorCitmdW5jdGlvbiB4Y29kZVNlbGVjdGVkTGluZUluRG9jdW1lbnQoeGNvZGVE
b2N1bWVudCkKK3sKKyAgICBpZiAoIXhjb2RlRG9jdW1lbnQpCisgICAgICAgIHJldHVybiAtMTsK
KyAgICB2YXIgcmFuZ2UgPSB4Y29kZURvY3VtZW50LnNlbGVjdGVkQ2hhcmFjdGVyUmFuZ2UoKTsK
KyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gLTE7CisgICAgdmFyIGJlZ2luUG9zaXRp
b24gPSByYW5nZVswXSAtIDE7CisgICAgaWYgKCFiZWdpblBvc2l0aW9uKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbW9yZSBlZmZpY2llbnQgdG8gY291bnQg
dGhlIENSTEYsIENSLCBvciBMRiBjaGFyYWN0ZXJzCisgICAgLy8gaW4gdGhlIHN1YnN0cmluZyBm
cm9tIFswLCBiZWdpblBvc2l0aW9uXS4KKyAgICB2YXIgbGluZXMgPSB4Y29kZURvY3VtZW50LnRl
eHQoKS5zcGxpdCgvXHI/XG58XHIvKTsKKyAgICB2YXIgbnVtYmVyT2ZMaW5lcyA9IGxpbmVzLmxl
bmd0aDsKKyAgICB2YXIgY2hhcmFjdGVyQ291bnQgPSAwOworICAgIHZhciBpID0gMDsKKyAgICBk
byB7CisgICAgICAgIGNoYXJhY3RlckNvdW50ICs9IGxpbmVzW2ldLmxlbmd0aCArIDE7CisgICAg
ICAgIGlmIChjaGFyYWN0ZXJDb3VudCAmZ3Q7IGJlZ2luUG9zaXRpb24pCisgICAgICAgICAgICBi
cmVhazsKKyAgICB9IHdoaWxlICgrK2kgJmx0OyBudW1iZXJPZkxpbmVzKTsKKyAgICByZXR1cm4g
aSArIDE7Cit9CisKKy8vIE1BUks6IFZDUyB1dGlsaXRpZXMKKworZnVuY3Rpb24gZGV0ZXJtaW5l
VkNTRnJvbVBhdGgocGF0aCkKK3sKKyAgICBpZiAoIWlzRGlyZWN0b3J5KHBhdGgpKQorICAgICAg
ICBwYXRoID0gZGlybmFtZShwYXRoKTsKKworICAgIGdfaXNTVk4gPSBmYWxzZTsKKyAgICBnX2lz
R2l0ID0gZmFsc2U7CisgICAgZ19pc0dpdFNWTiA9IGZhbHNlOworCisgICAgaWYgKGlzU1ZORGly
ZWN0b3J5KHBhdGgpKSB7CisgICAgICAgIGdfaXNTVk4gPSB0cnVlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGlzR2l0U1ZORGlyZWN0b3J5KHBhdGgpKSB7CisgICAgICAgIGdf
aXNHaXQgPSB0cnVlOworICAgICAgICBnX2lzR2l0U1ZOID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChpc0dpdERpcmVjdG9yeShwYXRoKSkgeworICAgICAgICBnX2lz
R2l0ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworZnVuY3Rpb24gcGF0aFJl
bGF0aXZlVG9SZXBvc2l0b3J5Um9vdEZvclBhdGgocGF0aCkKK3sKKyAgICB2YXIgY2hlY2tvdXRE
aXJlY3RvcnkgPSBpc0RpcmVjdG9yeShwYXRoKSA/IHBhdGggOiBkaXJuYW1lKHBhdGgpOworICAg
IGlmIChnX2lzU1ZOKQorICAgICAgICByZXR1cm4gc3ZuUGF0aFJlbGF0aXZlVG9SZXBvc2l0b3J5
Um9vdEZvclBhdGgocGF0aCwgY2hlY2tvdXREaXJlY3RvcnkpOworICAgIGlmIChnX2lzR2l0KQor
ICAgICAgICByZXR1cm4gZ2l0UGF0aFJlbGF0aXZlVG9SZXBvc2l0b3J5Um9vdEZvclBhdGgocGF0
aCwgY2hlY2tvdXREaXJlY3RvcnkpOworICAgIHJldHVybiAiIjsKK30KKworZnVuY3Rpb24gZ2l0
UGF0aFJlbGF0aXZlVG9SZXBvc2l0b3J5Um9vdEZvclBhdGgocGF0aCwgY2hlY2tvdXREaXJlY3Rv
cnkpCit7CisgICAgcmV0dXJuIEFwcC5kb1NoZWxsU2NyaXB0KGBnaXQgLUMgJyR7Y2hlY2tvdXRE
aXJlY3Rvcnl9JyBscy10cmVlIC0tZnVsbC1uYW1lIC0tbmFtZS1vbmx5IEhFQUQgJyR7cGF0aH0n
YCk7Cit9CisKK2Z1bmN0aW9uIHN2blBhdGhSZWxhdGl2ZVRvUmVwb3NpdG9yeVJvb3RGb3JQYXRo
KHBhdGgsIGNoZWNrb3V0RGlyZWN0b3J5KQoreworICAgIHJldHVybiBzdm5JbmZvRm9yUGF0aChw
YXRoLCBjaGVja291dERpcmVjdG9yeSkucGF0aDsKK30KKworZnVuY3Rpb24gcmV2aXNpb25JbmZv
Rm9yUGF0aChwYXRoKQoreworICAgIHZhciBjaGVja291dERpcmVjdG9yeSA9IGlzRGlyZWN0b3J5
KHBhdGgpID8gcGF0aCA6IGRpcm5hbWUocGF0aCk7CisgICAgaWYgKGdfaXNTVk4gfHwgZ19pc0dp
dFNWTikKKyAgICAgICAgcmV0dXJuIHN2blJldmlzaW9uSW5mb0ZvclBhdGgocGF0aCwgY2hlY2tv
dXREaXJlY3RvcnkpOworICAgIGlmIChnX2lzR2l0KQorICAgICAgICByZXR1cm4gZ2l0UmV2aXNp
b25JbmZvRm9yUGF0aChwYXRoLCBjaGVja291dERpcmVjdG9yeSk7CisgICAgcmV0dXJuICIiOwor
fQorCitmdW5jdGlvbiBzdm5SZXZpc2lvbkluZm9Gb3JQYXRoKHBhdGgsIGNoZWNrb3V0RGlyZWN0
b3J5KQoreworICAgIHZhciBzdm5JbmZvID0gc3ZuSW5mb0ZvclBhdGgocGF0aCwgY2hlY2tvdXRE
aXJlY3RvcnkpOworICAgIHJldHVybiB7ICJicmFuY2giOiBzdm5JbmZvLmJyYW5jaCwgInJldmlz
aW9uIjogc3ZuSW5mby5yZXZpc2lvbiwgInJlcG9zaXRvcnlVUkwiOiBzdm5JbmZvLnJlcG9zaXRv
cnlSb290IH07Cit9CisKK2Z1bmN0aW9uIGdpdFJldmlzaW9uSW5mb0ZvclBhdGgocGF0aCwgY2hl
Y2tvdXREaXJlY3RvcnkpCit7CisgICAgdmFyIHJlcG9zaXRvcnlVUkwgPSBBcHAuZG9TaGVsbFNj
cmlwdChgZ2l0IC1DICcke2NoZWNrb3V0RGlyZWN0b3J5fScgcmVtb3RlIGdldC11cmwgb3JpZ2lu
YCk7CisgICAgdmFyIHJldmlzaW9uID0gQXBwLmRvU2hlbGxTY3JpcHQoYGdpdCAtQyAnJHtjaGVj
a291dERpcmVjdG9yeX0nIGxvZyAtMSAtLWZvcm1hdD0nJUgnICcke3BhdGh9J2ApOworICAgIHZh
ciBicmFuY2ggPSBBcHAuZG9TaGVsbFNjcmlwdChgZ2l0IC1DICcke2NoZWNrb3V0RGlyZWN0b3J5
fScgc3ltYm9saWMtcmVmIC1xIEhFQURgKTsKKyAgICBicmFuY2ggPSBicmFuY2gucmVwbGFjZSgv
XnJlZnNcL2hlYWRzXC8vLCAiIikgfHwgIm1hc3RlciI7CisgICAgcmV0dXJuIHsgImJyYW5jaCI6
IGJyYW5jaCwgInJldmlzaW9uIjogcmV2aXNpb24sICJyZXBvc2l0b3J5VVJMIjogcmVwb3NpdG9y
eVVSTCB9OworfQorCitmdW5jdGlvbiBzdm5JbmZvRm9yUGF0aChwYXRoLCBjaGVja291dERpcmVj
dG9yeSkKK3sKKyAgICBpZiAoZ19sYXN0U1ZOSW5mbyAmYW1wOyZhbXA7IGdfbGFzdFNWTkluZm8u
cGF0aCA9PT0gcGF0aCkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFsc28gZW5zdXJl
IHRoYXQgdGhlIGNoZWNrb3V0IGRpcmVjdG9yeSBmb3IgdGhlIGNhY2hlZCBTVk4gaW5mbyBpcwor
ICAgICAgICAvLyB0aGUgc2FtZSBhcyB0aGUgc3BlY2lmaWVkIGNoZWNrb3V0IGRpcmVjdG9yeS4K
KyAgICAgICAgcmV0dXJuIGdfbGFzdFNWTkluZm87CisgICAgfQorCisgICAgdmFyIHN2bkluZm9D
b21tYW5kID0gInN2biBpbmZvIjsKKyAgICBpZiAoZ19pc0dpdFNWTikKKyAgICAgICAgc3ZuSW5m
b0NvbW1hbmQgPSAiZ2l0ICIgKyBzdm5JbmZvQ29tbWFuZDsKKyAgICB2YXIgb3V0cHV0ID0gQXBw
LmRvU2hlbGxTY3JpcHQoYGNkICcke2NoZWNrb3V0RGlyZWN0b3J5fScgJmFtcDsmYW1wOyAke3N2
bkluZm9Db21tYW5kfSAnJHtwYXRofSdgLCB7ImFsdGVyaW5nTGluZUVuZGluZ3MiOiBmYWxzZX0p
OworICAgIGlmICghb3V0cHV0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgdmFyIHRlbXAg
PSB7IH07CisgICAgdmFyIGxpbmVzID0gb3V0cHV0LnNwbGl0KCJcbiIpOworICAgIGZvciAodmFy
IGkgPSAwLCBsZW5ndGggPSBsaW5lcy5sZW5ndGg7IGkgJmx0OyBsZW5ndGg7ICsraSkgeworICAg
ICAgICB2YXIgW2tleSwgdmFsdWVdID0gbGluZXNbaV0uc3BsaXQoIjogIiwgMik7CisgICAgICAg
IGlmIChrZXkgJmFtcDsmYW1wOyB2YWx1ZSkKKyAgICAgICAgICAgIHRlbXBba2V5XSA9IHZhbHVl
OworICAgIH0KKyAgICB2YXIgc3ZuSW5mbyA9IHsKKyAgICAgICAgInBhdGgiOiB0ZW1wWyJQYXRo
Il0sCisgICAgICAgICJwYXRoQXNVUkwiOiB0ZW1wWyJVUkwiXSwKKyAgICAgICAgInJlcG9zaXRv
cnlSb290IjogdGVtcFsiUmVwb3NpdG9yeSBSb290Il0sCisgICAgICAgICJyZXZpc2lvbiI6IHRl
bXBbIlJldmlzaW9uIl0sCisgICAgfTsKKyAgICB2YXIgYnJhbmNoID0gc3ZuSW5mby5wYXRoQXNV
UkwucmVwbGFjZShzdm5JbmZvLnJlcG9zaXRvcnlSb290ICsgIi8iLCAiIik7CisgICAgYnJhbmNo
ID0gYnJhbmNoLnN1YnN0cigwLCBicmFuY2guaW5kZXhPZigiLyIpKTsKKyAgICBzdm5JbmZvLmJy
YW5jaCA9IGJyYW5jaDsKKworICAgIGdfbGFzdFNWTkluZm8gPSBzdm5JbmZvOworCisgICAgcmV0
dXJuIHN2bkluZm87Cit9CisKK2Z1bmN0aW9uIGlzU1ZORGlyZWN0b3J5KGRpcmVjdG9yeSkKK3sK
KyAgICB0cnkgeworICAgICAgICBBcHAuZG9TaGVsbFNjcmlwdChgY2QgJyR7ZGlyZWN0b3J5fScg
JmFtcDsmYW1wOyBzdm4gaW5mbyAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MWApOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIGlzR2l0RGlyZWN0b3J5KGRpcmVjdG9yeSkKK3sKKyAgICB0
cnkgeworICAgICAgICBBcHAuZG9TaGVsbFNjcmlwdChgZ2l0IC1DICcke2RpcmVjdG9yeX0nIHJl
di1wYXJzZSAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MWApOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIGlzR2l0U1ZORGlyZWN0b3J5KGRpcmVjdG9yeSkKK3sKKyAgICB2YXIgb3V0cHV0
ID0gIiI7CisgICAgdHJ5IHsKKyAgICAgICAgb3V0cHV0ID0gQXBwLmRvU2hlbGxTY3JpcHQoYGdp
dCAtQyAnJHtkaXJlY3Rvcnl9JyBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggMiZn
dDsmYW1wOzFgKTsKKyAgICB9IGNhdGNoIChlKSB7IH0KKyAgICByZXR1cm4gb3V0cHV0ICE9PSAi
IjsKK30KKworLy8gTUFSSzogVXRpbGl0aWVzCisKK2Z1bmN0aW9uIGlzRGlyZWN0b3J5KHBhdGgp
Cit7CisgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIEFwcC5pbmZvRm9yKHBhdGgpLmZvbGRlcjsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIGRpcm5hbWUocGF0aCkKK3sKKyAgICByZXR1cm4gcGF0aC5zdWJzdHIoMCwgcGF0aC5s
YXN0SW5kZXhPZigiLyIpKTsKK30KKzwvc3RyaW5nPgorCQkJCTwvZGljdD4KKwkJCQk8a2V5PkJ1
bmRsZUlkZW50aWZpZXI8L2tleT4KKwkJCQk8c3RyaW5nPmNvbS5hcHBsZS5BdXRvbWF0b3IuUnVu
SmF2YVNjcmlwdDwvc3RyaW5nPgorCQkJCTxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+CisJCQkJ
PHN0cmluZz4xLjA8L3N0cmluZz4KKwkJCQk8a2V5PkNhblNob3dTZWxlY3RlZEl0ZW1zV2hlblJ1
bjwva2V5PgorCQkJCTxmYWxzZS8+CisJCQkJPGtleT5DYW5TaG93V2hlblJ1bjwva2V5PgorCQkJ
CTx0cnVlLz4KKwkJCQk8a2V5PkNhdGVnb3J5PC9rZXk+CisJCQkJPGFycmF5PgorCQkJCQk8c3Ry
aW5nPkFNQ2F0ZWdvcnlVdGlsaXRpZXM8L3N0cmluZz4KKwkJCQk8L2FycmF5PgorCQkJCTxrZXk+
Q2xhc3MgTmFtZTwva2V5PgorCQkJCTxzdHJpbmc+UnVuSmF2YVNjcmlwdEFjdGlvbjwvc3RyaW5n
PgorCQkJCTxrZXk+SW5wdXRVVUlEPC9rZXk+CisJCQkJPHN0cmluZz4wQzA2NTVFRi03ODkzLTRB
NjEtQUREMC1CQTgwM0FGM0MyQ0Q8L3N0cmluZz4KKwkJCQk8a2V5PktleXdvcmRzPC9rZXk+CisJ
CQkJPGFycmF5PgorCQkJCQk8c3RyaW5nPlJ1bjwvc3RyaW5nPgorCQkJCQk8c3RyaW5nPkphdmFT
Y3JpcHQ8L3N0cmluZz4KKwkJCQk8L2FycmF5PgorCQkJCTxrZXk+T3V0cHV0VVVJRDwva2V5Pgor
CQkJCTxzdHJpbmc+NUJBRDgxNDgtMDdFMC00RkEyLUFBQTEtOTkwQTdCRTkyNkZDPC9zdHJpbmc+
CisJCQkJPGtleT5VVUlEPC9rZXk+CisJCQkJPHN0cmluZz4yNEJGRDZDQy03QTk2LTQyQzItODQ2
OS01RDgzRkE5MjFEQjI8L3N0cmluZz4KKwkJCQk8a2V5PlVubG9jYWxpemVkQXBwbGljYXRpb25z
PC9rZXk+CisJCQkJPGFycmF5PgorCQkJCQk8c3RyaW5nPkF1dG9tYXRvcjwvc3RyaW5nPgorCQkJ
CTwvYXJyYXk+CisJCQkJPGtleT5hcmd1bWVudHM8L2tleT4KKwkJCQk8ZGljdD4KKwkJCQkJPGtl
eT4wPC9rZXk+CisJCQkJCTxkaWN0PgorCQkJCQkJPGtleT5kZWZhdWx0IHZhbHVlPC9rZXk+CisJ
CQkJCQk8c3RyaW5nPmZ1bmN0aW9uIHJ1bihpbnB1dCwgcGFyYW1ldGVycykgeworCQorCS8vIFlv
dXIgc2NyaXB0IGdvZXMgaGVyZQorCisJcmV0dXJuIGlucHV0OworfTwvc3RyaW5nPgorCQkJCQkJ
PGtleT5uYW1lPC9rZXk+CisJCQkJCQk8c3RyaW5nPnNvdXJjZTwvc3RyaW5nPgorCQkJCQkJPGtl
eT5yZXF1aXJlZDwva2V5PgorCQkJCQkJPHN0cmluZz4wPC9zdHJpbmc+CisJCQkJCQk8a2V5PnR5
cGU8L2tleT4KKwkJCQkJCTxzdHJpbmc+MDwvc3RyaW5nPgorCQkJCQkJPGtleT51dWlkPC9rZXk+
CisJCQkJCQk8c3RyaW5nPjA8L3N0cmluZz4KKwkJCQkJPC9kaWN0PgorCQkJCTwvZGljdD4KKwkJ
CQk8a2V5PmlzVmlld1Zpc2libGU8L2tleT4KKwkJCQk8dHJ1ZS8+CisJCQkJPGtleT5sb2NhdGlv
bjwva2V5PgorCQkJCTxzdHJpbmc+NDgwLjUwMDAwMDozMTYuMDAwMDAwPC9zdHJpbmc+CisJCQkJ
PGtleT5uaWJQYXRoPC9rZXk+CisJCQkJPHN0cmluZz4vU3lzdGVtL0xpYnJhcnkvQXV0b21hdG9y
L1J1biBKYXZhU2NyaXB0LmFjdGlvbi9Db250ZW50cy9SZXNvdXJjZXMvQmFzZS5scHJvai9tYWlu
Lm5pYjwvc3RyaW5nPgorCQkJPC9kaWN0PgorCQkJPGtleT5pc1ZpZXdWaXNpYmxlPC9rZXk+CisJ
CQk8dHJ1ZS8+CisJCTwvZGljdD4KKwk8L2FycmF5PgorCTxrZXk+Y29ubmVjdG9yczwva2V5Pgor
CTxkaWN0Lz4KKwk8a2V5PndvcmtmbG93TWV0YURhdGE8L2tleT4KKwk8ZGljdD4KKwkJPGtleT5z
ZXJ2aWNlQXBwbGljYXRpb25CdW5kbGVJRDwva2V5PgorCQk8c3RyaW5nPmNvbS5hcHBsZS5kdC5Y
Y29kZTwvc3RyaW5nPgorCQk8a2V5PnNlcnZpY2VBcHBsaWNhdGlvblBhdGg8L2tleT4KKwkJPHN0
cmluZz4vQXBwbGljYXRpb25zL1hjb2RlLmFwcDwvc3RyaW5nPgorCQk8a2V5PnNlcnZpY2VJbnB1
dFR5cGVJZGVudGlmaWVyPC9rZXk+CisJCTxzdHJpbmc+Y29tLmFwcGxlLkF1dG9tYXRvci5ub3Ro
aW5nPC9zdHJpbmc+CisJCTxrZXk+c2VydmljZU91dHB1dFR5cGVJZGVudGlmaWVyPC9rZXk+CisJ
CTxzdHJpbmc+Y29tLmFwcGxlLkF1dG9tYXRvci5ub3RoaW5nPC9zdHJpbmc+CisJCTxrZXk+c2Vy
dmljZVByb2Nlc3Nlc0lucHV0PC9rZXk+CisJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CisJCTxrZXk+
d29ya2Zsb3dUeXBlSWRlbnRpZmllcjwva2V5PgorCQk8c3RyaW5nPmNvbS5hcHBsZS5BdXRvbWF0
b3Iuc2VydmljZXNNZW51PC9zdHJpbmc+CisJPC9kaWN0PgorPC9kaWN0PgorPC9wbGlzdD4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NvcHlQZXJtYWxpbmsvUkVBRE1FIGIvVG9vbHMvQ29weVBlcm1hbGlu
ay9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM1OGMxZjUyZDhiNDVlYjlkNDVkY2M5YTBhZmEzYjBjMTMw
YzMwNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0NvcHlQZXJtYWxpbmsvUkVBRE1FCkBAIC0w
LDAgKzEsMTggQEAKK0NvcHkgV2ViS2l0IFBlcm1hbGluayBpcyBhbiBYY29kZSBzZXJ2aWNlIHRo
YXQgY29waWVzIHRvIHRoZSBDbGlwYm9hcmQgYSBwZXJtYW5lbnQgaHlwZXJsaW5rIHRvIHRoZSBj
dXJyZW50bHkgc2VsZWN0ZWQgbGluZSBpbiB0aGUgYWN0aXZlIFhjb2RlIGRvY3VtZW50LgorCitU
byBpbnN0YWxsOgorCisxLiBEb3VibGUtY2xpY2sgIkNvcHkgV2ViS2l0IFBlcm1hbGluay53b3Jr
ZmxvdyIuCisyLiBJbiB0aGUgZGlhbG9nIHRoYXQgYXBwZWFycywgY2xpY2sgSW5zdGFsbCwgdGhl
biBjbGljayBEb25lLgorMy4gQ2hvb3NlIEFwcGxlIG1lbnUgPiBTeXN0ZW0gUHJlZmVyZW5jZXMs
IGNsaWNrIEtleWJvYXJkLCB0aGVuIGNsaWNrIFNob3J0Y3V0cy4KKzQuIFNlbGVjdCBTZXJ2aWNl
cyBvbiB0aGUgbGVmdCwgc2VsZWN0IENvcHkgV2ViS2l0IFBlcm1hbGluaywgY2xpY2sgaW4gdGhl
IEtleWJvYXJkIFNob3J0Y3V0IGZpZWxkLCB0aGVuIHByZXNzIHRoZSBrZXkgY29tYmluYXRpb24g
dGhhdCB5b3Ugd2FudCB0byB1c2UgYXMgdGhlIGtleWJvYXJkIHNob3J0Y3V0LgorCitGb3IgZXhh
bXBsZSwgcHJlc3MgQ29tbWFuZCwgU2hpZnQsIENvbnRyb2wsIGFuZCBDIGtleXMgYXQgdGhlIHNh
bWUgdGltZS4KKworNS4gRW5hYmxlICJDb3B5IFdlYktpdCBQZXJtYWxpbmsiIHVzaW5nIHRoZSBj
aGVja2JveC4KKworVGhlIENvcHkgV2ViS2l0IFBlcm1hbGluayBzZXJ2aWNlIHdpbGwgbm93IGFw
cGVhciB1bmRlciBYY29kZSBtZW51ID4gU2VydmljZXMuCisKKz09IFBlcm1hbGluayB0byBibGFt
ZSBoaXN0b3J5ID09CisKK0hvbGQgZG93biB0aGUgT3B0aW9uIGtleSB3aGVuIHJ1bm5pbmcgdGhl
IENvcHkgV2ViS2l0IFBlcm1hbGluayBzZXJ2aWNlIHRvIGdlbmVyYXRlIGEgcGVybWFsaW5rIHRv
IHRoZSBzZWxlY3RlZCBsaW5lIGluIHRoZSBibGFtZSBoaXN0b3J5IGZvciB0aGUgZmlsZS4K
</data>
<flag name="review"
          id="328735"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>