Commits

Toby Inkster committed ac77f10

release 1.000

Comments (0)

Files changed (26)

CGI-Auth-FOAF_SSL-1.000.tar.gz

Binary file added.
 Bug tracker:  <http://rt.cpan.org/Dist/Display.html?Queue=CGI-Auth-FOAF_SSL>
 Maintainer:   Toby Inkster <mailto:tobyink@cpan.org>
 
-1.00_04 [2010-04-01]
- - (Removal) No longer supports subjectAltName pointing at a
-   foaf:OnlineAccount. subjectAltName is always assumed to point to a
-   foaf:Agent.
-
 1.00_03 [2010-03-26]
+ - Rename new_smiple to new_unauthenticated and document its usage.
+ - Rename verify_certificate_by_XXX functions to authenticate_by_XXX, make
+   them share common code, document their usage.
  - Use Math::BigInt instead of string comparison for comparing big
    hexadecimal numbers.
- - Rename verify_certificate_by_XXX functions to authenticate_by_XXX, make
-   them share common code, document their usage.
- - Rename new_smiple to new_unauthenticated and document its usage.
 
 1.00_02 [2010-03-21]
  - (Update) The rsa and cert vocabularies have been changed recently.
 
 1.00_00 [2010-02-05]
 
+1.000 [2010-07-25]
+ - Constructor returns an object where "->is_secure" is false rather than
+   undef in the case of a certificate with no useful subjectAltName.
+ - (Removal) No longer supports subjectAltName pointing at a
+   foaf:OnlineAccount. subjectAltName is always assumed to point to a
+   foaf:Agent.
+
 0.52 [2009-12-16]
 
 0.51 [2009-12-15]
 
 #############################################################
 
-my:v_0_01
+my:v_0-01
 
 	a               :Version ;
 	dc:issued       "2009-02-05"^^xsd:date ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.01.tar.gz> ;
 	rdfs:label      "First release"@en .
 
-my:v_0_02
+my:v_0-02
 
 	a               :Version ;
 	dc:issued       "2009-02-19"^^xsd:date ;
 	:revision       "0.02"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.02.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_0_01 ;
+		dcs:versus my:v_0-01 ;
 		dc:item
 			[ rdfs:label "Changed API."@en ] ,
 			[ rdfs:label "Allow subjectAltName to point to a foaf:OnlineAccount."@en ; a dcs:Addition ]
 		] .
 
-my:v_0_03
+my:v_0-03
 
 	a               :Version ;
 	dc:issued       "2009-03-01"^^xsd:date ;
 	:revision       "0.03"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.03.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_0_02 ;
+		dcs:versus my:v_0-02 ;
 		dc:item
 			[ rdfs:label "Fixed some bugs with new_from_cgi."@en ; a dcs:Bugfix ] ,
 			[ rdfs:label "Documentation improvements."@en ]
 		] .
 
-my:v_0_04
+my:v_0-04
 
 	a               :Version ;
 	dc:issued       "2009-03-01"^^xsd:date ;
 	:revision       "0.04"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.04.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_0_03 ;
+		dcs:versus my:v_0-03 ;
 		dc:item
 			[ rdfs:label "foaf:Agent-related fix."@en ; a dcs:Bugfix ] ,
 			[ rdfs:label "foaf:OnlineAccount-related security fix."@en ; a dcs:Bugfix ]
 		] .
 
-my:v_0_05
+my:v_0-05
 
 	a               :Version ;
 	dc:issued       "2009-03-26"^^xsd:date ;
 	:revision       "0.05"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.05.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_0_05 ;
+		dcs:versus my:v_0-05 ;
 		dc:item
 			[ rdfs:label "No longer require certs to include Netscape extensions."@en ] ,
 			[ rdfs:label "Support for consuming RDFa."@en ; a dcs:Addition ]
 		] .
 
-my:v_0_50
+my:v_0-50
 
 	a               :Version ;
 	dc:issued       "2009-12-14"^^xsd:date ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.50.tar.gz> ;
 	rdfs:label      "Trine Edition"@en ;
 	dcs:changeset [
-		dcs:versus my:v_0_05 ;
+		dcs:versus my:v_0-05 ;
 		dc:item
 			[ rdfs:label "Switch from RDF::Redland to RDF::Trine."@en ] ,
 			[ rdfs:label "Support Fingerpoint as fallback for URIless certificates."@en ; a dcs:Addition ] ,
 			[ rdfs:label "New build system using Module::Install."@en ; a dcs:Update ] 
 		] .
 
-my:v_0_51
+my:v_0-51
 
 	a               :Version ;
 	dc:issued       "2009-12-15"^^xsd:date ;
 	:revision       "0.51"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.51.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_0_50 ;
+		dcs:versus my:v_0-50 ;
 		dc:item
 			[ rdfs:label "Use WWW::Finger instead of its subclass WWW::Finger::Fingerpoint."@en ] ,
 			[ rdfs:label "Fix package signature."@en ] 
 		] .
 
-my:v_0_52
+my:v_0-52
 
 	a               :Version ;
 	dc:issued       "2009-12-16"^^xsd:date ;
 	:revision       "0.52"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.52.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_0_51 ;
+		dcs:versus my:v_0-51 ;
 		dc:item
 			[ rdfs:label "Support new foaf:account property."@en ; a dcs:Update ] ,
 			[ rdfs:label "Correct for mismatched hex string lengths by adding leading zeros to shorter string."@en ; a dcs:Bugfix ] 
 		] .
 	
-my:v_1_00_00
+my:v_1-00_00
 
 	a               :Version ;
 	dc:issued       "2010-02-05"^^xsd:date ;
 	:revision       "1.00_00"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_00.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_0_52 ;
+		dcs:versus my:v_0-52 ;
 		dc:item
 			[ rdfs:label "use RDF::TrineShortcuts"@en ; a dcs:Update ] ,
 			[ rdfs:label "Much better documentation."@en ] ,
 			[ rdfs:label "Allow new_from_cgi to be called with no arguments."@en ]
 		] .
 
-my:v_1_00_01
+my:v_1-00_01
 	a               :Version ;
 	dc:issued       "2010-02-10"^^xsd:date ;
 	:revision       "1.00_01"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_01.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_1_00_00 ;
+		dcs:versus my:v_1-00_00 ;
 		dcs:item
 			[ rdfs:label "Documentation improvements"@en ]
 		] .
 
-my:v_1_00_02
+my:v_1-00_02
 	a               :Version ;
 	dc:issued       "2010-03-21"^^xsd:date ;
 	:revision       "1.00_02"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_02.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_1_00_01 ;
+		dcs:versus my:v_1-00_01 ;
 		dcs:item
 			[ rdfs:label "The rsa and cert vocabularies have been changed recently."@en ; a dcs:Update ]
 		] .
 
-my:v_1_00_03
+my:v_1-00_03
 	a               :Version ;
 	dc:issued       "2010-03-26"^^xsd:date ;
 	:revision       "1.00_03"^^xsd:string ;
 	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_03.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_1_00_02 ;
+		dcs:versus my:v_1-00_02 ;
 		dcs:item
 			[ rdfs:label "Rename new_smiple to new_unauthenticated and document its usage."@en ] ,
 			[ rdfs:label "Rename verify_certificate_by_XXX functions to authenticate_by_XXX, make them share common code, document their usage."@en ] ,
 			[ rdfs:label "Use Math::BigInt instead of string comparison for comparing big hexadecimal numbers."@en ]
 		] .
 
-my:v_1_00_04
+my:v_1-000
 	a               :Version ;
-	dc:issued       "2010-04-01"^^xsd:date ;
-	:revision       "1.00_04"^^xsd:string ;
-	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_04.tar.gz> ;
+	dc:issued       "2010-07-25"^^xsd:date ;
+	:revision       "1.000"^^xsd:string ;
+	:file-release   <http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.000.tar.gz> ;
 	dcs:changeset [
-		dcs:versus my:v_1_00_03 ;
+		dcs:versus my:v_1-00_03 ;
 		dcs:item
-			[ rdfs:label "No longer supports subjectAltName pointing at a foaf:OnlineAccount. subjectAltName is always assumed to point to a foaf:Agent."@en ; a dcs:Removal ]
+			[ rdfs:label "No longer supports subjectAltName pointing at a foaf:OnlineAccount. subjectAltName is always assumed to point to a foaf:Agent."@en ; a dcs:Removal ] ,
+			[ rdfs:label "Constructor returns an object where \"->is_secure\" is false rather than undef in the case of a certificate with no useful subjectAltName."@en ]
 		] .
 
 #############################################################
 
 	a               :Project ;
 	:name           "CGI-Auth-FOAF_SSL" ;
-	:shortdesc      "authentication using FOAF+SSL"@en ;
+	:shortdesc      "authentication using FOAF+SSL (WebID)"@en ;
 	:programming-language  "Perl" ;
 	:homepage       <http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/> ;
 	:download-page  <http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/> ;
 	:tester         toby:i ;
 	:created        "2009-02-05"^^xsd:date ;
 	:license        <http://dev.perl.org/licenses/> ;
-	:release        my:v_0_01 , my:v_0_02 , my:v_0_03 , my:v_0_04 , my:v_0_05 ,
-	                my:v_0_50 , my:v_0_51 , my:v_0_52 ,
-	                my:v_1_00_00 , my:v_1_00_01 , my:v_1_00_02 , my:v_1_00_03 , my:v_1_00_04 .
+	:release        my:v_0-01 , my:v_0-02 , my:v_0-03 , my:v_0-04 , my:v_0-05 ,
+	                my:v_0-50 , my:v_0-51 , my:v_0-52 ,
+	                my:v_1-00_00 , my:v_1-00_01 , my:v_1-00_02 , my:v_1-00_03 , my:v_1-00_04 ,
+	                my:v_1-000 .
 
 #############################################################
 
 <?xml version="1.0" encoding="utf-8"?>
-<rdf:RDF
-   xmlns:dc="http://purl.org/dc/terms/"
-   xmlns:dcs="http://ontologi.es/doap-changeset#"
-   xmlns:foaf="http://xmlns.com/foaf/0.1/"
-   xmlns:my="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
-   xmlns:toby="http://tobyinkster.co.uk/#"
-   xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
-   xmlns="http://usefulinc.com/ns/doap#">
-  <rdf:Description rdf:about="file:///home/tai/src/perlmods/CGI-Auth-FOAF_SSL/Changes.ttl">
-    <dc:creator rdf:resource="http://tobyinkster.co.uk/#i"/>
-    <dc:description xml:lang="en">Revision history for Perl extension CGI::Auth::FOAF_SSL.</dc:description>
-    <dc:subject rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#project"/>
-    <dc:title>Changes</dc:title>
-  </rdf:Description>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_01">
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-02-05</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.01.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.01</revision>
-    <rdfs:label xml:lang="en">First release</rdfs:label>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_02">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_01"/>
-        <dc:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Changed API.</rdfs:label>
-          </rdf:Description>
-        </dc:item>
-        <dc:item>
-          <dcs:Addition>
-            <rdfs:label xml:lang="en">Allow subjectAltName to point to a foaf:OnlineAccount.</rdfs:label>
-          </dcs:Addition>
-        </dc:item>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-02-19</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.02.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.02</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_03">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_02"/>
-        <dc:item>
-          <dcs:Bugfix>
-            <rdfs:label xml:lang="en">Fixed some bugs with new_from_cgi.</rdfs:label>
-          </dcs:Bugfix>
-        </dc:item>
-        <dc:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Documentation improvements.</rdfs:label>
-          </rdf:Description>
-        </dc:item>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-03-01</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.03.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.03</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_04">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_03"/>
-        <dc:item>
-          <dcs:Bugfix>
-            <rdfs:label xml:lang="en">foaf:Agent-related fix.</rdfs:label>
-          </dcs:Bugfix>
-        </dc:item>
-        <dc:item>
-          <dcs:Bugfix>
-            <rdfs:label xml:lang="en">foaf:OnlineAccount-related security fix.</rdfs:label>
-          </dcs:Bugfix>
-        </dc:item>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-03-01</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.04.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.04</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_05">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_05"/>
-        <dc:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">No longer require certs to include Netscape extensions.</rdfs:label>
-          </rdf:Description>
-        </dc:item>
-        <dc:item>
-          <dcs:Addition>
-            <rdfs:label xml:lang="en">Support for consuming RDFa.</rdfs:label>
-          </dcs:Addition>
-        </dc:item>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-03-26</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.05.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.05</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_50">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_05"/>
-        <dc:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Switch from RDF::Redland to RDF::Trine.</rdfs:label>
-          </rdf:Description>
-        </dc:item>
-        <dc:item>
-          <dcs:Addition>
-            <rdfs:label xml:lang="en">Support Fingerpoint as fallback for URIless certificates.</rdfs:label>
-          </dcs:Addition>
-        </dc:item>
-        <dc:item>
-          <dcs:Addition>
-            <rdfs:label xml:lang="en">Support multiple URIs in subjectAltName.</rdfs:label>
-          </dcs:Addition>
-        </dc:item>
-        <dc:item>
-          <dcs:Addition>
-            <rdfs:label xml:lang="en">Session caching with cookies for speedup.</rdfs:label>
-          </dcs:Addition>
-        </dc:item>
-        <dc:item>
-          <dcs:Update>
-            <rdfs:label xml:lang="en">New build system using Module::Install.</rdfs:label>
-          </dcs:Update>
-        </dc:item>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-12-14</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.50.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.50</revision>
-    <rdfs:label xml:lang="en">Trine Edition</rdfs:label>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_51">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_50"/>
-        <dc:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Use WWW::Finger instead of its subclass WWW::Finger::Fingerpoint.</rdfs:label>
-          </rdf:Description>
-        </dc:item>
-        <dc:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Fix package signature.</rdfs:label>
-          </rdf:Description>
-        </dc:item>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-12-15</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.51.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.51</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_52">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_51"/>
-        <dc:item>
-          <dcs:Update>
-            <rdfs:label xml:lang="en">Support new foaf:account property.</rdfs:label>
-          </dcs:Update>
-        </dc:item>
-        <dc:item>
-          <dcs:Bugfix>
-            <rdfs:label xml:lang="en">Correct for mismatched hex string lengths by adding leading zeros to shorter string.</rdfs:label>
-          </dcs:Bugfix>
-        </dc:item>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-12-16</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.52.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.52</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_00">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_52"/>
-        <dc:item>
-          <dcs:Update>
-            <rdfs:label xml:lang="en">use RDF::TrineShortcuts</rdfs:label>
-          </dcs:Update>
-        </dc:item>
-        <dc:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Much better documentation.</rdfs:label>
-          </rdf:Description>
-        </dc:item>
-        <dc:item>
-          <dcs:Update>
-            <rdfs:label xml:lang="en">Use my swanky DOAP-powered build system.</rdfs:label>
-          </dcs:Update>
-        </dc:item>
-        <dc:item>
-          <dcs:Addition>
-            <rdfs:label>service_homepage method for CGI::Auth::FOAF_SSL::OnlineAccount objects.</rdfs:label>
-          </dcs:Addition>
-        </dc:item>
-        <dc:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Allow new_from_cgi to be called with no arguments.</rdfs:label>
-          </rdf:Description>
-        </dc:item>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-02-05</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_00.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.00_00</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_01">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Documentation improvements</rdfs:label>
-          </rdf:Description>
-        </dcs:item>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_00"/>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-02-10</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_01.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.00_01</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_02">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:item>
-          <dcs:Update>
-            <rdfs:label xml:lang="en">The rsa and cert vocabularies have been changed recently.</rdfs:label>
-          </dcs:Update>
-        </dcs:item>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_01"/>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-03-21</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_02.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.00_02</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_03">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Rename new_smiple to new_unauthenticated and document its usage.</rdfs:label>
-          </rdf:Description>
-        </dcs:item>
-        <dcs:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Rename verify_certificate_by_XXX functions to authenticate_by_XXX, make them share common code, document their usage.</rdfs:label>
-          </rdf:Description>
-        </dcs:item>
-        <dcs:item>
-          <rdf:Description>
-            <rdfs:label xml:lang="en">Use Math::BigInt instead of string comparison for comparing big hexadecimal numbers.</rdfs:label>
-          </rdf:Description>
-        </dcs:item>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_02"/>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-03-26</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_03.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.00_03</revision>
-  </Version>
-  <Version rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_04">
-    <dcs:changeset>
-      <rdf:Description>
-        <dcs:item>
-          <dcs:Removal>
-            <rdfs:label xml:lang="en">No longer supports subjectAltName pointing at a foaf:OnlineAccount. subjectAltName is always assumed to point to a foaf:Agent.</rdfs:label>
-          </dcs:Removal>
-        </dcs:item>
-        <dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_03"/>
-      </rdf:Description>
-    </dcs:changeset>
-    <dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-04-01</dc:issued>
-    <file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_04.tar.gz"/>
-    <revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.00_04</revision>
-  </Version>
-  <Project rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#project">
-    <bug-database rdf:resource="http://rt.cpan.org/Dist/Display.html?Queue=CGI-Auth-FOAF_SSL"/>
-    <created rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-02-05</created>
-    <developer rdf:resource="http://tobyinkster.co.uk/#i"/>
-    <documenter rdf:resource="http://tobyinkster.co.uk/#i"/>
-    <download-page rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/"/>
-    <homepage rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/"/>
-    <license rdf:resource="http://dev.perl.org/licenses/"/>
-    <maintainer rdf:resource="http://tobyinkster.co.uk/#i"/>
-    <name>CGI-Auth-FOAF_SSL</name>
-    <programming-language>Perl</programming-language>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_01"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_02"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_03"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_04"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_05"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_50"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_51"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0_52"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_00"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_01"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_02"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_03"/>
-    <release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1_00_04"/>
-    <repository>
-      <SVNRepository>
-        <browse rdf:resource="http://goddamn.co.uk/viewvc/perlmods/CGI-Auth-FOAF_SSL/"/>
-      </SVNRepository>
-    </repository>
-    <shortdesc xml:lang="en">authentication using FOAF+SSL</shortdesc>
-    <tester rdf:resource="http://tobyinkster.co.uk/#i"/>
-  </Project>
-  <foaf:Person rdf:about="http://tobyinkster.co.uk/#i">
-    <foaf:homepage rdf:resource="http://tobyinkster.co.uk/"/>
-    <foaf:mbox rdf:resource="mailto:tobyink@cpan.org"/>
-    <foaf:name>Toby Inkster</foaf:name>
-    <foaf:page rdf:resource="http://search.cpan.org/~tobyink/"/>
-  </foaf:Person>
+<rdf:RDF xmlns:dbug="http://ontologi.es/doap-bugs#" xmlns:dc="http://purl.org/dc/terms/" xmlns:dcs="http://ontologi.es/doap-changeset#" xmlns:doap="http://usefulinc.com/ns/doap#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r0">
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-01"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r1"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r2"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r1">
+	<rdfs:label xml:lang="en">Changed API.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r10">
+	<rdfs:label xml:lang="en">No longer require certs to include Netscape extensions.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r11">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Addition"/>
+	<rdfs:label xml:lang="en">Support for consuming RDFa.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r12">
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-05"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r13"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r14"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r15"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r16"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r17"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r13">
+	<rdfs:label xml:lang="en">Switch from RDF::Redland to RDF::Trine.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r14">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Addition"/>
+	<rdfs:label xml:lang="en">Support Fingerpoint as fallback for URIless certificates.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r15">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Addition"/>
+	<rdfs:label xml:lang="en">Support multiple URIs in subjectAltName.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r16">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Addition"/>
+	<rdfs:label xml:lang="en">Session caching with cookies for speedup.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r17">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Update"/>
+	<rdfs:label xml:lang="en">New build system using Module::Install.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r18">
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-50"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r19"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r20"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r19">
+	<rdfs:label xml:lang="en">Use WWW::Finger instead of its subclass WWW::Finger::Fingerpoint.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r2">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Addition"/>
+	<rdfs:label xml:lang="en">Allow subjectAltName to point to a foaf:OnlineAccount.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r20">
+	<rdfs:label xml:lang="en">Fix package signature.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r21">
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-51"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r22"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r23"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r22">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Update"/>
+	<rdfs:label xml:lang="en">Support new foaf:account property.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r23">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Bugfix"/>
+	<rdfs:label xml:lang="en">Correct for mismatched hex string lengths by adding leading zeros to shorter string.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r24">
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-52"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r25"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r26"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r27"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r28"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r29"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r25">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Update"/>
+	<rdfs:label xml:lang="en">use RDF::TrineShortcuts</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r26">
+	<rdfs:label xml:lang="en">Much better documentation.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r27">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Update"/>
+	<rdfs:label xml:lang="en">Use my swanky DOAP-powered build system.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r28">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Addition"/>
+	<rdfs:label>service_homepage method for CGI::Auth::FOAF_SSL::OnlineAccount objects.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r29">
+	<rdfs:label xml:lang="en">Allow new_from_cgi to be called with no arguments.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r3">
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-02"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r4"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r5"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r30">
+	<dcs:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r31"/>
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_00"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r31">
+	<rdfs:label xml:lang="en">Documentation improvements</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r32">
+	<dcs:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r33"/>
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_01"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r33">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Update"/>
+	<rdfs:label xml:lang="en">The rsa and cert vocabularies have been changed recently.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r34">
+	<dcs:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r35"/>
+	<dcs:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r36"/>
+	<dcs:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r37"/>
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_02"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r35">
+	<rdfs:label xml:lang="en">Rename new_smiple to new_unauthenticated and document its usage.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r36">
+	<rdfs:label xml:lang="en">Rename verify_certificate_by_XXX functions to authenticate_by_XXX, make them share common code, document their usage.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r37">
+	<rdfs:label xml:lang="en">Use Math::BigInt instead of string comparison for comparing big hexadecimal numbers.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r38">
+	<dcs:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r39"/>
+	<dcs:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r40"/>
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_03"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r39">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Removal"/>
+	<rdfs:label xml:lang="en">No longer supports subjectAltName pointing at a foaf:OnlineAccount. subjectAltName is always assumed to point to a foaf:Agent.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r4">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Bugfix"/>
+	<rdfs:label xml:lang="en">Fixed some bugs with new_from_cgi.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r40">
+	<rdfs:label xml:lang="en">Constructor returns an object where "->is_secure" is false rather than undef in the case of a certificate with no useful subjectAltName.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r41">
+	<doap:browse rdf:resource="http://goddamn.co.uk/viewvc/perlmods/CGI-Auth-FOAF_SSL/"/>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#SVNRepository"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r5">
+	<rdfs:label xml:lang="en">Documentation improvements.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r6">
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-03"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r7"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r8"/>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r7">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Bugfix"/>
+	<rdfs:label xml:lang="en">foaf:Agent-related fix.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r8">
+	<rdf:type rdf:resource="http://ontologi.es/doap-changeset#Bugfix"/>
+	<rdfs:label xml:lang="en">foaf:OnlineAccount-related security fix.</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r9">
+	<dcs:versus rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-05"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r10"/>
+	<dc:item rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r11"/>
+</rdf:Description>
+<rdf:Description rdf:about="file:///home/tai/src/perlmods/CGI-Auth-FOAF_SSL/Changes.ttl">
+	<dc:creator rdf:resource="http://tobyinkster.co.uk/#i"/>
+	<dc:description xml:lang="en">Revision history for Perl extension CGI::Auth::FOAF_SSL.</dc:description>
+	<dc:subject rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#project"/>
+	<dc:title>Changes</dc:title>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#project">
+	<doap:bug-database rdf:resource="http://rt.cpan.org/Dist/Display.html?Queue=CGI-Auth-FOAF_SSL"/>
+	<doap:created rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-02-05</doap:created>
+	<doap:developer rdf:resource="http://tobyinkster.co.uk/#i"/>
+	<doap:documenter rdf:resource="http://tobyinkster.co.uk/#i"/>
+	<doap:download-page rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/"/>
+	<doap:homepage rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/"/>
+	<doap:license rdf:resource="http://dev.perl.org/licenses/"/>
+	<doap:maintainer rdf:resource="http://tobyinkster.co.uk/#i"/>
+	<doap:name>CGI-Auth-FOAF_SSL</doap:name>
+	<doap:programming-language>Perl</doap:programming-language>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-01"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-02"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-03"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-04"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-05"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-50"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-51"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-52"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-000"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_00"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_01"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_02"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_03"/>
+	<doap:release rdf:resource="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_04"/>
+	<doap:repository rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r41"/>
+	<doap:shortdesc xml:lang="en">authentication using FOAF+SSL (WebID)</doap:shortdesc>
+	<doap:tester rdf:resource="http://tobyinkster.co.uk/#i"/>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Project"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-01">
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-02-05</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.01.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.01</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+	<rdfs:label xml:lang="en">First release</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-02">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r0"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-02-19</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.02.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.02</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-03">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r3"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-03-01</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.03.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.03</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-04">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r6"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-03-01</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.04.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.04</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-05">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r9"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-03-26</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.05.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.05</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-50">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r12"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-12-14</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.50.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.50</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+	<rdfs:label xml:lang="en">Trine Edition</rdfs:label>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-51">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r18"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-12-15</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.51.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.51</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_0-52">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r21"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2009-12-16</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-0.52.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">0.52</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-000">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r38"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-07-25</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.000.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.000</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_00">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r24"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-02-05</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_00.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.00_00</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_01">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r30"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-02-10</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_01.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.00_01</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_02">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r32"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-03-21</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_02.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.00_02</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/#v_1-00_03">
+	<dcs:changeset rdf:nodeID="rD21D821C97F311DF90C683B642DB9061r34"/>
+	<dc:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2010-03-26</dc:issued>
+	<doap:file-release rdf:resource="http://backpan.cpan.org/authors/id/T/TO/TOBYINK/CGI-Auth-FOAF_SSL-1.00_03.tar.gz"/>
+	<doap:revision rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1.00_03</doap:revision>
+	<rdf:type rdf:resource="http://usefulinc.com/ns/doap#Version"/>
+</rdf:Description>
+<rdf:Description rdf:about="http://tobyinkster.co.uk/#i">
+	<rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
+	<foaf:homepage rdf:resource="http://tobyinkster.co.uk/"/>
+	<foaf:mbox rdf:resource="mailto:tobyink@cpan.org"/>
+	<foaf:name>Toby Inkster</foaf:name>
+	<foaf:page rdf:resource="http://search.cpan.org/~tobyink/"/>
+</rdf:Description>
 </rdf:RDF>
 ---
-abstract: 'authentication using FOAF+SSL'
+abstract: 'authentication using FOAF+SSL (WebID)'
 author:
   - 'Toby Inkster <tobyink@cpan.org>'
 build_requires:
 configure_requires:
   ExtUtils::MakeMaker: 6.42
 distribution_type: module
-generated_by: 'Module::Install version 0.91'
+generated_by: 'Module::Install version 0.95'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
   IPC::Open2: 0
   LWP::UserAgent: 0
   Math::BigInt: 0
-  RDF::TrineShortcuts: 0.05
-  WWW::Finger: 0.08
+  RDF::TrineShortcuts: 0.100
+  WWW::Finger: 0.100
   perl: 5.8.0
 resources:
   bugtracker: http://rt.cpan.org/Dist/Display.html?Queue=CGI-Auth-FOAF_SSL
   homepage: http://search.cpan.org/dist/CGI-Auth-FOAF_SSL/
   license: http://dev.perl.org/licenses/
   repository: http://goddamn.co.uk/viewvc/perlmods/CGI-Auth-FOAF_SSL/
-version: 1.00_03
+version: 1.000
 requires            'IPC::Open2'         => 0;
 requires            'LWP::UserAgent'     => 0;
 requires            'Math::BigInt'       => 0;
-requires            'RDF::TrineShortcuts'=> '0.05';
-requires            'WWW::Finger'        => '0.08';
+requires            'RDF::TrineShortcuts'=> '0.100';
+requires            'WWW::Finger'        => '0.100';
 
 # install_script 'fingerw';
 
 NAME
-    CGI::Auth::FOAF_SSL - authentication using FOAF+SSL
+    CGI::Auth::FOAF_SSL - authentication using FOAF+SSL (WebID)
 
 SYNOPSIS
       use CGI qw(:all);
       }
 
 VERSION
-    1.00_03
+    1.000
 
 DESCRIPTION
-    FOAF+SSL is a simple authentication scheme described at
+    FOAF+SSL (a.k.a. WebID) is a simple authentication scheme described at
     <http://esw.w3.org/topic/foaf+ssl>. This module provides FOAF+SSL
     authentication for CGI scripts written in Perl.
 
         case where $trine_node has an unrecognised datatype or is not a
         literal.
 
-          $bi = $auth->make_bigint_from_node(
+         $bi = $auth->make_bigint_from_node(
             $trine_node, fallback=>$other_node, fallback_type=>'hex');
 
         The authenticate_by_XXX methods use this.
 -----END CERTIFICATE-----';
 
 my $auth = CGI::Auth::FOAF_SSL->new($bblfish);
-print Dumper($auth);
+#print Dumper($auth);
 
 #print $auth->account->identity . "\n";
 #print $auth->account->name . "\n";

inc/Module/AutoInstall.pm

-#line 1
-package Module::AutoInstall;
-
-use strict;
-use Cwd                 ();
-use ExtUtils::MakeMaker ();
-
-use vars qw{$VERSION};
-BEGIN {
-	$VERSION = '1.03';
-}
-
-# special map on pre-defined feature sets
-my %FeatureMap = (
-    ''      => 'Core Features',    # XXX: deprecated
-    '-core' => 'Core Features',
-);
-
-# various lexical flags
-my ( @Missing, @Existing,  %DisabledTests, $UnderCPAN,     $HasCPANPLUS );
-my (
-    $Config, $CheckOnly, $SkipInstall, $AcceptDefault, $TestOnly, $AllDeps
-);
-my ( $PostambleActions, $PostambleUsed );
-
-# See if it's a testing or non-interactive session
-_accept_default( $ENV{AUTOMATED_TESTING} or ! -t STDIN ); 
-_init();
-
-sub _accept_default {
-    $AcceptDefault = shift;
-}
-
-sub missing_modules {
-    return @Missing;
-}
-
-sub do_install {
-    __PACKAGE__->install(
-        [
-            $Config
-            ? ( UNIVERSAL::isa( $Config, 'HASH' ) ? %{$Config} : @{$Config} )
-            : ()
-        ],
-        @Missing,
-    );
-}
-
-# initialize various flags, and/or perform install
-sub _init {
-    foreach my $arg (
-        @ARGV,
-        split(
-            /[\s\t]+/,
-            $ENV{PERL_AUTOINSTALL} || $ENV{PERL_EXTUTILS_AUTOINSTALL} || ''
-        )
-      )
-    {
-        if ( $arg =~ /^--config=(.*)$/ ) {
-            $Config = [ split( ',', $1 ) ];
-        }
-        elsif ( $arg =~ /^--installdeps=(.*)$/ ) {
-            __PACKAGE__->install( $Config, @Missing = split( /,/, $1 ) );
-            exit 0;
-        }
-        elsif ( $arg =~ /^--default(?:deps)?$/ ) {
-            $AcceptDefault = 1;
-        }
-        elsif ( $arg =~ /^--check(?:deps)?$/ ) {
-            $CheckOnly = 1;
-        }
-        elsif ( $arg =~ /^--skip(?:deps)?$/ ) {
-            $SkipInstall = 1;
-        }
-        elsif ( $arg =~ /^--test(?:only)?$/ ) {
-            $TestOnly = 1;
-        }
-        elsif ( $arg =~ /^--all(?:deps)?$/ ) {
-            $AllDeps = 1;
-        }
-    }
-}
-
-# overrides MakeMaker's prompt() to automatically accept the default choice
-sub _prompt {
-    goto &ExtUtils::MakeMaker::prompt unless $AcceptDefault;
-
-    my ( $prompt, $default ) = @_;
-    my $y = ( $default =~ /^[Yy]/ );
-
-    print $prompt, ' [', ( $y ? 'Y' : 'y' ), '/', ( $y ? 'n' : 'N' ), '] ';
-    print "$default\n";
-    return $default;
-}
-
-# the workhorse
-sub import {
-    my $class = shift;
-    my @args  = @_ or return;
-    my $core_all;
-
-    print "*** $class version " . $class->VERSION . "\n";
-    print "*** Checking for Perl dependencies...\n";
-
-    my $cwd = Cwd::cwd();
-
-    $Config = [];
-
-    my $maxlen = length(
-        (
-            sort   { length($b) <=> length($a) }
-              grep { /^[^\-]/ }
-              map  {
-                ref($_)
-                  ? ( ( ref($_) eq 'HASH' ) ? keys(%$_) : @{$_} )
-                  : ''
-              }
-              map { +{@args}->{$_} }
-              grep { /^[^\-]/ or /^-core$/i } keys %{ +{@args} }
-        )[0]
-    );
-
-    # We want to know if we're under CPAN early to avoid prompting, but
-    # if we aren't going to try and install anything anyway then skip the
-    # check entirely since we don't want to have to load (and configure)
-    # an old CPAN just for a cosmetic message
-
-    $UnderCPAN = _check_lock(1) unless $SkipInstall;
-
-    while ( my ( $feature, $modules ) = splice( @args, 0, 2 ) ) {
-        my ( @required, @tests, @skiptests );
-        my $default  = 1;
-        my $conflict = 0;
-
-        if ( $feature =~ m/^-(\w+)$/ ) {
-            my $option = lc($1);
-
-            # check for a newer version of myself
-            _update_to( $modules, @_ ) and return if $option eq 'version';
-
-            # sets CPAN configuration options
-            $Config = $modules if $option eq 'config';
-
-            # promote every features to core status
-            $core_all = ( $modules =~ /^all$/i ) and next
-              if $option eq 'core';
-
-            next unless $option eq 'core';
-        }
-
-        print "[" . ( $FeatureMap{ lc($feature) } || $feature ) . "]\n";
-
-        $modules = [ %{$modules} ] if UNIVERSAL::isa( $modules, 'HASH' );
-
-        unshift @$modules, -default => &{ shift(@$modules) }
-          if ( ref( $modules->[0] ) eq 'CODE' );    # XXX: bugward combatability
-
-        while ( my ( $mod, $arg ) = splice( @$modules, 0, 2 ) ) {
-            if ( $mod =~ m/^-(\w+)$/ ) {
-                my $option = lc($1);
-
-                $default   = $arg    if ( $option eq 'default' );
-                $conflict  = $arg    if ( $option eq 'conflict' );
-                @tests     = @{$arg} if ( $option eq 'tests' );
-                @skiptests = @{$arg} if ( $option eq 'skiptests' );
-
-                next;
-            }
-
-            printf( "- %-${maxlen}s ...", $mod );
-
-            if ( $arg and $arg =~ /^\D/ ) {
-                unshift @$modules, $arg;
-                $arg = 0;
-            }
-
-            # XXX: check for conflicts and uninstalls(!) them.
-            my $cur = _load($mod);
-            if (_version_cmp ($cur, $arg) >= 0)
-            {
-                print "loaded. ($cur" . ( $arg ? " >= $arg" : '' ) . ")\n";
-                push @Existing, $mod => $arg;
-                $DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
-            }
-            else {
-                if (not defined $cur)   # indeed missing
-                {
-                    print "missing." . ( $arg ? " (would need $arg)" : '' ) . "\n";
-                }
-                else
-                {
-                    # no need to check $arg as _version_cmp ($cur, undef) would satisfy >= above
-                    print "too old. ($cur < $arg)\n";
-                }
-
-                push @required, $mod => $arg;
-            }
-        }
-
-        next unless @required;
-
-        my $mandatory = ( $feature eq '-core' or $core_all );
-
-        if (
-            !$SkipInstall
-            and (
-                $CheckOnly
-                or ($mandatory and $UnderCPAN)
-                or $AllDeps
-                or _prompt(
-                    qq{==> Auto-install the }
-                      . ( @required / 2 )
-                      . ( $mandatory ? ' mandatory' : ' optional' )
-                      . qq{ module(s) from CPAN?},
-                    $default ? 'y' : 'n',
-                ) =~ /^[Yy]/
-            )
-          )
-        {
-            push( @Missing, @required );
-            $DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
-        }
-
-        elsif ( !$SkipInstall
-            and $default
-            and $mandatory
-            and
-            _prompt( qq{==> The module(s) are mandatory! Really skip?}, 'n', )
-            =~ /^[Nn]/ )
-        {
-            push( @Missing, @required );
-            $DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
-        }
-
-        else {
-            $DisabledTests{$_} = 1 for map { glob($_) } @tests;
-        }
-    }
-
-    if ( @Missing and not( $CheckOnly or $UnderCPAN ) ) {
-        require Config;
-        print
-"*** Dependencies will be installed the next time you type '$Config::Config{make}'.\n";
-
-        # make an educated guess of whether we'll need root permission.
-        print "    (You may need to do that as the 'root' user.)\n"
-          if eval '$>';
-    }
-    print "*** $class configuration finished.\n";
-
-    chdir $cwd;
-
-    # import to main::
-    no strict 'refs';
-    *{'main::WriteMakefile'} = \&Write if caller(0) eq 'main';
-}
-
-sub _running_under {
-    my $thing = shift;
-    print <<"END_MESSAGE";
-*** Since we're running under ${thing}, I'll just let it take care
-    of the dependency's installation later.
-END_MESSAGE
-    return 1;
-}
-
-# Check to see if we are currently running under CPAN.pm and/or CPANPLUS;
-# if we are, then we simply let it taking care of our dependencies
-sub _check_lock {
-    return unless @Missing or @_;
-
-    my $cpan_env = $ENV{PERL5_CPAN_IS_RUNNING};
-
-    if ($ENV{PERL5_CPANPLUS_IS_RUNNING}) {
-        return _running_under($cpan_env ? 'CPAN' : 'CPANPLUS');
-    }
-
-    require CPAN;
-
-    if ($CPAN::VERSION > '1.89') {
-        if ($cpan_env) {
-            return _running_under('CPAN');
-        }
-        return; # CPAN.pm new enough, don't need to check further
-    }
-
-    # last ditch attempt, this -will- configure CPAN, very sorry
-
-    _load_cpan(1); # force initialize even though it's already loaded
-
-    # Find the CPAN lock-file
-    my $lock = MM->catfile( $CPAN::Config->{cpan_home}, ".lock" );
-    return unless -f $lock;
-
-    # Check the lock
-    local *LOCK;
-    return unless open(LOCK, $lock);
-
-    if (
-            ( $^O eq 'MSWin32' ? _under_cpan() : <LOCK> == getppid() )
-        and ( $CPAN::Config->{prerequisites_policy} || '' ) ne 'ignore'
-    ) {
-        print <<'END_MESSAGE';
-
-*** Since we're running under CPAN, I'll just let it take care
-    of the dependency's installation later.
-END_MESSAGE
-        return 1;
-    }
-
-    close LOCK;
-    return;
-}
-
-sub install {
-    my $class = shift;
-
-    my $i;    # used below to strip leading '-' from config keys
-    my @config = ( map { s/^-// if ++$i; $_ } @{ +shift } );
-
-    my ( @modules, @installed );
-    while ( my ( $pkg, $ver ) = splice( @_, 0, 2 ) ) {
-
-        # grep out those already installed
-        if ( _version_cmp( _load($pkg), $ver ) >= 0 ) {
-            push @installed, $pkg;
-        }
-        else {
-            push @modules, $pkg, $ver;
-        }
-    }
-
-    return @installed unless @modules;  # nothing to do
-    return @installed if _check_lock(); # defer to the CPAN shell
-
-    print "*** Installing dependencies...\n";
-
-    return unless _connected_to('cpan.org');
-
-    my %args = @config;
-    my %failed;
-    local *FAILED;
-    if ( $args{do_once} and open( FAILED, '.#autoinstall.failed' ) ) {
-        while (<FAILED>) { chomp; $failed{$_}++ }
-        close FAILED;
-
-        my @newmod;
-        while ( my ( $k, $v ) = splice( @modules, 0, 2 ) ) {
-            push @newmod, ( $k => $v ) unless $failed{$k};
-        }
-        @modules = @newmod;
-    }
-
-    if ( _has_cpanplus() and not $ENV{PERL_AUTOINSTALL_PREFER_CPAN} ) {
-        _install_cpanplus( \@modules, \@config );
-    } else {
-        _install_cpan( \@modules, \@config );
-    }
-
-    print "*** $class installation finished.\n";
-
-    # see if we have successfully installed them
-    while ( my ( $pkg, $ver ) = splice( @modules, 0, 2 ) ) {
-        if ( _version_cmp( _load($pkg), $ver ) >= 0 ) {
-            push @installed, $pkg;
-        }
-        elsif ( $args{do_once} and open( FAILED, '>> .#autoinstall.failed' ) ) {
-            print FAILED "$pkg\n";
-        }
-    }
-
-    close FAILED if $args{do_once};
-
-    return @installed;
-}
-
-sub _install_cpanplus {
-    my @modules   = @{ +shift };
-    my @config    = _cpanplus_config( @{ +shift } );
-    my $installed = 0;
-
-    require CPANPLUS::Backend;
-    my $cp   = CPANPLUS::Backend->new;
-    my $conf = $cp->configure_object;
-
-    return unless $conf->can('conf') # 0.05x+ with "sudo" support
-               or _can_write($conf->_get_build('base'));  # 0.04x
-
-    # if we're root, set UNINST=1 to avoid trouble unless user asked for it.
-    my $makeflags = $conf->get_conf('makeflags') || '';
-    if ( UNIVERSAL::isa( $makeflags, 'HASH' ) ) {
-        # 0.03+ uses a hashref here
-        $makeflags->{UNINST} = 1 unless exists $makeflags->{UNINST};
-
-    } else {
-        # 0.02 and below uses a scalar
-        $makeflags = join( ' ', split( ' ', $makeflags ), 'UNINST=1' )
-          if ( $makeflags !~ /\bUNINST\b/ and eval qq{ $> eq '0' } );
-
-    }
-    $conf->set_conf( makeflags => $makeflags );
-    $conf->set_conf( prereqs   => 1 );
-
-    
-
-    while ( my ( $key, $val ) = splice( @config, 0, 2 ) ) {
-        $conf->set_conf( $key, $val );
-    }
-
-    my $modtree = $cp->module_tree;
-    while ( my ( $pkg, $ver ) = splice( @modules, 0, 2 ) ) {
-        print "*** Installing $pkg...\n";
-
-        MY::preinstall( $pkg, $ver ) or next if defined &MY::preinstall;
-
-        my $success;
-        my $obj = $modtree->{$pkg};
-
-        if ( $obj and _version_cmp( $obj->{version}, $ver ) >= 0 ) {
-            my $pathname = $pkg;
-            $pathname =~ s/::/\\W/;
-
-            foreach my $inc ( grep { m/$pathname.pm/i } keys(%INC) ) {
-                delete $INC{$inc};
-            }
-
-            my $rv = $cp->install( modules => [ $obj->{module} ] );
-
-            if ( $rv and ( $rv->{ $obj->{module} } or $rv->{ok} ) ) {
-                print "*** $pkg successfully installed.\n";
-                $success = 1;
-            } else {
-                print "*** $pkg installation cancelled.\n";
-                $success = 0;
-            }
-
-            $installed += $success;
-        } else {
-            print << ".";
-*** Could not find a version $ver or above for $pkg; skipping.
-.
-        }
-
-        MY::postinstall( $pkg, $ver, $success ) if defined &MY::postinstall;
-    }
-
-    return $installed;
-}
-
-sub _cpanplus_config {
-	my @config = ();
-	while ( @_ ) {
-		my ($key, $value) = (shift(), shift());
-		if ( $key eq 'prerequisites_policy' ) {
-			if ( $value eq 'follow' ) {
-				$value = CPANPLUS::Internals::Constants::PREREQ_INSTALL();
-			} elsif ( $value eq 'ask' ) {
-				$value = CPANPLUS::Internals::Constants::PREREQ_ASK();
-			} elsif ( $value eq 'ignore' ) {
-				$value = CPANPLUS::Internals::Constants::PREREQ_IGNORE();
-			} else {
-				die "*** Cannot convert option $key = '$value' to CPANPLUS version.\n";
-			}
-		} else {
-			die "*** Cannot convert option $key to CPANPLUS version.\n";
-		}
-	}
-	return @config;
-}
-
-sub _install_cpan {
-    my @modules   = @{ +shift };
-    my @config    = @{ +shift };
-    my $installed = 0;
-    my %args;
-
-    _load_cpan();
-    require Config;
-
-    if (CPAN->VERSION < 1.80) {
-        # no "sudo" support, probe for writableness
-        return unless _can_write( MM->catfile( $CPAN::Config->{cpan_home}, 'sources' ) )
-                  and _can_write( $Config::Config{sitelib} );
-    }
-
-    # if we're root, set UNINST=1 to avoid trouble unless user asked for it.
-    my $makeflags = $CPAN::Config->{make_install_arg} || '';
-    $CPAN::Config->{make_install_arg} =
-      join( ' ', split( ' ', $makeflags ), 'UNINST=1' )
-      if ( $makeflags !~ /\bUNINST\b/ and eval qq{ $> eq '0' } );
-
-    # don't show start-up info
-    $CPAN::Config->{inhibit_startup_message} = 1;
-
-    # set additional options
-    while ( my ( $opt, $arg ) = splice( @config, 0, 2 ) ) {
-        ( $args{$opt} = $arg, next )
-          if $opt =~ /^force$/;    # pseudo-option
-        $CPAN::Config->{$opt} = $arg;
-    }
-
-    local $CPAN::Config->{prerequisites_policy} = 'follow';
-
-    while ( my ( $pkg, $ver ) = splice( @modules, 0, 2 ) ) {
-        MY::preinstall( $pkg, $ver ) or next if defined &MY::preinstall;
-
-        print "*** Installing $pkg...\n";
-
-        my $obj     = CPAN::Shell->expand( Module => $pkg );
-        my $success = 0;
-
-        if ( $obj and _version_cmp( $obj->cpan_version, $ver ) >= 0 ) {
-            my $pathname = $pkg;
-            $pathname =~ s/::/\\W/;
-
-            foreach my $inc ( grep { m/$pathname.pm/i } keys(%INC) ) {
-                delete $INC{$inc};
-            }
-
-            my $rv = $args{force} ? CPAN::Shell->force( install => $pkg )
-                                  : CPAN::Shell->install($pkg);
-            $rv ||= eval {
-                $CPAN::META->instance( 'CPAN::Distribution', $obj->cpan_file, )
-                  ->{install}
-                  if $CPAN::META;
-            };
-
-            if ( $rv eq 'YES' ) {
-                print "*** $pkg successfully installed.\n";
-                $success = 1;
-            }
-            else {
-                print "*** $pkg installation failed.\n";
-                $success = 0;
-            }
-
-            $installed += $success;
-        }
-        else {
-            print << ".";
-*** Could not find a version $ver or above for $pkg; skipping.
-.
-        }
-
-        MY::postinstall( $pkg, $ver, $success ) if defined &MY::postinstall;
-    }
-
-    return $installed;
-}
-
-sub _has_cpanplus {
-    return (
-        $HasCPANPLUS = (
-            $INC{'CPANPLUS/Config.pm'}
-              or _load('CPANPLUS::Shell::Default')
-        )
-    );
-}
-
-# make guesses on whether we're under the CPAN installation directory
-sub _under_cpan {
-    require Cwd;
-    require File::Spec;
-
-    my $cwd  = File::Spec->canonpath( Cwd::cwd() );
-    my $cpan = File::Spec->canonpath( $CPAN::Config->{cpan_home} );
-
-    return ( index( $cwd, $cpan ) > -1 );
-}
-
-sub _update_to {
-    my $class = __PACKAGE__;
-    my $ver   = shift;
-
-    return
-      if _version_cmp( _load($class), $ver ) >= 0;  # no need to upgrade
-
-    if (
-        _prompt( "==> A newer version of $class ($ver) is required. Install?",
-            'y' ) =~ /^[Nn]/
-      )
-    {
-        die "*** Please install $class $ver manually.\n";
-    }
-
-    print << ".";
-*** Trying to fetch it from CPAN...
-.
-
-    # install ourselves
-    _load($class) and return $class->import(@_)
-      if $class->install( [], $class, $ver );
-
-    print << '.'; exit 1;
-
-*** Cannot bootstrap myself. :-( Installation terminated.
-.
-}
-
-# check if we're connected to some host, using inet_aton
-sub _connected_to {
-    my $site = shift;
-
-    return (
-        ( _load('Socket') and Socket::inet_aton($site) ) or _prompt(
-            qq(
-*** Your host cannot resolve the domain name '$site', which
-    probably means the Internet connections are unavailable.
-==> Should we try to install the required module(s) anyway?), 'n'
-          ) =~ /^[Yy]/
-    );
-}
-
-# check if a directory is writable; may create it on demand
-sub _can_write {
-    my $path = shift;
-    mkdir( $path, 0755 ) unless -e $path;
-
-    return 1 if -w $path;
-
-    print << ".";
-*** You are not allowed to write to the directory '$path';
-    the installation may fail due to insufficient permissions.
-.
-
-    if (
-        eval '$>' and lc(`sudo -V`) =~ /version/ and _prompt(
-            qq(
-==> Should we try to re-execute the autoinstall process with 'sudo'?),
-            ((-t STDIN) ? 'y' : 'n')
-        ) =~ /^[Yy]/
-      )
-    {
-
-        # try to bootstrap ourselves from sudo
-        print << ".";
-*** Trying to re-execute the autoinstall process with 'sudo'...
-.
-        my $missing = join( ',', @Missing );
-        my $config = join( ',',
-            UNIVERSAL::isa( $Config, 'HASH' ) ? %{$Config} : @{$Config} )
-          if $Config;
-
-        return
-          unless system( 'sudo', $^X, $0, "--config=$config",
-            "--installdeps=$missing" );
-
-        print << ".";
-*** The 'sudo' command exited with error!  Resuming...
-.
-    }
-
-    return _prompt(
-        qq(
-==> Should we try to install the required module(s) anyway?), 'n'
-    ) =~ /^[Yy]/;
-}
-
-# load a module and return the version it reports
-sub _load {
-    my $mod  = pop;    # class/instance doesn't matter
-    my $file = $mod;
-
-    $file =~ s|::|/|g;
-    $file .= '.pm';
-
-    local $@;
-    return eval { require $file; $mod->VERSION } || ( $@ ? undef: 0 );
-}
-
-# Load CPAN.pm and it's configuration
-sub _load_cpan {
-    return if $CPAN::VERSION and $CPAN::Config and not @_;
-    require CPAN;
-    if ( $CPAN::HandleConfig::VERSION ) {
-        # Newer versions of CPAN have a HandleConfig module
-        CPAN::HandleConfig->load;
-    } else {
-    	# Older versions had the load method in Config directly
-        CPAN::Config->load;
-    }
-}
-
-# compare two versions, either use Sort::Versions or plain comparison
-# return values same as <=>
-sub _version_cmp {
-    my ( $cur, $min ) = @_;
-    return -1 unless defined $cur;  # if 0 keep comparing
-    return 1 unless $min;
-
-    $cur =~ s/\s+$//;
-
-    # check for version numbers that are not in decimal format
-    if ( ref($cur) or ref($min) or $cur =~ /v|\..*\./ or $min =~ /v|\..*\./ ) {
-        if ( ( $version::VERSION or defined( _load('version') )) and
-             version->can('new') 
-            ) {
-
-            # use version.pm if it is installed.
-            return version->new($cur) <=> version->new($min);
-        }
-        elsif ( $Sort::Versions::VERSION or defined( _load('Sort::Versions') ) )
-        {
-
-            # use Sort::Versions as the sorting algorithm for a.b.c versions
-            return Sort::Versions::versioncmp( $cur, $min );
-        }
-
-        warn "Cannot reliably compare non-decimal formatted versions.\n"
-          . "Please install version.pm or Sort::Versions.\n";
-    }
-
-    # plain comparison
-    local $^W = 0;    # shuts off 'not numeric' bugs
-    return $cur <=> $min;
-}
-
-# nothing; this usage is deprecated.
-sub main::PREREQ_PM { return {}; }
-
-sub _make_args {
-    my %args = @_;
-
-    $args{PREREQ_PM} = { %{ $args{PREREQ_PM} || {} }, @Existing, @Missing }
-      if $UnderCPAN or $TestOnly;
-
-    if ( $args{EXE_FILES} and -e 'MANIFEST' ) {
-        require ExtUtils::Manifest;
-        my $manifest = ExtUtils::Manifest::maniread('MANIFEST');
-
-        $args{EXE_FILES} =
-          [ grep { exists $manifest->{$_} } @{ $args{EXE_FILES} } ];
-    }
-
-    $args{test}{TESTS} ||= 't/*.t';
-    $args{test}{TESTS} = join( ' ',
-        grep { !exists( $DisabledTests{$_} ) }
-          map { glob($_) } split( /\s+/, $args{test}{TESTS} ) );
-
-    my $missing = join( ',', @Missing );
-    my $config =
-      join( ',', UNIVERSAL::isa( $Config, 'HASH' ) ? %{$Config} : @{$Config} )
-      if $Config;
-
-    $PostambleActions = (
-        ($missing and not $UnderCPAN)
-        ? "\$(PERL) $0 --config=$config --installdeps=$missing"
-        : "\$(NOECHO) \$(NOOP)"
-    );
-
-    return %args;
-}
-
-# a wrapper to ExtUtils::MakeMaker::WriteMakefile
-sub Write {
-    require Carp;
-    Carp::croak "WriteMakefile: Need even number of args" if @_ % 2;
-
-    if ($CheckOnly) {
-        print << ".";
-*** Makefile not written in check-only mode.
-.
-        return;
-    }
-
-    my %args = _make_args(@_);
-
-    no strict 'refs';
-
-    $PostambleUsed = 0;
-    local *MY::postamble = \&postamble unless defined &MY::postamble;
-    ExtUtils::MakeMaker::WriteMakefile(%args);
-
-    print << "." unless $PostambleUsed;
-*** WARNING: Makefile written with customized MY::postamble() without
-    including contents from Module::AutoInstall::postamble() --
-    auto installation features disabled.  Please contact the author.
-.
-
-    return 1;
-}
-
-sub postamble {
-    $PostambleUsed = 1;
-
-    return <<"END_MAKE";
-
-config :: installdeps
-\t\$(NOECHO) \$(NOOP)
-
-checkdeps ::
-\t\$(PERL) $0 --checkdeps
-
-installdeps ::
-\t$PostambleActions
-
-END_MAKE
-
-}
-
-1;
-
-__END__
-
-#line 1056

inc/Module/Install.pm

-#line 1
-package Module::Install;
-
-# For any maintainers:
-# The load order for Module::Install is a bit magic.
-# It goes something like this...
-#
-# IF ( host has Module::Install installed, creating author mode ) {
-#     1. Makefile.PL calls "use inc::Module::Install"
-#     2. $INC{inc/Module/Install.pm} set to installed version of inc::Module::Install
-#     3. The installed version of inc::Module::Install loads
-#     4. inc::Module::Install calls "require Module::Install"
-#     5. The ./inc/ version of Module::Install loads
-# } ELSE {
-#     1. Makefile.PL calls "use inc::Module::Install"
-#     2. $INC{inc/Module/Install.pm} set to ./inc/ version of Module::Install
-#     3. The ./inc/ version of Module::Install loads
-# }
-
-use 5.005;
-use strict 'vars';
-
-use vars qw{$VERSION $MAIN};
-BEGIN {
-	# All Module::Install core packages now require synchronised versions.
-	# This will be used to ensure we don't accidentally load old or
-	# different versions of modules.
-	# This is not enforced yet, but will be some time in the next few
-	# releases once we can make sure it won't clash with custom
-	# Module::Install extensions.
-	$VERSION = '0.91';
-
-	# Storage for the pseudo-singleton
-	$MAIN    = undef;
-
-	*inc::Module::Install::VERSION = *VERSION;
-	@inc::Module::Install::ISA     = __PACKAGE__;
-
-}
-
-
-
-
-
-# Whether or not inc::Module::Install is actually loaded, the
-# $INC{inc/Module/Install.pm} is what will still get set as long as
-# the caller loaded module this in the documented manner.
-# If not set, the caller may NOT have loaded the bundled version, and thus
-# they may not have a MI version that works with the Makefile.PL. This would
-# result in false errors or unexpected behaviour. And we don't want that.
-my $file = join( '/', 'inc', split /::/, __PACKAGE__ ) . '.pm';
-unless ( $INC{$file} ) { die <<"END_DIE" }
-
-Please invoke ${\__PACKAGE__} with:
-
-	use inc::${\__PACKAGE__};
-
-not:
-
-	use ${\__PACKAGE__};
-
-END_DIE
-
-
-
-
-
-# If the script that is loading Module::Install is from the future,
-# then make will detect this and cause it to re-run over and over
-# again. This is bad. Rather than taking action to touch it (which
-# is unreliable on some platforms and requires write permissions)
-# for now we should catch this and refuse to run.
-if ( -f $0 ) {
-	my $s = (stat($0))[9];
-
-	# If the modification time is only slightly in the future,
-	# sleep briefly to remove the problem.
-	my $a = $s - time;
-	if ( $a > 0 and $a < 5 ) { sleep 5 }
-
-	# Too far in the future, throw an error.
-	my $t = time;
-	if ( $s > $t ) { die <<"END_DIE" }
-
-Your installer $0 has a modification time in the future ($s > $t).
-
-This is known to create infinite loops in make.
-
-Please correct this, then run $0 again.
-
-END_DIE
-}
-
-
-
-
-
-# Build.PL was formerly supported, but no longer is due to excessive
-# difficulty in implementing every single feature twice.
-if ( $0 =~ /Build.PL$/i ) { die <<"END_DIE" }
-
-Module::Install no longer supports Build.PL.
-
-It was impossible to maintain duel backends, and has been deprecated.
-
-Please remove all Build.PL files and only use the Makefile.PL installer.
-
-END_DIE
-
-
-
-
-
-# To save some more typing in Module::Install installers, every...
-# use inc::Module::Install
-# ...also acts as an implicit use strict.
-$^H |= strict::bits(qw(refs subs vars));
-
-
-
-
-
-use Cwd        ();
-use File::Find ();
-use File::Path ();
-use FindBin;
-
-sub autoload {
-	my $self = shift;
-	my $who  = $self->_caller;
-	my $cwd  = Cwd::cwd();
-	my $sym  = "${who}::AUTOLOAD";
-	$sym->{$cwd} = sub {
-		my $pwd = Cwd::cwd();
-		if ( my $code = $sym->{$pwd} ) {
-			# Delegate back to parent dirs
-			goto &$code unless $cwd eq $pwd;
-		}
-		$$sym =~ /([^:]+)$/ or die "Cannot autoload $who - $sym";
-		my $method = $1;
-		if ( uc($method) eq $method ) {
-			# Do nothing
-			return;
-		} elsif ( $method =~ /^_/ and $self->can($method) ) {
-			# Dispatch to the root M:I class
-			return $self->$method(@_);
-		}
-
-		# Dispatch to the appropriate plugin
-		unshift @_, ( $self, $1 );
-		goto &{$self->can('call')};
-	};
-}
-
-sub import {
-	my $class = shift;
-	my $self  = $class->new(@_);
-	my $who   = $self->_caller;
-
-	unless ( -f $self->{file} ) {
-		require "$self->{path}/$self->{dispatch}.pm";
-		File::Path::mkpath("$self->{prefix}/$self->{author}");
-		$self->{admin} = "$self->{name}::$self->{dispatch}"->new( _top => $self );
-		$self->{admin}->init;
-		@_ = ($class, _self => $self);
-		goto &{"$self->{name}::import"};
-	}
-
-	*{"${who}::AUTOLOAD"} = $self->autoload;
-	$self->preload;
-
-	# Unregister loader and worker packages so subdirs can use them again
-	delete $INC{"$self->{file}"};
-	delete $INC{"$self->{path}.pm"};
-
-	# Save to the singleton
-	$MAIN = $self;
-
-	return 1;
-}
-
-sub preload {
-	my $self = shift;
-	unless ( $self->{extensions} ) {
-		$self->load_extensions(
-			"$self->{prefix}/$self->{path}", $self
-		);
-	}
-
-	my @exts = @{$self->{extensions}};
-	unless ( @exts ) {
-		@exts = $self->{admin}->load_all_extensions;
-	}
-
-	my %seen;
-	foreach my $obj ( @exts ) {
-		while (my ($method, $glob) = each %{ref($obj) . '::'}) {
-			next unless $obj->can($method);
-			next if $method =~ /^_/;
-			next if $method eq uc($method);
-			$seen{$method}++;
-		}
-	}
-
-	my $who = $self->_caller;
-	foreach my $name ( sort keys %seen ) {
-		*{"${who}::$name"} = sub {
-			${"${who}::AUTOLOAD"} = "${who}::$name";
-			goto &{"${who}::AUTOLOAD"};
-		};
-	}
-}
-
-sub new {
-	my ($class, %args) = @_;
-
-	# ignore the prefix on extension modules built from top level.
-	my $base_path = Cwd::abs_path($FindBin::Bin);
-	unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) {
-		delete $args{prefix};
-	}
-
-	return $args{_self} if $args{_self};
-
-	$args{dispatch} ||= 'Admin';
-	$args{prefix}   ||= 'inc';
-	$args{author}   ||= ($^O eq 'VMS' ? '_author' : '.author');
-	$args{bundle}   ||= 'inc/BUNDLES';
-	$args{base}     ||= $base_path;
-	$class =~ s/^\Q$args{prefix}\E:://;
-	$args{name}     ||= $class;
-	$args{version}  ||= $class->VERSION;
-	unless ( $args{path} ) {
-		$args{path}  = $args{name};
-		$args{path}  =~ s!::!/!g;
-	}
-	$args{file}     ||= "$args{base}/$args{prefix}/$args{path}.pm";
-	$args{wrote}      = 0;
-
-	bless( \%args, $class );
-}
-
-sub call {
-	my ($self, $method) = @_;
-	my $obj = $self->load($method) or return;
-        splice(@_, 0, 2, $obj);
-	goto &{$obj->can($method)};
-}
-
-sub load {
-	my ($self, $method) = @_;
-
-	$self->load_extensions(
-		"$self->{prefix}/$self->{path}", $self
-	) unless $self->{extensions};
-
-	foreach my $obj (@{$self->{extensions}}) {
-		return $obj if $obj->can($method);
-	}
-
-	my $admin = $self->{admin} or die <<"END_DIE";
-The '$method' method does not exist in the '$self->{prefix}' path!
-Please remove the '$self->{prefix}' directory and run $0 again to load it.
-END_DIE
-
-	my $obj = $admin->load($method, 1);
-	push @{$self->{extensions}}, $obj;
-
-	$obj;
-}
-
-sub load_extensions {
-	my ($self, $path, $top) = @_;
-
-	unless ( grep { ! ref $_ and lc $_ eq lc $self->{prefix} } @INC ) {
-		unshift @INC, $self->{prefix};
-	}
-
-	foreach my $rv ( $self->find_extensions($path) ) {
-		my ($file, $pkg) = @{$rv};
-		next if $self->{pathnames}{$pkg};
-
-		local $@;
-		my $new = eval { require $file; $pkg->can('new') };
-		unless ( $new ) {
-			warn $@ if $@;
-			next;
-		}
-		$self->{pathnames}{$pkg} = delete $INC{$file};
-		push @{$self->{extensions}}, &{$new}($pkg, _top => $top );
-	}
-
-	$self->{extensions} ||= [];
-}
-
-sub find_extensions {
-	my ($self, $path) = @_;
-
-	my @found;
-	File::Find::find( sub {
-		my $file = $File::Find::name;
-		return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is;
-		my $subpath = $1;
-		return if lc($subpath) eq lc($self->{dispatch});
-
-		$file = "$self->{path}/$subpath.pm";
-		my $pkg = "$self->{name}::$subpath";
-		$pkg =~ s!/!::!g;
-
-		# If we have a mixed-case package name, assume case has been preserved
-		# correctly.  Otherwise, root through the file to locate the case-preserved
-		# version of the package name.
<