The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Business::ISBN::Data;
use strict;
use vars qw($VERSION);

use Carp qw(carp);
use File::Basename qw(dirname);
use File::Spec::Functions qw(catfile);

$VERSION = '20120719.001';

=head1 NAME

Business::ISBN::Data - data pack for Business::ISBN

=head1 SYNOPSIS

see L<Business::ISBN>

=head1 DESCRIPTION

You don't need to load this module yourself in most cases. C<Business::ISBN>
will load it when it loads.

These data are generated from the F<RangeMessage.xml> file provided by
the ISBN Agency. You can retrieve this yourself at L<http://www.isbn-international.org/agency?rmxml=1>.
This file is included as part of the distribution and should be installed
at F<~lib/Business/ISBN/RangeMessage.xml>.

If you want to use a different F<RangeMessage.xml> file, you can set
the C<ISBN_RANGE_MESSAGE> environment variable to the alternate location
before you load C<Business::ISBN>. This way, you can use the latest (or
even earlier) data without having to install something new or wait for
an update to this module.

If the default F<RangeMessage.xml> or your alternate one is not available,
the module falls back to data included in F<Data.pm>. However, that data
is likely to be older data.

The data are in C<%Business::ISBN::country_data> (although the "country"
part is historical). If you want to see where the data are from, check
C<$Business::ISBN::country_data{_source}>.

=head1 SOURCE AVAILABILITY

This module lives in the Github repository with Business::ISBN:

	git://github.com/briandfoy/business--isbn.git

If you have something to add, create a fork on Github and send a
pull request.

=head1 AUTHOR

brian d foy, C<< <bdfoy@cpan.org> >>

Yakov Shafranovich updated the data in October 2008.

Daniel Jakubik updated the data in July 2012.

=head1 COPYRIGHT AND LICENSE

Copyright (c) 2002-2012, brian d foy, All Rights Reserved.

You may redistribute this under the same terms as Perl itself.

=cut

sub _default_data {
	(
	_source => __FILE__,
	0     => ['English language' =>  ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '89999', '900000' => '949999', '9500000' => '9999999'] ],
	1     => ['English language' =>  ['00' => '09', '100' => '399', '4000' => '5499', '55000' => '86979', '869800' => '998999', '9990000' => '9999999'] ],
	10    => ['France' =>  ['00' =>  '19', '200' => '699', '7000' => '8999', '90000' => '97599', '976000' => '999999'] ],
	2     => ['French language' =>  ['00' => '19', '200' => '349', '35000' => '39999', '400' => '699', '7000' => '8399', '84000' => '89999', '900000' => '949999', '9500000' => '9999999'] ],
	3     => ['German language' =>  ['00' => '02', '030' => '033', '0340' => '0369', '03700' => '03999', '04' => '19', '200' => '699', '7000' => '8499', '85000' => '89999', '900000' => '949999', '9500000' => '9539999', '95400' => '96999', '9700000' => '9899999', '99000' => '99499', '99500' => '99999'] ],
	4     => ['Japan' =>  ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '89999', '900000' => '949999', '9500000' => '9999999'] ],
	5     => ['Russian Federation and former USSR' =>  ['00' => '19', '200' => '420', '4210' => '4299', '430' => '430', '4310' => '4399', '440' => '440', '4410' => '4499', '450' => '699', '7000' => '8499', '85000' => '89999', '900000' => '909999', '91000' => '91999', '9200' => '9299', '93000' => '94999', '9500000' => '9500999', '9501' => '9799', '98000' => '98999', '9900000' => '9909999', '9910' => '9999'] ],
	600   => ['Iran' =>  ['00' => '09', '100' => '499', '5000' => '8999', '90000' => '99999'] ],
	601   => ['Kazakhstan' =>  ['00' => '19', '200' => '699', '7000' => '7999', '80000' => '84999', '85' => '99'] ],
	602   => ['Indonesia' =>  ['00' => '17', '18000' => '18999', '19000' => '19999', '200' => '749', '7500' => '7999', '8000' => '9499', '95000' => '99999'] ],
	603   => ['Saudi Arabia' =>  ['00' => '04', '05' => '49', '500' => '799', '8000' => '8999', '90000' => '99999'] ],
	604   => ['Vietnam' =>  ['0' => '4', '50' => '89', '900' => '979', '9800' => '9999'] ],
	605   => ['Turkey' =>  ['' => '', '01' => '09', '100' => '399', '4000' => '5999', '60000' => '89999', '90' => '99'] ],
	606   => ['Romania' =>  ['0' => '0', '10' => '49', '500' => '799', '8000' => '9199', '92000' => '99999'] ],
	607   => ['Mexico' =>  ['00' => '39', '400' => '749', '7500' => '9499', '95000' => '99999'] ],
	608   => ['Macedonia' =>  ['0' => '0', '10' => '19', '200' => '449', '4500' => '6499', '65000' => '69999', '7' => '9'] ],
	609   => ['Lithuania' =>  ['00' => '39', '400' => '799', '8000' => '9499', '95000' => '99999'] ],
	611   => ['Thailand' =>  ['' => ''] ],
	612   => ['Peru' =>  ['00' => '29', '300' => '399', '4000' => '4499', '45000' => '49999', '50' => '99'] ],
	613   => ['Mauritius' =>  ['0' => '9'] ],
	614   => ['Lebanon' =>  ['00' => '39', '400' => '799', '8000' => '9499', '95000' => '99999'] ],
	615   => ['Hungary' =>  ['00' => '09', '100' => '499', '5000' => '7999', '80000' => '89999', '' => ''] ],
	616   => ['Thailand' =>  ['00' => '19', '200' => '699', '7000' => '8999', '90000' => '99999'] ],
	617   => ['Ukraine' =>  ['00' => '49', '500' => '699', '7000' => '8999', '90000' => '99999'] ],
	618   => ['Greece' =>  ['00' => '19', '200' => '499', '5000' => '7999', '80000' => '99999'] ],
	619   => ['Bulgaria' =>  ['00' => '14', '150' => '699', '7000' => '8999', '90000' => '99999'] ],
	620   => ['Mauritius' =>  ['0' => '9'] ],
	7     => ['China, People\'s Republic' =>  ['00' => '09', '100' => '499', '5000' => '7999', '80000' => '89999', '900000' => '999999'] ],
	80    => ['Czech Republic and Slovakia' =>  ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '89999', '900000' => '999999'] ],
	81    => ['India' =>  ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '89999', '900000' => '999999'] ],
	82    => ['Norway' =>  ['00' => '19', '200' => '699', '7000' => '8999', '90000' => '98999', '990000' => '999999'] ],
	83    => ['Poland' =>  ['00' => '19', '200' => '599', '60000' => '69999', '7000' => '8499', '85000' => '89999', '900000' => '999999'] ],
	84    => ['Spain' =>  ['00' => '13', '140' => '149', '15000' => '19999', '200' => '699', '7000' => '8499', '85000' => '89999', '9000' => '9199', '920000' => '923999', '92400' => '92999', '930000' => '949999', '95000' => '96999', '9700' => '9999'] ],
	85    => ['Brazil' =>  ['00' => '19', '200' => '599', '60000' => '69999', '7000' => '8499', '85000' => '89999', '900000' => '979999', '98000' => '99999'] ],
	86    => ['Serbia (shared)' =>  ['00' => '29', '300' => '599', '6000' => '7999', '80000' => '89999', '900000' => '999999'] ],
	87    => ['Denmark' =>  ['00' => '29', '' => '', '400' => '649', '' => '', '7000' => '7999', '' => '', '85000' => '94999', '' => '', '970000' => '999999'] ],
	88    => ['Italy' =>  ['00' => '19', '200' => '599', '6000' => '8499', '85000' => '89999', '900000' => '909999', '910' => '929', '' => '', '95000' => '99999'] ],
	89    => ['Korea, Republic' =>  ['00' => '24', '250' => '549', '5500' => '8499', '85000' => '94999', '950000' => '969999', '97000' => '98999', '990' => '999'] ],
	90    => ['Netherlands' =>  ['00' => '19', '200' => '499', '5000' => '6999', '70000' => '79999', '800000' => '849999', '8500' => '8999', '90' => '90', '910000' => '939999', '94' => '94', '950000' => '999999'] ],
	91    => ['Sweden' =>  ['0' => '1', '20' => '49', '500' => '649', '' => '', '7000' => '7999', '' => '', '85000' => '94999', '' => '', '970000' => '999999'] ],
	92    => ['International NGO Publishers and EC Organizations' =>  ['0' => '5', '60' => '79', '800' => '899', '9000' => '9499', '95000' => '98999', '990000' => '999999'] ],
	93    => ['India' =>  ['00' => '09', '100' => '499', '5000' => '7999', '80000' => '94999', '950000' => '999999'] ],
	94    => ['Netherlands' =>  ['000' => '599', '6000' => '8999', '90000' => '99999'] ],
	950   => ['Argentina' =>  ['00' => '49', '500' => '899', '9000' => '9899', '99000' => '99999'] ],
	951   => ['Finland' =>  ['0' => '1', '20' => '54', '550' => '889', '8900' => '9499', '95000' => '99999'] ],
	952   => ['Finland' =>  ['00' => '19', '200' => '499', '5000' => '5999', '60' => '65', '6600' => '6699', '67000' => '69999', '7000' => '7999', '80' => '94', '9500' => '9899', '99000' => '99999'] ],
	953   => ['Croatia' =>  ['0' => '0', '10' => '14', '150' => '509', '51' => '54', '55000' => '59999', '6000' => '9499', '95000' => '99999'] ],
	954   => ['Bulgaria' =>  ['00' => '28', '2900' => '2999', '300' => '799', '8000' => '8999', '90000' => '92999', '9300' => '9999'] ],
	955   => ['Sri Lanka' =>  ['0000' => '1999', '20' => '44', '4500' => '4999', '50000' => '54999', '550' => '799', '8000' => '9499', '95000' => '99999'] ],
	956   => ['Chile' =>  ['00' => '19', '200' => '699', '7000' => '9999'] ],
	957   => ['Taiwan' =>  ['00' => '02', '0300' => '0499', '05' => '19', '2000' => '2099', '21' => '27', '28000' => '30999', '31' => '43', '440' => '819', '8200' => '9699', '97000' => '99999'] ],
	958   => ['Colombia' =>  ['00' => '56', '57000' => '59999', '600' => '799', '8000' => '9499', '95000' => '99999'] ],
	959   => ['Cuba' =>  ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '99999'] ],
	960   => ['Greece' =>  ['00' => '19', '200' => '659', '6600' => '6899', '690' => '699', '7000' => '8499', '85000' => '92999', '93' => '93', '9400' => '9799', '98000' => '99999'] ],
	961   => ['Slovenia' =>  ['00' => '19', '200' => '599', '6000' => '8999', '90000' => '94999', '' => ''] ],
	962   => ['Hong Kong, China' =>  ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '86999', '8700' => '8999', '900' => '999'] ],
	963   => ['Hungary' =>  ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '89999', '9000' => '9999'] ],
	964   => ['Iran' =>  ['00' => '14', '150' => '249', '2500' => '2999', '300' => '549', '5500' => '8999', '90000' => '96999', '970' => '989', '9900' => '9999'] ],
	965   => ['Israel' =>  ['00' => '19', '200' => '599', '' => '', '7000' => '7999', '' => '', '90000' => '99999'] ],
	966   => ['Ukraine' =>  ['00' => '12', '130' => '139', '14' => '14', '1500' => '1699', '170' => '199', '2000' => '2789', '279' => '289', '2900' => '2999', '300' => '699', '7000' => '8999', '90000' => '90999', '910' => '949', '95000' => '97999', '980' => '999'] ],
	967   => ['Malaysia' =>  ['00' => '00', '0100' => '0999', '10000' => '19999', '' => '', '300' => '499', '5000' => '5999', '60' => '89', '900' => '989', '9900' => '9989', '99900' => '99999'] ],
	968   => ['Mexico' =>  ['01' => '39', '400' => '499', '5000' => '7999', '800' => '899', '9000' => '9999'] ],
	969   => ['Pakistan' =>  ['0' => '1', '20' => '39', '400' => '799', '8000' => '9999'] ],
	970   => ['Mexico' =>  ['01' => '59', '600' => '899', '9000' => '9099', '91000' => '96999', '9700' => '9999'] ],
	971   => ['Philippines' =>  ['000' => '015', '0160' => '0199', '02' => '02', '0300' => '0599', '06' => '09', '10' => '49', '500' => '849', '8500' => '9099', '91000' => '95999', '9600' => '9699', '97' => '98', '9900' => '9999'] ],
	972   => ['Portugal' =>  ['0' => '1', '20' => '54', '550' => '799', '8000' => '9499', '95000' => '99999'] ],
	973   => ['Romania' =>  ['0' => '0', '100' => '169', '1700' => '1999', '20' => '54', '550' => '759', '7600' => '8499', '85000' => '88999', '8900' => '9499', '95000' => '99999'] ],
	974   => ['Thailand' =>  ['00' => '19', '200' => '699', '7000' => '8499', '85000' => '89999', '90000' => '94999', '9500' => '9999'] ],
	975   => ['Turkey' =>  ['00000' => '01999', '02' => '24', '250' => '599', '6000' => '9199', '92000' => '98999', '990' => '999'] ],
	976   => ['Caribbean Community' =>  ['0' => '3', '40' => '59', '600' => '799', '8000' => '9499', '95000' => '99999'] ],
	977   => ['Egypt' =>  ['00' => '19', '200' => '499', '5000' => '6999', '700' => '849', '85000' => '89999', '90' => '99'] ],
	978   => ['Nigeria' =>  ['000' => '199', '2000' => '2999', '30000' => '79999', '8000' => '8999', '900' => '999'] ],
	979   => ['Indonesia' =>  ['000' => '099', '1000' => '1499', '15000' => '19999', '20' => '29', '3000' => '3999', '400' => '799', '8000' => '9499', '95000' => '99999'] ],
	980   => ['Venezuela' =>  ['00' => '19', '200' => '599', '6000' => '9999'] ],
	981   => ['Singapore' =>  ['00' => '11', '1200' => '1999', '200' => '289', '2900' => '9999'] ],
	982   => ['South Pacific' =>  ['00' => '09', '100' => '699', '70' => '89', '9000' => '9799', '98000' => '99999'] ],
	983   => ['Malaysia' =>  ['00' => '01', '020' => '199', '2000' => '3999', '40000' => '44999', '45' => '49', '50' => '79', '800' => '899', '9000' => '9899', '99000' => '99999'] ],
	984   => ['Bangladesh' =>  ['00' => '39', '400' => '799', '8000' => '8999', '90000' => '99999'] ],
	985   => ['Belarus' =>  ['00' => '39', '400' => '599', '6000' => '8999', '90000' => '99999'] ],
	986   => ['Taiwan' =>  ['00' => '11', '120' => '559', '5600' => '7999', '80000' => '99999'] ],
	987   => ['Argentina' =>  ['00' => '09', '1000' => '1999', '20000' => '29999', '30' => '49', '500' => '899', '9000' => '9499', '95000' => '99999'] ],
	988   => ['Hong Kong, China' =>  ['00' => '14', '15000' => '16999', '17000' => '19999', '200' => '799', '8000' => '9699', '97000' => '99999'] ],
	989   => ['Portugal' =>  ['0' => '1', '20' => '54', '550' => '799', '8000' => '9499', '95000' => '99999'] ],
	9927  => ['Qatar' =>  ['00' => '09', '100' => '399', '4000' => '4999', '' => ''] ],
	9928  => ['Albania' =>  ['00' => '09', '100' => '399', '4000' => '4999', '' => ''] ],
	9929  => ['Guatemala' =>  ['0' => '3', '40' => '54', '550' => '799', '8000' => '9999'] ],
	9930  => ['Costa Rica' =>  ['00' => '49', '500' => '939', '9400' => '9999'] ],
	9931  => ['Algeria' =>  ['00' => '29', '300' => '899', '9000' => '9999'] ],
	9932  => ['Lao People\'s Democratic Republic' =>  ['00' => '39', '400' => '849', '8500' => '9999'] ],
	9933  => ['Syria' =>  ['0' => '0', '10' => '39', '400' => '899', '9000' => '9999'] ],
	9934  => ['Latvia' =>  ['0' => '0', '10' => '49', '500' => '799', '8000' => '9999'] ],
	9935  => ['Iceland' =>  ['0' => '0', '10' => '39', '400' => '899', '9000' => '9999'] ],
	9936  => ['Afghanistan' =>  ['0' => '1', '20' => '39', '400' => '799', '8000' => '9999'] ],
	9937  => ['Nepal' =>  ['0' => '2', '30' => '49', '500' => '799', '8000' => '9999'] ],
	9938  => ['Tunisia' =>  ['00' => '79', '800' => '949', '9500' => '9999'] ],
	9939  => ['Armenia' =>  ['0' => '4', '50' => '79', '800' => '899', '9000' => '9999'] ],
	9940  => ['Montenegro' =>  ['0' => '1', '20' => '49', '500' => '899', '9000' => '9999'] ],
	9941  => ['Georgia' =>  ['0' => '0', '10' => '39', '400' => '899', '9000' => '9999'] ],
	9942  => ['Ecuador' =>  ['00' => '89', '900' => '984', '9850' => '9999'] ],
	9943  => ['Uzbekistan' =>  ['00' => '29', '300' => '399', '4000' => '9999'] ],
	9944  => ['Turkey' =>  ['0000' => '0999', '100' => '499', '5000' => '5999', '60' => '69', '700' => '799', '80' => '89', '900' => '999'] ],
	9945  => ['Dominican Republic' =>  ['00' => '00', '010' => '079', '08' => '39', '400' => '569', '57' => '57', '580' => '849', '8500' => '9999'] ],
	9946  => ['Korea, P.D.R.' =>  ['0' => '1', '20' => '39', '400' => '899', '9000' => '9999'] ],
	9947  => ['Algeria' =>  ['0' => '1', '20' => '79', '800' => '999'] ],
	9948  => ['United Arab Emirates' =>  ['00' => '39', '400' => '849', '8500' => '9999'] ],
	9949  => ['Estonia' =>  ['0' => '0', '10' => '39', '400' => '899', '9000' => '9999'] ],
	9950  => ['Palestine' =>  ['00' => '29', '300' => '849', '8500' => '9999'] ],
	9951  => ['Kosova' =>  ['00' => '39', '400' => '849', '8500' => '9999'] ],
	9952  => ['Azerbaijan' =>  ['0' => '1', '20' => '39', '400' => '799', '8000' => '9999'] ],
	9953  => ['Lebanon' =>  ['0' => '0', '10' => '39', '400' => '599', '60' => '89', '9000' => '9999'] ],
	9954  => ['Morocco' =>  ['0' => '1', '20' => '39', '400' => '799', '8000' => '9999'] ],
	9955  => ['Lithuania' =>  ['00' => '39', '400' => '929', '9300' => '9999'] ],
	9956  => ['Cameroon' =>  ['0' => '0', '10' => '39', '400' => '899', '9000' => '9999'] ],
	9957  => ['Jordan' =>  ['00' => '39', '400' => '699', '70' => '84', '8500' => '8799', '88' => '99'] ],
	9958  => ['Bosnia and Herzegovina' =>  ['00' => '03', '040' => '089', '0900' => '0999', '10' => '18', '1900' => '1999', '20' => '49', '500' => '899', '9000' => '9999'] ],
	9959  => ['Libya' =>  ['0' => '1', '20' => '79', '800' => '949', '9500' => '9699', '970' => '979', '98' => '99'] ],
	9960  => ['Saudi Arabia' =>  ['00' => '59', '600' => '899', '9000' => '9999'] ],
	9961  => ['Algeria' =>  ['0' => '2', '30' => '69', '700' => '949', '9500' => '9999'] ],
	9962  => ['Panama' =>  ['00' => '54', '5500' => '5599', '56' => '59', '600' => '849', '8500' => '9999'] ],
	9963  => ['Cyprus' =>  ['0' => '1', '20' => '24', '250' => '279', '2800' => '2999', '30' => '54', '550' => '734', '7350' => '7499', '7500' => '9999'] ],
	9964  => ['Ghana' =>  ['0' => '6', '70' => '94', '950' => '999'] ],
	9965  => ['Kazakhstan' =>  ['00' => '39', '400' => '899', '9000' => '9999'] ],
	9966  => ['Kenya' =>  ['000' => '149', '1500' => '1999', '20' => '69', '7000' => '7499', '750' => '959', '9600' => '9999'] ],
	9967  => ['Kyrgyz Republic' =>  ['00' => '39', '400' => '899', '9000' => '9999'] ],
	9968  => ['Costa Rica' =>  ['00' => '49', '500' => '939', '9400' => '9999'] ],
	9970  => ['Uganda' =>  ['00' => '39', '400' => '899', '9000' => '9999'] ],
	9971  => ['Singapore' =>  ['0' => '5', '60' => '89', '900' => '989', '9900' => '9999'] ],
	9972  => ['Peru' =>  ['00' => '09', '1' => '1', '200' => '249', '2500' => '2999', '30' => '59', '600' => '899', '9000' => '9999'] ],
	9973  => ['Tunisia' =>  ['00' => '05', '060' => '089', '0900' => '0999', '10' => '69', '700' => '969', '9700' => '9999'] ],
	9974  => ['Uruguay' =>  ['0' => '2', '30' => '54', '550' => '749', '7500' => '9499', '95' => '99'] ],
	9975  => ['Moldova' =>  ['0' => '0', '100' => '399', '4000' => '4499', '45' => '89', '900' => '949', '9500' => '9999'] ],
	9976  => ['Tanzania' =>  ['0' => '5', '60' => '89', '900' => '989', '9900' => '9999'] ],
	9977  => ['Costa Rica' =>  ['00' => '89', '900' => '989', '9900' => '9999'] ],
	9978  => ['Ecuador' =>  ['00' => '29', '300' => '399', '40' => '94', '950' => '989', '9900' => '9999'] ],
	9979  => ['Iceland' =>  ['0' => '4', '50' => '64', '650' => '659', '66' => '75', '760' => '899', '9000' => '9999'] ],
	9980  => ['Papua New Guinea' =>  ['0' => '3', '40' => '89', '900' => '989', '9900' => '9999'] ],
	9981  => ['Morocco' =>  ['00' => '09', '100' => '159', '1600' => '1999', '20' => '79', '800' => '949', '9500' => '9999'] ],
	9982  => ['Zambia' =>  ['00' => '79', '800' => '989', '9900' => '9999'] ],
	9983  => ['Gambia' =>  ['' => '', '80' => '94', '950' => '989', '9900' => '9999'] ],
	9984  => ['Latvia' =>  ['00' => '49', '500' => '899', '9000' => '9999'] ],
	9985  => ['Estonia' =>  ['0' => '4', '50' => '79', '800' => '899', '9000' => '9999'] ],
	9986  => ['Lithuania' =>  ['00' => '39', '400' => '899', '9000' => '9399', '940' => '969', '97' => '99'] ],
	9987  => ['Tanzania' =>  ['00' => '39', '400' => '879', '8800' => '9999'] ],
	9988  => ['Ghana' =>  ['0' => '2', '30' => '54', '550' => '749', '7500' => '9999'] ],
	9989  => ['Macedonia' =>  ['0' => '0', '100' => '199', '2000' => '2999', '30' => '59', '600' => '949', '9500' => '9999'] ],
	99901 => ['Bahrain' =>  ['00' => '49', '500' => '799', '80' => '99'] ],
	99902 => ['Gabon' =>  ['' => ''] ],
	99903 => ['Mauritius' =>  ['0' => '1', '20' => '89', '900' => '999'] ],
	99904 => ['Netherlands Antilles and Aruba' =>  ['0' => '5', '60' => '89', '900' => '999'] ],
	99905 => ['Bolivia' =>  ['0' => '3', '40' => '79', '800' => '999'] ],
	99906 => ['Kuwait' =>  ['0' => '2', '30' => '59', '600' => '699', '70' => '89', '90' => '94', '950' => '999'] ],
	99908 => ['Malawi' =>  ['0' => '0', '10' => '89', '900' => '999'] ],
	99909 => ['Malta' =>  ['0' => '3', '40' => '94', '950' => '999'] ],
	99910 => ['Sierra Leone' =>  ['0' => '2', '30' => '89', '900' => '999'] ],
	99911 => ['Lesotho' =>  ['00' => '59', '600' => '999'] ],
	99912 => ['Botswana' =>  ['0' => '3', '400' => '599', '60' => '89', '900' => '999'] ],
	99913 => ['Andorra' =>  ['0' => '2', '30' => '35', '' => '', '600' => '604', '' => ''] ],
	99914 => ['Suriname' =>  ['0' => '4', '50' => '89', '900' => '999'] ],
	99915 => ['Maldives' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99916 => ['Namibia' =>  ['0' => '2', '30' => '69', '700' => '999'] ],
	99917 => ['Brunei Darussalam' =>  ['0' => '2', '30' => '89', '900' => '999'] ],
	99918 => ['Faroe Islands' =>  ['0' => '3', '40' => '79', '800' => '999'] ],
	99919 => ['Benin' =>  ['0' => '2', '300' => '399', '40' => '69', '70' => '70', '710' => '849', '850' => '899', '900' => '999'] ],
	99920 => ['Andorra' =>  ['0' => '4', '50' => '89', '900' => '999'] ],
	99921 => ['Qatar' =>  ['0' => '1', '20' => '69', '700' => '799', '8' => '8', '90' => '99'] ],
	99922 => ['Guatemala' =>  ['0' => '3', '40' => '69', '700' => '999'] ],
	99923 => ['El Salvador' =>  ['0' => '1', '20' => '79', '800' => '999'] ],
	99924 => ['Nicaragua' =>  ['0' => '1', '20' => '79', '800' => '999'] ],
	99925 => ['Paraguay' =>  ['0' => '3', '40' => '79', '800' => '999'] ],
	99926 => ['Honduras' =>  ['0' => '0', '10' => '59', '600' => '899', '90' => '99'] ],
	99927 => ['Albania' =>  ['0' => '2', '30' => '59', '600' => '999'] ],
	99928 => ['Georgia' =>  ['0' => '0', '10' => '79', '800' => '999'] ],
	99929 => ['Mongolia' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99930 => ['Armenia' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99931 => ['Seychelles' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99932 => ['Malta' =>  ['0' => '0', '10' => '59', '600' => '699', '7' => '7', '80' => '99'] ],
	99933 => ['Nepal' =>  ['0' => '2', '30' => '59', '600' => '999'] ],
	99934 => ['Dominican Republic' =>  ['0' => '1', '20' => '79', '800' => '999'] ],
	99935 => ['Haiti' =>  ['0' => '2', '30' => '59', '600' => '699', '7' => '8', '90' => '99'] ],
	99936 => ['Bhutan' =>  ['0' => '0', '10' => '59', '600' => '999'] ],
	99937 => ['Macau' =>  ['0' => '1', '20' => '59', '600' => '999'] ],
	99938 => ['Srpska, Republic of' =>  ['0' => '1', '20' => '59', '600' => '899', '90' => '99'] ],
	99939 => ['Guatemala' =>  ['0' => '5', '60' => '89', '900' => '999'] ],
	99940 => ['Georgia' =>  ['0' => '0', '10' => '69', '700' => '999'] ],
	99941 => ['Armenia' =>  ['0' => '2', '30' => '79', '800' => '999'] ],
	99942 => ['Sudan' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99943 => ['Albania' =>  ['0' => '2', '30' => '59', '600' => '999'] ],
	99944 => ['Ethiopia' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99945 => ['Namibia' =>  ['0' => '5', '60' => '89', '900' => '999'] ],
	99946 => ['Nepal' =>  ['0' => '2', '30' => '59', '600' => '999'] ],
	99947 => ['Tajikistan' =>  ['0' => '2', '30' => '69', '700' => '999'] ],
	99948 => ['Eritrea' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99949 => ['Mauritius' =>  ['0' => '1', '20' => '89', '900' => '999'] ],
	99950 => ['Cambodia' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99951 => ['Congo, The Democratic Republic' =>  ['' => ''] ],
	99952 => ['Mali' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99953 => ['Paraguay' =>  ['0' => '2', '30' => '79', '800' => '939', '94' => '99'] ],
	99954 => ['Bolivia' =>  ['0' => '2', '30' => '69', '700' => '879', '88' => '99'] ],
	99955 => ['Srpska, Republic of' =>  ['0' => '1', '20' => '59', '600' => '799', '80' => '89', '90' => '99'] ],
	99956 => ['Albania' =>  ['00' => '59', '600' => '859', '86' => '99'] ],
	99957 => ['Malta' =>  ['0' => '1', '20' => '79', '800' => '999'] ],
	99958 => ['Bahrain' =>  ['0' => '4', '50' => '94', '950' => '999'] ],
	99959 => ['Luxembourg' =>  ['0' => '2', '30' => '59', '600' => '999'] ],
	99960 => ['Malawi' =>  ['0' => '0', '10' => '94', '950' => '999'] ],
	99961 => ['El Salvador' =>  ['0' => '3', '40' => '89', '900' => '999'] ],
	99962 => ['Mongolia' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99963 => ['Cambodia' =>  ['00' => '49', '500' => '999'] ],
	99964 => ['Nicaragua' =>  ['0' => '1', '20' => '79', '800' => '999'] ],
	99965 => ['Macau' =>  ['0' => '3', '40' => '79', '800' => '999'] ],
	99966 => ['Kuwait' =>  ['0' => '2', '30' => '69', '700' => '799', '' => '', '' => ''] ],
	99967 => ['Paraguay' =>  ['0' => '1', '20' => '59', '600' => '899', '' => ''] ],
	99968 => ['Botswana' =>  ['0' => '3', '400' => '599', '60' => '89', '900' => '999'] ],
	99969 => ['Oman' =>  ['0' => '4', '50' => '79', '800' => '999'] ],
	99970 => ['Haiti' =>  ['0' => '4', '50' => '89', '900' => '999'] ],
	);
	}

sub _get_data {
# eventually fetch this from the internet
# http://www.isbn-international.org/agency?rmxml=1

	my $file = do {
		no warnings 'uninitialized';
		   if( -e $ENV{ISBN_RANGE_MESSAGE} ) { $ENV{ISBN_RANGE_MESSAGE} }
		else {
			my $default = catfile( dirname( __FILE__ ), 'RangeMessage.xml' );
			}
		};

	my $hash = _parse_range_message( $file );

	if( defined $hash ) { return %$hash   }
	else                { _default_data() }
	}

sub _parse_range_message {
	my( $file ) = @_;

	open my $fh, '<:utf8', $file or do {
		carp "Could not open $file to get ISBN range data [$!]";
		return
		};

	my $data = do { local $/; <$fh> };

	my $ds;

	my( $serial_number ) = $data =~ m|<MessageSerialNumber>(.*?)</MessageSerialNumber>|;
	my( $date )          = $data =~ m|<MessageDate>(.*?)</MessageDate>|;

	$ds->{'_source'} = $file;
	$ds->{'_serial'} = $serial_number;
	$ds->{'_date'}   = $date;

	my( $registration_groups ) = $data =~ m|<RegistrationGroups>(.*?)</RegistrationGroups>|s;

	my @groups = $registration_groups =~ m|<Group>(.*?)</Group>|sg;

	foreach my $group ( @groups ) {
		my( $prefix ) = $group =~ m|<Prefix>(?:97[89]-)?([0-9]+?)</Prefix>|;
		my( $agency ) = $group =~ m|<Agency>(.*?)</Agency>|;
		my @rules =
			map {
				my( $range ) = m|<Range>(.*?)</Range>|;
				my( $length ) = m|<Length>(.*?)</Length>|;
				my( $low, $high ) = split /-/, $range, 2;
				( substr($low, 0, $length), substr($high, 0, $length) );
				}
			grep {
				! m|<Length>0</Length>|
				}
				$group =~ m|<Rule>(.*?)</Rule>|sg;

		$ds->{$prefix} = [ $agency => \@rules ];
		}

	$ds;
	}

%Business::ISBN::country_data = _get_data();

# I cheat a little bit here. I know that that the max length is
# 5, and that I know that those will start with 999xx. :)
# however, if the data changes I should think about this again.
$Business::ISBN::MAX_COUNTRY_CODE_LENGTH = length(
	( sort { $a <=> $b } grep { ! /\A_/ } keys %Business::ISBN::country_data )[-1]
	);

package Business::ISBN;

sub isbn_group_code_string_from_number {
	return if $_[0] =~ /\A_/;
	return $Business::ISBN::country_data{ $_[0] }[0] || '';
	}

sub isbn_publisher_ranges_from_group_number {
	return if $_[0] =~ /\A_/;
	return $Business::ISBN::country_data{ $_[0] }[1] || [];
	}

sub isbn_data_source {
	return $Business::ISBN::country_data{ '_source' } || __FILE__
	}
1;