# ---------------------------------------------------------------------------
#     AUTHLIB.PL
#
#      Ver: 8_4_8
# ---------------------------------------------------------------------------
# SSI Web - Web Surveying System
# Copyright Sawtooth Software, Inc. 1998-2015. All rights reserved.
# Orem, UT  USA  (801) 477-4700
#
# Any modification of this script will be considered violation of
# copyright (with the exception of the first line which can be
# modified to reflect the correct path to the Perl interpreter)
#
# Any use of this script or its code for purposes outside of
# the systems created by Sawtooth Software is prohibited.
# ---------------------------------------------------------------------------
 use strict; use Symbol qw(gensym); package authlib8_4_8; eval { require 5.007003; }; if ($@) { authlib8_4_8::_bqa(0, "<b>The version of Perl installed on this computer is not compatible with SSI Web.</b> <p>" . $@, "", $@); } use constant _CBQ => -4; use constant _CBR => -3; use constant _CBS => -2; use constant _CBT => -1; use constant _CBU => 1; use constant _CBV => 2; use constant _CBW => 3; use constant _CBX => 4; use constant _CBY => 5; use constant _CBZ => 6; use constant _CCA => 7; use constant _CCB => 8; use constant _CCC => 9; use constant _CCD => 10; use constant _CCE => 13; use constant _CCF => 14; use constant _CCG => 15; use constant _CCH => 16; use constant _CCI => 17; use constant _CCJ => 18; use constant _CCK => 19; use constant _CCL => 20; use constant _CCM => 21; use constant _CCN => 22; use constant _CCO => 23; use constant _CCP => 24; use constant _CCQ => 25; use constant _CCR => 26; use constant _CCS => 27; use constant _CCT => 28; use constant _CCU => 29; use constant _CCV => 2; use constant _CCW => 4; use constant _CCX => 5; use constant _CCY => 1; use constant _CCZ => 2; use constant _CDA => 3; use constant _CDB => 4; use constant _CDC => 5; use constant _CDD => 6; use constant _CDE => 0; use constant _CDF => 1; use constant _CDG => 2; use constant _CDH => 3; $authlib8_4_8::_byz = ""; $authlib8_4_8::_bzb = ""; $authlib8_4_8::_bwn = {}; $authlib8_4_8::_bwo = ""; $authlib8_4_8::_bzj = 0; %authlib8_4_8::_bwq = (); %authlib8_4_8::_bzi = (); %authlib8_4_8::_bws = (); $authlib8_4_8::_byy = {}; $authlib8_4_8::_bwu = {}; %authlib8_4_8::_bwv = (); $authlib8_4_8::_bzu = 0; $authlib8_4_8::_bwx = ""; $authlib8_4_8::_bwy = ""; $authlib8_4_8::_bwz = "1444230147"; $authlib8_4_8::_bzk = 0; $authlib8_4_8::_bzl = 0; %authlib8_4_8::_bxc = (); %authlib8_4_8::_bxd = (); $authlib8_4_8::_bxe = 0; $authlib8_4_8::_bxf = 0; $authlib8_4_8::_bxh = 0; $authlib8_4_8::_bxi = 0; $authlib8_4_8::_cab = 0; $authlib8_4_8::_cau = 0; $authlib8_4_8::_cai = 0; $authlib8_4_8::_caj = ""; $authlib8_4_8::_cak = ""; %authlib8_4_8::_bxo = (); %authlib8_4_8::_bxp = (); $authlib8_4_8::_bzy = 0; $authlib8_4_8::_bzh = 0; $authlib8_4_8::_bzs = 0; $authlib8_4_8::_bxt = 0; %authlib8_4_8::_bxu = (); $authlib8_4_8::_bxv = ""; $authlib8_4_8::_bxw = 0; $authlib8_4_8::_bzq = 0; $authlib8_4_8::_bzr = 0; $authlib8_4_8::_bxz = 0; $authlib8_4_8::_bzo = 0; $authlib8_4_8::_byb = 0; $authlib8_4_8::_byd = ""; $authlib8_4_8::_bye = 1; $authlib8_4_8::_byf = ""; $authlib8_4_8::_bzt = 1; $authlib8_4_8::_byh = 0; %authlib8_4_8::_byi = (); $authlib8_4_8::_bzw = 0; $authlib8_4_8::_bzx = 0; $authlib8_4_8::_byl = 0; $authlib8_4_8::_bym = 0; $authlib8_4_8::_bxg = 0; $authlib8_4_8::_byn = 0; $authlib8_4_8::_cav = 0; $authlib8_4_8::_byw = 0; $authlib8_4_8::_bze = 0; $authlib8_4_8::_byr = {}; $authlib8_4_8::_bys = 0; sub _bmp { my($__ayu) = @_; $authlib8_4_8::_byz = ""; $authlib8_4_8::_bzb = ""; $authlib8_4_8::_bwn = {}; $authlib8_4_8::_bwo = ""; $authlib8_4_8::_bzj = 0; %authlib8_4_8::_bwq = (); %authlib8_4_8::_bzi = (); %authlib8_4_8::_bws = (); $authlib8_4_8::_byy = {}; $authlib8_4_8::_bwu = {}; %authlib8_4_8::_bwv = (); $authlib8_4_8::_bzu = 0; $authlib8_4_8::_bwx = "8_4_8"; $authlib8_4_8::_bwy = ".pl"; $authlib8_4_8::_bwz = "1444230147"; $authlib8_4_8::_bzk = 0; $authlib8_4_8::_bzl = 0; %authlib8_4_8::_bxc = (); %authlib8_4_8::_bxd = (); $authlib8_4_8::_bxe = 0; $authlib8_4_8::_bxf = 0; $authlib8_4_8::_bxg = 0; $authlib8_4_8::_bxh = 0; $authlib8_4_8::_bxi = 0; $authlib8_4_8::_cab = 0; $authlib8_4_8::_cau = 0; $authlib8_4_8::_cai = 0; $authlib8_4_8::_caj = ""; $authlib8_4_8::_cak = ""; %authlib8_4_8::_bxo = (); %authlib8_4_8::_bxp = (); $authlib8_4_8::_bzy = 0; $authlib8_4_8::_bzh = $__ayu; $authlib8_4_8::_bzs = 0; $authlib8_4_8::_bxt = 0; %authlib8_4_8::_bxu = (); $authlib8_4_8::_bxv = ""; $authlib8_4_8::_bxw = 0; $authlib8_4_8::_bzq = 0; $authlib8_4_8::_bzr = 0; $authlib8_4_8::_bxz = 0; $authlib8_4_8::_bzo = 0; $authlib8_4_8::_byb = 0; $authlib8_4_8::_byc = 0; $authlib8_4_8::_byd = ""; $authlib8_4_8::_bye = 1; $authlib8_4_8::_byf = ""; $authlib8_4_8::_bzt = 1; $authlib8_4_8::_byh = 0; %authlib8_4_8::_byi = (); $authlib8_4_8::_bzw = 0; $authlib8_4_8::_bzx = 0; $authlib8_4_8::_byl = 0; $authlib8_4_8::_bym = 0; $authlib8_4_8::_byn = 0; $authlib8_4_8::_cav = 0; $authlib8_4_8::_byw = 0; $authlib8_4_8::_bze = 0; $authlib8_4_8::_byr = {}; $authlib8_4_8::_bys = 0; } sub _bmq { my ($__azd) = @_; my $__ayv = 0; my $__ayw = 0; my $__ayx = ""; my $__ayy = ""; my $__ayz = ""; eval { require DBI; $authlib8_4_8::_bwn->{'_caw'} = 1400; if (uc($__azd->{"database_type"}) eq uc("mysql")) { $__ayz = "dbi:" . $__azd->{"database_type"} . ":" . $__azd->{"database_name"} . ":" . $__azd->{"database_address"}; if ($__azd->{"database_port"}) { $__ayz .= ":" . $__azd->{"database_port"}; } $authlib8_4_8::_byw = DBI->connect($__ayz, $__azd->{"database_username"}, $__azd->{"database_password"},{RaiseError => 1, AutoCommit => 0, PrintError => 0}); $authlib8_4_8::_bwn->{'_cax'} = "ENGINE = MYISAM"; $authlib8_4_8::_bwn->{'_cay'} = "AUTO_INCREMENT"; $authlib8_4_8::_bwn->{'_caz'} = 50; } elsif(uc($__azd->{"database_type"}) eq uc("SQLite")) { $authlib8_4_8::_byw = DBI->connect("dbi:" . $__azd->{"database_type"} . ":dbname=" . $authlib8_4_8::_bwv{'_cba'} . $authlib8_4_8::_bzb . ".sqlite", undef, undef, {RaiseError => 1, PrintError => 0, AutoCommit => 0, "sqlite_use_immediate_transaction" => 1}); $authlib8_4_8::_bwn->{'_cay'} = "AUTOINCREMENT"; $authlib8_4_8::_bwn->{'_caz'} = 1; } elsif(uc($__azd->{"database_type"}) eq uc("ODBC")) { my $__aza = $__azd->{"database_address"}; my $__azb = "{SQL Server}"; if (exists $__azd->{"database_driver"} && $__azd->{"database_driver"} ne "") { $__azb = $__azd->{"database_driver"}; } $__ayz = "DBI:" . $__azd->{"database_type"} . ":" . "Driver=" . $__azb . ";Server=" . $__aza . ";" . "Database=" . $__azd->{"database_name"} . ";" . "uid=" . $__azd->{"database_username"} . ";" . "pwd=" . $__azd->{"database_password"} . ";" . "port=" . $__azd->{"database_port"}; $authlib8_4_8::_byw = DBI->connect($__ayz, undef, undef, {RaiseError => 1, AutoCommit => 0}); my $__azc = 1; if(exists $authlib8_4_8::_byr->{"respnum_start"}) { $__azc = $authlib8_4_8::_byr->{"respnum_start"}; } $authlib8_4_8::_bwn->{'_cay'} = "IDENTITY(" . $__azc . ", 1)"; $authlib8_4_8::_byw->{"LongReadLen"} = 131070; $authlib8_4_8::_bwn->{'_caz'} = 4; $authlib8_4_8::_bwn->{'_caw'} = 1000; } else { $__ayw = 1; $__ayy = "Failed to connect to the database."; $__ayx = "Cannot find database for " . $__azd->{"database_type"} . "."; } if(uc($__azd->{"database_type"}) ne uc("SQLite")) { if (exists $__azd->{"database_max_fields_table"}) { $authlib8_4_8::_bwn->{'_caw'} = $__azd->{"database_max_fields_table"}; } if (exists $__azd->{"database_max_tables_join"}) { $authlib8_4_8::_bwn->{'_caz'} = $__azd->{"database_max_tables_join"}; } } }; if ($@) { $__ayy = "Failed to connect to the database."; $__ayx = $@; if ($__ayx =~ m/Unknown database/i || $__ayx =~ m/Cannot open database/i) { $__ayy .= " Cannot find the \"" . $__azd->{"database_name"} . "\" database. Make sure that this database has been created and that you have access to it."; } elsif($__ayx =~ m/Access denied for user/i || $__ayx =~ m/Login failed for user/i) { $__ayy .= " Access denied for database user \"" . $__azd->{"database_username"} . "\". Check the database user name and password. Also verify that you have the database name (" . $__azd->{"database_name"} . ") correct."; } elsif($__ayx =~ m/install_driver(.*?)failed/i) { $__ayy .= " Cannot find database driver " . $__azd->{"database_type"} . "."; } } elsif(!$authlib8_4_8::_byw) { ($__ayv, $__ayy, $__ayx) = _bmv($__azd->{"database_type"}); $__ayw = 1; $__ayy = "Failed to connect to the database."; } elsif(!$__ayw) { ($__ayv, $__ayy, $__ayx) = _bmv($__azd->{"database_type"}); $authlib8_4_8::_bwn->{'_bgu'} = lc($__azd->{"database_type"}); } else { $__ayv = 1; } return ($__ayv, $__ayy, $__ayx); } sub _bmr { if ($authlib8_4_8::_byw) { $authlib8_4_8::_byw->commit(); $authlib8_4_8::_byw->disconnect; $authlib8_4_8::_byw = 0; } } sub _bms { my ($__aze) = @_; if ($authlib8_4_8::_bwn->{'_bgu'} eq "odbc" && defined($__aze)) { $__aze = pack("U0C*", unpack("C*", $__aze)); } return $__aze; } sub _bmt { my ($__azf) = @_; if($authlib8_4_8::_bwn->{'_bgu'} eq "odbc" && defined($__azf)) { $__azf = pack("C*", unpack("U0C*", $__azf)); } return $__azf; } sub _bmu { my ($__azg) = @_; $__azg =~ s{([\x00-\x29\x2C\x3A-\x40\x5B-\x5E\x60\x7B-\x7F])} {'%' . uc(unpack('H2', $1))}eg; return $__azg; } sub _bmv { my ($__azi) = @_; if ($authlib8_4_8::_bwy eq ".pl") { my @__azh = DBI->available_drivers(); unless (grep(/$__azi/i, @__azh)) { return (0, "", "A " . $__azi . " driver is not installed for Perl. Please make sure that the CPAN module DBD::" . $__azi . " is installed and reachable from Perl."); } } return (1, "", ""); } sub _bmw { my($__azk) = @_; my $__azj = ""; if($authlib8_4_8::_bwn->{'_bgu'} eq "odbc") { $__azj .= "IF OBJECT_ID('" . $__azk . "') IS NOT NULL DROP TABLE \"" . $__azk . "\""; } else { $__azj .= "DROP TABLE IF EXISTS `" . $__azk . "`"; } return $__azj; } sub _bmx { my($__azq) = @_; my $__azl = ""; my $__azm = 0; my $__azn = 0; my $__azo = ""; my $__azp = ""; if ($authlib8_4_8::_bwn->{'_bgu'} eq "sqlite") { $__azl = "PRAGMA table_info(`" . $__azq . "`)"; $__azm = 1; $__azn = 2; $__azo = "name"; $__azp = "type"; } elsif ($authlib8_4_8::_bwn->{'_bgu'} eq "odbc") { $__azl = "SELECT COLUMN_NAME 'Field', DATA_TYPE 'Type' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" . $__azq . "'"; $__azm = 0; $__azn = 1; $__azo = "Field"; $__azp = "Type"; } else { $__azl = "DESCRIBE `" . $__azq . "`"; $__azm = 0; $__azn = 1; $__azo = "Field"; $__azp = "Type"; } return ($__azl, $__azm, $__azn, $__azo, $__azp); } sub _bmy { my($__azr, $__azs) = @_; if($authlib8_4_8::_bwn->{'_bgu'} eq "odbc") { $__azr =~ s/`/\"/g; if ($__azs) { $__azr =~ s/\s+TINYINT\(\d+\)([,\s\)])/ TINYINT$1/ig; $__azr =~ s/\s+INTEGER([,\s\)])/ INT$1/ig; $__azr =~ s/\s+LONGTEXT([,\s\)])/ nvarchar\(max\)$1/ig; $__azr =~ s/\s+TEXT([,\s\)])/ nvarchar\(max\)$1/ig; $__azr =~ s/\s+VARCHAR\s*\((\d+)\)([,\s\)])/ nvarchar\($1\)$2/ig; $__azr =~ s/\s+DOUBLE([,\s\)])/ decimal\(38, 16\)$1/ig; $__azr =~ s/CREATE\s+INDEX/CREATE CLUSTERED INDEX/ig; } } elsif ($authlib8_4_8::_bwn->{'_bgu'} eq "sqlite") { if ($__azs) { $__azr =~ s/\s+INT([,\s\)])/ INTEGER$1/ig; $__azr =~ s/\s+TEXT/ TEXT COLLATE NOCASE/ig; $__azr =~ s/^double$/text/ig; } } return $__azr; } sub _bmz { my($__azt) = @_; if($authlib8_4_8::_bwn->{'_bgu'} eq "odbc") { $__azt =~ s/^bool$/tinyint/ig; $__azt =~ s/^INTEGER$/int/ig; $__azt =~ s/^LONGTEXT$/nvarchar\(max\)/ig; $__azt =~ s/^TEXT$/nvarchar\(max\)/ig; $__azt =~ s/^VARCHAR$/nvarchar\(max\)/ig; $__azt =~ s/^DOUBLE$/decimal\(38, 16\)/ig; } elsif ($authlib8_4_8::_bwn->{'_bgu'} eq "sqlite") { $__azt =~ s/^bool$/tinyint\(1\)/ig; $__azt =~ s/^int$/INTEGER/ig; $__azt =~ s/^double$/text/ig; } else { $__azt =~ s/^bool$/tinyint\(1\)/ig; } return $__azt; } sub _bna { my($__azv) = @_; my $__azu = 0; if($__azv =~ m/text/i || $__azv =~ m/varchar/i) { $__azu = 1; } return $__azu; } sub _bnb { my($__azz, $__baa) = @_; my $__azw = $authlib8_4_8::_byw->last_insert_id(undef, undef, "`" . $__azz . "`", $__baa); if (!$__azw) { my $__azx = ""; if($authlib8_4_8::_bwn->{'_bgu'} eq "odbc") { $__azx = "SELECT \@\@IDENTITY FROM `" . $__azz . "`"; } else { $__azx = "SELECT LAST_INSERT_ID() FROM `" . $__azz . "`"; } my $__azy = $authlib8_4_8::_byw->selectrow_arrayref(authlib8_4_8::_bmy($__azx, 0)); $__azw = $__azy->[0]; if (!$__azw) { authlib8_4_8::_bqa(267, "Database error.", "Database error. Cannot get last_insert_id for " . $__azz, $@); } } return $__azw; } sub _bnc { my($__baq, $__bar, $__bas) = @_; my $__bab = ""; my $__bac = ciwlib8_4_8::_bia(); if ($__bac > 0) { my $__bad = 0; my $__bae = ""; my $__baf = ""; my $__bag = 0; if (keys %{$authlib8_4_8::_byy} == 0 && !$authlib8_4_8::_bzy) { _bne($__bac); } if (exists $authlib8_4_8::_bwu->{$__baq}) { $__bab = ""; $__bad = 1; } elsif (exists $authlib8_4_8::_byy->{$__baq}) { $__bab = $authlib8_4_8::_byy->{$__baq}; $__bad = 1; } elsif(!$authlib8_4_8::_bzy) { my ($__bat, $__bau) = _bnv($__baq, 0, 1); if ($__bat) { $__bad = 1; my $__bah = "SELECT " . $__bau . " FROM `" . $authlib8_4_8::_bzb . "_data" . $__bat . "` WHERE `sys_RespNum` = " . $__bac; my $__bai = 0; my $__baj = ""; eval { $__bai = $authlib8_4_8::_byw->selectrow_hashref(authlib8_4_8::_bmy($__bah, 0)); }; if ($@ || $__bai == 0) { } else { foreach $__baj (keys %{$__bai}) { $authlib8_4_8::_byy->{$__baj} = _bmt($__bai->{$__baj}); } if (exists $authlib8_4_8::_byy->{$__baq}) { $__bab = $authlib8_4_8::_byy->{$__baq}; $__bad = 1; } } } } if (!$__bad && !$authlib8_4_8::_bzy) { $__bag = _btj($__bac); if (exists $authlib8_4_8::_byy->{$__baq}) { $__bab = $authlib8_4_8::_byy->{$__baq}; $__bad = 1; } } if (!$__bad && !$authlib8_4_8::_bzy) { if (exists $authlib8_4_8::_bzi{"hid_loops"}) { if ($__bar) { if ($__baq =~ m/(.*?)\.\d+$/o) { $__bab = _bnc($1, 1); } } else { my $__bak = 0; my ($__bat, $__bau) = _bnv($__baq, 1); if ($__bat) { $__bak = 1; } elsif($__bag) { foreach my $__bal (keys %{$__bag}) { if ($__bal =~ m/(.*?)\./o) { if($__baq eq $1) { $__bak = 1; } } } } if($__bak) { my $__bam = 0; my($__bae, $__baf, $__bav) = authlib8_4_8::_brx($__baq); if (exists $authlib8_4_8::_bwq{$__bae}) { my $__ban = $authlib8_4_8::_bwq{$__bae}; $__bam = $__ban->{'_v'}; } else { $__bam = _bqm(); } my $__bao = $authlib8_4_8::_bzj->[$__bam - 1]; my $__bap = ciwlib8_4_8::_bhq($authlib8_4_8::_bzi{"hid_loops"}); my ($__baw, $__bax) = ciwlib8_4_8::_bhs($__bao, $__bap, $__bas); $__bab = _bnc($__baq . $__baw, 1); } } if ($__bab) { $authlib8_4_8::_byy->{$__baq} = $__bab; $__bad = 1; } } } } return $__bab; } sub _bnd { my($__bay, $__baz) = @_; delete $authlib8_4_8::_bwu->{$__bay}; $authlib8_4_8::_byy->{$__bay} = $__baz; } sub _bne { my ($__bbd) = @_; my @__bba = ("`sys_RespNum`", "`sys_CheckSum`", "`sys_StartTime`", "`sys_EndTime`", "`sys_RespStatus`", "`sys_DispositionCode`", "`sys_LastQuestion`", "`sys_UserJavaScript`"); my $__bbb = "SELECT " . join(",", @__bba) . " FROM `" . $authlib8_4_8::_bzb . "_data1` WHERE `sys_RespNum` = " . $__bbd; eval { $authlib8_4_8::_byy = $authlib8_4_8::_byw->selectrow_hashref(authlib8_4_8::_bmy($__bbb, 0)); }; if ($@ || $authlib8_4_8::_byy == 0) { authlib8_4_8::_bqa(207, "Database error.", "Database error. Initial data read failed.", $@); } my $__bbc = authlib8_4_8::_bqm(); if ($__bbc > 1) { _btl(); } } sub _bnf { my $__bbe = _bqk(); if($__bbe =~ m/Googlebot|Baiduspider|msnbot|bingbot|spider|robot|crawler|crawling/i) { authlib8_4_8::_bso(); } } sub _bng { my ($__bbi) = @_; my $__bbf = 0; my $__bbg = "SELECT `sys_RespNum` FROM `" . $authlib8_4_8::_bzb . "_data1` WHERE `sys_RespNum` = " . $__bbi; my $__bbh = 0; eval { $__bbh = $authlib8_4_8::_byw->selectrow_hashref(authlib8_4_8::_bmy($__bbg, 0)); }; if ($@) { authlib8_4_8::_bqa(277, "Database error.", "Database error. Error checking if record exists.", $@); } if ($__bbh) { if (exists $__bbh->{"sys_RespNum"}) { if ($__bbh->{"sys_RespNum"} == $__bbi) { $__bbf = 1; } } } return $__bbf; } sub _bnh { my($__bbj) = @_; $authlib8_4_8::_byz = $__bbj; $authlib8_4_8::_bzb = $authlib8_4_8::_byz; if (exists $authlib8_4_8::_bzi{"hid_test_mode"}) { $authlib8_4_8::_bzb = authlib8_4_8::_buc(); } } sub _bni { my($__bbn) = @_; my $__bbk = ""; my $__bbl = ref $__bbn; if ($__bbl eq "ARRAY") { $__bbk .= "["; my $__bbm = 0; foreach $__bbm (@{$__bbn}) { $__bbl = ref $__bbm; if ($__bbl eq "ARRAY") { $__bbk .= "["; $__bbk .= join(",", @{$__bbm}); $__bbk .= "],"; } else { $__bbk .= $__bbm . ","; } } $__bbk =~ s/,$//; $__bbk .= "]"; } return $__bbk; } sub _bnj { my ($__bbs, $__bbt, $__bbu, $__bbv) = @_; my $__bbo = 0; eval { require "Digest.pm"; $__bbo = Digest->new("MD5"); }; if ($@) { authlib8_4_8::_bqa(0, "Unable to load Digest.pm<br/><br/>", $@, ""); } $__bbo->add(0xFF01); $__bbo->add($__bbu); $__bbo->add($__bbt); $__bbo->add($__bbs); $__bbo->add($__bbv); $__bbo->add($authlib8_4_8::_bzi{"hid_respnum"}); $__bbo->add($authlib8_4_8::_byl); $__bbo->add($authlib8_4_8::_byz); my $__bbp = $__bbo->digest(); my $__bbq = join(",", ($__bbu, $__bbt, $__bbs, $__bbv, $authlib8_4_8::_bzi{"hid_respnum"}, $authlib8_4_8::_byl, $authlib8_4_8::_byz)); my $__bbr = pack("V", 0xFF01) . $__bbp; $__bbr .= pack("V", length($__bbq)) . _bnk($__bbq, $__bbp); return _bnn($__bbr); } sub _bnk { my ($__bce, $__bcf) = @_; my $__bbw = length($__bce); my $__bbx = ""; my $__bby = 0; my $__bbz = length($__bcf); for (; $__bby < $__bbw - $__bbz; $__bby += $__bbz) { $__bbx .= $__bcf ^ substr($__bce, $__bby, $__bbz); } my %__bca = (0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 'A', 11 => 'B', 12 => 'C', 13 => 'D', 14 => 'E', 15 => 'F'); my $__bcb = ""; my $__bcc = 0; my @__bcd = (); if ($__bbw % $__bbz) { $__bcc = $__bbz - ($__bbw % $__bbz); @__bcd = ($__bca{$__bcc}) x ($__bcc * 2); $__bcb = pack("H*", join("", @__bcd)); } $__bbx .= $__bcf ^ ($__bcb . substr($__bce, $__bby)); return $__bbx; } sub _bnl { my ($__bdc) = @_; if ($__bdc !~ m/^(?:(?:[A-Z0-9_-]{4})*(?:[A-Z0-9_-]{2,3})?){1}$/io) { authlib8_4_8::_bqa(304, "Page link is invalid.", "Page link is invalid: " . $__bdc, ""); } my $__bcg = _bno($__bdc); my $__bch = unpack("V", $__bcg); my $__bci = 0; my $__bcj = 0; my $__bck = 0; my $__bcl = 0; my $__bcm = 0; my $__bcn = ""; my $__bco = 0; if ($__bch == 0xFF01) { my $__bcp = substr($__bcg, 4, 16); my $__bcq = unpack("V", substr($__bcg, 20, 4)); my $__bcr = substr($__bcg, 24); my $__bcs = _bnm($__bcr, $__bcq, $__bcp); ($__bck, $__bcj, $__bci, $__bcl, $__bcm, $__bco, $__bcn) = split(',', $__bcs); my $__bct = 0; eval { require "Digest.pm"; $__bct = Digest->new("MD5"); }; if ($@) { authlib8_4_8::_bqa(0, "Unable to load Digest.pm<br/><br/>", $@, ""); } $__bct->add(0xFF01); $__bct->add($__bck); $__bct->add($__bcj); $__bct->add($__bci); $__bct->add($__bcl); $__bct->add($__bcm); $__bct->add($__bco); $__bct->add($__bcn); my $__bcu = $__bct->digest; if ($__bcp != $__bcu) { my $__bcv = "Expected_digest=" . unpack('H*', $__bcp) . ", actual_digest=" . unpack("H*", $__bcu); $__bcv .= ", version=$__bch, id=$__bci, checksum=$__bcj, timestamp=$__bcl, respnum=$__bcm, studyname=$__bcn, istestmode=$__bck, previous=$__bco"; authlib8_4_8::_bqa(309, "URL values do not match expected values.", $__bcv, ""); } } else { $__bch = ""; my ($__bdd, $__bde, $__bdf) = unpack("VVV", $__bcg); my $__bcp = substr($__bcg, 12, 16); my $__bcw = substr($__bcg, 28, 16); my $__bcx = (int($__bdf / 16) + 1) * 16; my $__bcy = 44; my $__bcz = substr($__bcg, $__bcy, $__bcx); $__bcy += $__bcx; $__bcx = (int($__bde / 16) + 1) * 16; my $__bda = substr($__bcg, $__bcy, $__bcx); $__bcy += $__bcx; my $__bdb = substr($__bcg, $__bcy); $__bci = _bnm($__bda, $__bde, $__bcp); $__bcn = _bnm($__bdb, $__bdd, $__bcp); $__bcj = _bnm($__bcz, $__bdf, $__bcp); $__bck = _bnm($__bcw, 1, $__bcp); } return ($__bch, $__bci, $__bcn, $__bcj, $__bck, $__bcl, $__bcm, $__bco); } sub _bnm { my ($__bdm, $__bdn, $__bdo) = @_; my $__bdg = length($__bdo); my $__bdh = 0; my $__bdi = ""; for (; $__bdh < $__bdn - $__bdg; $__bdh += $__bdg) { $__bdi .= $__bdo ^ substr($__bdm, $__bdh, $__bdg); } my %__bdj = (0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 'a' => 10, 'b' => 11, 'c' => 12, 'd' => 13, 'e' => 14, 'f' => 15, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15); my $__bdk = $__bdo ^ substr($__bdm, $__bdh); if ($__bdn % $__bdg) { my $__bdl = unpack("H", substr($__bdk, 0, 1)); $__bdi .= substr($__bdk, $__bdj{$__bdl}); } else { $__bdi .= $__bdk; } return $__bdi; } sub _bnn { my $__bdp = _bnp(shift, ""); $__bdp =~ s/=+\z//; $__bdp =~ tr[+/][-_]; return $__bdp; } sub _bno { my $__bdq = shift; $__bdq =~ tr[-_][+/]; $__bdq .= '=' while length($__bdq) % 4; return _bnq($__bdq); } sub _bnp { require bytes; require integer; my $__bdr = "\n" unless defined $_[1]; my $__bds = pack("u", $_[0]); $__bds =~ s/^.//mg; $__bds =~ s/\n//g; $__bds =~ tr|` -_|AA-Za-z0-9+/|; my $__bdt = (3 - length($_[0]) % 3) % 3; $__bds =~ s/.{$__bdt}$/'=' x $__bdt/e if $__bdt; if (length($__bdr)) { $__bds =~ s/(.{1,76})/$1$__bdr/g; } return $__bds; } sub _bnq { local($^W) = 0; require integer; my $__bdu = $_[0]; $__bdu =~ tr|A-Za-z0-9+=/||cd; if (length($__bdu) % 4) { authlib8_4_8::_bqa(0, "Invalid link.", "Length of base64 data not a multiple of 4: " . $__bdu, ""); } $__bdu =~ s/=+$//; $__bdu =~ tr|A-Za-z0-9+/| -_|; return "" unless length($__bdu); my $__bdv = ""; my $__bdw; my $__bdx; $__bdx = length($__bdu) - 60; for ($__bdw = 0; $__bdw <= $__bdx; $__bdw+= 60) { $__bdv .= "M" . substr($__bdu, $__bdw, 60); } $__bdu = substr($__bdu, $__bdw); if ($__bdu ne "") { $__bdv .= chr(32 + length($__bdu)*3/4) . $__bdu; } return unpack("u", $__bdv); } sub _bnr { my $__bdy = @{$_[0]} - 1; my $__bdz = 0; if ($__bdy == 1) { if (rand() > 0.5) { ($_[0]->[0], $_[0]->[1]) = ($_[0]->[1], $_[0]->[0]); } } else { for (; $__bdy > 0; $__bdy--) { $__bdz = int(rand($__bdy + 1)); ($_[0]->[$__bdy], $_[0]->[$__bdz]) = ($_[0]->[$__bdz], $_[0]->[$__bdy]); } } } sub _bns { my($__beb) = @_; my $__bea = ""; $__bea .= "<script type=\"text/javascript\">\n"; $__bea .= $__beb; $__bea .= "\n</script>\n"; return $__bea; } sub _bnt { my($__ber) = @_; my $__bec = ""; my $__bed = ""; my $__bee = 0; my $__bef = ""; my $__beg = 10000; foreach $__bec (sort keys(%authlib8_4_8::_bzi)) { $__bed = $authlib8_4_8::_bzi{$__bec}; if(!$__ber) { $__bed =~ s/</ < /g; $__bed =~ s/>/ > /g; } $__bed =~ s/onbegin/on begin/ig; $__bed =~ s/<(\s*)script/<$1 s c r i p t/ig; $__bed =~ s/javascript/j a v a _ s c r i p t/ig; $__bed =~ s/\[%/\[ %/ig; if (length($__bed) > $__beg) { my $__beh = 1; if (exists $authlib8_4_8::_bzi{"hid_SavedListNames"}) { my @__bei = split(",", $authlib8_4_8::_bzi{"hid_SavedListNames"}); my $__bej = @__bei; my $__bek = ""; my $__bel = 0; for ($__bel = 0; $__bel < $__bej; $__bel++) { if ($__bec eq $__bei[$__bel]) { $__beh = 0; last; } } } if ($__beh) { if ($__bec eq "result_list") { $__beh = 0; } } if ($__beh) { $__bed = substr($__bed,0,$__beg); $__bef .= "Input greater than " . $__beg . " characters removed."; } } $authlib8_4_8::_bzi{$__bec} = $__bed; if (!$__ber && ref($__bed) eq "ARRAY") { $__bee = $__bed; $__bed = $__bee->[0]; $authlib8_4_8::_bzi{$__bec} = $__bed; my $__bem = @{$__bee}; my $__bel = 0; my $__ben = $__bee->[0]; my $__beo = 0; for ($__bel = 1; $__bel < $__bem; $__bel++) { if ($__ben ne $__bee->[$__bel]) { $__beo = 1; last; } } if ($__beo) { $__bef .= "Found Null character in the %in hash. Key: " . $__bec . " Value: " . join(" | ", @{$__bee}); } } elsif (!$__ber && $__bed =~ m/\0/o) { my @__bep = split("\0", $__bed); my $__beq = $__bed; $__bed = $__bep[0]; $authlib8_4_8::_bzi{$__bec} = $__bed; $__bef .= "Found Null character in the %in hash (null in string). Key: " . $__bec . " Value: " . $__beq; } if ($__bec eq "hid_respnum") { if ($__bed !~ m/^\w{0,100},?\w{0,100}$/o) { authlib8_4_8::_bqa(103, "", "Malformed respondent number input.", ""); } } elsif ($__bec eq "hid_studyname") { if ($__bed !~ m/^\w{0,50}$/o) { authlib8_4_8::_bqa(104, "", "Malformed studyname input.", ""); } } elsif ($__bec eq "hid_pagenum") { if ($__bed !~ m/^\d{0,10}$/o) { authlib8_4_8::_bqa(105, "", "Malformed page number input.", ""); } } elsif ($__bec eq "hid_javascript") { if ($__bed !~ m/^[0-1]$/o) { authlib8_4_8::_bqa(106, "", "Malformed JavaScript flag input.", ""); } } elsif ($__bec eq "hid_backup") { if ($__bed !~ m/^[\w,]{0,100}$/o) { authlib8_4_8::_bqa(107, "", "Malformed backup input.", ""); } } } return $__bef; } sub _bnu { my($__bfk, $__bfl, $__bfm) = @_; my $__bes = $authlib8_4_8::_bze->{"num_data_tables"}; my @__bet = (); my @__beu = (); my $__bev = 0; for ($__bev = 0; $__bev < $__bes; $__bev++) { push @__bet, []; push @__beu, []; } my $__bew = 0; my $__bex = ""; my $__bey = ""; my $__bez = 0; my $__bfa = 0; my $__bfb = ""; my $__bfc = ""; if (@{$__bfk} > 0) { my @__bfd = (); my @__bfe = (); my @__bff = (); my @__bfg = (); my @__bfh = (); my $__bfi = ""; my %__bfj = (); if (!$__bfm) { push @{$__bfk}, ["sys_EndTime", time()]; } foreach $__bez (@{$__bfk}) { $__bex = $__bez->[0]; $__bey = authlib8_4_8::_bpy($__bez->[1]); $__bfb = ""; $__bfj{$__bex} = 1; if (exists $authlib8_4_8::_bzi{"hid_loops"}) { $__bfb = $__bex; $__bfb =~ s/(\.\d+)+//; } if ($__bey eq "") { delete $authlib8_4_8::_byy->{$__bex}; $__bey = undef; if ($__bfb) { delete $authlib8_4_8::_byy->{$__bfb}; } } else { authlib8_4_8::_bnd($__bex, $__bey); if ($__bfb) { authlib8_4_8::_bnd($__bfb, $__bey); } } ($__bfa, $__bfc) = _bnv($__bex); push @{$__beu[$__bfa - 1]}, "`" . $__bex . "`=?"; push @{$__bet[$__bfa - 1]}, _bms($__bey); } for ($__bev = 0; $__bev < $__bes; $__bev++) { @__bfg = @{$__beu[$__bev]}; @__bff = @{$__bet[$__bev]}; if(@__bff) { eval { $__bfi = "UPDATE `" . $authlib8_4_8::_bzb . "_data" . ($__bev + 1) . "` SET " . join(",", @__bfg) . " WHERE `sys_RespNum` = " . $__bfl; my $__bew = $authlib8_4_8::_byw->prepare(authlib8_4_8::_bmy($__bfi, 0)); $__bew->execute(@__bff); }; if ($@) { authlib8_4_8::_bqa(240, "Database error.", "Database error. Cannot update data row.", $@); } } } $authlib8_4_8::_byw->commit(); } } sub _bnv { my($__bgd, $__bge, $__bgf) = @_; my $__bfn = 0; my $__bfo = $authlib8_4_8::_bze->{"num_data_tables"}; my $__bfp = 0; my $__bfq = ""; my $__bfr = 0; my $__bfs = ""; my $__bft = ""; $__bfq = "SELECT * FROM `" . $authlib8_4_8::_bzb . "_map` WHERE `fields` LIKE '%" . $__bgd; my $__bfu = $__bgd; my $__bfv = 0; if ($__bge) { $__bfu .= '.'; $__bfq .= '.'; $__bfv = sub { return $_[0] =~ m/(?>^|,)\Q$__bfu\E/i; }; } else { $__bfv = sub { return $_[0] =~ m/(?>^|,)\Q$__bgd\E(?>,|$)/i; }; } $__bfq .= "%';"; eval { $__bfr = $authlib8_4_8::_byw->selectall_arrayref(authlib8_4_8::_bmy($__bfq, 0), {Slice => {}}); my $__bfw = @{$__bfr}; if ($__bfw > 1) { for ($__bfp = 0; $__bfp < $__bfw; $__bfp++) { if ($__bfv->($__bfr->[$__bfp]->{"fields"})) { $__bfn = $__bfr->[$__bfp]->{"table"}; last; } } } elsif ($__bfw > 0) { if ($__bfv->($__bfr->[0]->{"fields"})) { $__bfn = $__bfr->[0]->{"table"}; } } }; if ($@) { authlib8_4_8::_bqa(261, "Database error.", "Database error. Cannot select map row.", $@); } if ($__bfn && $__bgf) { my $__bfx = 0; my $__bfy = ""; if ($__bgd =~ m/^(.*?)_/i) { $__bfy = $1; if($__bgd =~ m/^sys_/i) { if($__bgd =~ m/^(sys_.*?)_/i) { $__bfy = $1; $__bfx = 1; if ($__bgd =~ m/^(sys_ACBC_.*?)_/i) { $__bfy = $1; $__bfx = 1; } } } else { $__bfx = 1; } } if ($__bfx) { my @__bfz = (); my $__bga = 0; my $__bgb = ""; my $__bgc = 0; while ($__bfs =~ m/,($__bfy[^,]*)/g) { $__bgb = $1; push @__bfz, $__bgb; $__bga++; if ($__bge) { if ($__bgb =~ m/^$__bgd\./) { $__bgc = 1; } } else { if ($__bgb eq $__bgd) { $__bgc = 1; } } if ($__bga == 100) { last; } } if ($__bgc) { $__bft = "`" . join("`,`", @__bfz) . "`"; } else { $__bft = "`" . $__bgd . "`"; } } else { $__bft = "`" . $__bgd . "`"; } } return ($__bfn, $__bft); } sub _bnw { my($__bgl, $__bgm) = @_; my $__bgg = 0; my $__bgh = ""; my $__bgi = ""; eval { my $__bgj = "INSERT INTO `" . $authlib8_4_8::_bzb . "_clists` (`sys_RespNum`,`list_name`,`value`) VALUES (?, ?, ?)"; my $__bgk = $authlib8_4_8::_byw->prepare(authlib8_4_8::_bmy($__bgj, 0)); foreach $__bgg (@{$__bgl}) { $__bgh = $__bgg->[0]; $__bgi = $__bgg->[1]; authlib8_4_8::_bnd($__bgh, $__bgi); $__bgk->execute($__bgm, $__bgh, authlib8_4_8::_bms($__bgi)); } $authlib8_4_8::_byw->commit(); }; if ($@) { authlib8_4_8::_bqa(253, "Database error.", "Database error. Cannot insert clist row.", $@); } } sub _bnx { my ($__bgw, $__bgx) = @_; my @__bgn = (); my @__bgo = (); my @__bgp = reverse @{authlib8_4_8::_bof($__bgw, {'limbo' => 0})}; my @__bgq = sort {$__bgx->{$a} <=> $__bgx->{$b}} keys %{$__bgx}; my $__bgr = shift(@__bgq); my $__bgs = 0; my $__bgt = 0; my $__bgu = 0; my $__bgv = 1; while ($__bgv && $__bgr) { $__bgv = 0; for ($__bgs = 0; $__bgs < @__bgp; $__bgs++) { next if ($__bgp[$__bgs]->{"quest_name"} eq "hid_page_vars_history"); last if ($__bgp[$__bgs]->{"quest_name"} eq $__bgr || exists $__bgp[$__bgs]->{"data"}->{$__bgr}); } $__bgu = $__bgs; $__bgt = 0; for ($__bgs++; $__bgs < @__bgp; $__bgs++) { next if ($__bgp[$__bgs]->{"quest_name"} eq "hid_page_vars_history"); if ($__bgp[$__bgs]->{"quest_name"} eq $__bgr || exists $__bgp[$__bgs]->{"data"}->{$__bgr}) { $__bgt = _bny($__bgp[$__bgu]->{"data"}, $__bgp[$__bgs]->{"data"}); if($__bgt) { eval { $__bgv = 1; do { $authlib8_4_8::_byw->do(authlib8_4_8::_bmy("UPDATE `" . $authlib8_4_8::_bzb . "_history` SET `limbo`=1 WHERE `sys_RespNum`=" . $__bgw . " AND `hop`=" . $__bgp[$__bgu]->{"hop"}, 0)); $__bgr = shift(@__bgq); splice(@__bgp, $__bgu, 1); $__bgu--; } while ($__bgr =~ m/^(?>sys|hid)_/io && $__bgu >= 0); $authlib8_4_8::_byw->commit(); last; }; if ($@) { authlib8_4_8::_bqa(311, "Unable to update history row", $@, ""); } } else { @__bgo = (($__bgu + 1)..$__bgs); } last; } } if(@__bgo) { _bnz($__bgw, \@__bgp, \@__bgo); last; } } } sub _bny { my($__bhe, $__bhf) = @_; my $__bgy = 1; my @__bgz = keys %{$__bhe}; my @__bha = keys %{$__bhf}; my $__bhb = ""; my $__bhc = ""; my $__bhd = ""; if(@__bgz == @__bha) { foreach $__bhd (@__bgz) { if($__bhe->{$__bhd} ne $__bhf->{$__bhd}) { $__bgy = 0; last; } } } else { $__bgy = 0; } return $__bgy; } sub _bnz { my ($__bhy, $__bhz, $__bia) = @_; my @__bhg = @{$__bhz}; my @__bhh = @{$__bia}; my @__bhi = (); my $__bhj = $authlib8_4_8::_bze->{"num_data_tables"}; my $__bhk = 0; my $__bhl = 0; my $__bhm = ""; my $__bhn = ""; my %__bho = (); _bsq(); if ($authlib8_4_8::_cab && @__bhh > 0) { while (my ($__bhp, $__bib) = each %{$authlib8_4_8::_cab}) { if (ref($__bib) eq "CList") { $__bho{$__bhp} = 1; $__bho{$__bhp . "_others"} = 1; } } $__bhl = 0; while ($__bhl < @__bhh) { my $__bhp = $__bhg[$__bhh[$__bhl]]->{"quest_name"}; $__bhp =~ s/^(\w+)(?:\.\d+)*$/$1/o; if (exists $__bho{$__bhp}) { push(@__bhi, $__bhh[$__bhl]); splice(@__bhh, $__bhl, 1); } else { $__bhl++; } } } if (@__bhh > 0) { my @__bhq = (); my @__bhr = (); my @__bhs = (); for ($__bhl = 0; $__bhl < $__bhj; $__bhl++) { push @__bhq, []; push @__bhs, {}; } foreach my $__bht (@__bhh) { my $__bhu = $__bhg[$__bht]; next if ($__bhu->{"quest_name"} eq "hid_page_vars_history"); foreach my $__bhv (sort keys %{$__bhu->{"data"}}) { ($__bhk, $__bhm) = _bnv($__bhv); if ($__bhk == 0 || exists $__bhs[$__bhk - 1]->{$__bhv}) { next; } $__bhs[$__bhk - 1]->{$__bhv} = 1; $authlib8_4_8::_bwu->{$__bhv} = 1; push @{$__bhq[$__bhk - 1]}, "`" . $__bhv . "`=null"; } } foreach my $__bht (@__bhh) { my $__bhu = $__bhg[$__bht]; push (@__bhr, "UPDATE `" . $authlib8_4_8::_bzb . "_history` SET `limbo`=1 WHERE `sys_RespNum`=" . $__bhy . " AND `hop`=" . $__bhu->{"hop"}); } for ($__bhl = 0; $__bhl < $__bhj; $__bhl++) { my @__bhw = @{$__bhq[$__bhl]}; if(@__bhw) { eval { $__bhn = "UPDATE `" . $authlib8_4_8::_bzb . "_data" . ($__bhl + 1) . "` SET " . join(",", @__bhw) . " WHERE `sys_RespNum` = " . $__bhy; $authlib8_4_8::_byw->do(authlib8_4_8::_bmy($__bhn, 0)); }; if ($@) { authlib8_4_8::_bqa(203, "Database error.", "Database error. Cannot update data row. SQL: " . $__bhn, $@); } } } eval { foreach $__bhn (@__bhr) { $authlib8_4_8::_byw->do(authlib8_4_8::_bmy($__bhn, 0)); } }; if ($@) { authlib8_4_8::_bqa(272, "Database error.", "Database error. Cannot update history row.", $@); } } foreach my $__bhx (@__bhi) { my $__bhu = $__bhg[$__bhx]; $__bhn = "UPDATE `" . $authlib8_4_8::_bzb . "_history` SET `limbo`=1 WHERE `sys_RespNum`=" . $__bhy . " AND `hop`=" . $__bhu->{"hop"}; $authlib8_4_8::_byw->do(authlib8_4_8::_bmy($__bhn, 0)); $__bhn = "DELETE FROM `" . $authlib8_4_8::_bzb . "_clists` WHERE `sys_RespNum`=" . $__bhy . " AND `list_name`='" . $__bhu->{"quest_name"}. "'"; $authlib8_4_8::_byw->do(authlib8_4_8::_bmy($__bhn, 0)); $authlib8_4_8::_bwu->{$__bhu->{"quest_name"}} = 1; } $authlib8_4_8::_byw->commit(); } sub _boa { my($__bim) = @_; my $__bic = 0; my $__bid = ""; my $__bie = ""; my $__bif = 0; my $__big = ""; eval { my $__bih = 1; my $__bii = $authlib8_4_8::_bzb . "_info"; if ($authlib8_4_8::_bwn->{'_bgu'} eq "odbc") { $__big = "SELECT OBJECT_ID('" . $__bii . "')"; my $__bij = $authlib8_4_8::_byw->selectrow_arrayref(authlib8_4_8::_bmy($__big, 0)); if (!$__bij->[0]) { $__bih = 0; } } $authlib8_4_8::_bze = 0; if($__bih) { $__big = "SELECT * FROM `" . $__bii . "`"; $authlib8_4_8::_bze = $authlib8_4_8::_byw->selectrow_hashref(authlib8_4_8::_bmy($__big, 0)); $authlib8_4_8::_bze->{"study_path"} = authlib8_4_8::_bmt($authlib8_4_8::_bze->{"study_path"}); $authlib8_4_8::_bze->{"close_survey_msg"} = authlib8_4_8::_bmt($authlib8_4_8::_bze->{"close_survey_msg"}); } }; if ($@ || $authlib8_4_8::_bze == 0) { $__bie = "Cannot read database info table."; $__bid = $@; } else { if (exists $authlib8_4_8::_bze->{"study_path"}) { my $__bik = $authlib8_4_8::_bze->{"study_path"}; my $__bil = $authlib8_4_8::_bwv{'_cba'}; if (authlib8_4_8::_bpn()) { $__bik = uc($__bik); $__bil = uc($__bil); } if (!$__bim && ($__bik eq $__bil)) { $__bic = 1; } else { if ($__bim) { $__bie .= "Error reading QST file. Entering setup mode...\n\n"; } $__bie .= "There are already database tables setup for \"" . $authlib8_4_8::_bzb . "\" in this database."; $__bie .= " Either remove the \"" . $authlib8_4_8::_bzb . "\" tables in this database or create a new database for this study."; $__bie .= "\n\n(Note: Another possibility is that the original path to the admin directory has changed. See the \"study_path\" column in the \"" . $authlib8_4_8::_bzb . "_info\" table.)"; $__bif = 1; } } } return ($__bic, $__bie, $__bid, $__bif); } sub _bob { my %__bin = (); my $__bio = $authlib8_4_8::_bwv{'_cba'} . $authlib8_4_8::_byz . "_config.cgi"; my $__bip = ""; my $__biq = ""; my ($__biu, $__biv) = authlib8_4_8::_bon($__bio, "read", 0, 1); my $__bir = _boi($__biu); close $__biu; my $__bis = ""; my $__bit = ""; while ($__bir =~ m/^(.*?):(.*?)$/mg) { $__bis = authlib8_4_8::_bpy($1); $__bit = authlib8_4_8::_bpy($2); $__bin{$__bis} = $__bit; } return \%__bin; } sub _boc { my($__bjw, $__bjx, $__bjy, $__bjz) = @_; my $__biw = ""; my $__bix = 0; eval { $__biw = "SELECT MAX(hop) FROM `" . $authlib8_4_8::_bzb . "_history` WHERE `sys_RespNum`=" . $__bjx; ($__bix) = $authlib8_4_8::_byw->selectrow_array(authlib8_4_8::_bmy($__biw, 0)); }; if ($@) { authlib8_4_8::_bqa(273, "Database error.", "Database error. Cannot get history row.", $@); } $__bix++; $__biw = "INSERT INTO `" . $authlib8_4_8::_bzb . "_history` (`sys_RespNum`,`hop`,`ipaddress`,`user_agent`,`timestamp`,`qst_version`,`quest_name`,`quest_version`,`page_num`,`limbo`,`data`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; my @__biy = (); my $__biz = ""; my $__bja = ""; my @__bjb = @{$__bjw}; my $__bjc = time(); my $__bjd = $authlib8_4_8::_bze->{"qst_version"}; my $__bje = ""; my %__bjf = (); my $__bjg = 0; my $__bjh = ""; if (exists $authlib8_4_8::_bzk->{'_bd'}) { $__bje = _bql(); } my $__bji = ""; if (exists $authlib8_4_8::_bzk->{'_bc'}) { $__bji = _bqk(); } foreach my $__bjj (grep(/hid_prev_/, sort keys %authlib8_4_8::_bzi)) { my ($__bka, $__bkb, $__bjl, $__bkc) = split(",", $authlib8_4_8::_bzi{$__bjj}); push(@__biy, {hop => $__bka, quest_name => $__bkb, quest_version => $__bkc, page_num => $__bjl}); } eval { my $__bjk = $authlib8_4_8::_byw->prepare(authlib8_4_8::_bmy($__biw, 0)); my $__bjl = 0; my $__bjm = ""; my $__bjn = ""; my $__bjo = ""; if (not $__bjy) { foreach my $__bjp (sort {$a->{"hop"} <=> $b->{"hop"}} @__biy) { $__bja = ""; ($__biz, $__bjn, $__bjo) = _brx($__bjp->{"quest_name"}); for (my $__bjq = 0; $__bjq < @__bjb; $__bjq++) { ($__bjm, $__bjn, $__bjo) = _brx($__bjb[$__bjq]->[0]); if ($__bjm eq $__biz) { $__bja .= "'" . $__bjb[$__bjq]->[0] . "' => "; my $__bjr = ""; if (exists $authlib8_4_8::_bzi{$__bjm . "_" . $__bjn}) { $__bjr = $authlib8_4_8::_bzi{$__bjm . "_" . $__bjn}; } elsif (exists $authlib8_4_8::_bzi{$__biz}) { $__bjr = $authlib8_4_8::_bzi{$__biz}; } else { $__bjr = $__bjb[$__bjq]->[1]; } $__bjr = _boe($__bjr); $__bja .= $__bjr . ","; splice(@__bjb, $__bjq, 1); $__bjq--; } } chop($__bja); $__bjl = $__bjp->{"page_num"}; if (not exists $__bjf{$__bjp->{"quest_name"}}) { $__bjf{$__bjp->{"quest_name"}} = $__bjg++; } $__bjk->execute($__bjx, $__bix, $__bje, _bms($__bji), $__bjc, $__bjd, $__bjp->{"quest_name"}, $__bjp->{"quest_version"}, $__bjp->{"page_num"}, 0, _bms("{" . $__bja . "}")); $__bix++; } } if ($__bjl == 0) { foreach my $__bjs (@__bjb) { my($__bjm, $__bjn, $__bjo) = _brx($__bjs->[0]); my $__bjt = $authlib8_4_8::_bwq{$__bjm}; if ($__bjt) { $__bjl = $__bjt->{'_v'}; last; } } if ($__bjl == 0) { $__bjl = $authlib8_4_8::_bzi{"hid_pagenum"}; } } foreach my $__bjs (@__bjb) { my $__bjr = $__bjs->[1]; $__bjr = _boe($__bjr); $__bja = "'" . $__bjs->[0] . "' => " . $__bjr; if (!exists $__bjf{$__bjs->[0]}) { $__bjf{$__bjs->[0]} = $__bjg++; } $__bjk->execute($__bjx, $__bix, $__bje, _bms($__bji), $__bjc, $__bjd, $__bjs->[0], "0", $__bjl, 0, _bms("{" . $__bja . "}")); $__bix++; } if (exists $authlib8_4_8::_bzi{"hid_page_vars"}) { $__bja = ""; my @__bju = split(/,/, $authlib8_4_8::_bzi{"hid_page_vars"}); foreach my $__bjv (@__bju) { $__bja .= "'" . $__bjv . "' => "; my $__bjr = ""; if (exists $authlib8_4_8::_bzi{$__bjv}) { $__bjr = $authlib8_4_8::_bzi{$__bjv}; } $__bjr = _boe($__bjr); $__bja .= $__bjr . ","; } chop($__bja); $__bjk->execute($__bjx, $__bix, $__bje, _bms($__bji), $__bjc, $__bjd, "hid_page_vars_history", "0", $__bjl, 0, _bms("{" . $__bja . "}")); $__bix++; } unless ($__bjz) { _bnx($__bjx, \%__bjf); } }; if ($@) { authlib8_4_8::_bqa(274, "Database error.", "Database error. Cannot insert history row.", $@); } $authlib8_4_8::_byw->commit(); $authlib8_4_8::_bzi{"sys_next_hop"} = $__bix; } sub _bod { my ($__bkm, $__bkn) = @_; my @__bkd = @{$__bkm}; my $__bke = 0; my $__bkf = 0; while ($__bkf < @__bkd) { my $__bkg = $__bkd[$__bkf]->[0]; my $__bkh = $__bkd[$__bkf]->[1]; my @__bki = (); eval { my $__bkj = "SELECT * FROM `" . $authlib8_4_8::_bzb . "_history` WHERE `sys_RespNum`=" . $__bkn . " AND `quest_name`='" . $__bkg . "' AND `quest_version`!='0' AND `limbo`=0 ORDER BY `hop` DESC"; @__bki = @{$authlib8_4_8::_byw->selectall_arrayref(authlib8_4_8::_bmy($__bkj, 0), { Slice => {} })}; }; if ($@) { authlib8_4_8::_bqa(282, "Database error.", "Database error. Cannot retrieve history row.", $@); } if (@__bki) { $__bke = 1; my $__bkk = authlib8_4_8::_boe($__bkh); eval { my $__bkj = "UPDATE `" . $authlib8_4_8::_bzb . "_history` SET `data`=? WHERE `sys_RespNum`=" . $__bkn . " AND `hop`=" . $__bki[0]->{"hop"}; my $__bkl = $authlib8_4_8::_byw->prepare(authlib8_4_8::_bmy($__bkj, 0)); $__bkl->execute(_bms("{'" . $__bkg. "' => " . $__bkk . "}")); splice(@__bkd, $__bkf, 1); }; if ($@) { authlib8_4_8::_bqa(283, "Database error.", "Database error. Cannot update history row.", $@); } } else { $__bkf++; } } if ($__bke) { $authlib8_4_8::_byw->commit(); } if (@__bkd) { authlib8_4_8::_boc(\@__bkd, $__bkn, 1, 0); } } sub _boe { my ($__bko) = @_; $__bko =~ s/\\/\\\\/go; $__bko =~ s/'/\\'/go; if ($__bko eq "") { $__bko = "''"; } else { $__bko = "'" . $__bko . "'"; } return $__bko; } sub _bof { my ($__bkw, $__bkx) = @_; my %__bkp = $__bkx ? %{$__bkx} : (); my $__bkq = delete $__bkp{"data"}; my $__bkr = "SELECT * FROM `" . $authlib8_4_8::_bzb . "_history` WHERE `sys_RespNum`=" . $__bkw; if (keys %__bkp) { while (my ($__bky, $__bkz) = each %__bkp) { $__bkr .= " AND "; $__bkr .= "`" . $__bky . "`="; $__bkr .= $authlib8_4_8::_byw->quote($__bkz); } } $__bkr .= " ORDER BY `hop` ASC"; my $__bks = $authlib8_4_8::_byw->prepare(authlib8_4_8::_bmy($__bkr, 0)); my @__bkt = (); eval { $__bks->execute(); }; if ($@ && $authlib8_4_8::_bzy == 0) { authlib8_4_8::_bqa(206, "Database error while retrieving history.", $authlib8_4_8::_byw->errstr, $@); } my @__bku = @{$__bks->fetchall_arrayref({})}; foreach my $__bkv (@__bku) { next if (keys %{$__bkv} == 1); eval { $__bkv->{"data"} = eval(_bmt($__bkv->{"data"})); }; if ($@) { authlib8_4_8::_bqa(278, "Database error while retrieving history.", "Database error while evaling history.", $@); } if ($__bkq) { push(@__bkt, $__bkv) if (exists $__bkv->{"data"}->{$__bkq}); } else { push(@__bkt, $__bkv); } } return \@__bkt; } sub _bog { my $__bla = $authlib8_4_8::_bzi{"hid_respnum"}; my $__blb = 0; my $__blc = 0; if (exists $authlib8_4_8::_bzi{"sys_next_hop"} && $authlib8_4_8::_bzi{"sys_next_hop"} > 0) { $__blc = $authlib8_4_8::_bzi{"sys_next_hop"}; } elsif (exists $authlib8_4_8::_bzi{"sys_prev_low_hop"} && $authlib8_4_8::_bzi{"sys_prev_low_hop"} > 0) { $__blc = $authlib8_4_8::_bzi{"sys_prev_low_hop"}; } else { my @__bld = (); foreach my $__ble (grep(/hid_prev_/, (sort keys %authlib8_4_8::_bzi))) { my ($__blh,$__bli, $__blj, $__blk) = split(",", $authlib8_4_8::_bzi{$__ble}); push(@__bld, [ $__bli, $__blh ]); } @__bld = sort {$a->[1] <=> $b->[1]} @__bld; $__blc = $__bld[0]->[1]; } my $__blf = "SELECT COUNT(*) FROM `" . $authlib8_4_8::_bzb . "_history` WHERE `sys_RespNum`=" . $__bla . " AND `limbo` = 0 AND `quest_version` != '0' AND `hop` <= " . $__blc; eval { my $__blg = $authlib8_4_8::_byw->selectrow_arrayref(authlib8_4_8::_bmy($__blf, 0)); $__blb = $__blg->[0]; }; if ($@ && $authlib8_4_8::_bzy == 0) { authlib8_4_8::_bqa(252, "Database error while retrieving history.", $authlib8_4_8::_byw->errstr, $@); } return $__blb; } sub _boh { my ($__bln, $__blo) = @_; my $__bll = 0; if ($authlib8_4_8::_bzy) { if ($perltools::intPreviewSinglePageNum) { $__blo = $perltools::intPreviewSinglePageNum; } if ($__blo > 1 || exists($authlib8_4_8::_bzi{"hid_preview_global_settings"})) { $__bll = $authlib8_4_8::_bzk->{'_aa'}; } } elsif ($__blo == 2) { my $__blm = _bnc("sys_ShowPrev"); if (exists $authlib8_4_8::_bzi{"hid_test_mode_settings"} || exists $authlib8_4_8::_bzi{"hid_show_prev"} || $__blm) { $__bll = $authlib8_4_8::_bzk->{'_aa'}; } } elsif ($__blo > 2) { $__bll = $authlib8_4_8::_bzk->{'_aa'}; } return $__bll; } sub _boi { my($__blt) = @_; binmode $__blt; my $__blp = -s $__blt; my $__blq = tell $__blt; my $__blr = ""; my $__bls = read($__blt, $__blr, $__blp); if ($__bls != ($__blp - $__blq)) { authlib8_4_8::_bqa(270, "File read error.", "File read error.", ""); } return $__blr; } sub _boj { my ($__blu, $__blv) = @_; return do { local $/ = $__blv; <$__blu> }; } sub _bok { my ($__blw) = @_; return do {local $/; <$__blw> }; } sub _bol { my ($__bly) = @_; my $__blx = 0; if (&authlib8_4_8::_CCA <= $__bly && $__bly <= &authlib8_4_8::_CCD) { $__blx = 1; } return $__blx; } sub _bom { my ($__bma) = @_; my $__blz = 0; if (&authlib8_4_8::_CCN <= $__bma && $__bma <= &authlib8_4_8::_CCS) { $__blz = 1; } return $__blz; } sub _bon { my ($__bmh, $__bmi, $__bmj, $__bmk) = @_; my $__bmb = Symbol::gensym(); my $__bmc = ""; my $__bmd = ""; my $__bme = ""; if ($__bmi eq "write") { $__bmc = ">"; } elsif ($__bmi eq "read") { $__bmc = "<"; } elsif ($__bmi eq "update") { $__bmc = "+<"; } elsif ($__bmi eq "create_update") { $__bmc = "+>"; } elsif ($__bmi eq "append") { $__bmc = ">>"; } else { die("Unrecognized parameter in OpenFile() with: " . $__bmh); } my $__bmf = 0; my $__bmg = 0; open $__bmb, $__bmc . $__bmh or eval{$__bmf = 1}; if ($__bmf) { $__bmd = "Can't open file " . $__bmh . "."; $__bme = $!; if ($__bmk) { authlib8_4_8::_bqa(117, "File open error.", $__bmd, $__bme); } else { $__bmg = {}; $__bmg->{'_cbb'} = $__bmd; $__bmg->{'_cbc'} = $__bme; } } return ($__bmb, $__bmg); } sub _boo { my ($__bmm) = @_; if (!exists $authlib8_4_8::_bxu{$__bmm} && ($authlib8_4_8::_bzh == 0)) { my $__bml = ""; if (!(-e $authlib8_4_8::_bxv . "/" . $__bmm)) { $__bml = "Cannot find library in " . $authlib8_4_8::_bxv; } eval { require $__bmm; if ($__bmm eq "acalib8_4_8.pl") { acalib8_4_8::_ces(); } elsif ($__bmm eq "acbclib8_4_8.pl") { acbclib8_4_8::_ciq(); } }; if ($@) { $__bml = $@; } if ($__bml ne "") { print "Content-type: text/html\r\n\r\n"; print "<html><body><br><span style=\"color: red;\"><u>Error:</u> &nbsp;</span> "; print "Cannot load library: <span style=\"color: blue;\">" . $__bmm . "</span> <br><br>" . $__bml; print "</body></html>"; exit(); } else { $authlib8_4_8::_bxu{$__bmm} = 1; } } } sub _bop { my ($__bmo) = @_; my $__bmn = ""; if ($authlib8_4_8::_bzk && exists $authlib8_4_8::_bzk->{'_be'}) { $__bmn .= $authlib8_4_8::_bzk->{'_be'}; } else { if($__bmo) { $__bmn .= $__bmo; } else { $__bmn .= "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">"; } } $__bmn .= "\n<html>\n"; $__bmn .= "<head>\n\n"; $__bmn .= "<!-- Sawtooth Software Web Interviewing System - SSI Web " . $authlib8_4_8::_bwx . " -->\n"; $__bmn .= "<!-- Copyright Sawtooth Software, Inc. 1998-2015 - www.sawtoothsoftware.com - USA - (801) 477-4700 -->\n\n"; if ($authlib8_4_8::_bzk && exists $authlib8_4_8::_bzk->{'_bf'}) { } else { $__bmn .= "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n"; $__bmn .= "<meta name=\"robots\" content=\"noindex, nofollow\">\n\n"; $__bmn .= "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n"; } return $__bmn; } sub _boq { my($__bmr) = @_; my $__bmp = ""; my $__bmq = ""; $__bmp .= _bor([6,10,10.5,11.8,3.2,11.5,11.6,12.1,10.8,10.1,6.1,3.4,9.8,9.7,9.9,10.7,10.3,11.4,11.1,11.7,11,10,4.5,9.9,11.1,10.8,11.1,11.4,5.8,3.5,7,7,7,7,5.7,7,5.9,3.2,11.6,10.1,12,11.6,4.5,9.7,10.8,10.5,10.3,11,5.8,9.9,10.1,11,11.6,10.1,11.4,5.9,3.2,10.2,11.1,11,11.6,4.5,10.2,9.7,10.9,10.5,10.8,12.1,5.8,3.2,9.7,11.4,10.5,9.7,10.8,5.9,3.2,10.2,11.1,11,11.6,4.5,11.5,10.5,12.2,10.1,5.8,3.2,5,5.3,11.2,12,5.9,3.2,9.9,11.1,10.8,11.1,11.4,5.8,3.2,3.5,4.8,4.8,4.8,4.8,4.8,4.8,5.9,3.2,11.2,9.7,10,10,10.5,11,10.3,5.8,5.3,11.2,12,5.9,3.4,6.2,8.3,9.7,11.9,11.6,11.1,11.1,11.6,10.4,3.2,8.3,11.1,10.2,11.6,11.9,9.7,11.4,10.1,3.2,4.5,3.2,8.3,8.3,7.3,3.2,8.7,10.1,9.8,3.2,6.8,10.1,10.9,11.1]); if ($__bmr) { $__bmp .= _bor([6,9.8,11.4,6.2,6,11.5,11.2,9.7,11,3.2,11.5,11.6,12.1,10.8,10.1,6.1,3.4,9.9,11.1,10.8,11.1,11.4,5.8,11.4,10.1,10,5.9,3.2,10.2,11.1,11,11.6,4.5,11.5,10.5,12.2,10.1,5.8,3.2,4.9,5.6,11.2,12,5.9,3.4,6.2,5.3,3.2,11.4,10.1,9.9,11.1,11.4,10,3.2,10.9,9.7,12,10.5,10.9,11.7,10.9,3.2,10.5,11,3.2,6.8,10.1,10.9,11.1,3.2,8.6,10.1,11.4,11.5,10.5,11.1,11,6,4.7,11.5,11.2,9.7,11,6.2]); } $__bmp .= _bor([6,4.7,10,10.5,11.8,6.2,6,9.8,11.4,6.2]); return $__bmp; } sub _bor { my($__bmt) = @_; my $__bms = ""; $__bms = join("", map {_bos($_)} @{$__bmt}); return $__bms; } sub _bos { my($__bmv) = @_; my $__bmu = "c" . "h" . "r"; $__bmu = eval($__bmu . "(" . $__bmv * 10 . ")"); if ($@) { } return $__bmu; } sub _bot { my $__bmw = lite::new(); %authlib8_4_8::_bzi = $__bmw->parse_new_form_data(); if ($authlib8_4_8::_bzi{'hid_studyname'} =~ m/\W/g) { die(); } } sub _bou { my ($__bnf, $__bng, $__bnh) = @_; my $__bmx = 0; my $__bmy = ""; my $__bmz = ""; my $__bna = ""; my $__bnb = 0; my $__bnc = ""; if($__bnh) { no strict; $__bnh = pack("C*", unpack("U0C*", $__bnh)); open($authlib8_4_8::_byh, '<', \$__bnh); } else { my $__bnd = $authlib8_4_8::_bwv{'_cba'} . $authlib8_4_8::_byz . "_qst.cgi"; ($authlib8_4_8::_byh, $__bmx) = authlib8_4_8::_bon($__bnd, "read", 1, $__bng); } if (!$__bmx) { binmode $authlib8_4_8::_byh; seek $authlib8_4_8::_byh, 0, 0; ($__bmy, $__bmz, $__bna, $__bnb, $__bmx) = _bov($authlib8_4_8::_byh, $__bng); if(!$authlib8_4_8::_bzy) { $authlib8_4_8::_bze->{"qst_version"} = $__bmy; } if (!$__bmx) { ($authlib8_4_8::_bxh, $authlib8_4_8::_bxe, $authlib8_4_8::_bxw, $authlib8_4_8::_bxz, $authlib8_4_8::_bxf, $authlib8_4_8::_bxg, $authlib8_4_8::_bxi) = _bow($authlib8_4_8::_byh); if ($__bnf) { return ($__bmy, $__bmz, $__bmx); } $authlib8_4_8::_bzj = authlib8_4_8::_bps(0); $authlib8_4_8::_bzk = authlib8_4_8::_bps(0); if ($__bnb) { $authlib8_4_8::_bzk->{'_bhb'} = $__bnb; } my %__bne = (); $authlib8_4_8::_bzl = authlib8_4_8::_bps(0); } } return ($__bmy, $__bmz, $__bna, $__bmx); } sub _bov { my ($__bnu, $__bnv) = @_; my $__bni = ""; my $__bnj = <$__bnu>; $__bnj = authlib8_4_8::_bpy($__bnj); my @__bnk = split(",", $__bnj); my $__bnl = authlib8_4_8::_bpy($__bnk[0]); if (($authlib8_4_8::_byz ne $__bnl) && $authlib8_4_8::_bzy == 0) { authlib8_4_8::_bqa(118, "Study name error.", "The study name passed in (" . $authlib8_4_8::_byz . ") does not match the study name in the STUDYNAME_qst.cgi file (" . $__bnl . "). The study name is case-sensitive." . "Make sure that the study name that you are passing in matches the name " . "of your study and try again.", ""); } my $__bnm = authlib8_4_8::_bpy($__bnk[2]); if ($__bnm ne $authlib8_4_8::_bwx) { $__bni = "The SSI Web version number from STUDYNAME_qst.cgi (" . $__bnm . ") does not match the version number in the Perl files (" . $authlib8_4_8::_bwx . ")."; if ($__bnv) { authlib8_4_8::_bqa(119, "Version number does not match.", $__bni); } } my $__bnn = authlib8_4_8::_bpy($__bnk[3]); my $__bno = authlib8_4_8::_bpy($__bnk[4]); my $__bnp = authlib8_4_8::_bpy($__bnk[5]); my $__bnq = authlib8_4_8::_bpy($__bnk[6]); if ($__bnq ne $authlib8_4_8::_bwz) { $__bni = "The Build ID in the QST (" . $__bnq . ") does not match the Build ID in the Perl files (" . $authlib8_4_8::_bwz . "). Make sure you are using the Perl files that installed with SSI Web."; if ($__bnv) { authlib8_4_8::_bqa(120, "Build ID error.", $__bni); } } my $__bnr = authlib8_4_8::_bpy($__bnk[7]); my $__bns = authlib8_4_8::_bpy($__bnk[8]); $authlib8_4_8::_bzu = $__bns; my $__bnt = 0; if ($__bni) { $__bnt = {}; $__bnt->{'_cbb'} = "Error reading QST file."; $__bnt->{'_cbc'} = $__bni; } return($__bnn, $__bno, $__bnp, $__bnr, $__bnt); } sub _bow { my($__bof) = @_; my $__bnw = <$__bof>; $__bnw = authlib8_4_8::_bpy($__bnw); my @__bnx = split(",", $__bnw); my $__bny = authlib8_4_8::_bpy($__bnx[0]); my $__bnz = authlib8_4_8::_bpy($__bnx[1]); my $__boa = authlib8_4_8::_bpy($__bnx[2]); my $__bob = authlib8_4_8::_bpy($__bnx[3]); my $__boc = authlib8_4_8::_bpy($__bnx[4]); my $__bod = authlib8_4_8::_bpy($__bnx[5]); my $__boe = authlib8_4_8::_bpy($__bnx[6]); return ($__bny, $__bnz, $__boa, $__bob, $__boc, $__bod, $__boe); } sub _box { if (!$authlib8_4_8::_bzo) { if ($authlib8_4_8::_bxz > 0) { seek $authlib8_4_8::_byh, $authlib8_4_8::_bxz, 0; $authlib8_4_8::_bzo = _bps(1); } } } sub _boy { my($__bol, $__bom) = @_; my @__bog = split("", $__bol); my $__boh = ""; my $__boi = ""; my $__boj = @__bog; my $__bok = 0; for ($__bok = 0; $__bok < $__boj; $__bok++) { $__boi .= sprintf "%lx", ord($__bog[$__bok]); } if (length($__boi) > $__bom) { if ($__boi =~ m/(.{$__bom})/) { $__boi = $1; } } return $__boi; } sub _boz { my $__bon = "<!--INPUT-->"; authlib8_4_8::_box(); if (exists $authlib8_4_8::_bzo->{'_bfx'}) { my $__boo = $authlib8_4_8::_bzo->{'_bfx'}->{'_bfy'}; my $__bop = 0; foreach $__bop (@{$__boo}) { $__bon .= "&" . $__bop->{'_bgt'} . "=VALUE"; } } if (exists $authlib8_4_8::_bzo->{'_bgq'}) { my $__boo = $authlib8_4_8::_bzo->{'_bgq'}; my $__bop = 0; foreach $__bop (@{$__boo}) { $__bon .= "&" . $__bop->{'_bgt'} . "=VALUE"; } } $__bon .= "<!--END INPUT-->"; return $__bon; } sub _bpa { my($__bpo, $__bpp) = @_; my $__boq = ""; my $__bor = 0; my @__bos = (); my @__bot = (); foreach $__bor (@{$__bpo}) { my $__bou = $__bor->{'_bkt'}; my $__bov = $__bou->{'_bce'}; my $__bow = @{$__bov}; my $__box = 0; my $__boy = 0; my $__boz = 0; my $__bpa = 0; my $__bpb = 0; my $__bpc = 0; my $__bpd = 0; if (exists($__bou->{'_bco'})) { authlib8_4_8::_bpd(); my $__bpe = $__bou->{'_bco'}->[0]; my $__bpf = $__bou->{'_bco'}->[1]; my $__bpg = $authlib8_4_8::_bzq->{'_gw'}; my $__bph = ""; my $__bpi = 0; my $__bpj = 0; foreach $__bph (@{$__bpg}) { if ($__bph eq $__bor->{'_bgt'}) { last; } else { $__bpi = _bpj($__bph); $__bpj += @{$__bpi->{'_bkt'}->{'_bce'}}; } } my $__bpk = 7919 + ($__bpp - 1) * 10000 + $__bpj; $__bpc = _bpb($__bor->{'_bgt'}, $__bov, $__bpe, $__bpf, $__bpk); } else { my @__bpl = (0..($__bow - 1)); $__bpc = \@__bpl; } for ($__box = 0; $__box < $__bow; $__box++) { $__boy = $__bov->[$__bpc->[$__box]]; $__boz = _bqg($__boy->{'_bcl'}, "quota control"); if ($__boz) { if (_bpe($__bor, $__boy->{'_bcm'})) { $__bpb = 1; $__bpd = $__boy->{'_bcm'}; last; } else { $__bpd = -2; } } else { if ($__bpd == 0) { $__bpd = -1; } } } push @__bos, {'_bgt'=> $__bor->{'_bgt'}, '_bcm'=> $__bpd}; if (!$__bpb && $__boq eq "") { $__boq = $__bou->{'_bcn'}; } } my @__bpm = (); my $__bpn = 0; foreach $__bpn (@__bos) { push @__bpm, [$__bpn->{'_bgt'}, $__bpn->{'_bcm'}]; } authlib8_4_8::_bod(\@__bpm, $__bpp); authlib8_4_8::_bnu(\@__bpm, $__bpp, 0); return $__boq; } sub _bpb { my($__bpw, $__bpx, $__bpy, $__bpz, $__bqa) = @_; my $__bpq = 0; my @__bpr = (); my %__bps = (); my $__bpt = @{$__bpx}; if ($__bpy < $__bpz) { $__bpy--; $__bpz--; my $__bpu = _bpg($__bpw, 0); for ($__bpq = $__bpy; $__bpq <= $__bpz; $__bpq++) { my %__bpv = (); $__bpv{'_bck'} = $__bpu->{$__bpx->[$__bpq]->{'_bcm'}}->{'_bck'}; $__bps{$__bpq} = \%__bpv; } for ($__bpq = 0; $__bpq < $__bpt; $__bpq++) { if ($__bpq >= $__bpy && $__bpq <= $__bpz && keys %__bps) { push @__bpr, _bpc(\%__bps, $__bqa + $__bpq); } else { push @__bpr, $__bpq; } } } return \@__bpr; } sub _bpc { my ($__bqi, $__bqj) = @_; my $__bqb = 0; my $__bqc = 0; my $__bqd = 0; foreach $__bqc (keys %{$__bqi}) { $__bqb += $__bqi->{$__bqc}->{'_bck'}; } my $__bqe = 0; my $__bqf = 0; if($__bqb > 0) { foreach $__bqc (keys %{$__bqi}) { $__bqi->{$__bqc}->{'_bgp'} = $__bqe; $__bqf = $__bqe + ($__bqi->{$__bqc}->{'_bck'} / $__bqb); $__bqi->{$__bqc}->{'_aop'} = $__bqf; $__bqe = $__bqf; } } my $__bqg = _bsj($__bqj); my $__bqh = 0; foreach $__bqc (keys %{$__bqi}) { if (($__bqg >= $__bqi->{$__bqc}->{'_bgp'} && $__bqg < $__bqi->{$__bqc}->{'_aop'}) || ($__bqi->{$__bqc}->{'_bgp'} == 0 && $__bqi->{$__bqc}->{'_aop'} == 0)) { $__bqh = 1; $__bqd = $__bqc; delete $__bqi->{$__bqc}; last; } } if (!$__bqh) { $__bqd = $__bqc; delete $__bqi->{$__bqc}; } return $__bqd; } sub _bpd { if ($authlib8_4_8::_bzq == 0) { if ($authlib8_4_8::_bxw) { my $__bqk = tell $authlib8_4_8::_byh; if ($__bqk < 0) { authlib8_4_8::_bou(1, 1, ""); } seek $authlib8_4_8::_byh, ($authlib8_4_8::_bxw), 0; $authlib8_4_8::_bzq = _bps(0); if ($__bqk < 0) { close $authlib8_4_8::_byh; } else { seek $authlib8_4_8::_byh, $__bqk, 0; } } else { authlib8_4_8::_bqa(122, "File read error.", "Problem reading QST Quota section: Quotas are not defined.", ""); } } } sub _bpe { my($__bqq, $__bqr) = @_; my $__bql = 0; my $__bqm = $__bqq->{'_bkt'}; my $__bqn = _bpg($__bqq->{'_bgt'}, $__bqm); my $__bqo = $__bqn->{$__bqr}->{'_cbd'}; my $__bqp = $__bqn->{$__bqr}->{'_bck'}; if (exists $__bqm->{'_bcp'}) { $__bql = $__bqo + $__bqn->{$__bqr}->{'in-progress'}; } else { $__bql = $__bqo; } if ($__bqp > $__bql) { return 1; } else { return 0; } } sub _bpf { my($__brn, $__bro) = @_; my $__bqs = 0; if ($authlib8_4_8::_bzr) { if (!exists $authlib8_4_8::_bzr->{$__brn}) { $__bqs = 1; } } else { $__bqs = 1; $authlib8_4_8::_bzr = {}; } if ($__bqs) { my $__bqt = 0; my $__bqu = {}; my ($__brp, $__brq) = _bnv($__brn); my $__bqv = 0; my $__bqw = 0; my $__bqx = 0; my $__bqy = $__bro->{'_bce'}; my $__bqz = 0; foreach $__bqz (@{$__bqy}) { $__bqu->{$__bqz->{'_bcm'}} = {'_cbd' => 0, 'in-progress' => 0, 'admin-in-progress' => 0, 'in-active' => 0, '_bck' => 0}; } if (exists $__bro->{'_bcp'}) { $__bqv = 1; if (exists $__bro->{'_bcp'}->{'_bcq'}) { $__bqw = int($__bro->{'_bcp'}->{'_bcq'} * 60); } if (exists $__bro->{'_bcp'}->{'_bcr'}) { $__bqx = $__bro->{'_bcp'}->{'_bcr'}; } } my @__bra = (); my @__brb = (); my @__brc = (); push @__bra, "`" . $authlib8_4_8::_bzb . "_data" . $__brp . "`.`" . $__brn . "`"; if ($__bqv) { push @__bra, "`" . $authlib8_4_8::_bzb . "_data1`.`sys_RespStatus`"; push @__bra, "`" . $authlib8_4_8::_bzb . "_data1`.`sys_EndTime`"; } else { push @__brc, "`" . $authlib8_4_8::_bzb . "_data1`.`sys_RespStatus` = " . &authlib8_4_8::_CCX; } push @__brb, "`" . $authlib8_4_8::_bzb . "_data1`"; if ($__brp > 1) { push @__brb, "`" . $authlib8_4_8::_bzb . "_data" . $__brp . "`"; push @__brc, "`" . $authlib8_4_8::_bzb . "_data1`.`sys_RespNum` = `" . $authlib8_4_8::_bzb . "_data" . $__brp . "`.`sys_RespNum`"; } my $__brd = "SELECT " . join(",", @__bra) . " FROM " . join(",", @__brb); if (@__brc) { $__brd .= " WHERE " . join(" AND ", @__brc); } eval { $__bqt = $authlib8_4_8::_byw->selectall_arrayref(authlib8_4_8::_bmy($__brd, 0)); }; if ($@) { authlib8_4_8::_bqa(229, "Database error.", "Database error reading data for quotas.", $@); } my $__bre = 0; my $__brf = 0; my $__brg = 0; my $__brh = 0; my $__bri = 0; my $__brj = time(); foreach $__bre (@{$__bqt}) { $__bri = $__bre->[0]; if ($__bqv) { $__brg = $__bre->[1]; $__brh = $__bre->[2]; } if ($__bri > 0) { if ($__bqv) { if ($__brg == &authlib8_4_8::_CCX) { $__bqu->{$__bri}->{'_cbd'}++; } elsif($__brg == &authlib8_4_8::_CCV) { if ($__bqw) { if (($__brh + $__bqw) < $__brj) { $__bqu->{$__bri}->{'in-active'}++; } else { $__bqu->{$__bri}->{'in-progress'}++; } } else { $__bqu->{$__bri}->{'in-progress'}++; } } } else { $__bqu->{$__bri}->{'_cbd'}++; } } } if ($__bqv && $__bqx) { my $__brk = 0; foreach $__bri (keys %{$__bqu}) { $__brk = $__bqu->{$__bri}->{'in-progress'}; $__bqu->{$__bri}->{'actual-in-progress'} = $__brk; $__bqu->{$__bri}->{'in-progress'} = int($__brk * ($__bqx / 100)); } } $__brd = "SELECT `cell_value`, `cell_limit` FROM `" . $authlib8_4_8::_bzb . "_quotas` WHERE `quota_name` = " . $authlib8_4_8::_byw->quote($__brn); eval { $__bqt = $authlib8_4_8::_byw->selectall_arrayref(authlib8_4_8::_bmy($__brd, 0)); }; if ($@) { authlib8_4_8::_bqa(230, "Database error.", "Database error reading quota table.", $@); } if (@{$__bqt}) { my $__brl = 0; my $__brm = 0; foreach $__bre (@{$__bqt}) { $__brl = $__bre->[0]; $__brm = $__bre->[1]; $__bqu->{$__brl}->{'_bck'} = $__brm; } } else { authlib8_4_8::_bqa(231, "Database error.", "Database error quota table returned nothing.", $@); } $authlib8_4_8::_bzr->{uc($__brn)} = $__bqu; } } sub _bpg { my($__brt, $__bru) = @_; if ($__bru == 0) { my $__brr = _bpj($__brt); $__bru = $__brr->{'_bkt'}; } _bpf($__brt, $__bru); my $__brs = 0; if (exists $authlib8_4_8::_bzr->{uc($__brt)}) { $__brs = $authlib8_4_8::_bzr->{uc($__brt)}; } return $__brs; } sub _bph { my $__brv = 0; my $__brw = ""; _bpd(); if ($authlib8_4_8::_bzq) { my $__brx = $authlib8_4_8::_bzq->{'_gw'}; my $__bry = ""; my $__brz = 0; my $__bsa = 0; foreach $__bry (@{$__brx}) { $__brz = authlib8_4_8::_bnc($__bry); if ($__brz > 0) { $__bsa = _brk($__bry, $__brz); if ($__bsa == 0) { $__brv = 1; my $__bsb = _bpj($__bry); $__brw = $__bsb->{'_bkt'}->{'_bcn'}; last; } } } } return ($__brv, $__brw); } sub _bpi { my($__bse, $__bsf) = @_; my $__bsc = ""; if ($__bsf > 0) { my $__bsd = _bpk($__bse, $__bsf); if ($__bsd) { $__bsc = $__bsd->{'_bgt'}; } } elsif ($__bsf == -1) { $__bsc = "[Disqualified]"; } elsif ($__bsf == -2) { $__bsc = "[Over Quota]"; } return $__bsc; } sub _bpj { my($__bsk) = @_; my $__bsg = 0; if (exists $authlib8_4_8::_bwq{$__bsk}) { $__bsg = $authlib8_4_8::_bwq{$__bsk}; my $__bsh = $__bsg->{'_w'}; my $__bsi = tell $authlib8_4_8::_byh; seek $authlib8_4_8::_byh, $__bsh, 0; my $__bsj = _bps(1); $__bsg->{'_bkt'} = $__bsj; seek $authlib8_4_8::_byh, $__bsi, 0; } return $__bsg; } sub _bpk { my($__bsp, $__bsq) = @_; my $__bsl = _bpj($__bsp); my $__bsm = 0; if ($__bsl) { my $__bsn = $__bsl->{'_bkt'}->{'_bce'}; my $__bso = 0; foreach $__bso (@{$__bsn}) { if ($__bso->{'_bcm'} == $__bsq) { $__bsm = $__bso; last; } } } return $__bsm; } sub _bpl { my($__bss, $__bst) = @_; if ($__bss =~ m/(.*?)_/i) { $__bss = $1; } authlib8_4_8::_boo("acalib8_4_8.pl"); acalib8_4_8::_cet($__bss, $__bst); my $__bsr = $acalib8_4_8::_cfz->{$__bss}; return $__bsr; } sub _bpm { my $__bsu = ""; my $__bsv = 0; my $__bsw = 0; my $__bsx = ""; $__bsx .= "Content-type: text/html\r\n\r\n"; if (exists($ENV{'MOD_PERL'}) && defined($ENV{'MOD_PERL'})) { $__bsv = 1; $__bsw = $ENV{'MOD_PERL'}; $__bsw =~ s/mod_perl\/(\d\.\d)(.*?)$/$1/i; } if ($ENV{'PERL_SEND_HEADER'} || ($__bsv == 0)) { $__bsu = $__bsx; } else { if ($__bsw < 1.9) { my $__bsy = Apache->request; $__bsy->content_type('text/html'); $__bsy->send_http_header; } else { $__bsu = $__bsx; } } $authlib8_4_8::_bzs = 1; return $__bsu; } sub _bpn { if (exists($ENV{'WINDIR'})) { return 1; } else { return 0; } } sub _bpo { my ($__bta, $__btb) = @_; my $__bsz = 1; eval { if ($__btb) { flock $__bta, 2; } else { flock $__bta, 1; } }; if ($@) { $@ = ""; $__bsz = 0; $authlib8_4_8::_bzt = 0; } seek $__bta, 0, 0; return $__bsz; } sub _bpp { my($__btf, $__btg, $__bth) = @_; my $__btc = 0; my $__btd = 0; if ($__bth) { ($__btc, $__btd) = _bon($__btf, "write", 1, 1); } else { ($__btc, $__btd) = _bon($__btf, "write", 0, 0); if ($__btd) { die(); } } my $__bte = authlib8_4_8::_bpo($__btc, $__btg); if ($__bte == 0) { if ($authlib8_4_8::_bwy eq ".pl") { print authlib8_4_8::_bpm(); print "<h4><u>Error</u>: This system does not support flock() for file locking. Please call Sawtooth Software.</h4>"; exit(); } _bpq($__btc); } return($__btc); } sub _bpq { my($__btl) = @_; my $__bti = time + 20; my $__btj = time; my $__btk = $authlib8_4_8::_bwv{'_cba'} . $authlib8_4_8::_byz . "_lockfiles/" . $__btl . "_LOCKFILE.cgi"; while (-e $__btk && $__btj < $__bti) { $__btj = time; } if (-e $__btk) { unlink($__btk); } my ($__btm, $__btn) = authlib8_4_8::_bon($__btk, "write", 0, 0); if ($__btn) { print "Content-type: text/html\r\n\r\n Can't create file $__btk. Check your write permissions." . $!; } close $__btm; } sub _bpr { my($__btp) = @_; my $__bto = $authlib8_4_8::_bwv{'_cba'} . $authlib8_4_8::_byz . "_lockfiles/" . $__btp . "_LOCKFILE.cgi"; unlink $__bto; } sub _bps { my($__btq) = @_; return _bpt($authlib8_4_8::_byh, $authlib8_4_8::_byz . "_qst.cgi", $__btq); } sub _bpt { my($__bud, $__bue, $__buf) = @_; my $__btr = 0; my $__bts = ""; my $__btt = $authlib8_4_8::_bzu == 0 ? "<\0\0/>" : "<\0/>"; $__bts .= _boj($__bud, $__btt); if ($__bts !~ s/^$__btt//m) { authlib8_4_8::_bqa(126, "File read error.", "The offsets in the " . $__bue . " file are incorrect. Please recreate the file and try again.", $!); } <$__bud>; if ($__buf && !$authlib8_4_8::_bys) { $__bts = _bqf($__bts, 1); } $__btr = eval($__bts); if ($@) { authlib8_4_8::_bqa(127, "File read error.", "Problem reading QST section. Make sure that you have uploaded the " . $__bue . " file in binary mode.", $@); } if (!defined($__btr)) { authlib8_4_8::_bqa(128, "File read error.", "Problem reading QST file. Text: " . $__bts, ""); } if (exists($ciwlib8_4_8::_bkl{'remove_rand'})) { my $__btu = ref $__btr; if (($__btu ne "SCALAR") && ($__btu ne "ARRAY")) { my $__btv = $__btr; if ($__btu =~ m/^grid$/i) { $__btv = $__btr->{'_ajb'}; _bpu($__btv); $__btv = $__btr->{'_ajq'}; _bpu($__btv); my $__btw = @{$__btr->{'_any'}}; my $__btx = 0; my $__bty = 0; for ($__bty = 0; $__bty < $__btw; $__bty++) { $__btx = $__btr->{'_any'}->[$__bty]; $__btu = ref $__btx; if ($__btu eq "ComboVar") { _bpu($__btx); } elsif ($__btu eq "RankVar") { _bpu($__btx); } } } elsif ($__btu eq "HASH") { my $__btz = 0; my $__bua = ""; my $__bub = ""; my $__buc = ""; foreach $__bua (keys %{$__btr}) { $__btz = $__btr->{$__bua}; $__bub = ref $__btz; if (($__bub eq "CList") || ($__bub eq "PList")) { if ($__bub eq "CList") { $__buc = $__btz->{'_bcl'}; $__buc =~ s/RANDOMIZE(.*?);//; $__btz->{'_bcl'} = $__buc; } } else { last; } } } else { if ($__btu ne "") { _bpu($__btv); } } } } return $__btr; } sub _bpu { my($__buh) = @_; my $__bug = ""; if (exists $__buh->{'_a'}) { delete($__buh->{'_a'}); } if (exists $__buh->{'_b'}) { delete($__buh->{'_b'}); } if (exists $__buh->{'_bdr'}) { delete($__buh->{'_bdr'}); } if (exists $__buh->{'_cbe'}) { delete($__buh->{'_cbf'}); } } sub _bpv { my ($__but) = @_; my $__bui = 0; my $__buj = $__but; my $__buk = ""; $__buj = reverse($__buj); $__buj =~ s/^.*?\///; $__buj = reverse($__buj); my $__bul = $__buj . '/admin/' . $authlib8_4_8::_byz . "_path.cgi"; my $__bum = $__buj . "/" . $authlib8_4_8::_byz . "/admin/" . $authlib8_4_8::_byz . "_path.cgi"; my $__bun = $__but . "/" . $authlib8_4_8::_byz . "_path.cgi"; my $__buo = $authlib8_4_8::_byz . "_path.cgi"; my $__bup = 0; my $__buq = 0; my $__bur = 0; my $__bus = ""; if (-e $__bul) { $__bus = $__bul; } elsif (-e $__bum) { $__bus = $__bum; } elsif (-e $__bun) { $__bus = $__bun; } elsif(-e $__buo) { $__bus = $__buo; $__bup = 1; } else { _bqa(129, "Cannot find the study name.", "Can't find file " . $authlib8_4_8::_byz . "_path.cgi.", "", 1); } ($__buq, $__bur) = authlib8_4_8::_bon($__bus, "read", 1, 1); $__buk = <$__buq>; $__buk = _bpy($__buk); if ($__bup) { $authlib8_4_8::_bwv{'_cba'} = $__buk; } else { $authlib8_4_8::_bwv{'_cba'} = _bpx($__but, $__buk); } $authlib8_4_8::_bwv{'_cba'} = _bqf($authlib8_4_8::_bwv{'_cba'}, 0); $authlib8_4_8::_bwv{'_cbg'} = $__buk; if (! -e $authlib8_4_8::_bwv{'_cba'}) { _bqa(130, "Directory does not exist.", "The directory: " . $authlib8_4_8::_bwv{'_cba'} . " does not exist. Check your study paths under Advanced Settings.", ""); } $__buk = <$__buq>; $__buk = _bpy($__buk); $authlib8_4_8::_bwv{'_blf'} = _bpw($__buk); close $__buq; } sub _bpw { my($__buv) = @_; my $__buu = ""; $__buu = $ENV{'SCRIPT_NAME'}; $__buu =~ s/\/ciwweb\.(pl|exe)//; $__buu =~ s/\/admin\.(pl|exe)//; $__buu = _bqf(_bpx($__buu, $__buv), 0); return $__buu; } sub _bpx { my ($__bux, $__buy) = @_; my $__buw = ""; if ($__buy =~ m/https?:\/\//i) { $__buw = $__buy; } else { $__bux = reverse($__bux); while ($__buy =~ m/^\.\.\//) { $__buy =~ s/^\.\.\///; $__bux =~ s/^.*?\///; } $__bux = reverse($__bux); $__buw = $__bux . "/" . $__buy; } return $__buw; } sub _bpy { my ($__buz) = @_; if (length($__buz)) { $__buz =~ s/^\s+//; $__buz =~ s/\s+$//; } return $__buz; } sub _bpz { my($__bvj, $__bvk) = @_; if ($authlib8_4_8::_bzy) { return; } my $__bva = $authlib8_4_8::_bze->{"qst_version"}; my $__bvb = ""; if (exists $authlib8_4_8::_bzk->{'_bd'}) { $__bvb = _bql(); } my $__bvc = ""; if (exists $authlib8_4_8::_bzk->{'_bc'}) { $__bvc = _bqk(); } my $__bvd = time(); my $__bve = $authlib8_4_8::_bzi{"hid_respnum"}; my $__bvf = ""; my $__bvg = ""; while (my ($__bvl, $__bvm) = each %authlib8_4_8::_bzi) { $__bvf .= $__bvg; $__bvf .= $__bvl . "=>" . $__bvm; $__bvg = ", "; } my $__bvh = "INSERT INTO `" . $authlib8_4_8::_bzb . "_design_log` (`sys_RespNum`,`ipaddress`,`user_agent`,`timestamp`,`qst_version`,`exercisename`,`input`,`message`) VALUES(?, ?, ?, ?, ?, ?, ?, ?)"; eval { my $__bvi = $authlib8_4_8::_byw->prepare(_bmy($__bvh, 0)); $__bvi->execute($__bve, $__bvb, _bms($__bvc), $__bvd, $__bva, $__bvj, _bms($__bvf), _bms($__bvk)); }; if ($@) { _bqa(296, "Database error.", "Database error. Cannot insert design log row.", $@); } } sub _bqa { my($__bvo, $__bvp, $__bvq, $__bvr, $__bvs) = @_; if ($__bvp eq "") { $__bvp = $__bvq; } my $__bvn = 0; if(!$__bvs) { $__bvn = _bse($__bvo, $__bvq . " | Server Error: " . $__bvr); } if ($authlib8_4_8::_bzh) { if ($__bvr ne "") { $__bvr = ": " . $__bvr; } die("Error: " . $__bvq . $__bvr . " Error"); } else { if (!$authlib8_4_8::_bzs) { print authlib8_4_8::_bpm(); } if (!$ciwlib8_4_8::_bkq) { print authlib8_4_8::_bop() . "\n<body>\n"; } print "<div style=\"border: 1px solid black; background-color: white; color: black; font-family: arial; padding: 5px;"; print " width: 800px; margin-left: auto; margin-right: auto; padding: 5px;\">\n"; print "<div style=\"color: red; text-decoration: underline; font-weight: bold;\">Sawtooth Error # " . $__bvo . "</div>"; print "<div><p>" . $__bvp . "</p></div>"; if ($__bvn) { print "<div>Error writing error log file. Check permissions.</div>"; } elsif(!$__bvs) { print "<div>Please check the error log for details.</div>"; } print "<div style=\"margin-top: 30px;\">"; print "Please try to refresh your browser or try to backup and submit again. If the error continues please contact the survey administrator."; if($__bvo == 129 || $__bvo == 102) { print "If you are starting the survey, please check the survey link and try again."; } print "</div></div>"; print _bqd(); print "</body>\n</html>\n"; authlib8_4_8::_bso(); } } sub _bqb { my $__bvt = ""; my $__bvu = Symbol::gensym(); opendir($__bvu, "../admin/") || authlib8_4_8::_bqa(314, "Cannot find default studyname.", "", "", 1); my @__bvv = readdir($__bvu); closedir $__bvu; my $__bvw = ""; foreach $__bvw(@__bvv) { if($__bvw =~ m/(.*?)_config\.cgi/i) { $__bvt = $1; last; } } return $__bvt; } sub _bqc { my($__bvx) = @_; if (!$authlib8_4_8::_bzs) { print authlib8_4_8::_bpm(); } if (!$ciwlib8_4_8::_bkq) { print authlib8_4_8::_bop() . "\n<body>\n"; } print "<div style=\"border: 2px solid orange; background-color: white; color: black; font-family: arial; padding: 5px;"; print " width: 800px; margin-left: auto; margin-right: auto; padding: 5px;\">\n"; print "<div style=\"color: blue; text-decoration: underline; font-weight: bold;\">Test Mode Error</div>"; print "<div><p>" . $__bvx . "</p></div>"; print "</div>"; print "</body>\n</html>\n"; authlib8_4_8::_bso(); } sub _bqd { my $__bvy = ""; $__bvy .= "\n<style type=\"text/css\">\n"; $__bvy .= ".loading{display: none;}\n"; $__bvy .= ".stage{display: block;}\n"; $__bvy .= "</style>\n"; return $__bvy; } sub _bqe { my($__bwa, $__bwb) = @_; my $__bvz = ""; $__bvz .= "<div style=\"border: 1px solid black; background-color: white; font-family: arial;"; $__bvz .= " width: 800px; margin-left: auto; margin-right: auto; padding: 5px;\">\n"; $__bvz .= "<div style=\"color: red; text-decoration: underline; font-weight: bold;\">Sawtooth Error:</div>"; $__bvz .= "<div style=\"color: black; padding: 5px;\">" . $__bwa . "</div>"; $__bvz .= "<div style=\"color: blue; padding: 5px;\">" . $__bwb . "</div>"; $__bvz .= "</div>"; return $__bvz; } sub _bqf { my($__bwe, $__bwf) = @_; my $__bwc = ""; my $__bwd = ""; while($__bwe =~ m/\[%(.*?)%\]/sg) { $__bwc = $1; if ($__bwf) { $__bwc =~ s/\\'/'/sg; $__bwc =~ s/\\\\/\\/sg; } $__bwd = _bqg($__bwc, "SSI Web Scripting"); $__bwd =~ s/\[%(.*?)%\]/$1/sg; if ($__bwf) { $__bwd =~ s/\\/\\\\/sg; $__bwd =~ s/'/\\'/sg; } $__bwe =~ s/\[%(.*?)%\]/$__bwd/s; } return $__bwe; } sub _bqg { my($__bwh, $__bwi) = @_; my $__bwg = ""; $__bwg = eval($__bwh); if ($authlib8_4_8::_bzy && ($__bwg eq "" || $@)) { $__bwg = "<span class=script_preview>[SSI Script]</span>"; } elsif($@) { if ($authlib8_4_8::_bzh) { return ""; } else { authlib8_4_8::_bqa(132, "Script error.", "There is an error in " . $__bwi . ": Script:" . $__bwh, $@); } } else { return $__bwg; } } sub RADIOSELECT { my($__bwj, $__bwk) = @_; return ciwlib8_4_8::_bkd($__bwj, $__bwk, 1, 0); } sub CHECKSELECT { my($__bwl, $__bwm) = @_; return ciwlib8_4_8::_bkd($__bwl . "_" . $__bwm, 1, 0, 0); } sub REMOVEPREVIOUS { my $__bwn = ""; $__bwn .= "<style type=\"text/css\">#previous_button{display: none;}</style>"; return $__bwn; } sub PAGETIME { my ($__bwt, $__bwu) = @_; my $__bwo = 0; my $__bwp = 0; if (exists $authlib8_4_8::_bzi{"hid_pagetime"}) { if ($__bwu eq "") { $__bwu = $__bwt; } if($__bwt =~ m/^\d+$/ && $__bwu =~ m/^\d+$/) { my $__bwq = 0; my $__bwr = 0; my $__bws = ""; for($__bwq = $__bwt; $__bwq <= $__bwu; $__bwq++) { $__bwp = int(_bnc("sys_pagetime_" . $__bwq)); if (!$__bwp) { if(!$__bwr) { $__bwr = _bqh(); } foreach $__bws(@{$__bwr}) { if ($__bws =~ m/^sys_pagetime_$__bwq\./i) { $__bwo += int(_bnc($__bws)); } } } else { $__bwo += $__bwp; } } } } return $__bwo; } sub _bqh { my $__bwv = $authlib8_4_8::_bze->{"num_data_tables"}; my ($__bxc, $__bxd) = _bnv("sys_pagetime_1"); my $__bww = ""; my $__bwx = 0; my @__bwy = (); my $__bwz = ""; for (my $__bxa = $__bxc; $__bxa <= $__bwv; $__bxa++) { $__bww = "SELECT `fields` FROM `" . $authlib8_4_8::_bzb . "_map` WHERE `table` = " . $__bxa; eval { $__bwx = $authlib8_4_8::_byw->selectrow_hashref(authlib8_4_8::_bmy($__bww, 0)); }; if ($@ || $__bwx == 0) { authlib8_4_8::_bqa(266, "Database error.", "Database error. Cannot select map row.", $@); } my @__bxb = split(",", $__bwx->{"fields"}); foreach $__bwz (@__bxb) { if ($__bwz =~ m/sys_pagetime_/i) { push @__bwy, $__bwz; } } } return \@__bwy; } sub BLOCKPOSITION { my $__bxe = $authlib8_4_8::_bwq{$authlib8_4_8::_byf}; my $__bxf = $__bxe->{'_v'}; my $__bxg = $authlib8_4_8::_bzj->[$__bxf - 1]; my $__bxh = ""; if (exists $__bxg->{'_c'}) { my $__bxi = $__bxg->{'_c'}; my @__bxj = @{ciwlib8_4_8::_bhw(ciwlib8_4_8::_bia(), $__bxf)}; my @__bxk = @{ciwlib8_4_8::_bhn($__bxi->{'_d'})}; for (my $__bxl = 0; $__bxl < @__bxj; $__bxl++) { my $__bxm = $__bxk[$__bxj[$__bxl] - 1]; if ($__bxm->[0] <= $__bxf && $__bxm->[1] >= $__bxf) { $__bxh = $__bxl + 1; last; } } } return $__bxh; } sub VALUE { my($__bxn) = @_; return _bnc($__bxn); } sub LABEL { my($__bxq) = @_; my $__bxo = ""; my $__bxp = ""; $__bxo = _bpy(authlib8_4_8::_bnc($__bxq)); if ($__bxo ne "") { $__bxp = _bry($__bxq, 1, $__bxo, 0); $__bxp = _bqf($__bxp, 0); } return $__bxp; } sub JAVASCRIPT { my $__bxr = 0; if (exists $authlib8_4_8::_bzi{"hid_javascript"} && defined $authlib8_4_8::_bzi{"hid_javascript"}) { if ($authlib8_4_8::_bzi{"hid_javascript"} == 1) { $__bxr = 1; } else { $__bxr = 0; } } return $__bxr; } sub BROWSER { return _bqi(); } sub _bqi { my $__bxs = ""; if(exists($ENV{'HTTP_USER_AGENT'})) { my $__bxt = $ENV{'HTTP_USER_AGENT'}; my $__bxu = SSIWebParseBrowser->new($__bxt); if (exists($__bxu->{"name"})) { $__bxs .= $__bxu->{"name"}; if (exists($__bxu->{"version"})) { $__bxs .= " " . $__bxu->{"version"}->{"v"}; } } } return $__bxs; } sub OPERATINGSYSTEM { return _bqj(); } sub _bqj { my $__bxv = ""; if(exists($ENV{'HTTP_USER_AGENT'})) { my $__bxw = $ENV{'HTTP_USER_AGENT'}; my $__bxx = SSIWebParseBrowser->new($__bxw); if (exists($__bxx->{"os"})) { $__bxv = $__bxx->{"os"}; } } return $__bxv; } sub USERAGENT { return _bqk(); } sub _bqk { my $__bxy = ""; if(exists($ENV{'HTTP_USER_AGENT'})) { $__bxy = $ENV{'HTTP_USER_AGENT'}; } return $__bxy; } sub IPADDRESS { return _bql(); } sub _bql { my $__bxz = ""; my @__bya = qw(HTTP_X_FORWARDED_FOR HTTP_FORWARDED_FOR HTTP_CLIENT_IP HTTP_X_REAL_IP REMOTE_ADDR); foreach my $__byb (@__bya) { if (exists $ENV{$__byb}) { $__bxz = $ENV{$__byb}; } if ($__bxz) { last; } } my $__byc = index($__bxz, ","); if ($__byc != -1) { $__bxz = substr($__bxz, 0, $__byc); } return (defined $__bxz) ? $__bxz : ""; } sub STUDYNAME { my $__byd = $authlib8_4_8::_byz; if ($authlib8_4_8::_bzy) { $__byd = ""; } return $__byd; } sub PAGENUMBER { return _bqm(); } sub _bqm { my $__bye = ""; if ((exists $authlib8_4_8::_bzi{"hid_pagenum"}) && (defined $authlib8_4_8::_bzi{"hid_pagenum"})) { $__bye = $authlib8_4_8::_bzi{"hid_pagenum"}; } return $__bye; } sub TOTALPAGES { my $__byf = 0; $__byf = @{$authlib8_4_8::_bzj}; return $__byf; } sub NUMCHECKED { my ($__byz) = @_; my($__bza, $__bzb, $__bzc) = _brx($__byz); if ($authlib8_4_8::_bzy || !exists $authlib8_4_8::_bwq{$__bza}) { return ""; } my $__byg = $authlib8_4_8::_bwq{$__bza}; my $__byh = $__byg->{'_bgu'}; my $__byi = tell $authlib8_4_8::_byh; my $__byj = $__byg->{'_w'}; seek $authlib8_4_8::_byh, $__byj, 0; my $__byk = _bps(0); my $__byl = 0; my $__bym = 0; my $__byn = 0; my $__byo = 0; my $__byp = ""; if ($__byh == &authlib8_4_8::_CBV) { if ($__byk->{'_bgu'} eq "check") { my $__byq = _bss($__byk->{'_bcs'}, $__bzc); if ($__byq) { $__byo = @{$__byq}; for ($__byl = 0; $__byl < $__byo; $__byl++) { $__bym = $__byq->[$__byl]->{'_bcm'}; $__byp = $__bza . "_" . $__bym . $__bzc; if (authlib8_4_8::_bnc($__byp) == 1) { $__byn++; } } } } } elsif($__byh == &authlib8_4_8::_CCH) { my $__byr = 0; my $__bys = 0; my $__byt = 0; if ($__bzb =~ m/r(\d+)/i) { $__byr = $1; $__byt = authlib8_4_8::_bss($__byk->{'_alu'}, $__bzc); } elsif ($__bzb =~ m/c(\d+)/i) { $__bys = $1; $__byt = authlib8_4_8::_bss($__byk->{'_ajl'}, $__bzc); } if($__byt) { $__byo = @{$__byt}; } for ($__byl = 0; $__byl < $__byo; $__byl++) { $__bym = $__byt->[$__byl]->{'_bcm'}; $__byp = $__bza . "_" . $__bym; if ($__byr > 0) { $__byp = $__bza . "_r" . $__byr . "_c" . $__bym; } elsif ($__bys > 0) { $__byp = $__bza . "_r" . $__bym . "_c" . $__bys; } $__byp .= $__bzc; if (authlib8_4_8::_bnc($__byp) == 1) { $__byn++; } } } elsif ($__byh == &authlib8_4_8::_CCG) { my $__byu = $__byk->{'_any'}; my $__byv = 0; my $__byw = ""; my $__byx = 0; my $__byy = 0; for($__byl = 0; $__byl < @{$__byu}; $__byl++) { $__byv = $__byu->[$__byl]; $__byw = ref($__byv); if ($__byw eq "CheckVar") { if ($__byv->{'_bgt'} eq $__byz) { $__byy = $__byv->{'_aoq'}; for ($__byx = 1; $__byx <= $__byy; $__byx++) { $__byp = $__byz . "_" . $__byx . $__bzc; if (authlib8_4_8::_bnc($__byp) == 1) { $__byn++; } } last; } } } } seek $authlib8_4_8::_byh, $__byi, 0; return $__byn; } sub DISPLAYTOTAL { my($__bzn, $__bzo, $__bzp) = @_; my $__bzd = ""; my $__bze = 0; my $__bzf = ""; my $__bzg = 1; my @__bzh = (); my %__bzi = (); my $__bzj = $authlib8_4_8::_bzi{"hid_javascript"}; my $__bzk = 1; my $__bzl = 0; if ($__bzn =~ m/^(.*?)(_?)(\d+)$/) { $__bzf = $1 . $2; if ($2 eq "_") { $__bzk = 0; } $__bzg = $3; } if ($__bzo =~ m/^(.*?)(\d+)$/) { $__bzl = $2; } $__bzi{$__bzf . "*"} = 1; for ($__bze = $__bzg; $__bze <= $__bzl; $__bze++) { push @__bzh, $__bze; } my $__bzm = ""; if ($__bzj || $authlib8_4_8::_bzy) { if ($__bzk) { $__bzm = "_total_" . $authlib8_4_8::_bxt; } else { $__bzm = "total_" . $authlib8_4_8::_bxt; } $__bzd .= ciwlib8_4_8::_bjb($__bzf . $__bzm, $__bzp); } if ($__bzj && ($authlib8_4_8::_bzy == 0)) { $__bzd .= ciwlib8_4_8::_biz($__bzn . "_" . $authlib8_4_8::_bxt, \@__bzh, \%__bzi, $__bzm); } $authlib8_4_8::_bxt++; return $__bzd; } sub QUESTIONNAME { return $authlib8_4_8::_byf; } sub GRAPHICSPATH { return $authlib8_4_8::_bwv{'_blf'}; } sub PROGRESSBAR { my $__bzq = $authlib8_4_8::_bzk->{'_da'}; return ciwlib8_4_8::_bjw($__bzq); } sub PROGRESSBAROFF { $authlib8_4_8::_bzw = 1; return ""; } sub PROGRESSBARSET { my($__bzr) = @_; $authlib8_4_8::_bzx = $__bzr; return ""; } sub RANDNUM { my($__bzy, $__bzz, $__caa) = @_; my $__bzs = @_; my $__bzt = 0; my $__bzu = ""; my $__bzv = ""; my $__bzw = ""; if($__bzs == 1) { $__bzt = $__bzy; } elsif($__bzs == 3) { $__bzt = $__bzy; $__bzu = $__bzz; $__bzv = $__caa; } if (exists($authlib8_4_8::_bzi{"hid_respnum"}) && defined($authlib8_4_8::_bzi{"hid_respnum"})) { $__bzt = $authlib8_4_8::_bzi{"hid_respnum"} + int($__bzt); if ($__bzs == 1) { $__bzw = _bsj($__bzt); } elsif ($__bzu < $__bzv) { my $__bzx = $__bzv - $__bzu; _bsj($__bzt); $__bzw = (int rand($__bzx + 1)); $__bzw = $__bzw + $__bzu; } } return $__bzw; } sub SYSRAND { my($__cah, $__cai) = @_; my $__cab = @_; $authlib8_4_8::_bxt++; my $__cac = time() + $authlib8_4_8::_bxt; my $__cad = ""; my $__cae = ""; my $__caf = ""; if($__cab == 2) { $__cad = $__cah; $__cae = $__cai; } if ($__cab == 0) { $__caf = _bsj($__cac); } elsif ($__cad < $__cae) { my $__cag = $__cae - $__cad; _bsj($__cac); $__caf = (int rand($__cag + 1)); $__caf = $__caf + $__cad; } return $__caf; } sub RESPNUM { return $authlib8_4_8::_bzi{"hid_respnum"}; } sub LINKBUTTON { my($__cal) = @_; my $__caj = ""; if ($authlib8_4_8::_bzi{"hid_javascript"} == 1 || $authlib8_4_8::_bzy > 0) { if (exists $authlib8_4_8::_bzk->{'_cbh'}) { my $__cak = authlib8_4_8::_bqf($authlib8_4_8::_bzk->{'_cbh'}, 0); $__caj = "<a href=\"" . $__cal . "\">" . $__cak . "</a>\n"; } else { $__caj = "<input type=\"button\" value=\"" . authlib8_4_8::_bqf($authlib8_4_8::_bzk->{'_y'}, 0) . "\" onClick=\"window.location.href='" . $__cal . "'\">\n"; } } else { $__caj .= "<a href=\"" . $__cal . "\">"; if (exists $authlib8_4_8::_bzk->{'_cbh'}) { $__caj .= " >> "; } else { $__caj .= authlib8_4_8::_bqf($authlib8_4_8::_bzk->{'_y'}, 0); } $__caj .= "</a>\n"; } return $__caj; } sub POPUP { my($__can, $__cao, $__cap, $__caq) = @_; my $__cam = ""; if ($__cao !~ m/https?:\/\//) { $__cao = $authlib8_4_8::_bwv{'_blf'} . $__cao; } if (exists $authlib8_4_8::_bzi{"hid_javascript"} && $authlib8_4_8::_bzi{"hid_javascript"} == 1) { $__cam = "<a href=\"#\" onclick=\"window.open('" . $__cao . "', '','resizable=yes,scrollbars=yes,width=" . $__cap . ",height=" . $__caq . "'); return false;\">"; } else { $__cam = "<a href=\"" . $__cao . "\" target=\"" . $__cao . "\">"; } $__cam .= $__can . "</a>"; return $__cam; } sub TOOLTIP { my($__cas, $__cat, $__cau, $__cav) = @_; my $__car = ""; $__car .= "<span class=\"tool_tip_link\">" . $__cas . "</span>"; $__car .= "<span class=\"tool_tip_text\""; if ($__cau || $__cav) { $__car .= " style=\""; if ($__cau) { $__car .= "width:" . $__cau . "px;"; } if ($__cav) { $__car .= "height:" . $__cav . "px;"; } $__car .= "\""; } $__car .= ">"; $__car .= $__cat; $__car .= "</span>"; return $__car; } sub DEBUG { my $__caw = ""; my $__cax = ciwlib8_4_8::_bia(); if ($__cax) { my $__cay = 0; my $__caz = ""; my $__cba = $authlib8_4_8::_bze->{"num_data_tables"}; my $__cbb = 0; my $__cbc = ""; my $__cbd = 0; my $__cbe = 0; my $__cbf = ""; my $__cbg = ""; my $__cbh = 0; my $__cbi = ""; my %__cbj = (); my @__cbk = (); my $__cbl = 0; for ($__cbb = 1; $__cbb <= $__cba; $__cbb++) { ($__cbc, $__cbd, $__cbe, $__cbf, $__cbg) = authlib8_4_8::_bmx($authlib8_4_8::_bzb . "_data" . $__cbb); eval { $__cbl = $authlib8_4_8::_byw->selectall_arrayref(authlib8_4_8::_bmy($__cbc, 0)); }; if ($@) { authlib8_4_8::_bqa(212, "Database error.", "Database error. Cannot get table description.", $@); } $__cbc = "SELECT * FROM `" . $authlib8_4_8::_bzb . "_data" . $__cbb . "` WHERE `sys_RespNum` = " . $__cax; $__cbh = 0; $__cbi = ""; eval { $__cbh = $authlib8_4_8::_byw->selectrow_arrayref(authlib8_4_8::_bmy($__cbc, 0)); }; if ($@ || $__cbh == 0) { authlib8_4_8::_bqa(268, "Database error.", "Database error. Cannot get data for DEBUG.", $@); } else { my $__cbm = 0; foreach my $__cbn (@{$__cbl}) { $__cbi = $__cbn->[$__cbd]; if ($__cbh->[$__cbm]) { $__cbj{$__cbi} = $__cbh->[$__cbm]; push @__cbk, $__cbi; } $__cbm++; } } } $__caw .= "<div class=\"debug_box\">"; $__caw .= "<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">"; $__caw .= "<tr class=\"debug_header\"><td align=\"center\" colspan=\"2\">"; $__caw .= "<h1>SSI Web DEBUGGER</h1>"; $__caw .= "</td></tr>"; $__caw .= "<tr class=\"debug_section\">"; $__caw .= "<td><b>Question Name</b></td>"; $__caw .= "<td><b>Value</b></td></tr>"; foreach $__cay (@__cbk) { if ($__cay =~ m/^sys_/i) { next; } $__caw .= "<tr><td align=\"right\"><b>" . $__cay . "</b></td><td align=\"left\">" . $__cbj{$__cay} . "</td></tr>"; } $__caw .= "<tr class=\"debug_section\">"; $__caw .= "<td><b>Constructed List</b></td>"; $__caw .= "<td><b>Value</b></td></tr>"; $__cbc = "SELECT * FROM `" . $authlib8_4_8::_bzb . "_clists` WHERE `sys_RespNum` = " . $__cax; $__cbh = 0; $__cbi = ""; eval { $__cbh = $authlib8_4_8::_byw->selectall_arrayref(authlib8_4_8::_bmy($__cbc, 0)); }; if ($@ || $__cbh == 0) { authlib8_4_8::_bqa(268, "Database error.", "Database error. Cannot get data for DEBUG.", $@); } else { foreach my $__cbo (@{$__cbh}) { $__caw .= "<tr><td align=\"right\"><b>" . $__cbo->[1] . "</b></td><td align=\"left\">" . $__cbo->[2] . "</td></tr>"; } } $__caw .= "<tr class=\"debug_section\"><td colspan=\"2\" align=\"left\">"; $__caw .= "<b>Internal Page Variables</b>"; $__caw .= "</td></tr>"; foreach $__cay (sort keys %authlib8_4_8::_bzi) { if ($__cay =~ m/hid_/) { $__caz = _bpy($authlib8_4_8::_bzi{$__cay}); if ($__cay eq "hid_pagenum") { if (exists $authlib8_4_8::_bzi{"hid_pagenum"}) { $__caz = $authlib8_4_8::_bzi{"hid_pagenum"}; } } if ($__caz eq "") { $__caz = "&nbsp;"; } $__caw .= "<tr><td align=\"right\"><b>" . $__cay . "</b></td><td align=\"left\">" . $__caz . "</td></tr>"; } } $__caw .= "<tr class=\"debug_section\"><td colspan=\"2\" align=\"left\">"; $__caw .= "<b>Internal System Variables</b>"; $__caw .= "</td></tr>"; foreach $__cay (sort keys %__cbj) { if ($__cay =~ m/^sys_/i) { $__caw .= "<tr><td align=\"right\"><b>" . $__cay . "</b></td><td align=\"left\">" . $__cbj{$__cay} . "</td></tr>"; } } $__caw .= "</table></div>"; } return $__caw; } sub STRINGTONUMBER { my($__cbp) = @_; $__cbp =~ s/^\s*0+(.+?)$/$1/; return $__cbp; } sub NUMBERTOSTRING { my($__cbq) = @_; return $__cbq; } sub BOOLEANTONUMBER { my($__cbr) = @_; return $__cbr; } sub NUMBERTOBOOLEAN { my($__cbs) = @_; return $__cbs; } sub LISTLENGTH { my($__cbt) = @_; return _bqn($__cbt); } sub _bqn { my($__cbw) = @_; my $__cbu = _bss($__cbw); my $__cbv = 0; if($__cbu) { $__cbv = @{$__cbu}; } return $__cbv; } sub LISTHASPARENTMEMBER { my($__ccb, $__ccc) = @_; my $__cbx = _bss($__ccb); my $__cby = 0; if ($__cbx) { $__cby = @{$__cbx}; } my $__cbz = 0; my $__cca = 0; for ($__cbz = 0 ; $__cbz < $__cby; $__cbz++) { if ($__cbx->[$__cbz]->{'_bcm'} == $__ccc) { $__cca = 1; last; } } return $__cca; } sub LISTLABEL { my($__ccf, $__ccg) = @_; my $__ccd = ""; my $__cce = _bss($__ccf); if (($__ccg > 0) && $__cce && ($__ccg <= @{$__cce})) { $__ccd = $__cce->[$__ccg - 1]->{'_bft'}; $__ccd = _bqf($__ccd, 0); } return $__ccd; } sub LISTVALUE { my($__ccj, $__cck) = @_; my $__cch = ""; my $__cci = _bss($__ccj); if (($__cck > 0) && $__cci && ($__cck <= @{$__cci})) { $__cch = $__cci->[$__cck - 1]->{'_bcm'}; } return $__cch; } sub LISTVALUESARRAY { my($__ccn) = @_; my $__ccl = ""; my $__ccm = _bss($__ccn); if ($__ccm) { $__ccl = "[" . join(",", map{$_->{'_bcm'}} @{$__ccm}) . "]"; } return $__ccl; } sub LISTLABELSARRAY { my($__ccq) = @_; my $__cco = ""; my $__ccp = _bss($__ccq); if ($__ccp) { $__cco = "[" . join(",", map{"'" . _bqo($_) . "'"} @{$__ccp}) . "]"; } return $__cco; } sub _bqo { my($__ccs) = @_; my $__ccr = $__ccs->{'_bft'}; $__ccr =~ s/\\/\\\\/sg; $__ccr =~ s/'/\\'/sg; $__ccr = _bqf($__ccr, 0); return $__ccr; } sub FORMATLISTLABELS { my($__ccx, $__ccy, $__ccz) = @_; my $__cct = 0; my $__ccu = ""; my $__ccv = ""; my $__ccw = _bss($__ccx); if ($__ccw) { foreach $__cct (@{$__ccw}) { $__ccu = $__cct->{'_bft'}; $__ccv .= $__ccy . $__ccu . $__ccz; } } return $__ccv; } sub DISPLAYLISTLABELS { my($__cdf, $__cdg, $__cdh) = @_; my $__cda = ""; my $__cdb = ""; my $__cdc = _bss($__cdf); if ($__cdc) { my $__cdd = @{$__cdc}; my $__cde = 0; for($__cde = 0; $__cde < $__cdd; $__cde++) { $__cda = $__cdc->[$__cde]->{'_bft'}; $__cdb .= $__cda; if ($__cdd > 2 && $__cde < $__cdd - 1) { $__cdb .= $__cdg . " "; } if ($__cdd > 1) { if ($__cde == $__cdd - 2) { $__cdb .= " " . $__cdh . " "; } } } } return $__cdb; } sub ERRFIELD { return "[\0ERRFIELD()\0]"; } sub ERRQNAME { return "[\0ERRQNAME()\0]"; } sub ERRTEXT { return "[\0ERRTEXT()\0]"; } sub ERRMIN { return "[\0ERRMIN()\0]"; } sub ERRMAX { return "[\0ERRMAX()\0]"; } sub ERRTOTAL { return "[\0ERRTOTAL()\0]"; } sub ERRCURSUM { return "[\0ERRCURSUM()\0]"; } sub ACAATTRIBUTE { return "[\0ACAATTRIBUTE()\0]"; } sub ACABEST { return "[\0ACABEST()\0]"; } sub ACAWORST { return "[\0ACAWORST()\0]"; } sub ACAIMPORTANCE { my($__cdj, $__cdk) = @_; my $__cdi = _bpl($__cdj, 1); return _bqp($__cdi, $__cdk); } sub _bqp { my($__cdl, $__cdm) = @_; return acalib8_4_8::_cfr($__cdl, $__cdm, 0); } sub ACASAVECUSTOMACAIMP { my ($__cdo) = @_; if ($authlib8_4_8::_bzy == 0) { my $__cdn = _bpl($__cdo, 1); acalib8_4_8::_cfw($__cdn, $__cdo); } return ""; } sub ACAUTILITY { my($__cdq, $__cdr, $__cds) = @_; my $__cdp = _bpl($__cdq, 1); return _bqq($__cdp, $__cdr, $__cds); } sub _bqq { my($__cdu, $__cdv, $__cdw) = @_; my $__cdt = ""; eval { $__cdt = acalib8_4_8::_cfr($__cdu, $__cdv, $__cdw); }; if ($@ || ($__cdw <= 0)) { $__cdt = ""; } return $__cdt; } sub ACAPRIORSBESTLEVELLABEL { my($__cea, $__ceb) = @_; my $__cdx = _bpl($__cea, 1); my $__cdy = _bqr($__cdx, $__cea, $__ceb, 1); my $__cdz = $__cdx->{'_asc'}; return $__cdz->[$__ceb - 1]->{'_bca'}->[$__cdy - 1]; } sub ACAPRIORSBESTLEVELVALUE { my($__cee, $__cef) = @_; my $__cec = _bpl($__cee, 1); my $__ced = _bqr($__cec, $__cee, $__cef, 1); return $__ced; } sub ACAPRIORSWORSTLEVELLABEL { my($__cej, $__cek) = @_; my $__ceg = _bpl($__cej, 1); my $__ceh = _bqr($__ceg, $__cej, $__cek, 0); my $__cei = $__ceg->{'_asc'}; return $__cei->[$__cek - 1]->{'_bca'}->[$__ceh - 1]; } sub ACAPRIORSWORSTLEVELVALUE { my($__cen, $__ceo) = @_; my $__cel = _bpl($__cen, 1); my $__cem = _bqr($__cel, $__cen, $__ceo, 0); return $__cem; } sub _bqr { my($__cet, $__ceu, $__cev, $__cew) = @_; my $__cep = $__cet->{'_asc'}; if ($__cev > @{$__cep} || $__cev <= 0) { die("The attribute " . $__cev . " being used in SSI Script does not match the number of attributes defined in this study"); } my $__ceq = 0; my $__cer = 0; my $__ces = 0; ($__cer, $__ces) = acalib8_4_8::_cfv($__ceu, $__cep, $__cev); if ($__cew) { $__ceq = $__cer; } else { $__ceq = $__ces; } return $__ceq; } sub ACACALMIN { return "[\0ACACALMIN()\0]"; } sub ACACALMAX { return "[\0ACACALMAX()\0]"; } sub ACAMOSTIMPATTLABEL { my($__cfa, $__cfb) = @_; my $__cex = _bpl($__cfa, 1); my $__cey = _bqs($__cex, 0, $__cfb); my $__cez = $__cex->{'_asc'}; return $__cez->[$__cey - 1]->{'_bgt'}; } sub ACAMOSTIMPATTVALUE { my($__cfd, $__cfe) = @_; my $__cfc = _bpl($__cfd, 1); return _bqs($__cfc, 0, $__cfe); } sub ACALEASTIMPATTLABEL { my($__cfi, $__cfj) = @_; my $__cff = _bpl($__cfi, 1); my $__cfg = _bqs($__cff, 1, $__cfj); my $__cfh = $__cff->{'_asc'}; return $__cfh->[$__cfg - 1]->{'_bgt'}; } sub ACALEASTIMPATTVALUE { my($__cfl, $__cfm) = @_; my $__cfk = _bpl($__cfl, 1); return _bqs($__cfk, 1, $__cfm); } sub _bqs { my($__cfq, $__cfr, $__cfs) = @_; if (authlib8_4_8::_bpy($__cfs) eq "") { $__cfs = 1; } my $__cfn = @{$__cfq->{'_asc'}}; my $__cfo = 0; my @__cfp = () x $__cfn; for ($__cfo = 1; $__cfo <= $__cfn; $__cfo++) { $__cfp[$__cfo - 1] = [$__cfo, _bqp($__cfq, $__cfo)]; } @__cfp = sort{$b->[1] <=> $a->[1]} @__cfp; if ($__cfr) { @__cfp = reverse(@__cfp); } return $__cfp[$__cfs - 1]->[0]; } sub ACABESTLEVELLABEL { my($__cfw, $__cfx, $__cfy) = @_; my $__cft = _bpl($__cfw, 1); my $__cfu = _bqt($__cft, $__cfx, $__cfy, 1); my $__cfv = $__cft->{'_asc'}; return $__cfv->[$__cfx - 1]->{'_bca'}->[$__cfu - 1]; } sub ACABESTLEVELVALUE { my($__cga, $__cgb, $__cgc) = @_; my $__cfz = _bpl($__cga, 1); return _bqt($__cfz, $__cgb, $__cgc, 1); } sub ACAWORSTLEVELLABEL { my($__cgg, $__cgh, $__cgi) = @_; my $__cgd = _bpl($__cgg, 1); my $__cge = _bqt($__cgd, $__cgh, $__cgi, 0); my $__cgf = $__cgd->{'_asc'}; return $__cgf->[$__cgh - 1]->{'_bca'}->[$__cge - 1]; } sub ACAWORSTLEVELVALUE { my($__cgk, $__cgl, $__cgm) = @_; my $__cgj = _bpl($__cgk, 1); return _bqt($__cgj, $__cgl, $__cgm, 0); } sub _bqt { my($__cgr, $__cgs, $__cgt, $__cgu) = @_; if (authlib8_4_8::_bpy($__cgt) eq "") { $__cgt = 1; } my $__cgn = $__cgr->{'_asc'}; my $__cgo = @{$__cgn->[$__cgs - 1]->{'_bca'}}; my $__cgp = 0; my @__cgq = () x $__cgo; for ($__cgp = 1; $__cgp <= $__cgo; $__cgp++) { $__cgq[$__cgp - 1] = [$__cgp, _bqq($__cgr, $__cgs, $__cgp)]; } if ($__cgu) { @__cgq = sort{$b->[1] <=> $a->[1]} @__cgq; } else { @__cgq = sort{$a->[1] <=> $b->[1]} @__cgq; } return $__cgq[$__cgt - 1]->[0]; } sub ACASTRICTIMPORTANCE { my($__chb, $__chc) = @_; my $__cgv = _bpl($__chb, 1); my $__cgw = 0; my $__cgx = @{$__cgv->{'_asc'}}; my $__cgy = 0; my $__cgz = 0; my $__cha = 0; for ($__cgw = 1; $__cgw <= $__cgx; $__cgw++) { $__cgz = _bqu($__cgv, $__chb, $__cgw); if ($__cgw == $__chc) { $__cgy = $__cgz; } $__cha += $__cgz; } return ($__cgy / ($__cha * 100)); } sub _bqu { my($__chp, $__chq, $__chr) = @_; my $__chd = 0; my $__che = 0; my $__chf = $__chp->{'_asc'}; ($__chd, $__che) = acalib8_4_8::_cfv($__chq, $__chf, $__chr); my $__chg = $__chf->[$__chr - 1]->{'_bgu'}; if ($__chg == 0) { my $__chh = @{$__chf->[$__chr - 1]->{'_bca'}}; my $__chi = 0; my $__chj = 0; my $__chk = ciwlib8_4_8::GetPreviousACAData($__chq . "_Rating" . $__chr . "_" . $__chd); my $__chl = ciwlib8_4_8::GetPreviousACAData($__chq . "_Rating" . $__chr . "_" . $__che); for ($__chi = 1; $__chi <= $__chh; $__chi++) { $__chj = ciwlib8_4_8::GetPreviousACAData($__chq . "_Rating" . $__chr . "_" . $__chi); if ($__chj == $__chk) { if (_bqq($__chp, $__chr, $__chi) > _bqq($__chp, $__chr, $__chd)) { $__chd = $__chi; } } if ($__chj == $__chl) { if (_bqq($__chp, $__chr, $__chi) < _bqq($__chp, $__chr, $__che)) { $__che = $__chi; } } } } my $__chm = _bqq($__chp, $__chr, $__chd); my $__chn = _bqq($__chp, $__chr, $__che); my $__cho = $__chm - $__chn; if ($__cho < 0) { $__cho = 0; } return $__cho; } sub CVAVERSION { return "[\0CVAVERSION()\0]"; } sub ACBCPRICELEVELTEXT { return "[\0ACBCPRICELEVELTEXT()\0]"; } sub ACBCMUSTHAVETEXT { return "[\0ACBCMUSTHAVETEXT()\0]"; } sub ACBCMUSTHAVERULES { return "[\0ACBCMUSTHAVERULES()\0]"; } sub ACBCUNACCEPTABLETEXT { return "[\0ACBCUNACCEPTABLETEXT()\0]"; } sub ACBCUNACCEPTABLERULES { return "[\0ACBCUNACCEPTABLERULES()\0]"; } sub ACBCNUMSCREENEDINCONCEPTS { my($__chu) = @_; my $__chs = _bqx($__chu); my $__cht = acbclib8_4_8::_ckf($__chs, $__chu); return @{$__cht}; } sub ACBCNUMSCREENERS { my($__chx) = @_; if ($__chx) { my $__chv = 0; my $__chw = _bqx($__chx); if (exists $__chw->{'_apx'}) { $__chv = $__chw->{'_apx'}; } return $__chv; } else { return "[\0ACBCNUMSCREENERS()\0]"; } } sub ACBCCURRENTSCREENER { my $__chy = $authlib8_4_8::_byf; my $__chz = 0; if ($__chy =~ m/_Screener(\d+)/i) { $__chz = $1; } return $__chz; } sub ACBCNUMCHOICETASKS { my($__cia) = @_; if ($__cia) { return _bqv($__cia); } else { return "[\0ACBCNUMCHOICETASKS()\0]"; } } sub _bqv { my($__cig) = @_; my $__cib = 0; my $__cic = 0; my $__cid = _bqx($__cig); my $__cie = acbclib8_4_8::_ckf($__cid, $__cig); $__cic = @{$__cie}; if (exists $__cid->{'_aqd'}) { $__cic++; } if (exists $__cid->{'_aqe'}) { my $__cif = $__cid->{'_aqe'}; if ($__cic > $__cif) { $__cic = $__cif; } if ($__cic) { $__cib = acbclib8_4_8::_cjh($__cic, $__cid); } } return $__cib; } sub ACBCCURRENTCHOICETASK { my $__cih = $authlib8_4_8::_byf; my $__cii = 0; if ($__cih =~ m/_ChoiceTask(\d+)/i) { $__cii = $1; } return $__cii; } sub ACBCNUMCALIBRATIONS { my($__cil) = @_; if ($__cil) { my $__cij = _bqx($__cil); my $__cik = acbclib8_4_8::_ckg($__cij, $__cil); my ($__cim, $__cin, $__cio) = acbclib8_4_8::_ckc($__cij, $__cil); return acbclib8_4_8::_cjg($__cim, $__cik, $__cin, $__cio, $__cij); } else { return "[\0ACBCNUMCALIBRATIONS()\0]"; } } sub ACBCCURRENTCALIBRATION { my $__cip = $authlib8_4_8::_byf; my $__ciq = 0; if ($__cip =~ m/_Calibration(\d+)/i) { $__ciq = $1; } return $__ciq; } sub ACBCCALIBRATIONTEXT { return "[\0ACBCCALIBRATIONTEXT()\0]"; } sub ACBCISMUSTHAVE { my($__ciz, $__cja, $__cjb) = @_; my $__cir = 0; my($__cjc, $__cjd) = _bqw($__ciz, $__cja); if (exists $__cjc->{$__cja}) { my $__cis = $__cjc->{$__cja}; if (exists $__cis->{'_cbi'}) { my $__cit = $__cis->{'_cbi'}; my $__ciu = $__cis->{'_apq'}; my $__civ = @{$__cit}; my $__ciw = 0; if ($__cit->[$__cjb - 1] == 1) { $__cir = 0; } else { my $__cix = 0; if ($__ciu == 1) { for ($__ciw = 0; $__ciw < $__civ; $__ciw++) { if ($__ciw == 0 && $__cit->[$__ciw] == 0) { last; } else { if ($__cit->[$__ciw] == 0) { $__cix = $__ciw + 1; last; } } } } elsif ($__ciu == 2) { for ($__ciw = $__civ - 1; $__ciw >= 0; $__ciw--) { if ($__ciw == ($__civ - 1) && $__cit->[$__ciw] == 0) { last; } else { if ($__cit->[$__ciw] == 0) { $__cix = $__ciw + 1; last; } } } } else { my $__ciy = 0; for ($__ciw = 0; $__ciw < $__civ; $__ciw++) { if ($__cit->[$__ciw] == 0) { $__ciy++; } } if ($__ciy == 1) { $__cix = $__cjb; } } if ($__cix == $__cjb) { $__cir = 1; } } } } return $__cir; } sub ACBCISUNACCEPTABLE { my($__cjh, $__cji, $__cjj) = @_; my $__cje = 0; my($__cjk, $__cjl) = _bqw($__cjh, $__cji); if (exists $__cjk->{$__cji}) { my $__cjf = $__cjk->{$__cji}; if (exists $__cjf->{'_cbi'}) { my $__cjg = $__cjf->{'_cbi'}; if ($__cjg->[$__cjj - 1] == 1) { $__cje = 1; } } } else { if ($__cjl) { if ($__cjj > $__cjl) { $__cje = 1; } } } return $__cje; } sub _bqw { my($__cjv, $__cjw) = @_; my $__cjm = _bqx($__cjv); my $__cjn = acbclib8_4_8::_cll($__cjm, $__cjw); my $__cjo = {}; my $__cjp = {}; my($__cjx, $__cjy) = acbclib8_4_8::_cjp($__cjv, 0, $__cjm); acbclib8_4_8::_cjl($__cjx, $__cjn, $__cjo, $__cjp); my($__cjz, $__cjo) = acbclib8_4_8::_cjq($__cjv, 0, $__cjm, $__cjo, $__cjp); my $__cjq = 0; my $__cjr = 0; my $__cjs = 0; my $__cjt = 0; my $__cju = 0; foreach $__cjq (@{$__cjx}) { $__cjr = $__cjq->[0]; $__cjs = $__cjq->[1]; $__cjt = $__cjq->[2]; if ($__cjw == $__cjr) { acbclib8_4_8::_clm(24, $__cjn, $__cjr, $__cjs, $__cjt); } } foreach $__cjq (@{$__cjz}) { $__cjr = $__cjq->[0]; $__cjs = $__cjq->[1]; $__cjt = $__cjq->[2]; if ($__cjw == $__cjr) { if (exists $__cjn->{$__cjw}) { acbclib8_4_8::_clm(25, $__cjn, $__cjr, $__cjs, $__cjt); } else { $__cju = $__cjs; } } } return ($__cjn, $__cju); } sub _bqx { my($__ckc) = @_; my $__cka = $__ckc; if ($__cka =~ m/(.*?)_/i) { $__cka = $1; } authlib8_4_8::_boo("acbclib8_4_8.pl"); acbclib8_4_8::_cit($__cka); my $__ckb = $acbclib8_4_8::_cmf->{$__cka}; return $__ckb; } sub _bqy { my($__cki, $__ckj) = @_; my @__ckd = (); my $__cke = 0; my $__ckf = 0; my $__ckg = 0; my $__ckh = 0; foreach $__cke (@{$__ckj}) { $__ckh = 0; foreach $__ckf (@{$__cke}) { foreach $__ckg (@{$__cki}) { if ($__ckf->[0] == $__ckg) { $__ckh = 1; last; } } if ($__ckh) { last; } } if (!$__ckh) { push @__ckd, $__cke; } } return \@__ckd; } sub BYOCONDTEXT { my($__ckr, $__cks, $__ckt, $__cku) = @_; my $__ckk = _bqx($__ckr); my $__ckl = ""; if (exists $__ckk->{'_ara'}) { my $__ckm = $__ckk->{'_ara'}->{'_arb'}; my $__ckn = @{$__ckm}; if ($__cks <= $__ckn) { my $__cko = $__ckm->[$__cks - 1]; if (exists $__cko->{'_aro'}) { my $__ckp = $__cko->{'_aro'}; my $__ckq = ""; if ($__ckt || $__cku) { $__ckq .= " position:fixed;"; if ($__ckt) { $__ckq .= " left: " . $__ckt . "px;"; } if ($__cku) { $__ckq .= " top: " . $__cku . "px;"; } } $__ckl = acbclib8_4_8::_ciw($__ckr . "_BYO", $__ckp, $__cks, $__ckq, 1); } } } return $__ckl; } sub ACBCBYOLABEL { my($__ckw, $__ckx) = @_; my $__ckv = _bqz($__ckw, $__ckx); my ($__cky, $__ckz) = _brb($__ckw, $__ckx, $__ckv, 0); if ($__ckz) { $__ckz = _bqf($__ckz, 0); } return $__ckz; } sub ACBCBYOVALUE { my($__cla, $__clb) = @_; return _bqz($__cla, $__clb); } sub _bqz { my($__cle, $__clf) = @_; my $__clc = $__cle . "_BYO_" . $__clf; my $__cld = ""; $__cld = _bpy(authlib8_4_8::_bnc($__clc)); return $__cld; } sub ACBCWINNERLABEL { my($__clh, $__cli) = @_; my $__clg = _bra($__clh, $__cli); if ($__clg eq "") { return ""; } my ($__clj, $__clk) = _brb($__clh, $__cli, $__clg, 0); if ($__clk) { $__clk = _bqf($__clk, 0); } return $__clk; } sub ACBCWINNERVALUE { my($__cll, $__clm) = @_; return _bra($__cll, $__clm); } sub _bra { my($__clu, $__clv) = @_; my $__cln = 0; my $__clo = authlib8_4_8::_bqx($__clu); my ($__clw, $__clx, $__cly) = acbclib8_4_8::_ckc($__clo, $__clu); if ($__clw == -1) { return ""; } my $__clp = acbclib8_4_8::_cju([$__clw], $__clu, $__clo); my $__clq = acbclib8_4_8::_cjt($__clu, $__clo); my $__clr = 0; my $__cls = @{$__clq}; my $__clt = 0; for ($__clr = 0; $__clr < $__cls; $__clr++) { if ($__clv == $__clq->[$__clr]) { $__clt = $__clr + 1; last; } } if ($__clt) { $__cln = $__clp->[0]->[$__clt]; } return $__cln; } sub _brb { my ($__cmg, $__cmh, $__cmi, $__cmj) = @_; my $__clz = authlib8_4_8::_bqx($__cmg); my $__cma = 0; my $__cmb = ""; my $__cmc = ""; my $__cmd = ""; my $__cme = 0; my $__cmf = 0; if (exists $__clz->{'_aqk'}) { $__cma = $__clz->{'_aqk'}->{'_aql'}; } if ($__cmh > 0) { if ($__cmh == $__cma) { if (!$__cmj) { $__cmc = $__cmi; $__cmc = acbclib8_4_8::_cje($__cmc, $__clz); } } else { $__cme = authlib8_4_8::_bsw($__clz->{'_aoz'}); $__cmb = _brz($__cme->[$__cmh - 1], "", $__cmj); if (exists $__clz->{'_apa'}->{$__cmh}) { $__cmd = $__clz->{'_apa'}->{$__cmh}->{'_apo'}; $__cmf = authlib8_4_8::_bsw($__cmd); $__cmc = _brz($__cmf->[$__cmi - 1], "", $__cmj); } } } return ($__cmb, $__cmc); } sub CBCNONE { return "[\0CBCNONE()\0]"; } sub CBCVERSION { return "[\0CBCVERSION()\0]"; } sub CBCDESIGNLEVELVALUE { my($__cmn, $__cmo, $__cmp) = @_; my $__cmk = 0; my $__cml = 0; my $__cmm = ""; $__cmk = _brc($__cmn); if (($__cmk != 0) && ($__cmo > 0) && ($__cmp > 0)) { $__cmm = $__cmk->{'_cbj'}->[$__cmo - 1]->{'_cbk'}->[$__cmp - 1]; } if ($__cmm =~ m/^(\d+),(\d+)$/) { $__cml = $2; if($__cml == 255) { $__cml = 0; } else { $__cml++; } } return $__cml; } sub CBCATTRIBUTEVALUE { my($__cmt, $__cmu, $__cmv) = @_; my $__cmq = 0; my $__cmr = 0; my $__cms = ""; $__cmq = _brc($__cmt); if (($__cmq != 0) && ($__cmu > 0) && ($__cmv > 0)) { $__cms = $__cmq->{'_cbj'}->[$__cmu - 1]->{'_cbk'}->[$__cmv - 1]; } if ($__cms =~ m/^(\d+),(\d+)$/) { $__cmr = $1; $__cmr++; } return $__cmr; } sub CBCDESIGNLEVELTEXT { my($__cmy, $__cmz, $__cna) = @_; my $__cmw = 0; my $__cmx = ""; $__cmw = _brc($__cmy); if (($__cmw != 0) && ($__cmz > 0) && ($__cna > 0)) { $__cmx = $__cmw->{'_cbj'}->[$__cmz - 1]->{'_cbl'}->[$__cna - 1]; } if (exists $authlib8_4_8::_bxd{$__cmy . "_dsgnInfo"}) { $__cmx .= $authlib8_4_8::_bxd{$__cmy . "_dsgnInfo"}; delete $authlib8_4_8::_bxd{$__cmy . "_dsgnInfo"}; } return $__cmx; } sub CBCATTRIBUTELABEL { my($__cnd, $__cne) = @_; my $__cnb = ""; if($__cnd && $__cne) { my $__cnc = 0; $__cnc = _brc($__cnd); if (($__cnc != 0) && ($__cne > 0)) { $__cnb = $__cnc->{'_bbw'}->[$__cne - 1]; } } else { $__cnb = "[\0CBCATTRIBUTELABEL()\0]"; } return $__cnb; } sub CBCDESIGNCONCEPTVALUE { my($__cnh, $__cni) = @_; my $__cnf = 0; my $__cng = 0; $__cnf = _brc($__cnh); if (($__cnf != 0) && ($__cni > 0)) { $__cng = $__cnf->{'_cbj'}->[$__cni - 1]->{'_bcm'}; } return $__cng; } sub _brc { my($__cnk) = @_; my $__cnj = 0; authlib8_4_8::_boo("cbclib8_4_8.pl"); if (exists($authlib8_4_8::_bxd{$__cnk})) { $__cnj = $authlib8_4_8::_bxd{$__cnk}; } else { $__cnj = cbclib8_4_8::_cgz($__cnk); } return $__cnj; } sub CBCTOTALTASKS { return "[\0CBCTOTALTASKS()\0]"; } sub CBCCURRENTTASK { return "[\0CBCCURRENTTASK()\0]"; } sub MAXDIFFTOTALSETS { return "[\0MAXDIFFTOTALSETS()\0]"; } sub MAXDIFFCURRENTSET { return "[\0MAXDIFFCURRENTSET()\0]"; } sub MAXDIFFSCORE { my($__cnq, $__cnr) = @_; my $__cnl = _brf($__cnq); my $__cnm = ""; if (defined $__cnl) { my $__cnn = _brh($__cnq . "_1"); my $__cno = _brj($__cnn); if(exists $__cno->{$__cnr}) { my $__cnp = $__cno->{$__cnr}; $__cnm = $__cnl->[$__cnp]; } } return $__cnm; } sub MAXDIFFRANKATTVALUE { my($__cnv, $__cnw) = @_; my $__cns = ""; my $__cnt = _brd($__cnv, $__cnw); if ($__cnt) { my $__cnu = _brh($__cnv . "_1"); $__cns = LISTVALUE($__cnu->{'_bcs'}, $__cnt); } return $__cns; } sub MAXDIFFRANKATTLABEL { my($__coa, $__cob) = @_; my $__cnx = ""; my $__cny = _brd($__coa, $__cob); if ($__cny) { my $__cnz = _brh($__coa . "_1"); $__cnx = LISTLABEL($__cnz->{'_bcs'}, $__cny); } return $__cnx; } sub MAXDIFFVERSION { return "[\0MAXDIFFVERSION()\0]"; } sub _brd { my($__cof, $__cog) = @_; my $__coc = ""; my $__cod = _brf($__cof); if (defined $__cod) { my $__coe = _bre($__cod); $__coc = $__coe->[$__cog - 1]->{'_cbm'}; } return $__coc; } sub _bre { my($__col) = @_; my $__coh = @{$__col}; my $__coi = 0; my @__coj = (); for($__coi = 0; $__coi < $__coh; $__coi++) { push @__coj, {'_cbm' => ($__coi + 1), '_cbn' => $__col->[$__coi]}; } my @__cok = sort { if ($a->{'_cbn'} == $b->{'_cbn'}) { if (RANDNUM() >= 0.5) { return 1; } else { return -1; } } else { return $b->{'_cbn'} <=> $a->{'_cbn'}; } } @__coj; return \@__cok; } sub _brf { my($__cor) = @_; my $__com = undef; if (exists $authlib8_4_8::_bzi{"sys_MaxDiff_Utilities_" . $__cor}) { $__com = $authlib8_4_8::_bzi{"sys_MaxDiff_Utilities_" . $__cor}; } else { _boo("maxdifflib8_4_8.pl"); my $__con = _brh($__cor . "_1"); if ($__con) { my $__coo = maxdifflib8_4_8::_cij($__con, $__cor); if (keys %{$__coo}) { my $__cop = _bri($__con); my $__coq = 0; if($__cop) { $__coq = @{$__cop}; } if ($__coq > 0) { $__com = maxdifflib8_4_8::_cii($__coo, $__coq); $authlib8_4_8::_bzi{"sys_MaxDiff_Utilities_" . $__cor} = $__com; } } } } return $__com; } sub MAXDIFFDESIGNLABEL { my($__cou, $__cov) = @_; my $__cos = 0; my $__cot = ""; $__cos = _brg($__cou, $__cov); if ($__cos != 0) { $__cot .= $__cos->{'_bft'}; } return $__cot; } sub MAXDIFFDESIGNVALUE { my($__coy, $__coz) = @_; my $__cow = 0; my $__cox = ""; $__cow = _brg($__coy, $__coz); if ($__cow != 0) { $__cox .= $__cow->{'_bcm'}; } return $__cox; } sub _brg { my($__cpj, $__cpk) = @_; my $__cpa = 0; my $__cpb = 0; my $__cpc = ""; if (exists($authlib8_4_8::_bxc{$__cpj})) { $__cpb = $authlib8_4_8::_bxc{$__cpj}; } else { my $__cpd = _brh($__cpj); if ($__cpd) { my $__cpe = 0; my $__cpf = _bri($__cpd); my $__cpg = 0; _boo("maxdifflib8_4_8.pl"); ($__cpe, $__cpg) = maxdifflib8_4_8::_cig($__cpj, $__cpd->{'_ww'}, $__cpd->{'_wx'}, $__cpd->{'_wy'}); my $__cph = 0; my @__cpi = (); foreach $__cph (@{$__cpe}) { push @__cpi, $__cpf->[$__cph]; } $__cpb = \@__cpi; $authlib8_4_8::_bxc{$__cpj} = $__cpb; } } if ($__cpb != 0) { $__cpa = $__cpb->[$__cpk - 1]; } return $__cpa; } sub _brh { my ($__cpo) = @_; my $__cpl = 0; if (exists($authlib8_4_8::_bwq{$__cpo})) { my $__cpm = tell $authlib8_4_8::_byh; my $__cpn = $authlib8_4_8::_bwq{$__cpo}->{'_w'}; seek $authlib8_4_8::_byh, $__cpn, 0; $__cpl = authlib8_4_8::_bps(0); if ($__cpm > 0) { seek $authlib8_4_8::_byh, $__cpm, 0; } } return $__cpl; } sub _bri { my ($__cpr) = @_; my $__cpp = $__cpr->{'_bcs'}; my $__cpq = _bss($__cpp); return $__cpq; } sub _brj { my ($__cpw) = @_; my $__cps = _bri($__cpw); my $__cpt = 0; my %__cpu = (); my $__cpv = 0; foreach $__cpt (@{$__cps}) { $__cpu{$__cpt->{'_bcm'}} = $__cpv; $__cpv++; } return \%__cpu; } sub QUOTACELLNAME { my ($__cpz) = @_; my $__cpx = ""; my $__cpy = _bpy(authlib8_4_8::_bnc($__cpz)); if ($__cpy) { $__cpx = _bpi($__cpz, $__cpy); } return $__cpx; } sub ISQUOTACELLOPEN { my($__cqa, $__cqb) = @_; return _brk($__cqa, $__cqb); } sub _brk { my($__cqe, $__cqf) = @_; my $__cqc = 0; my $__cqd = _bpj($__cqe); if ($__cqd) { $__cqc = _bpe($__cqd, $__cqf) } return $__cqc; } sub QUOTACELLREMAINING { my($__cqk, $__cql) = @_; my $__cqg = 0; my $__cqh = _bpg($__cqk, 0); if ($__cqh) { my $__cqi = $__cqh->{$__cql}->{'_cbd'}; my $__cqj = $__cqh->{$__cql}->{'_bck'}; $__cqg = $__cqj - $__cqi; if ($__cqg < 0) { $__cqg = 0; } } return $__cqg; } sub QUOTACELLLIMIT { my($__cqo, $__cqp) = @_; my $__cqm = 0; my $__cqn = _bpg($__cqo, 0); if ($__cqn) { $__cqm = $__cqn->{$__cqp}->{'_bck'}; } return $__cqm; } sub QUOTACELLCOMPLETES { my($__cqs, $__cqt) = @_; my $__cqq = 0; my $__cqr = _bpg($__cqs, 0); if ($__cqr) { $__cqq = $__cqr->{$__cqt}->{'_cbd'}; } return $__cqq; } sub AREALLQUOTACELLSCLOSED { my($__cqu) = @_; return _brl($__cqu); } sub _brl { my($__cra) = @_; my $__cqv = 0; my $__cqw = _bpj($__cra); if ($__cqw) { my $__cqx = $__cqw->{'_bkt'}->{'_bce'}; my $__cqy = 0; my $__cqz = 0; foreach $__cqy (@{$__cqx}) { if (_bpe($__cqw, $__cqy->{'_bcm'})) { $__cqz = 1; last; } } if (!$__cqz) { $__cqv = 1; } } return $__cqv; } sub AREALLQUOTASCLOSED { my $__crb = 0; if ($authlib8_4_8::_bxw) { _bpd(); if ($authlib8_4_8::_bzq) { my $__crc = $authlib8_4_8::_bzq->{'_gw'}; my $__crd = ""; my $__cre = 0; foreach $__crd (@{$__crc}) { if(_brl($__crd) == 0) { $__cre = 1; last; } } if (!$__cre) { $__crb = 1; } } } return $__crb; } sub AREANYQUOTASCLOSED { my $__crf = 0; if ($authlib8_4_8::_bxw) { _bpd(); if ($authlib8_4_8::_bzq) { my $__crg = $authlib8_4_8::_bzq->{'_gw'}; my $__crh = ""; foreach $__crh (@{$__crg}) { if(_brl($__crh)) { $__crf = 1; last; } } } } return $__crf; } sub CEILING { my($__cri) = @_; return _brm($__cri); } sub _brm { my($__crj) = @_; if ($__crj > int($__crj)) { $__crj = int($__crj + 1); } elsif($__crj < 0) { $__crj = int($__crj); } return $__crj; } sub ROUND { my($__crk, $__crl) = @_; return _brn($__crk, $__crl); } sub _brn { my($__crq, $__crr) = @_; my $__crm = @_; my $__crn = 0; my $__cro = ""; if ($__crq =~ m/^(-)(.*?)$/) { $__cro = $1; $__crq = $2; } if ($__crm == 1 || $__crr < 0) { $__crr = 0; } $__crq = sprintf("%." . $__crr . "f", $__crq); if($__crr > 0) { if($__crq !~ m/\./) { $__crq .= "."; } my $__crp = 0; if($__crq =~ m/^(.*?)\.(.*?)$/) { $__crp = length($2); } while($__crp < $__crr) { $__crq .= "0"; $__crp++; } } if ($__crq != 0) { $__crq = $__cro . $__crq; } return $__crq; } sub ROUNDTONUMBER { my($__crs, $__crt, $__cru) = @_; return _bro($__crs, $__crt, $__cru); } sub _bro { my ($__csd, $__cse, $__csf) = @_; my $__crv = 0; if ($__cse > 0) { my $__crw = 0; my $__crx = 0; my $__cry = 0; my $__crz = ""; if ($__csd =~ m/^(-)(.*?)$/) { $__crz = $1; $__csd = $2; } if ($__csd =~ m/\.(\d+)/) { $__crx = length($1); } elsif ($__csd =~ m/[Ee][-+]0*(\d+)/) { $__crx = $1; } if ($__cse =~ m/\.(\d+)/) { $__cry = length($1); } elsif ($__cse =~ m/[Ee][-+]0*(\d+)/) { $__cry = $1; } if ($__cry > $__crx) { $__crw = $__cry; } else { $__crw = $__crx; } if ($__crw) { $__cse *= 10 ** $__crw; $__cse = sprintf("%.0f", $__cse); $__csd *= 10 ** $__crw; $__csd = sprintf("%.0f", $__csd); } my $__csa = ($__csd % $__cse); my $__csb = $__cse / 2; if ($__csa >= $__csb) { my $__csc = int($__csd / $__cse); $__csc++; $__crv = $__csc * $__cse; } else { $__crv = $__csd - $__csa; } if ($__crw > 0) { $__crv /= 10 ** $__crw; $__crv = sprintf("%." . $__crw . "f", $__crv); } $__crv = $__crz . $__crv; } else { $__crv = $__csd; } if ($__csf > -1) { $__crv = _brn($__crv, $__csf); } return $__crv; } sub FORMATNUMBER { my($__csg, $__csh, $__csi, $__csj) = @_; return _brp($__csg, $__csh, $__csi, $__csj); } sub _brp { my($__csq, $__csr, $__css, $__cst) = @_; my $__csk = ""; $__csq = _bpy($__csq); if ($__csq =~ m/^(-)(.*?)$/) { $__csk = $1; $__csq = $2; } $__csq = _brn($__csq, $__cst); my $__csl = ""; my $__csm = $__csq; if ($__csq =~ m/(\d*?)\.(.*?)$/) { $__csm = $1; $__csl = $2; if ($__css eq "") { $__css = "."; } $__csl = $__css . $__csl; } if ($__csr) { my $__csn = length($__csm); my $__cso = ""; while ($__csn > 3) { $__cso = $__csr . substr($__csm, $__csn - 3 , 3) . $__cso; $__csn -= 3; } $__csm = substr($__csm, 0, $__csn) . $__cso; } my $__csp = $__csm . $__csl; if ($__csp != 0) { $__csp = $__csk . $__csp; } return $__csp; } sub _brq { my ($__csu) = @_; $__csu = authlib8_4_8::_brs($__csu); if ($__csu =~ m/^(0+)(.*)$/) { if (length($1) == length($__csu)) { $__csu = 0; } else { $__csu = $2; if ($__csu =~ m/^0*\.0*$/) { $__csu = 0; } } } $__csu = _brr($__csu); return $__csu; } sub _brr { my ($__csv) = @_; if ($__csv) { $__csv = sprintf("%.15f", $__csv); $__csv = _brt($__csv); } return $__csv; } sub _brs { my($__csw) = @_; $__csw =~ s/,/./; return $__csw; } sub _brt { my($__csz) = @_; if($__csz =~ m/^(-?\d*)\.(\d+)$/) { my $__csx = $1; my $__csy = $2; $__csy =~ s/0+$//; if (length($__csy)) { $__csx .= "." . $__csy; } $__csz = $__csx; if (length($__csz) == 0) { $__csz = 0; } } return $__csz; } sub POWER { my($__cta, $__ctb) = @_; return $__cta ** $__ctb; } sub MID { my($__ctc, $__ctd, $__cte) = @_; return substr($__ctc, $__ctd - 1, $__cte); } sub TEXTEXISTS { my($__cth, $__cti) = @_; my $__ctf = 0; my $__ctg = index(uc($__cth), uc($__cti)); if ($__ctg > -1) { $__ctf = 1; } return $__ctf; } sub ENCODEFORURL { my($__ctj) = @_; return _bru($__ctj); } sub _bru { my($__ctp) = @_; my @__ctk = split("", $__ctp); my $__ctl = ""; my @__ctm = (); my $__ctn = ""; my $__cto = 0; foreach $__ctl (@__ctk) { $__cto = ord($__ctl); if (($__ctl =~ m/\w/) || $__cto < 32 || $__cto > 126) { $__ctn = $__ctl; } else { $__ctn = "%" . uc(sprintf "%lx", $__cto); } push @__ctm, $__ctn; } return join("", @__ctm); } sub ISNUMBER { my($__ctq) = @_; return _brv($__ctq); } sub _brv { my($__ctr) = @_; $__ctr = _bpy($__ctr); $__ctr =~ s/^-//; if (exists $authlib8_4_8::_bzk->{'_aoe'}) { if ($__ctr =~ m/\./) { $__ctr =~ s/\.//; } else { $__ctr =~ s/,//; } } else { $__ctr =~ s/\.//; } if ($__ctr =~ m/^(\d+)$/) { return 1; } else { return 0; } } sub SHOWN { my ($__ctz) = @_; my $__cts = $authlib8_4_8::_bzi{"hid_respnum"}; my($__cua, $__cub, $__cuc) = authlib8_4_8::_brx($__ctz); my @__ctt = @{authlib8_4_8::_bof($__cts, {"limbo" => 0})}; @__ctt = grep { $_->{"quest_name"} =~ m/^$__cua\b/ } @__ctt; for (my $__ctu = 0; $__ctu < @__ctt; $__ctu++) { if ($__ctz eq $__ctt[$__ctu]->{"quest_name"} || exists $__ctt[$__ctu]->{"data"}->{$__ctz}) { return 1; } } if ($__cuc eq "") { if (exists $authlib8_4_8::_bzi{"hid_loops"}) { authlib8_4_8::_btk(); my $__ctv = 0; if (exists $authlib8_4_8::_bwq{$__cua}) { my $__ctw = $authlib8_4_8::_bwq{$__cua}; $__ctv = $__ctw->{'_v'}; } else { $__ctv = _bqm(); } my $__ctx = $authlib8_4_8::_bzj->[$__ctv - 1]; my $__cty = ciwlib8_4_8::_bhq($authlib8_4_8::_bzi{"hid_loops"}); my ($__cud, $__cue) = ciwlib8_4_8::_bhs($__ctx, $__cty); if ($__cud) { $__ctz .= $__cud; for (my $__ctu = 0; $__ctu < @__ctt; $__ctu++) { if ($__ctz eq $__ctt[$__ctu]->{"quest_name"} || exists $__ctt[$__ctu]->{"data"}->{$__ctz}) { return 1; } } } } } return 0; } sub ANSWERED { my ($__cug) = @_; my $__cuf = 0; if (_bpy(authlib8_4_8::_bnc($__cug)) ne "") { $__cuf = 1; } return $__cuf; } sub LOG10 { my($__cuh) = @_; return (log($__cuh) / log(10)); } sub LOOPVALUE { my ($__cui) = @_; my ($__cuj, $__cuk, $__cul) = _brw($__cui); return $__cuk; } sub LOOPLABEL { my ($__cum) = @_; my ($__cun, $__cuo, $__cup) = _brw($__cum); return $__cup; } sub LOOPITERATION { my ($__cuq) = @_; my ($__cur, $__cus, $__cut) = _brw($__cuq); return $__cur; } sub _brw { my ($__cvc) = @_; my $__cuu = ""; my $__cuv = ""; my $__cuw = ""; authlib8_4_8::_btk(); my $__cux = ciwlib8_4_8::_bhq($authlib8_4_8::_bzi{"hid_loops"}); my $__cuy = _bqm(); my $__cuz = $authlib8_4_8::_bzj->[$__cuy - 1]; if (exists $__cuz->{'_f'}) { if ($__cvc eq "") { $__cvc = $__cuz->{'_f'}->[0]; } if (exists $__cux->{$__cvc}) { $__cuu = $__cux->{$__cvc}; my $__cva = $authlib8_4_8::_cav->{$__cvc}->{'_bcs'}; my $__cvb = authlib8_4_8::_bss($__cva); if ($__cvb) { $__cuv = $__cvb->[$__cuu - 1]->{'_bcm'}; $__cuw = $__cvb->[$__cuu - 1]->{'_bft'}; } } } return ($__cuu, $__cuv, $__cuw); } sub SETVALUE { my($__cvh, $__cvi) = @_; if ($authlib8_4_8::_bym) { return ""; } my $__cvd = ciwlib8_4_8::_bia(); if ($__cvd) { authlib8_4_8::_bnd($__cvh, $__cvi); my ($__cvj, $__cvk) = _bnv($__cvh); eval { my $__cve = "UPDATE `" . $authlib8_4_8::_bzb . "_data" . $__cvj . "` SET `" . $__cvh . "` = ? WHERE `sys_RespNum` = " . $__cvd; my $__cvf = $authlib8_4_8::_byw->prepare(authlib8_4_8::_bmy($__cve, 0)); $__cvf->execute(_bms($__cvi)); }; if ($@) { my $__cvg = "Database error. Error in \"SetValue\" function. Cannot update data row."; if ($__cvj == 0) { $__cvg .= " Cannot find \"" . $__cvh . "\" in database."; } authlib8_4_8::_bqa(269, "Database error.", $__cvg, $@); } $authlib8_4_8::_byw->commit(); } return ""; } sub GETVALUE { my($__cvl) = @_; return _bnc($__cvl); } sub _brx { my($__cvp) = @_; my $__cvm = ""; if ($__cvp =~ m/(.*?)(\..*?)$/) { $__cvp = $1; $__cvm = $2; } my $__cvn = $__cvp; my $__cvo = ""; if ($__cvp =~ m/^sys_/i) { if ($__cvp =~ m/^(sys_.*?)_(.*?)$/i) { $__cvn = $1; $__cvo = $2; } } elsif ($__cvp =~ m/_/) { if ($__cvp =~ m/^(.*?_(\d+|\*))_(b|w|anchor)$/i) { $__cvn = $1; $__cvo = $3; $__cvn =~ s/_\*$/_1/; } elsif ($__cvp =~ m/^(.*?)_(.*?)$/i) { $__cvn = $1; $__cvo = $2; } if (!exists $authlib8_4_8::_bwq{$__cvn}) { if ($__cvp =~ m/^(.*?_.*?)_(.*?)$/i) { $__cvn = $1; $__cvo = $2; } if (!exists $authlib8_4_8::_bwq{$__cvn}) { $__cvn = $__cvp; $__cvo = ""; } } } return ($__cvn, $__cvo, $__cvm); } sub _bry { my ($__cxe, $__cxf, $__cxg, $__cxh) = @_; my $__cvq = 0; my $__cvr = 0; my $__cvs = ""; my $__cvt = 0; my $__cvu = 0; my $__cvv = ""; my $__cvw = ""; my $__cvx = 0; my $__cvy = 0; my $__cvz = 0; my $__cwa = ""; my $__cwb = 0; ($__cxe, $__cvv, $__cvw) = authlib8_4_8::_brx($__cxe); $__cvv = lc($__cvv); $__cvq = $authlib8_4_8::_bwq{$__cxe}; $__cvr = $__cvq->{'_bgu'}; if ($__cvr == &authlib8_4_8::_CBV) { $__cvu = tell $authlib8_4_8::_byh; $__cvt = $__cvq->{'_w'}; seek $authlib8_4_8::_byh, ($__cvt), 0; my $__cwc = _bps(0); if ($__cwc->{'_bgu'} eq "check") { if ($__cxh) { $__cvx = _bsw($__cwc->{'_bcs'}); } else { $__cvx = _bss($__cwc->{'_bcs'}, $__cvw); } if ($__cxf && $__cvx) { $__cvy = @{$__cvx}; for ($__cvz = 0; $__cvz < $__cvy; $__cvz++) { if ($__cvx->[$__cvz]->{'_bcm'} == $__cvv) { $__cvs = _brz($__cvx->[$__cvz], "", $__cxh); last; } } } elsif ($__cvv eq "") { my $__cwd = ""; my @__cwe = (); my $__cwf = ""; if ($__cvx) { $__cvy = @{$__cvx}; for ($__cvz = 0; $__cvz < $__cvy; $__cvz++) { $__cwb = $__cvx->[$__cvz]->{'_bcm'}; $__cwd = $__cxe . "_" . $__cwb . $__cvw; $__cwf = authlib8_4_8::_bnc($__cwd); if ($__cwf ne "") { push @__cwe, {'_bcm'=>$__cwb, '_cbp'=>_bpy($__cwf)}; } } } $__cvs = \@__cwe; } } else { if ($__cxf) { if ($__cxg ne "") { $__cvx = _bsw($__cwc->{'_bcs'}); $__cwa = $__cxe . "_" . $__cxg . "_other" . $__cvw; $__cvs = _brz($__cvx->[$__cxg - 1], $__cwa, $__cxh); } } else { $__cvx = _bss($__cwc->{'_bcs'}, $__cvw); $__cvs = _bsd($__cvx, $__cxe . $__cvw); } } seek $authlib8_4_8::_byh, $__cvu, 0; } elsif($__cvr == &authlib8_4_8::_CCH) { my $__cwg = 0; my $__cwh = 0; my $__cwi = ""; my $__cwj = 0; my $__cwk = 0; my $__cwl = 0; my $__cwm = 0; my $__cwn = 0; my $__cwo = 0; my $__cwp = ""; my $__cwq = 0; my $__cwr = $__cxe . "_" . $__cvv; $__cvu = tell $authlib8_4_8::_byh; $__cvt = $__cvq->{'_w'}; seek $authlib8_4_8::_byh, ($__cvt), 0; $__cwg = _bps(0); $__cwi = $__cwr; if ($__cwi =~ m/(.*?)_r(\d+)/) { $__cwn = $2; } if ($__cwi =~ m/(.*?)_c(\d+)/) { $__cwo = $2; } if ($__cwg->{'_afl'} eq "cols") { $__cwi =~ s/_r\d+//; $__cwj = $__cwo; $__cwq = $__cwn; } else { $__cwi =~ s/_c\d+//; $__cwj = $__cwn; $__cwq = $__cwo; } $__cwk = $__cwg->{'_any'}->[$__cwj - 1]; if ($__cwg->{'_afl'} eq "cols") { $__cwp = $__cwg->{'_ajl'}; } else { $__cwp = $__cwg->{'_alu'}; } if ($__cwk->{'_bgt'} eq $__cwi) { $__cwl = ref($__cwk); } if ($__cwl eq "RadioVar") { if ($__cxf) { if ($__cxg ne "") { $__cvx = _bsw($__cwp); $__cwa = $__cwr . "_other"; if ($__cwa =~ m/_r\d+/) { $__cwa =~ s/_r\d+/_c$__cxg/; } elsif ($__cwa =~ m/_c\d+/) { $__cwa =~ s/_c\d+/_r$__cxg/; } $__cvs = _brz($__cvx->[$__cxg - 1], $__cwa, $__cxh); } } else { $__cvs = _bsd(_bss($__cwp, $__cvw), $__cwr . $__cvw); } } else { if (!$__cxf && $__cvv !~ m/_/) { $__cvs = _bsb($__cwi, $__cwg, _bss($__cwp, $__cvw), $__cvw); } else { if (($__cwl eq "ComboVar") || (($__cwl eq "RankVar") && ($__cwk->{'_bgu'} eq "combo"))) { $__cvx = _bsw($__cwk->{'_bcs'}); if ($__cxf) { if ($__cxg ne "") { $__cwa = $__cwr . "_" . $__cxg . "_other"; $__cvs = _brz($__cvx->[$__cxg - 1], $__cwa, $__cxh); } } else { $__cvs = _bsd(_bss($__cwk->{'_bcs'}, $__cvw), $__cwr . $__cvw); } } elsif (!$__cxf) { $__cvs = $__cxg; } } } seek $authlib8_4_8::_byh, $__cvu, 0; } elsif($__cvr == &authlib8_4_8::_CCI || $__cvr == &authlib8_4_8::_CCJ) { $__cvu = tell $authlib8_4_8::_byh; $__cvt = $__cvq->{'_w'}; seek $authlib8_4_8::_byh, ($__cvt), 0; my $__cws = _bps(0); if ($__cxf) { if ($__cxh) { $__cvx = _bsw($__cws->{'_bcs'}); } else { $__cvx = _bss($__cws->{'_bcs'}, $__cvw); } if ($__cvx) { $__cvy = @{$__cvx}; for ($__cvz = 0; $__cvz < $__cvy; $__cvz++) { if ($__cvx->[$__cvz]->{'_bcm'} == $__cvv) { $__cvs = _brz($__cvx->[$__cvz], "", $__cxh); last; } } } } elsif ($__cvv eq "") { my $__cwd = ""; my @__cwe = (); my $__cwf = ""; $__cvx = _bss($__cws->{'_bcs'}, $__cvw); if ($__cvx) { $__cvy = @{$__cvx}; for ($__cvz = 0; $__cvz < $__cvy; $__cvz++) { $__cwb = $__cvx->[$__cvz]->{'_bcm'}; $__cwd = $__cxe . "_" . $__cwb; $__cwf = authlib8_4_8::_bnc($__cwd); if ($__cwf ne "") { push @__cwe, {'_bcm'=>$__cwb, '_cbp'=>_bpy($__cwf)}; } } } $__cvs = \@__cwe; } seek $authlib8_4_8::_byh, $__cvu, 0; } elsif ($__cvr == &authlib8_4_8::_CCL) { $__cvu = tell $authlib8_4_8::_byh; $__cvt = $__cvq->{'_w'}; seek $authlib8_4_8::_byh, ($__cvt), 0; my $__cwt = _bps(0); if ($__cxf) { if (exists $__cwt->{'_yx'} && $__cvv eq "anchor") { if ($__cxg ne "") { my $__cwu = $__cwt->{'_yx'}->{'_zh'}; my $__cwv = 0; foreach $__cwv(@{$__cwu}) { if($__cwv->{'_bcm'} == $__cxg) { $__cvs = $__cwv->{'_bft'}; last; } } } } elsif ($__cxg ne "") { $__cvx = _bsw($__cwt->{'_bcs'}); $__cvs = _brz($__cvx->[$__cxg - 1], "", $__cxh); } } else { $__cvx = _bss($__cwt->{'_bcs'}, $__cvw); if($__cvx) { my $__cww = 0; my $__cwx = 0; my $__cwy = 0; _boo("maxdifflib8_4_8.pl"); ($__cww, $__cwy) = maxdifflib8_4_8::_cig($__cxe, $__cwt->{'_ww'}, $__cwt->{'_wx'}, $__cwt->{'_wy'}); my $__cwz = 0; my @__cxa = (); foreach $__cwz (@{$__cww}) { push @__cxa, $__cvx->[$__cwz]; } $__cvs = _bsd(\@__cxa, $__cxe . "_" . $__cvv); } } seek $authlib8_4_8::_byh, $__cvu, 0; } elsif ($__cvr == &authlib8_4_8::_CCN) { if ($__cxf) { my ($__cxi, $__cxj) = authlib8_4_8::_brb($__cxe, $__cvv, $__cxg, $__cxh); $__cvs = $__cxj; } else { my $__cxb = authlib8_4_8::_bqx($__cxe); my $__cxc = $__cvv; if (exists $__cxb->{'_apa'}->{$__cxc}) { my $__cxd = $__cxb->{'_apa'}->{$__cxc}->{'_apo'}; $__cvx = _bss($__cxd, $__cvw); $__cvs = _bsd($__cvx, $__cxe . "_" . $__cxc); } } } return $__cvs; } sub _brz { my($__cxm, $__cxn, $__cxo) = @_; my $__cxk = ""; if($__cxo) { $__cxk = _bsa($__cxm); } else { my $__cxl = _bpy(authlib8_4_8::_bnc($__cxn)); if ($__cxn && exists($__cxm->{'_gi'}) && $__cxl) { $__cxk = $__cxl; } else { $__cxk = $__cxm->{'_bft'}; } } return $__cxk; } sub _bsa { my($__cxq) = @_; my $__cxp = ""; if (exists $__cxq->{'_gb'}) { $__cxp = $__cxq->{'_gb'}; } else { $__cxp = $__cxq->{'_bft'}; } return $__cxp; } sub _bsb { my ($__cxx, $__cxy, $__cxz, $__cya) = @_; my $__cxr = 0; my $__cxs = 0; my $__cxt = ""; my @__cxu = (); my $__cxv = 0; my $__cxw = ""; if($__cxz) { $__cxs = @{$__cxz}; } for ($__cxr = 0; $__cxr < $__cxs; $__cxr++) { $__cxt = $__cxx; $__cxv = $__cxz->[$__cxr]->{'_bcm'}; if ($__cxy->{'_afl'} eq "cols") { $__cxt =~ s/(_c\d+)/_r$__cxv$1/; } else { $__cxt .= "_c" . $__cxv; } $__cxt .= $__cya; $__cxw = _bpy(authlib8_4_8::_bnc($__cxt)); if ($__cxw ne "" || _bub($__cxt)) { push @__cxu, {'_bcm'=>$__cxv, '_cbp'=>$__cxw}; } } return \@__cxu; } sub _bsc { my($__cyf, $__cyg, $__cyh, $__cyi) = @_; my $__cyb = ""; my $__cyc = 0; if ($__cyg != 0) { my $__cyd = @{$__cyg}; $__cyc = 1; if ($__cyh eq "") { if ($__cyi =~ m/^values$/i) { $__cyb = "[" . join(",", map{$_->{'_bcm'}} @{$__cyg}) . "]"; } elsif ($__cyi =~ m/^labels$/i) { $__cyb = "[" . join(",", map{"'" . $_->{'_bft'} . "'"} @{$__cyg}) . "]"; } elsif($__cyi =~ m/^length$/i) { $__cyb = $__cyd; } } else { if ($__cyi =~ m/^value$/i) { if (($__cyh > 0) && ($__cyh <= $__cyd)) { $__cyb = $__cyg->[$__cyh - 1]->{'_bcm'}; } } elsif ($__cyi =~ m/^label$/i) { if (($__cyh > 0) && ($__cyh <= $__cyd)) { $__cyb = $__cyg->[$__cyh - 1]->{'_bft'}; } } elsif ($__cyi =~ m/^hasParentItem$/i) { my $__cye = 0; $__cyb = 0; for ($__cye = 0 ; $__cye < $__cyd; $__cye++) { if ($__cyg->[$__cye]->{'_bcm'} == $__cyh) { $__cyb = 1; last; } } } } } return($__cyc, $__cyb); } sub _bsd { my ($__cyp, $__cyq) = @_; my @__cyj = (); my $__cyk = authlib8_4_8::_bnc($__cyq); if ($__cyp && ($__cyk ne "" || _bub($__cyq))) { my $__cyl = 0; my $__cym = @{$__cyp}; my $__cyn = 0; my $__cyo = 0; for ($__cyl = 0; $__cyl < $__cym; $__cyl++) { $__cyn = $__cyp->[$__cyl]->{'_bcm'}; $__cyo = 0; if ($__cyk == $__cyn) { $__cyo = 1; } push @__cyj, {'_bcm'=>$__cyn, '_cbp'=>$__cyo}; } } return \@__cyj; } sub _bse { my($__cyw, $__cyx) = @_; my $__cyr = $authlib8_4_8::_bwv{'_cba'}; if ($__cyr eq "") { $__cyr = "../admin/"; } my $__cys = $__cyr . "error_log.cgi"; my ($__cyy, $__cyz) = authlib8_4_8::_bon($__cys, "append", 0, 0); if(!$__cyz) { authlib8_4_8::_bpo($__cyy, 1); print $__cyy "time= " . _bud(time()) . " | SSIWebVersion= " . $authlib8_4_8::_bwx . " | ErrorNum= " . $__cyw . " | msg= " . $__cyx; my $__cyt = ""; my $__cyu = " | params= "; foreach $__cyt (sort keys(%authlib8_4_8::_bzi)) { $__cyu .= $__cyt . "=>" . $authlib8_4_8::_bzi{$__cyt} . ", "; } print $__cyy $__cyu; my $__cyv = _bql(); if($__cyv) { print $__cyy " IP= " . $__cyv . " , "; } if (exists($ENV{"HTTP_USER_AGENT"})) { print $__cyy " client= " . $ENV{"HTTP_USER_AGENT"}; } print $__cyy "\n\n"; close $__cyy; } return $__cyz; } sub _bsf { my ($__czu, $__czv, $__czw, $__czx) = @_; my $__cza = 0; my $__czb = 0; my $__czc = $__czu->{'_afl'}; my $__czd = @{$__czw}; my $__cze = @{$__czx}; my $__czf = $__czu->{'_any'}; my @__czg = (); my $__czh = 0; my $__czi = ""; my $__czj = ""; my $__czk = 0; my $__czl = ""; my $__czm = 0; my $__czn = 0; my $__czo = 0; my $__czp = 0; my $__czq = 0; my $__czr = 0; my $__czs = ""; my $__czt = 0; if ($__czc eq "rows") { foreach $__czo (@{$__czw}) { $__czq = $__czo - 1; $__czh = _bsp($__czf->[$__czq]); $__czi = $__czh->{'_bgt'}; $__czl = ref($__czh); if ($__czl eq "CheckVar") { $__czh->{'_bgt'} = $__czi . "_c*"; $__czh->{'_aoq'} = $__cze; $__czh->{'_bkv'} = $__czx; push @__czg, $__czh; } elsif ($__czl eq "RadioVar") { push @__czg, $__czh; } elsif (($__czv == 0) && ($__czl eq "RankVar" || $__czl eq "ConsumVar")) { $__czh->{'_bln'} = $__czi . "_c*"; $__czh->{'_cbo'} = $__cze; $__czh->{'_bkv'} = $__czx; push @__czg, $__czh; } else { $__czt = 0; if (($__czl eq "ConsumVar") && $__czv) { foreach $__czp (@{$__czx}) { $__czr = $__czp; $__czj = $__czi . "_c" . ($__czr); if (exists $authlib8_4_8::_bzi{$__czj}) { $__czs = _bpy($authlib8_4_8::_bzi{$__czj}); if ($__czs ne "") { $__czt = 1; last; } } } } foreach $__czp (@{$__czx}) { $__czr = $__czp; $__czh->{'_bgt'} = $__czi . "_c" . ($__czr); if($__czt) { $__czh->{'_bkw'} = 1; } push @__czg, _bsp($__czh); } } } } else { foreach $__czp (@{$__czx}) { $__czr = $__czp - 1; $__czh = _bsp($__czf->[$__czr]); $__czi = $__czh->{'_bgt'}; $__czl = ref($__czh); if ($__czl eq "CheckVar") { $__czj = $__czi; $__czj =~ s/(_c.*)$/_r\*$1/; $__czh->{'_bgt'} = $__czj; $__czh->{'_aoq'} = $__czd; $__czh->{'_bkv'} = $__czw; push @__czg, $__czh; } elsif ($__czl eq "RadioVar") { push @__czg, $__czh; } elsif (($__czv == 0) && ($__czl eq "RankVar" || $__czl eq "ConsumVar")) { $__czj = $__czi; $__czj =~ s/(_c.*)$/_r\*$1/; $__czh->{'_bln'} = $__czj; $__czh->{'_cbo'} = $__czd; $__czh->{'_bkv'} = $__czw; push @__czg, $__czh; } else { $__czt = 0; if (($__czl eq "ConsumVar") && $__czv) { foreach $__czo (@{$__czw}) { $__czq = $__czo; $__czj = $__czi; $__czj =~ s/(_c.*)$/_r$__czq$1/; if (exists $authlib8_4_8::_bzi{$__czj}) { $__czs = _bpy($authlib8_4_8::_bzi{$__czj}); if ($__czs ne "") { $__czt = 1; last; } } } } foreach $__czo (@{$__czw}) { $__czq = $__czo; $__czj = $__czi; $__czj =~ s/(_c.*)$/_r$__czq$1/; $__czh->{'_bgt'} = $__czj; if($__czt) { $__czh->{'_bkw'} = 1; } push @__czg, _bsp($__czh); } } } } return \@__czg; } sub _bsg { my($__daa) = @_; my $__czy = @{$__daa}; my $__czz = 0; for ($__czz = $__czy - 1; $__czz >= 0; $__czz--) { if (!exists($__daa->[$__czz]->{'_gi'}) && !exists($__daa->[$__czz]->{'_axu'})) { last; } } return ($__czz + 1); } sub _bsh { my ($__dai, $__daj, $__dak, $__dal, $__dam) = @_; my $__dab = 0; my $__dac = 0; my $__dad = 0; my $__dae = 0; my $__daf = 0; my @__dag = () x $__daj; my $__dah = 0; if ($__daj < $__dam) { $__dam = $__daj; } $__dal = $__dal - 1; $__dam = $__dam - 1; if ($__dal < $__dam) { $__dah = 1; $__dae = _bsi($__dai, ($__dam - $__dal) + 1, $__dak); } if ($__dah && ($__dal == 0) && ($__dam == ($__daj - 1))) { $__daf = $__dae; } else { for ($__dab = 0; $__dab < $__daj; $__dab++) { if ($__dah && ($__dab >= $__dal) && ($__dab <= $__dam)) { $__dad = ($__dae->[$__dac]) + $__dal; $__dag[$__dab] = $__dad; $__dac++; } else { $__dag[$__dab] = $__dab; } } $__daf = \@__dag; } return $__daf; } sub _bsi { my ($__dap, $__daq, $__dar) = @_; _bsj($__dap + $__dar); my @__dan = map{ rand() } (0..($__daq-1)); my @__dao = sort { $__dan[$a] <=> $__dan[$b] } (0..($__daq-1)); return \@__dao; } sub _bsj { my ($__dau) = @_; my $__das = 0; my $__dat = 0; $__das = $__dau % 10000; $__dat = (((($__das * 3141 + int($__dau / 10000) * 5821) % 10000) * 10000 + $__das * 5821) % 100000000 + 1) % 100000000; srand($__dat); $__das = $__dat % 5 + 1; while ($__das--){ rand; } $_ = rand; return $_; } sub _bsk { my ($__dav,$__daw,$__dax) = @_; if (!$__daw) { if ($__dav =~ m/^-?\d+$/) { return(0); } } elsif (exists $authlib8_4_8::_bzk->{'_aoe'}) { if ($__dav =~ m/^-?(?:\d+(?:(\.|,)\d*)?|(\.|,)\d+)$/) { return(0); } } else { if ($__dav =~ m/^-?(?:\d+(?:\.\d*)?|\.\d+)$/) { return(0); } } return(1); } sub _bsl { my($__day) = @_; $__day =~ s/\[\0/\[%/g; $__day =~ s/\0\]/%\]/g; return $__day; } sub _bsm { my($__dbc) = @_; my $__daz = ""; my $__dba = ""; if (exists $authlib8_4_8::_bzi{"hid_backup"}) { $__daz = $authlib8_4_8::_bzi{"hid_backup"}; my @__dbb = split(",", $__daz); if ($__dbc eq "hid_studyname") { $authlib8_4_8::_bzi{"hid_studyname"} = $__dbb[0]; $__dba = $authlib8_4_8::_bzi{"hid_studyname"}; } elsif ($__dbc eq "hid_respnum") { if ($__dbb[1] && $__dbb[2]) { $authlib8_4_8::_bzi{"hid_respnum"} = $__dbb[1] . "," . $__dbb[2]; } $__dba = $authlib8_4_8::_bzi{"hid_respnum"}; } elsif ($__dbc eq "hid_pagenum") { $authlib8_4_8::_bzi{"hid_pagenum"} = $__dbb[3]; $__dba = $authlib8_4_8::_bzi{"hid_pagenum"}; } elsif ($__dbc eq "hid_javascript") { $authlib8_4_8::_bzi{"hid_javascript"} = $__dbb[4]; $__dba = $authlib8_4_8::_bzi{"hid_javascript"}; } } return $__dba; } sub _bsn { my ($__dbh) = @_; my $__dbd = 0; my $__dbe = 0; my $__dbf = 0; my $__dbg = ""; $__dbf = length($__dbh); for ($__dbe = 0; $__dbe < $__dbf; $__dbe++) { $__dbg = chop $__dbh; $__dbd += ord(uc $__dbg) * ($__dbe + 1); } return ($__dbd); } sub _bso { if ($authlib8_4_8::_byh) { close $authlib8_4_8::_byh; } if ($authlib8_4_8::_byw) { _bmr(); } exit(); } sub _bsp { my ($__dbj) = @_; my $__dbi = ref $__dbj; if (not $__dbi) { $__dbj; } elsif ($__dbi eq "ARRAY") { [map _bsp($_), @$__dbj]; } elsif ($__dbj =~ m/=ARRAY\(/) { bless([map _bsp($_), @$__dbj], $__dbi); } elsif ($__dbi eq "HASH") { +{map { $_ => _bsp($__dbj->{$_}) } keys %$__dbj}; } elsif($__dbj =~ m/=HASH\(/) { bless(+{map { $_ => _bsp($__dbj->{$_}) } keys %$__dbj}, $__dbi); } else { die "what type is $_?"; } } sub _bsq { if ($authlib8_4_8::_cab == 0) { my $__dbk = tell $authlib8_4_8::_byh; if ($authlib8_4_8::_bxh) { seek $authlib8_4_8::_byh, ($authlib8_4_8::_bxh), 0; $authlib8_4_8::_cab = _bps(0); seek $authlib8_4_8::_byh, $__dbk, 0; } else { return 0; } } } sub _bsr { my($__dbl) = @_; if ($authlib8_4_8::_cab == 0) { if ($authlib8_4_8::_bxh) { unless (_bsq()) { return 0; } } else { return 0; } } if (exists($authlib8_4_8::_cab->{$__dbl})) { return _bsp($authlib8_4_8::_cab->{$__dbl}); } else { return 0; } } sub _bss { my($__dct, $__dcu) = @_; my $__dbm = 0; my $__dbn = 0; my $__dbo = 0; my $__dbp = 0; my $__dbq = ""; if ($__dct =~ m/(.*?)(\..*?)$/) { $__dct = $1; $__dbq = $2; } if ($authlib8_4_8::_cak eq $__dct && $authlib8_4_8::_cau) { $__dbn = _bsv(); } else { $__dbp = _bsr($__dct); } if (($authlib8_4_8::_bzy > 0) && $__dbp) { if (exists($__dbp->{'_gt'})) { $__dbp = _bsr($__dbp->{'_gt'}); } if ($__dbp && exists($__dbp->{'_fy'})) { if (@{$__dbp->{'_fy'}} == 0) { push @{$__dbp->{'_fy'}}, {'_bft'=>"", '_bcm'=>"1"}; } } } if ($__dbp) { if (exists($__dbp->{'_gt'})) { my $__dbr = $__dbp->{'_bcl'}; my $__dbs = _bsr($__dbp->{'_gt'}); my $__dbt = 0; my @__dbu = (); my $__dbv = $authlib8_4_8::_cau; my $__dbw = $authlib8_4_8::_cai; my $__dbx = $authlib8_4_8::_caj; my @__dby = (); my $__dbz = ""; my $__dca = 0; $authlib8_4_8::_cau = \@__dby; $authlib8_4_8::_cai = $__dbs; $authlib8_4_8::_caj = $__dbp->{'_gt'}; if (!exists($authlib8_4_8::_bxo{$authlib8_4_8::_caj})) { $__dbt = @{$__dbs->{'_fy'}}; my @__dcb = ("") x ($__dbt + 1); $__dcb[0] = 0; $authlib8_4_8::_bxo{$authlib8_4_8::_caj} = \@__dcb; } $authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[0]++; if ($authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[0] > 1000) { _bse(0, "Circular reference discovered in list building causing an infinite loop. List name: " . $__dct); return 0; } $__dbz = $authlib8_4_8::_cak; $authlib8_4_8::_cak = $__dct; my $__dcc = authlib8_4_8::_bnc($__dct . $__dbq, 0, $__dct); if ($__dcc eq "" && exists($authlib8_4_8::_bzi{$__dct})) { $__dcc = $authlib8_4_8::_bzi{$__dct}; } if ($__dcc eq "" && (exists $authlib8_4_8::_bzi{"hid_loops"} || exists $authlib8_4_8::_bzi{"hid_loops_restart"}) && $__dbq eq "") { my $__dcd = ""; if (exists $authlib8_4_8::_bzi{"hid_loops_restart"}) { $__dcd = $authlib8_4_8::_bzi{"hid_loops_restart"}; } else { my $__dce = ciwlib8_4_8::_bhq($authlib8_4_8::_bzi{"hid_loops"}); my $__dcf = $authlib8_4_8::_bzj->[_bqm() - 1]; my $__dcg = 0; ($__dcd, $__dcg) = ciwlib8_4_8::_bhs($__dcf, $__dce, $__dct); } if ($__dcd) { my $__dch = $__dct . $__dcd; my $__dci = authlib8_4_8::_bnc($__dch); if ($__dci ne "") { authlib8_4_8::_bnd($__dct, $__dci); $__dcc = $__dci; } } } if ($__dcc) { if ($ciwlib8_4_8::_bkn && exists($authlib8_4_8::_bzi{$__dct})) { $authlib8_4_8::_bxp{$__dct} = $__dcc; authlib8_4_8::_bnd($__dct, $__dcc); } if ($__dcc =~ m/[\d,\s]+/) { $authlib8_4_8::_cau = eval("[" . $__dcc . "]"); if ($@) { authlib8_4_8::_bqa(133, "", "Reading saved list error.", $@); } my $__dcj = authlib8_4_8::_bnc($__dct . "_others" . $__dbq); if ($__dcj ne "" || exists($authlib8_4_8::_bzi{$__dct . "_others"})) { if ($__dcj eq "" && exists($authlib8_4_8::_bzi{$__dct . "_others"})) { $__dcj = $authlib8_4_8::_bzi{$__dct . "_others"}; } $__dcj =~ s/\\,/\0/g; my @__dck = split(",", $__dcj); my $__dcl = @__dck; if ($ciwlib8_4_8::_bkn && exists($authlib8_4_8::_bzi{$__dct . "_others"})) { $authlib8_4_8::_bxp{$__dct . "_others"} = $__dcj; authlib8_4_8::_bnd($__dct . "_others", $__dcj); } $__dcj = ""; for ($__dbo = 0; $__dbo < $__dcl; $__dbo++) { $__dca = $authlib8_4_8::_cau->[$__dbo]; $__dbm = $__dbs->{'_fy'}->[$__dca - 1]; if (exists($__dbm->{'_gi'})) { $__dcj = $__dck[$__dbo]; if ($__dcj ne "") { $__dcj =~ s/"/&quot;/g; $__dcj =~ s/\0/,/g; $__dbm->{'_bft'} = $__dcj; $__dbm->{'_gi'}->{'_bft'} = $__dcj; $authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[$__dca] = $__dcj; } } } } } } elsif($__dcu || $__dbq || (exists $authlib8_4_8::_byy->{$__dct} && $authlib8_4_8::_byy->{$__dct} eq "")) { $__dbn = 0; } else { _bqg($__dbr, "list building"); $__dcc = _bsu($authlib8_4_8::_cau); my $__dcm = $__dct; $authlib8_4_8::_bxp{$__dcm} = $__dcc; authlib8_4_8::_bnd($__dct, $__dcc); } $__dbt = @{$authlib8_4_8::_cau}; if ($__dbt > @{$__dbs->{'_fy'}}) { authlib8_4_8::_bqa(134, "List building error.", "List building error: The number of items in the parent list (" . $__dbp->{'_gt'} . ") is less than the number of items in the constructed list (" . $__dct . ").", ""); } my $__dcn = 0; my $__dco = ""; my @__dcp = (); for ($__dbo = 0; $__dbo < $__dbt; $__dbo++) { $__dca = $authlib8_4_8::_cau->[$__dbo]; $__dbm = $__dbs->{'_fy'}->[$__dca - 1]; push @__dbu, $__dbm; $__dcn = $__dbu[$__dbo]->{'_bcm'}; if (exists $__dbm->{'_gi'} && $authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[$__dcn] ne "") { $__dco = $authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[$__dcn]; $__dbu[$__dbo]->{'_bft'} = $__dco; $__dco =~ s/"/&quot;/g; $__dbu[$__dbo]->{'_gi'}->{'_bft'} = $__dco; $__dco =~ s/,/\\,/g; push @__dcp, $__dco; } else { push @__dcp, ""; } } $__dco = join(",", @__dcp); my $__dcq = $__dct . "_others"; my $__dcr = $__dco; $__dcr =~ s/,//g; if ($__dcr ne "") { my $__dcs = authlib8_4_8::_bnc($__dcq); if ($__dcs eq "" && !exists($authlib8_4_8::_bzi{$__dcq})) { $authlib8_4_8::_bxp{$__dcq} = $__dco; authlib8_4_8::_bnd($__dcq, $__dco); } } $authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[0]--; if ($authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[0] == 0) { delete $authlib8_4_8::_bxo{$authlib8_4_8::_caj}; } $authlib8_4_8::_cau = $__dbv; $authlib8_4_8::_cai = $__dbw; $authlib8_4_8::_caj = $__dbx; $authlib8_4_8::_cak = $__dbz; $__dbn = \@__dbu; } else { $__dbn = $__dbp->{'_fy'}; } if ($__dbn && !$authlib8_4_8::_bys) { _bst($__dbn); } } if ($__dcu && $__dbq eq "" && ($__dbn == 0 || @{$__dbn} == 0)) { $__dbn = _bss($__dct . $__dcu); } if($__dbn) { if (@{$__dbn} == 0) { $__dbn = 0; } } return $__dbn; } sub _bst { my($__dcz) = @_; my $__dcv = @{$__dcz}; my $__dcw = 0; my $__dcx = 0; my $__dcy = 0; for ($__dcw = 0; $__dcw < $__dcv; $__dcw++) { $__dcx = $__dcz->[$__dcw]; $__dcx->{'_bft'} = _bqf($__dcx->{'_bft'}, 0); if (exists $__dcx->{'_gi'}) { $__dcy = $__dcx->{'_gi'}; if (exists $__dcy->{'_bds'}) { $__dcy->{'_bds'} = _bqf($__dcy->{'_bds'}, 0); } } } } sub _bsu { my($__ddb) = @_; my $__dda = join(",", @{$__ddb}); return $__dda; } sub _bsv { my $__ddc = 0; my $__ddd = ""; my $__dde = 0; my @__ddf = (); if($authlib8_4_8::_cau) { my $__ddg = @{$authlib8_4_8::_cau}; for ($__dde = 0; $__dde < $__ddg; $__dde++) { push @__ddf, $authlib8_4_8::_cai->{'_fy'}->[$authlib8_4_8::_cau->[$__dde] - 1]; } } return \@__ddf; } sub _bsw { my($__ddj) = @_; my $__ddh = []; my $__ddi = _bsr($__ddj); if ($__ddi) { if (exists($__ddi->{'_gt'})) { $__ddi = _bsr($__ddi->{'_gt'}); } if ($__ddi) { $__ddh = $__ddi->{'_fy'}; } } return $__ddh; } sub _bsx { my($__ddm) = @_; my $__ddk = ""; my $__ddl = _bsr($__ddm); if ($__ddl && exists($__ddl->{'_gt'})) { $__ddk = $__ddl->{'_gt'}; } else { $__ddk = $__ddm; } return $__ddk; } sub _bsy { my($__ddx, $__ddy, $__ddz) = @_; my $__ddn = 0; my $__ddo = 0; my $__ddp = @{$__ddx}; my $__ddq = 0; my $__ddr = @{$authlib8_4_8::_cau}; my $__dds = 0; if ($__ddy <= 0) { $__dds = 1; } for ($__ddn = 0; $__ddn < $__ddp; $__ddn++) { $__ddq = $__ddx->[$__ddn]; if ($__ddz && $authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[0] == 1) { $authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[$__ddq] = ""; } for ($__ddo = 0; $__ddo < $__ddr; $__ddo++) { if ($__ddq == $authlib8_4_8::_cau->[$__ddo]) { if ($__dds) { $__ddx->[$__ddn] = ""; } else { $authlib8_4_8::_cau->[$__ddo] = ""; } } } } my @__ddt = (); for ($__ddn = 0; $__ddn < $__ddr; $__ddn++) { if ($authlib8_4_8::_cau->[$__ddn] ne "") { push @__ddt, $authlib8_4_8::_cau->[$__ddn]; } } $__ddr = @__ddt; my @__ddu = (); for ($__ddn = 0; $__ddn < $__ddp; $__ddn++) { if ($__ddx->[$__ddn] ne "") { push @__ddu, $__ddx->[$__ddn]; } } $__ddp = @__ddu; if ($__ddy > $__ddr) { $__ddy = -1; } if ($__ddy <= 0) { push @__ddt, @__ddu; $authlib8_4_8::_cau = \@__ddt; } else { my @__ddv = (); my @__ddw = (); if ($__ddy > 1) { @__ddv = @__ddt[0 .. ($__ddy - 2)]; } if ($__ddr > 0) { @__ddw = @__ddt[($__ddy - 1) .. ($__ddr - 1)]; } push @__ddu, @__ddw; push @__ddv, @__ddu; $authlib8_4_8::_cau = \@__ddv; } } sub _bsz { my($__ded) = @_; my @__dea = (); if ($__ded && (ref($__ded) eq "ARRAY")) { my $__deb = @{$__ded}; my $__dec = 0; for ($__dec = 0; $__dec < $__deb; $__dec++) { push @__dea, ($__ded->[$__dec]->{'_bcm'}); } } return \@__dea; } sub AIC { my($__def, $__deg, $__deh) = @_; my $__dee = @_; _bte($__def, ">", 0, 0, $__deg, $__deh, $__dee); } sub RIC { my($__del, $__dem, $__den) = @_; my $__dei = @_; my $__dej = _bsp($authlib8_4_8::_cau); $authlib8_4_8::_cau = []; _bte($__del, ">", 0, 0, $__dem, $__den, $__dei); my $__dek = _bsp($authlib8_4_8::_cau); $authlib8_4_8::_cau = $__dej; _btb($__dek); } sub ANC { my($__dep, $__deq, $__der) = @_; my $__deo = @_; _bte($__dep, "==", 0, 0, $__deq, $__der, $__deo); } sub AIE { my($__des, $__det) = @_; _bte($__des, "==", $__det, _btd($__des), 0, 0, 0); } sub AIELOOPLIST { my($__deu, $__dev, $__dew) = @_; _btg($__dev, "==", $__dew, $__deu); } sub ANE { my($__dex, $__dey) = @_; _bte($__dex, "!=", $__dey, _btd($__dex), 0, 0, 0); } sub ANELOOPLIST { my($__dez, $__dfa, $__dfb) = @_; _btg($__dfa, "!=", $__dfb, $__dez); } sub AIL { my($__dfc, $__dfd) = @_; _bte($__dfc, "<", $__dfd, _btd($__dfc), 0, 0, 0); } sub AILLOOPLIST { my($__dfe, $__dff, $__dfg) = @_; _btg($__dff, "<", $__dfg, $__dfe); } sub AIG { my($__dfh, $__dfi) = @_; _bte($__dfh, ">", $__dfi, _btd($__dfh), 0, 0, 0); } sub AIGLOOPLIST { my($__dfj, $__dfk, $__dfl) = @_; _btg($__dfk, ">", $__dfl, $__dfj); } sub ADD { my($__dfn, $__dfo, $__dfp) = @_; my $__dfm = @_; if ($__dfm == 1) { INSERT(-1, $__dfn); } elsif ($__dfm == 2 && $__dfo > 0) { INSERT(-1, $__dfn, $__dfo); } elsif ($__dfm == 3 && $__dfo > 0 && $__dfp >= $__dfo) { INSERT(-1, $__dfn, $__dfo, $__dfp); } } sub ADDSORTED { my ($__dfx, $__dfy) = @_; my $__dfq = 0; my $__dfr = ""; my $__dfs = _btd($__dfx); my @__dft = (); my @__dfu = (); if ($__dfs) { ($__dfq, $__dfr) = _btc($__dfx); } else { $__dfq = _bry($__dfx, 0, "", 0); } if ($__dfq) { @__dft = @{$__dfq}; @__dfu = grep { $_->{'_cbp'} } @__dft; my $__dfv = -1; if ($__dfy) { @__dfu = sort { if ($a->{'_cbp'} eq $b->{'_cbp'}) { $__dfv++; if (RANDNUM($__dfv) >= 0.5) { return -1; } else { return 1; } } else { return $a->{'_cbp'} <=> $b->{'_cbp'}; } } @__dfu; } else { @__dfu = sort { if ($a->{'_cbp'} eq $b->{'_cbp'}) { $__dfv++; if (RANDNUM($__dfv) >= 0.5) { return 1; } else { return -1; } } else { return $b->{'_cbp'} <=> $a->{'_cbp'}; } } @__dfu; } @__dfu = map { $_->{'_bcm'} } @__dfu; foreach my $__dfw (@__dfu) { _btf($__dfx, $__dfw, $__dfs, $__dfr); } } _bsy(\@__dfu, -1, 0); } sub MIRROR { my ($__dgg, $__dgh) = @_; my $__dfz = @_; if ($__dfz == 1) { $__dgh = 0; } my @__dga = @{_bsz(_bss($__dgg))}; my $__dgb = _bsr($__dgg); my $__dgc = 1; if ($__dgb && exists($__dgb->{'_gt'})) { $__dgc = 0; } my @__dgd = map { $_ + $__dgh } @__dga; my @__dge = @{_bsz(_bss($authlib8_4_8::_caj))}; my %__dgf = map { $_ => 1 } @__dge; @__dgd = grep { exists $__dgf{$_} } @__dgd; _bsy(\@__dgd, -1, $__dgc); } sub INSERT { my($__dgs, $__dgt, $__dgu, $__dgv) = @_; my $__dgi = @_; my $__dgj = ""; my $__dgk = ""; my @__dgl = (); my $__dgm = _bsz(_bss($__dgt)); my $__dgn = _bsr($__dgt); my $__dgo = 1; if($__dgn && exists($__dgn->{'_gt'})) { $__dgo = 0; } if ($__dgi == 2) { _bsy($__dgm, $__dgs, $__dgo); } elsif ($__dgi == 3) { my $__dgp = $__dgu; if ($__dgp > 0) { push @__dgl, $__dgm->[$__dgp - 1]; _bsy(\@__dgl, $__dgs, $__dgo); } } elsif ($__dgi == 4) { $__dgj = $__dgu; $__dgk = $__dgv; if (($__dgj > 0) && ($__dgk >= $__dgj)) { my $__dgq = 0; my $__dgr = @{$__dgm}; if ($__dgk > $__dgr) { $__dgk = $__dgr; } $__dgj--; $__dgk--; for ($__dgq = $__dgj; $__dgq <= $__dgk; $__dgq++) { push @__dgl, $__dgm->[$__dgq]; } _bsy(\@__dgl, $__dgs, $__dgo); } } } sub REMOVE { my($__dha, $__dhb, $__dhc) = @_; my $__dgw = @_; my $__dgx = _bsz(_bss($__dha)); if ($__dgw == 1) { _btb($__dgx); } else { if ($__dgw == 2) { $__dhc = $__dhb; } if ($__dhb > 0 && $__dhc >= $__dhb) { my $__dgy = 0; my @__dgz = (); for ($__dgy = $__dhb; $__dgy <= $__dhc; $__dgy++) { push @__dgz, $__dgx->[$__dgy - 1]; } _btb(\@__dgz); } } } sub RANDOMIZE { my($__dhn, $__dho, $__dhp) = @_; my $__dhd = @_; my $__dhe = 0; my $__dhf = @{$authlib8_4_8::_cau}; my $__dhg = 1; my $__dhh = 0; my $__dhi = 0; if ($__dhd == 0) { $__dhh = $__dhf; } elsif($__dhd == 1) { $__dhh = $__dhf; $__dhi = $__dhn; } elsif($__dhd == 2) { $__dhg = $__dhn; $__dhh = $__dho; } elsif($__dhd == 3) { $__dhi = $__dhn; $__dhg = $__dho; $__dhh = $__dhp; } if (exists($authlib8_4_8::_bzi{"hid_respnum"}) && defined($authlib8_4_8::_bzi{"hid_respnum"})) { $__dhe = $authlib8_4_8::_bzi{"hid_respnum"}; } if ($__dhh > $__dhf) { $__dhh = $__dhf; } if ($__dhg < 1) { $__dhg = 1; } if ($__dhi == 0) { my $__dhj = $authlib8_4_8::_cak; if(exists $authlib8_4_8::_bzi{"hid_loops"}) { $__dhj .= $authlib8_4_8::_bzi{"hid_loops"}; } $__dhi = _bsn($__dhj) + $authlib8_4_8::_bxt * 53; $authlib8_4_8::_bxt++; } my $__dhk = _bsh($__dhe, $__dhf, $__dhi, $__dhg, $__dhh); my @__dhl = (); my $__dhm = 0; for ($__dhm = 0; $__dhm < $__dhf; $__dhm++) { push @__dhl, $authlib8_4_8::_cau->[$__dhk->[$__dhm]]; } $authlib8_4_8::_cau = \@__dhl; } sub LISTMIN { my($__dib) = @_; my $__dhq = @{$authlib8_4_8::_cau}; my $__dhr = 0; if ($__dhq < $__dib) { $__dhr = $__dib - $__dhq; my $__dhs = 0; my $__dht = $authlib8_4_8::_cai->{'_fy'}; my $__dhu = @{$__dht}; if (exists($authlib8_4_8::_bzi{"hid_respnum"}) && defined($authlib8_4_8::_bzi{"hid_respnum"})) { $__dhs = $authlib8_4_8::_bzi{"hid_respnum"}; } my $__dhv = _bsn($authlib8_4_8::_cak); my $__dhw = _bsh($__dhs, $__dhu, $__dhv, 1, $__dhu); my $__dhx = 0; my @__dhy = (); my $__dhz = 0; my $__dia = 0; for ($__dhx = 0; $__dhx < $__dhu; $__dhx++) { if ($__dhr == 0) { last; } $__dia = 1; $__dhz = $__dhw->[$__dhx]; if (exists $__dht->[$__dhz]->{'_axu'}) { $__dia = 0; } elsif (exists $__dht->[$__dhz]->{'_gi'}) { $__dia = 0; } if ($__dia) { $__dhy[0] = $__dhz + 1; _bsy(\@__dhy, -1, 0); if (@{$authlib8_4_8::_cau} > $__dhq) { $__dhq = @{$authlib8_4_8::_cau}; $__dhr--; } } } } } sub LISTMAX { my($__dif) = @_; my $__dic = @{$authlib8_4_8::_cau}; if ($__dic > $__dif) { my @__did = (); my $__die = 0; for ($__die = 0; $__die < $__dif; $__die++) { push @__did, $authlib8_4_8::_cau->[$__die]; } $authlib8_4_8::_cau = \@__did; } } sub SETLISTLENGTH { my($__dig) = @_; LISTMAX($__dig); LISTMIN($__dig); } sub REVERSE { my @__dih = reverse(@{$authlib8_4_8::_cau}); $authlib8_4_8::_cau = \@__dih; } sub SORTBYVALUE { my @__dii = sort {$a <=> $b} @{$authlib8_4_8::_cau}; $authlib8_4_8::_cau = \@__dii; } sub SORTBYLABEL { my $__dij = @{$authlib8_4_8::_cau}; my $__dik = 0; my $__dil = 0; my $__dim = 0; my @__din = (); my $__dio = 0; for ($__dik = 0; $__dik < $__dij; $__dik++) { $__dil = $authlib8_4_8::_cau->[$__dik]; $__dim = _bsp($authlib8_4_8::_cai->{'_fy'}->[$__dil - 1]); $__dim->{'_bft'} = _bqf($__dim->{'_bft'}, 0); push @__din, $__dim; $__dio = $__din[$__dik]->{'_bcm'}; if ($authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[$__dio] ne "") { $__din[$__dik]->{'_bft'} = _bqf($authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[$__dio], 0); } } my @__dip = sort {_bta()} @__din; my @__diq = map {$_->{'_bcm'}} @__dip; $authlib8_4_8::_cau = \@__diq; } sub _bta { my $__dir = $a->{'_bft'}; my $__dis = $b->{'_bft'}; ($__dir <=> $__dis) or (lc($__dir) cmp lc($__dis)); } sub _btb { my($__diz) = @_; my $__dit = 0; my $__diu = 0; my $__div = @{$__diz}; my $__diw = 0; my $__dix = @{$authlib8_4_8::_cau}; for ($__dit = 0; $__dit < $__div; $__dit++) { $__diw = $__diz->[$__dit]; for ($__diu = 0; $__diu < $__dix; $__diu++) { if ($__diw == $authlib8_4_8::_cau->[$__diu]) { $authlib8_4_8::_cau->[$__diu] = ""; } } } my @__diy = (); for ($__dit = 0; $__dit < $__dix; $__dit++) { if ($authlib8_4_8::_cau->[$__dit] ne "") { push @__diy, $authlib8_4_8::_cau->[$__dit]; } } $authlib8_4_8::_cau = \@__diy; } sub _btc { my($__djn) = @_; my $__dja = $authlib8_4_8::_bwq{$__djn}; my $__djb = $__dja->{'_bgu'}; my @__djc = (); my $__djd = 0; if($__djb == &authlib8_4_8::_CCH) { my $__dje = tell $authlib8_4_8::_byh; my $__djf = $__dja->{'_w'}; my $__djg = ""; my $__djh = ""; seek $authlib8_4_8::_byh, ($__djf), 0; $__djd = _bps(0); if ($__djd->{'_afl'} eq "cols") { $__djg = $__djd->{'_alu'}; } else { $__djg = $__djd->{'_ajl'}; } my $__dji = _bss($__djg); my $__djj = 0; if ($__dji) { $__djj = @{$__dji}; } my $__djk = 0; my $__djl = ""; my $__djm = 0; for ($__djk = 0; $__djk < $__djj; $__djk++) { $__djm = $__dji->[$__djk]->{'_bcm'}; if ($__djd->{'_afl'} eq "cols") { $__djl = $__djn . "_c" . $__djm; } else { $__djl = $__djn . "_r" . $__djm; } $__djh = _bpy(authlib8_4_8::_bnc($__djl)); if ($__djh ne "" || _bub($__djl)) { push @__djc, {'_bcm'=>$__djm, '_cbp'=>$__djh}; } } seek $authlib8_4_8::_byh, $__dje, 0; } return (\@__djc, $__djd->{'_afl'}); } sub _btd { my($__djp) = @_; my $__djo = 0; if (exists($authlib8_4_8::_bwq{$__djp})) { if ($authlib8_4_8::_bwq{$__djp}->{'_bgu'} == 16) { $__djo = 1; } } return $__djo; } sub _bte { my($__dkb, $__dkc, $__dkd, $__dke, $__dkf, $__dkg, $__dkh) = @_; my $__djq = 0; my $__djr = ""; my @__djs = (); my $__djt = ""; if ($__dkd eq "") { return ""; } if ($__dkh > 0) { if ($__dkh == 1) { $__dkf = 0; $__dkg = 0; } else { if ($__dkh == 2) { $__dkg = $__dkf; } if (!($__dkf > 0 && $__dkg >= $__dkf)) { return ""; } } } else { $__dkf = 0; $__dkg = 0; } if ($__dke) { ($__djq, $__djr) = _btc($__dkb); } else { $__djq = _bry($__dkb, 0, "", 0); } if ($__djq != 0) { my $__dju = @{$__djq}; my $__djv = 0; my $__djw = 0; my $__djx = 0; my $__djy = ""; my $__djz = 0; my $__dka = 0; for ($__djv = 0; $__djv < $__dju; $__djv++) { $__djz = $__djq->[$__djv]->{'_bcm'}; $__dka = $__djq->[$__djv]->{'_cbp'}; if ($__dkf > 0 && ($__djz < $__dkf)) { next; } elsif ($__dkg > 0 && ($__djz > $__dkg)) { next; } if ($__dka eq "") { $__dka = "0"; } $__djt = $__dka . " " . $__dkc . " " . $__dkd; $__djx = eval($__djt); if ($@) { authlib8_4_8::_bqa(135, "", "List building error.", $@); } if ($__djx) { push @__djs, $__djz; _btf($__dkb, $__djz, $__dke, $__djr); } } } _bsy(\@__djs, -1, 0); } sub _btf { my($__dkl, $__dkm, $__dkn, $__dko) = @_; my $__dki = ""; my $__dkj = ""; my $__dkk = ""; if ($__dkl =~ m/(.*?)(\..*?)$/) { $__dkl = $1; $__dkk = $2; } if ($__dkn) { $__dki = $__dkl . "_"; if ($__dko eq "rows") { $__dki .= "r" . $__dkm . "_other"; } else { $__dki .= "c" . $__dkm . "_other"; } } elsif ($__dkl =~ m/_/) { $__dki = $__dkl . "_other"; if ($__dki =~ m/_r\d+/) { $__dki =~ s/_r\d+/_c$__dkm/; } elsif ($__dki =~ m/_c\d+/) { $__dki =~ s/_c\d+/_r$__dkm/; } } else { $__dki = $__dkl . "_" . $__dkm . "_other"; } if ($__dkk) { $__dki .= $__dkk; } $__dkj = authlib8_4_8::_bnc($__dki); if ($__dkj ne "") { $authlib8_4_8::_bxo{$authlib8_4_8::_caj}->[$__dkm] = $__dkj; } } sub _btg { my($__dlc, $__dld, $__dle, $__dlf) = @_; my @__dkp = (); my %__dkq = (); authlib8_4_8::_btk(); if (exists $authlib8_4_8::_cav->{$__dlf}) { my $__dkr = _btu($__dlc); my $__dks = $authlib8_4_8::_bzj->[$__dkr->{'_v'} - 1]; my @__dkt = (); my $__dku = ""; my $__dkv = 0; if (exists $__dks->{'_f'}) { my @__dkw = reverse @{$__dks->{'_f'}}; my $__dkx = 0; for ($__dkx = 0; $__dkx < @__dkw; $__dkx++) { if (uc($__dkw[$__dkx]) eq uc($__dlf)) { $__dkv = $__dkx; } } _bti($__dlc, \@__dkw, \@__dkt, ""); } my $__dky = 0; my $__dkz = ""; my $__dla = 0; my $__dlb = 0; foreach $__dku (@__dkt) { $__dky = authlib8_4_8::_bnc($__dku); if ($__dky eq "") { if (_bub($__dku)) { $__dky = 0; } else { next; } } $__dkz = $__dky . " " . $__dld . " " . $__dle; $__dla = eval($__dkz); if ($@) { authlib8_4_8::_bqa(259, "", "List building error.", $@); } if ($__dla) { $__dlb = _bth($__dku, $__dkv); if (!exists $__dkq{$__dlb}) { $__dkq{$__dlb} = 1; push @__dkp, $__dlb; } } } } _bsy(\@__dkp, -1, 0); } sub _bth { my($__dlj, $__dlk) = @_; my $__dlg = 0; if ($__dlj =~ m/(.*?)\.(.*?)$/) { my @__dlh = (); my $__dli = $2; if ($__dli =~ m/\./) { @__dlh = split(/\./, $__dli); } else { push @__dlh, $__dli; } if ($__dlk < @__dlh) { $__dlg = $__dlh[$__dlk]; } } return $__dlg; } sub _bti { my($__dlq, $__dlr, $__dls, $__dlt) = @_; my $__dll = _bsp($__dlr); my $__dlm = shift @{$__dll}; if (exists $authlib8_4_8::_cav->{$__dlm}) { my $__dln = $authlib8_4_8::_cav->{$__dlm}->{'_bcs'}; my $__dlo = authlib8_4_8::_bss($__dln); if ($__dlo) { foreach my $__dlp (@{$__dlo}) { if (@{$__dll}) { _bti($__dlq, $__dll, $__dls, $__dlt . "." . $__dlp->{'_bcm'}); } else { push @{$__dls}, $__dlq . $__dlt . "." . $__dlp->{'_bcm'}; } } } } } sub _btj { my($__dly) = @_; my $__dlu = "SELECT * FROM `" . $authlib8_4_8::_bzb . "_clists` WHERE `sys_RespNum` = " . $__dly; my $__dlv = 0; eval { $__dlv = $authlib8_4_8::_byw->selectall_hashref(authlib8_4_8::_bmy($__dlu, 0), "list_name"); }; if ($@) { authlib8_4_8::_bqa(255, "Database error.", "Database error. Cannot read clist table.", $@); } my $__dlw = ""; my $__dlx = ""; foreach $__dlw (keys %{$__dlv}) { $__dlx = authlib8_4_8::_bmt($__dlv->{$__dlw}->{"value"}); authlib8_4_8::_bnd($__dlw, $__dlx); } return $__dlv; } sub _btk { if (!$authlib8_4_8::_cav) { if ($authlib8_4_8::_bxi) { seek $authlib8_4_8::_byh, $authlib8_4_8::_bxi, 0; $authlib8_4_8::_cav = authlib8_4_8::_bps(0); } } } sub _btl { my $__dlz = 1; my $__dma = authlib8_4_8::_bnc("sys_CheckSum"); my $__dmb = $authlib8_4_8::_bzi{"hid_checksum"}; if ($__dmb && $__dmb == $__dma) { $__dlz = 0; } if ($__dlz) { authlib8_4_8::_bqa(138, "Access Denied.", "Access Denied. Inconsistency in security check." . $__dmb . " != " . $__dma . ". ", ""); } } sub _btm { my($__dme) = @_; if (exists $__dme->{'_bgp'}) { my $__dmc = _bpy($__dme->{'_bgp'}); if ($__dmc eq "") { $__dme->{'_bgp'} = 0; } } if (exists $__dme->{'_aop'}) { my $__dmd = _bpy($__dme->{'_aop'}); if ($__dmd eq "") { $__dme->{'_aop'} = 0; } } } sub _btn { my($__dmi) = @_; my $__dmf = 1; my $__dmg = $__dmi; if ($__dmi =~ m/^(\d*)\.(\d*)$/) { $__dmg = $1; } if (length($__dmg) > 9) { $__dmf = 0; } elsif ($__dmg =~ m/^0+(\d+)$/) { $__dmf = 0; } my $__dmh = $__dmi; $__dmh =~ s/\.//; if ($__dmh !~ m/^\d+$/) { $__dmf = 0; } return $__dmf; } sub _bto { my($__dml) = @_; my $__dmj = 1; $__dml = _bpy($__dml); my $__dmk = $__dml; $__dmk =~ s/\.//; $__dmk =~ s/^-//; if ($__dmk !~ m/^\d+$/) { $__dmj = 0; } return $__dmj; } sub _btp { my($__dmo) = @_; my @__dmm = (); my $__dmn = 0; for ($__dmn = 1; $__dmn <= $__dmo; $__dmn++) { push @__dmm, $__dmn; } return \@__dmm; } sub _btq { my $__dmp = "<script type=\"text/javascript\" src=\"" . $authlib8_4_8::_bwv{'_blf'} . "system/jquery-1.7.1.min.js\"></script>\n"; return $__dmp; } sub _btr { my $__dmq = "<script type=\"text/javascript\" src=\"" . $authlib8_4_8::_bwv{'_blf'} . "system/jquery-ui-1.8.17.min.js\"></script>\n"; $__dmq .= "<script type=\"text/javascript\" src=\"" . $authlib8_4_8::_bwv{'_blf'} . "system/jquery.ui.touch-punch.min.js\"></script>\n"; return $__dmq; } sub _bts { my $__dmr .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"" . $authlib8_4_8::_bwv{'_blf'} . "system/cupertino/jquery-ui-1.8.17.custom.css\">\n"; return $__dmr; } sub _btt { my $__dms = "<script type=\"text/javascript\" src=\"" . $authlib8_4_8::_bwv{'_blf'} . "system/highcharts-2.1.9.js\"></script>\n"; return $__dms; } sub _btu { my($__dmu) = @_; if ($__dmu =~ m/(.*?)\./) { $__dmu = $1; } my $__dmt = 0; my($__dmv, $__dmw, $__dmx) = authlib8_4_8::_brx($__dmu); if (exists($authlib8_4_8::_bwq{$__dmu})) { $__dmt = $authlib8_4_8::_bwq{$__dmu}; } elsif (exists($authlib8_4_8::_bwq{$__dmv})) { $__dmt = $authlib8_4_8::_bwq{$__dmv}; } else { if ($__dmu =~ m/(.*?)_(\d+)$/i) { $__dmv = $1; if (exists($authlib8_4_8::_bwq{$__dmv})) { $__dmt = $authlib8_4_8::_bwq{$__dmv}; } } } return $__dmt; } sub _btv { my ($__dpn, $__dpo, $__dpp, $__dpq, $__dpr, $__dps, $__dpt, $__dpu) = @_; my $__dmy = ""; my $__dmz = @{$authlib8_4_8::_bzj}; my $__dna = 0; my $__dnb = 0; my $__dnc = 0; my $__dnd = 0; my $__dne = 0; my $__dnf = 0; my $__dng = 0; my $__dnh = 0; my $__dni = 0; my $__dnj = 0; my $__dnk = ""; my $__dnl = 0; my $__dnm = 0; my $__dnn = 0; my %__dno = (); my $__dnp = ""; my $__dnq = 0; my @__dnr = (); if (!$__dpo && !$__dpp) { if (!$__dpn) { push @__dnr, ["sys_RespNum", "* Respondent Number"]; } push @__dnr, ["sys_DispositionCode", "* Disposition Code"]; authlib8_4_8::_box(); if ($authlib8_4_8::_bzo) { if (exists $authlib8_4_8::_bzo->{'_bfx'}) { my $__dns = $authlib8_4_8::_bzo->{'_bfx'}; if (exists $__dns->{'_bfy'}) { my @__dnt = @{$__dns->{'_bfy'}}; my $__dns = 0; foreach $__dns (@__dnt) { if ($__dns->{'_bgu'} eq "numeric" || !$__dpn) { push @__dnr, [$__dns->{'_bgt'}, ""]; } } } if (exists $__dns->{'_bgj'}) { my @__dnu = @{$__dns->{'_bgj'}}; my $__dnv = 0; foreach $__dnv (@__dnu) { if ($__dnv->{'_bgu'} eq "numeric" || !$__dpn) { push @__dnr, [$__dnv->{'_bgt'}, ""]; } } } } if (exists $authlib8_4_8::_bzo->{'_bgq'}) { my $__dnw = $authlib8_4_8::_bzo->{'_bgq'}; my $__dnx = 0; foreach $__dnx (@{$__dnw}) { if ($__dnx->{'_bgu'} eq "numeric" || !$__dpn) { push @__dnr, [$__dnx->{'_bgt'}, ""]; } } } } } my $__dny = 1; my $__dnz = 0; my %__doa = (); my $__dob = ""; while ($__dny <= $__dmz) { $__dob = ""; $__dnb = $authlib8_4_8::_bzj->[$__dny - 1]; if (exists $__dnb->{'_f'}) { authlib8_4_8::_btk(); my @__doc = (); foreach my $__dod (@{$__dnb->{'_f'}}) { if(not exists $__doa{$__dod}) { my %__doe = (); $__doe{'_e'} = 1; $__doe{'_aop'} = @{authlib8_4_8::_bsw($authlib8_4_8::_cav->{$__dod}->{'_bcs'})}; $__doe{'_vr'} = $authlib8_4_8::_cav->{$__dod}->{'_vr'}; $__doa{$__dod} = \%__doe; } unshift @__doc, $__doa{$__dod}->{'_e'}; } $__dob = "." . join(".", @__doc); } $__dna = $__dnb->{'_g'}; $__dnd = @{$__dna}; for ($__dnf = 0; $__dnf < $__dnd; $__dnf++) { $__dnc = $__dna->[$__dnf]; $__dnh = $__dnc->{'_w'}; $__dnk = $__dnc->{'_bgt'}; $__dnl = $__dnc->{'_bgu'}; if ($__dpo || $__dpp) { if ($__dpp || ($__dpo && $__dnl != &authlib8_4_8::_CBY && $__dnl != &authlib8_4_8::_CCM)) { _btw(\@__dnr, $__dnk, $__dob); } } else { if(!$__dpn && $__dnl == &authlib8_4_8::_CBV) { seek $authlib8_4_8::_byh, ($__dnh), 0; my $__dof = authlib8_4_8::_bps(0); if ($__dof->{'_bgu'} eq "check") { $__dni = authlib8_4_8::_bsr($__dof->{'_bcs'}); if ($__dni && exists($__dni->{'_gt'})) { $__dni = authlib8_4_8::_bsr($__dni->{'_gt'}); } if ($__dni && exists($__dni->{'_fy'})) { $__dnm = @{$__dni->{'_fy'}}; } for ($__dng = 0; $__dng < $__dnm; $__dng++) { _btw(\@__dnr, $__dnk . "_" . $__dni->{'_fy'}->[$__dng]->{'_bcm'}, $__dob); } } else { _btw(\@__dnr, $__dnk, $__dob); } } elsif($__dnl == &authlib8_4_8::_CCA) { my $__dog = 1; my $__doh = 0; my $__doi = 0; if ($__dnk =~ m/_Rating(\d+)/i) { $__dog = $1; } my $__doj = authlib8_4_8::_bpl($__dnk, 1); my $__dok = $__doj->{'_asc'}; $__doh = @{$__dok->[$__dog - 1]->{'_bca'}}; for ($__doi = 1; $__doi <= $__doh; $__doi++) { _btw(\@__dnr, $__dnk . "_" . $__doi, $__dob); } } elsif($__dnl == &authlib8_4_8::_CCF) { seek $authlib8_4_8::_byh, ($__dnh), 0; my $__dol = authlib8_4_8::_bps(0); if (exists $__dol->{'_rf'}) { my $__dom = $__dol->{'_os'}; if (exists($__dol->{'_pm'})) { $__dom++; } for ($__dng = 1; $__dng <= $__dom; $__dng++) { _btw(\@__dnr, $__dnk . "_" . $__dng, $__dob); } } elsif (exists $__dol->{'_rr'}) { _btw(\@__dnr, $__dnk . "_b", $__dob); _btw(\@__dnr, $__dnk . "_w", $__dob); } else { _btw(\@__dnr, $__dnk, $__dob); } if (exists $__dol->{'_pp'}) { _btw(\@__dnr, $__dnk . "_none", $__dob); } } elsif($__dnl == &authlib8_4_8::_CCU) { my $__dog = 1; my $__doh = 0; my $__doi = 0; if ($__dnk =~ m/_Rating(\d+)/i) { $__dog = $1; } seek $authlib8_4_8::_byh, ($__dnh), 0; my $__dol = authlib8_4_8::_bps(0); my $__don = $__dol->{"cbc_settings_offset"}; seek $authlib8_4_8::_byh, ($__don), 0; $__dol = authlib8_4_8::_bps(0); my $__dok = $__dol->{'_asc'}; $__doh = @{$__dok->[$__dog - 1]->{'_bca'}}; for ($__doi = 1; $__doi <= $__doh; $__doi++) { _btw(\@__dnr, $__dnk . "_" . $__doi, $__dob); } } elsif($__dnl == &authlib8_4_8::_CCG) { seek $authlib8_4_8::_byh, ($__dnh), 0; my $__doo = authlib8_4_8::_bps(0); my $__dop = $__doo->{'_any'}; my $__doq = @{$__dop}; my $__dor = 0; for ($__dng = 0; $__dng < $__doq; $__dng++) { $__dor = $__dop->[$__dng]; if (ref($__dor) eq "OpenEndVar" && $__dpn) { } else { if (ref($__dor) eq "CheckVar") { my $__dos = $__dor->{'_aoq'}; for ($__dnn = 1; $__dnn <= $__dos; $__dnn++) { _btw(\@__dnr, $__dor->{'_bgt'} . "_" . $__dnn, $__dob); } } else { _btw(\@__dnr, $__dor->{'_bgt'}, $__dob); } } } } elsif($__dnl == &authlib8_4_8::_CCH) { seek $authlib8_4_8::_byh, ($__dnh), 0; my $__dot = authlib8_4_8::_bps(0); my $__dou = 0; my $__dov = $__dot->{'_any'}; my $__dow = @{$__dov}; my $__dor = 0; my $__dox = ""; my $__doy = $__dot->{'_afl'}; for ($__dng = 0; $__dng < $__dow; $__dng++) { $__dor = $__dov->[$__dng]; if (ref($__dor) eq "RadioVar") { _btw(\@__dnr, $__dor->{'_bgt'}, $__dob); } elsif(ref($__dor) eq "CheckVar" && $__dpn) { $__dox = $__dor->{'_bgt'}; if ($__doy eq "rows") { $__dox .= "_c*"; } else { $__dox =~ s/(_c\d+)/_r\*$1/; } _btw(\@__dnr, $__dox, $__dob); } elsif(ref($__dor) eq "OpenEndVar" && $__dpn) { } else { if ($__doy eq "rows") { $__dni = authlib8_4_8::_bsr($__dot->{'_alu'}); } else { $__dni = authlib8_4_8::_bsr($__dot->{'_ajl'}); } if ($__dni && exists($__dni->{'_gt'})) { $__dni = authlib8_4_8::_bsr($__dni->{'_gt'}); } if ($__dni && exists($__dni->{'_fy'})) { $__dnm = @{$__dni->{'_fy'}}; } for ($__dnn = 1; $__dnn <= $__dnm; $__dnn++) { $__dox = $__dor->{'_bgt'}; if ($__doy eq "rows") { $__dox .= "_c" . $__dnn; } else { $__dox =~ s/(_c\d+)/_r$__dnn$1/; } _btw(\@__dnr, $__dox, $__dob); } } } } elsif($__dnl == &authlib8_4_8::_CCI || $__dnl == &authlib8_4_8::_CCJ) { seek $authlib8_4_8::_byh, ($__dnh), 0; my $__doz = authlib8_4_8::_bps(0); $__dni = authlib8_4_8::_bsr($__doz->{'_bcs'}); if ($__dni && exists($__dni->{'_gt'})) { $__dni = authlib8_4_8::_bsr($__dni->{'_gt'}); } if ($__dni && exists $__dni->{'_fy'}) { $__dnm = @{$__dni->{'_fy'}}; } for ($__dnn = 1; $__dnn <= $__dnm; $__dnn++) { _btw(\@__dnr, $__dnk . "_" . $__dnn, $__dob); } } elsif($__dnl == &authlib8_4_8::_CCL) { $__dnp = $__dnk; if ($__dpn) { $__dnp =~ s/_\d+//; if (!exists $__dno{$__dnp}) { $__dno{$__dnp} = $__dnp; } } else { seek $authlib8_4_8::_byh, $__dnh, 0; my $__dpa = authlib8_4_8::_bps(0); push @__dnr, [$__dnp . "_b", ""]; if (!exists $__dpa->{'_xo'}) { _btw(\@__dnr, $__dnp . "_w", $__dob); } } } elsif ($__dnl == &authlib8_4_8::_CCN) { my $__dpb = authlib8_4_8::_bqx($__dnk); my $__dpc = authlib8_4_8::_bsw($__dpb->{'_aoz'}); my $__dpd = @{$__dpc}; my $__dog = 0; for ($__dng = 0; $__dng < $__dpd; $__dng++) { $__dog = $__dpc->[$__dng]->{'_bcm'}; if (exists $__dpb->{'_apa'}->{$__dog} && exists $__dpb->{'_apa'}->{$__dog}->{'_apr'}) { next; } else { _btw(\@__dnr, $__dnk . "_" . $__dog, $__dob); } } } elsif($__dnl == &authlib8_4_8::_CCO) { if ($__dpn) { if ($__dnk =~ m/(.*?_Screener)1$/i) { } } } elsif(!$__dpn && $__dnl == &authlib8_4_8::_CCP) { } elsif (!$__dpn && $__dnl == &authlib8_4_8::_CCQ) { } elsif($__dnl == &authlib8_4_8::_CCR) { if ($__dpn) { if ($__dnk =~ m/(.*?_ChoiceTask)1$/i) { } } } elsif($__dnl == &authlib8_4_8::_CCS) { _btw(\@__dnr, $__dnk, $__dob); } elsif($__dnl == &authlib8_4_8::_CCT) { seek $authlib8_4_8::_byh, ($__dnh), 0; my $__dpe = authlib8_4_8::_bps(0); $__dni = authlib8_4_8::_bsr($__dpe->{'_bcs'}); if ($__dni && exists($__dni->{'_gt'})) { $__dni = authlib8_4_8::_bsr($__dni->{'_gt'}); } if ($__dni && exists($__dni->{'_fy'})) { $__dnm = @{$__dni->{'_fy'}}; } for ($__dnn = 1; $__dnn <= $__dnm; $__dnn++) { _btw(\@__dnr, $__dnk . "_" . $__dnn, $__dob); } } else { if (($__dnl == &authlib8_4_8::_CBY || $__dnl == &authlib8_4_8::_CBZ || $__dnl == &authlib8_4_8::_CCK) || ($__dpn && ($__dnl == &authlib8_4_8::_CBX || $__dnl == &authlib8_4_8::_CCE || $__dnl == &authlib8_4_8::_CCP || $__dnl == &authlib8_4_8::_CCQ))) { } else { _btw(\@__dnr, $__dnk, $__dob); } } } } $__dny++; $__dnz = 0; if ($__dny <= $__dmz) { $__dnz = $authlib8_4_8::_bzj->[$__dny - 1]; } if (exists $__dnb->{'_f'}) { my $__dpf = $__dnb->{'_f'}; my %__dpg = (); my $__dph = 0; if ($__dnz) { if (exists $__dnz->{'_f'}) { %__dpg = map { $_ => 1 } @{$__dnz->{'_f'}}; } } foreach my $__dod (@{$__dpf}) { if (not exists $__dpg{$__dod}) { if(exists $__doa{$__dod}) { $__dph = $__doa{$__dod}->{'_e'}; $__dph++; if ($__dph <= $__doa{$__dod}->{'_aop'}) { $__dny = $__doa{$__dod}->{'_vr'}->[0]; $__doa{$__dod}->{'_e'} = $__dph; last; } else { delete $__doa{$__dod}; } } } } } } my @__dpi = (); if (!$__dpp) { my $__dpj = 0; my $__dpk = ""; my $__dpl = ""; my $__dpm = 0; foreach $__dpj (@__dnr) { $__dpm = 0; $__dpk = $__dpj->[0]; $__dpl = $__dpj->[1]; if ($__dpq) { if (exists $authlib8_4_8::_bzi{$__dpr . $__dpk} && $__dps) { $__dpm = 1; push @__dpi, $__dpk; } $__dmy .= _btx($__dpk, $__dpl, $__dpr, "", $__dpm); } else { $__dmy .= _btz($__dpk, $__dpl, $__dpt, $__dpu); } } } return ($__dmy, \@__dnr, $__dpr, \@__dpi); } sub _btw { my($__dpv, $__dpw, $__dpx) = @_; push @{$__dpv}, [$__dpw . $__dpx, ""]; } sub _btx { my($__dpz, $__dqa, $__dqb, $__dqc, $__dqd) = @_; if ($__dqa eq "") { $__dqa = $__dpz; } my $__dpy = ""; if ($__dqd) { $__dpy = " checked "; } return "<div class=\"check_option\"><input type=\"checkbox\" name=\"" . _bty($__dqb . $__dpz) . "\" value=\"" . _bty($__dqc) . "\" id=\"" . _bty($__dqb . $__dpz) . "\"" . $__dpy . "><span class=\"check_label\">" . $__dqa . "</span></div>\n"; } sub _bty { my($__dqe) = @_; $__dqe =~ s/"/\\"/g; return $__dqe; } sub _btz { my($__dqh, $__dqi, $__dqj, $__dqk) = @_; if ($__dqi eq "") { $__dqi = $__dqh; } my $__dqf = _bua($__dqh); if($__dqj) { $__dqf = "test_" . $__dqf; } my $__dqg = "<option id=\"" . $__dqf . "\" value=\"" . $__dqh . "\""; if($__dqk && $__dqk eq $__dqh) { $__dqg .= " selected "; } $__dqg .= ">" . $__dqi . "</option>\n"; return $__dqg; } sub _bua { my($__dql) = @_; $__dql =~ s/\*/XSTARX/g; $__dql =~ s/\./XDOTX/g; return $__dql; } sub _bub { my ($__dqo) = @_; my $__dqm = $authlib8_4_8::_bzi{"hid_respnum"}; my($__dqp, $__dqq, $__dqr) = authlib8_4_8::_brx($__dqo); my @__dqn = @{authlib8_4_8::_bof($__dqm, {"quest_name" => $__dqp . $__dqr, "limbo" => 0})}; if (@__dqn) { return 1; } else { return 0; } } sub _buc { my $__dqs = "test_" . $authlib8_4_8::_byz; if(exists $authlib8_4_8::_bzi{"hid_test_mode"}) { if($authlib8_4_8::_bzi{"hid_test_mode"} == 2) { $__dqs = $authlib8_4_8::_byz; } } return $__dqs; } sub _bud { my($__dqw) = @_; my $__dqt = ""; if ($__dqw) { my @__dqu = gmtime($__dqw); my $__dqv = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")[$__dqu[4]]; $__dqt = sprintf("%d %s %d - %d:%02d:%02d", $__dqu[3],$__dqv,($__dqu[5]+1900),$__dqu[2],$__dqu[1],$__dqu[0]); $__dqt .= " GMT"; } return $__dqt; } return 1; 
package SSIWebParseBrowser;



%SSIWebParseBrowser::lang = ("en" => "English",
         "de" => "German",
         "fr" => "French",
         "es" => "Spanish",
         "it" => "Italian",
         "dn" => "Danish",
         "jp" => "Japanese");

sub new
{
    my $class = shift;
    my $browser = {};
    bless $browser, ref $class || $class;
    $browser->Parse(shift);
    return $browser;
}

sub Parse
{
    my $browser = shift;
    my $useragent = shift;

    my $strBrowserKey = "";
    foreach $strBrowserKey (keys %{$browser})
    {
        delete $browser->{$strBrowserKey};
    }

    return undef unless $useragent;
    return undef if $useragent eq "-";
    $browser->{user_agent} = $useragent;
    $useragent =~ s/Opera (?=\d)/Opera\//i;

    while ($useragent =~ s/\[(\w+)\]//)
    {
        push @{$browser->{languages}}, $SSIWebParseBrowser::lang{$1} || $1;
        push @{$browser->{langs}}, $1;
    }
    if ($useragent =~ s/\((.*)\)//)
    {
        $browser->{detail} = $1;
    }
    $browser->{useragents} = [grep /\//, split /\s+/, $useragent];
    $browser->{properties} = [split /;\s+/, $browser->{detail}];

    for (@{$browser->{useragents}})
    {
        my ($br, $ver) = split /\//;
    $br =~ s/^"//o;
    $br =~ s/"$//o;
    $ver =~ s/^"//o;
    $ver =~ s/"$//o;
        $browser->{name} = $br;
        $browser->{version}->{v} = $ver;
        ($browser->{version}->{major}, $browser->{version}->{minor}) = split /\./, $ver, 2;
        last if lc $br eq "lynx";
    }

    for (@{$browser->{properties}})
    {
        /compatible/i and next;
        unless (lc $browser->{name} eq "webtv")
        {
            if (/^MSIE (.*)$/)
            {
                $browser->{name} = "MSIE";
                $browser->{version}->{v} = $1;
                ($browser->{version}->{major}, $browser->{version}->{minor}) = split /\./, $1, 2;
            }
            elsif (/^Trident\/([\d.]+)/)
            {
                $browser->{name} = "MSIE";

                if ($browser->{detail} =~ m/rv:(\d+)\.(\d+)/i)
                {
                    $browser->{version}->{major} = $1;
                    $browser->{version}->{minor} = $2;
                }

                $browser->{version}->{v} = $browser->{version}->{major} . "." . $browser->{version}->{minor};
            }
        }
        if (/^Win/)
        {
            $browser->{os} = $_;
            $browser->{ostype} = "Windows";
            if (/ /)
            {
                (undef, $browser->{osvers}) = split / /, $_, 2;
                if ($browser->{osvers} =~ /^NT/)
                {
                    $browser->{ostype} = "Windows NT";
                    (undef, $browser->{osvers}) = split / /, $browser->{osvers}, 2;
                    if ($browser->{osvers} >= 5)
                    {
                        $browser->{osvers} = "2000";
                    }
                }
            }
            elsif (/Win(\w\w)/i)
            {
                $browser->{osvers} = $1;
            }
            if (lc $browser->{osvers} =~ /^9x/)
            {
                $browser->{osvers} = "ME";}}


        if ($browser->{os} =~ m/(.*?)\)/)
        {
            $browser->{os} = $1;
        }

        if (/^Mac/ || /^iP(?>hone|od|ad)/i)
    {
            $browser->{os} = $_;
            $browser->{ostype} = "Macintosh";
            (undef, $browser->{osvers}) = split /[ _]/, $_, 2;
        }
        if (/^PPC$/)
    {
            $browser->{osarc} = "PPC";
        }
        if (/^Linux/)
    {
            $browser->{os} = "Linux";
            $browser->{ostype} = "Linux";
            (undef, $browser->{osvers}) = split / /, $_, 2;
            if ($browser->{osvers} =~ / /)
        {
                (undef, $browser->{osvers},$browser->{osarc}) = split / /, $_, 3;
        }
        }
        if (/^(SunOS)|(Solaris)/i)
    {
            $browser->{os} = $_;
            $browser->{ostype} = "Solaris";
            (undef, $browser->{osvers}) = split / /, $_, 2;
            if ($browser->{osvers} =~ / /)
        {
                ($browser->{osvers},$browser->{osarc}) = split / /, $_, 3;
        }
        }
        for my $lang (keys %SSIWebParseBrowser::lang)
    {
            if (/^$lang\-/)
        {
                my $l;
                ($l, undef) = split /\-/;
                push @{$browser->{languages}}, $SSIWebParseBrowser::lang{$l} || $1;
                push @{$browser->{langs}}, $1;
        }
            push @{$browser->{languages}}, $SSIWebParseBrowser::lang{$_} if /^$lang$/;
            push @{$browser->{langs}}, $_ if /^$lang$/;
         }
    }

    if ($browser->{name} eq "Mozilla") {
        $browser->{name} = "Netscape";}
    if ($browser->{name} eq "Gecko") {
        $browser->{name} = "Mozilla";}
    if ($browser->{name} eq "Netscape6") {
        $browser->{name} = "Netscape";}
    if ($browser->{name} eq "Konqueror") {
        $browser->{ostype} = "Linux";}
    $browser->{name} ||= $useragent;

    my $strOriginalUserAgent = $browser->{user_agent};

    if ($strOriginalUserAgent =~ m/(Firefox|Opera|Chrome)\/(.*?)(\s+|$)/i)
    {
        $browser->{'name'} = $1;
        $browser->{'version'}->{'v'} = $2;
    }

    if ($strOriginalUserAgent =~ m/(Android(?:\s+\d+(?:\.\d+)*)?)/i)
    {
        $browser->{'os'} = $1;
    }

    my %langs_in;
    for (@{$browser->{langs}}) {
        $langs_in{$_}++;}
    ($browser->{lang}) = sort {$langs_in{$a} <=> $langs_in{$b}} keys %langs_in;
    $browser->{language} = $SSIWebParseBrowser::lang{$browser->{lang}} || $browser->{lang};
    delete $browser->{language} unless $browser->{language};

    if (exists $browser->{os})
    {
        my $strOS = $browser->{os};

        if ($strOS =~ m/Win(?>NT-(?>EV|A|PA)|TSI|dows-Media-Player|64)/i)
        {
            if ($strOriginalUserAgent =~ m/(Windows\s+NT\s+\d+\.\d+)/i)
            {
                $strOS = $1;
                $strOS =~ s/NT 5\.1/XP/i;
                $strOS =~ s/NT 5\.2/XP/i;
                $strOS =~ s/NT 6\.0/Vista/i;
                $strOS =~ s/NT 6\.1/7/i;
                $strOS =~ s/NT 6\.2/8/i;
                $strOS =~ s/NT 6\.3/8.1/i;
                $strOS =~ s/NT 10/10/i;
            }
        }
        if ($strOS =~ m/NT/)
        {
            $strOS =~ s/NT 5\.0/2000/i;
            $strOS =~ s/NT 5\.1/XP/i;
            $strOS =~ s/NT 5\.2/XP/i;
            $strOS =~ s/NT 6\.0/Vista/i;
            $strOS =~ s/NT 6\.1/7/i;
            $strOS =~ s/NT 6\.2/8/i;
            $strOS =~ s/NT 6\.3/8.1/i;
            $strOS =~ s/NT 10/10/i;
        }
        elsif ($strOS =~ m/9x\s+[\d.]+/i)
        {
            $strOS = "Windows ME";
        }
        elsif ($strOS =~ m/Macintosh/i)
        {
            if ($strOriginalUserAgent =~ m/(Mac\s+[^);]*)/i)
            {
                $strOS = $1;
                $strOS =~ s/_/\./g;
            }
        }

        elsif($strOS =~ m/Mac/i)
        {
            if ($strOriginalUserAgent =~ m/(Mac\s+.*?);/i)
            {
                $strOS = $1;
                $strOS =~ s/_/\./g;
            }
        }
        elsif ($strOS =~ m/Linux/i)
        {
            if ($strOriginalUserAgent =~ m/(Ubuntu(?:\/\d+(?:\.\d+)*))/i)
            {
                $strOS = $1;
            }
        }

        $browser->{os} = $strOS;
    }
    else
    {
        if ($strOriginalUserAgent =~ m/CrOS/i)
        {
            $browser->{os} = 'Chrome OS';
        }
    }

    return $browser;
}

1;




























package lite;
require 5.002;











$lite::VERSION = '2.0';




sub new
{
    my $self;

    $self = {
            multipart_dir    =>    undef,
            default_dir      =>    '/tmp',
            file_type        =>    'name',
            platform         =>    'Unix',
            buffer_size      =>    1024,
            timestamp        =>    1,
        filter           =>    undef,
            web_data         =>    {},
        ordered_keys     =>    [],
        all_handles      =>    [],
            error_status     =>    0,
            error_message    =>    undef,
        file_size_limit     =>    2097152,
        };

    $self->{convert} = {
                       'text/html'    => 1,
                       'text/plain'   => 1
                   };

    $self->{file} = { Unix => '/',    Mac => ':',    PC => '\\'       };
    $self->{eol}  = { Unix => "\012", Mac => "\015", PC => "\015\012" };

    bless $self;
    return $self;
}

sub Version
{
    return $lite::VERSION;
}

sub set_directory
{
    my ($self, $directory) = @_;

    stat ($directory);

    if ( (-d _) && (-e _) && (-r _) && (-w _) ) {
    $self->{multipart_dir} = $directory;
    return (1);

    } else {
    return (0);
    }
}

sub add_mime_type
{
    my ($self, $mime_type) = @_;

    $self->{convert}->{$mime_type} = 1 if ($mime_type);
}

sub remove_mime_type
{
    my ($self, $mime_type) = @_;

    if ($self->{convert}->{$mime_type}) {
    delete $self->{convert}->{$mime_type};
    return (1);

    } else {
    return (0);
    }
}

sub get_mime_types
{
    my $self = shift;

    return (sort keys %{ $self->{convert} });
}

sub set_platform
{
    my ($self, $platform) = @_;

    if ($platform =~ /(?:PC|NT|Windows(?:95)?|DOS)/i) {
        $self->{platform} = 'PC';

    } elsif ($platform =~ /Mac(?:intosh)?/i) {


        $self->{platform} = 'Mac';

    } else {
    $self->{platform} = 'Unix';
    }
}

sub set_file_type
{
    my ($self, $type) = @_;

    if ($type =~ /^handle$/i) {
    $self->{file_type} = 'handle';
    } else {
    $self->{file_type} = 'name';
    }
}

sub add_timestamp
{
    my ($self, $value) = @_;

    if ( ($value < 0) || ($value > 2) ) {
    $self->{timestamp} = 1;
    } else {
    $self->{timestamp} = $value;
    }
}

sub filter_filename
{
    my ($self, $subroutine) = @_;

    $self->{filter} = $subroutine;
}

sub set_buffer_size
{
    my ($self, $buffer_size) = @_;
    my $content_length;

    $content_length = $ENV{CONTENT_LENGTH} || return (0);

    if ($buffer_size < 256) {
    $self->{buffer_size} = 256;
    } elsif ($buffer_size > $content_length) {
    $self->{buffer_size} = $content_length;
    } else {
    $self->{buffer_size} = $buffer_size;
    }

    return ($self->{buffer_size});
}

sub parse_new_form_data


{
    my ($self, @param) = @_;

    $self->close_all_files();

    $self->{web_data}    = {};
    $self->{ordered_keys}     = [];
    $self->{all_handles}     = [];
    $self->{error_status}     = 0;
    $self->{error_message}     = undef;

    $self->parse_form_data(@param);
}

sub parse_form_data
{
    my ($self, $user_request) = @_;
    my ($request_method, $content_length, $content_type, $query_string,
    $boundary, $post_data, @query_input);

    $request_method = $user_request || $ENV{REQUEST_METHOD} || '';
    $content_length = $ENV{CONTENT_LENGTH};
    $content_type   = $ENV{CONTENT_TYPE};

    if ($request_method =~ /^(get|head)$/i) {

    $query_string = $ENV{QUERY_STRING};
    $self->_decode_url_encoded_data (\$query_string, 'form');

    return wantarray ?
        %{ $self->{web_data} } : $self->{web_data};

    } elsif ($request_method =~ /^post$/i) {

    if (!$content_type ||
        ($content_type eq 'application/x-www-form-urlencoded') ||
         $content_type eq 'application/x-www-form-urlencoded; charset=UTF-8') {

        local $^W = 0;

        read (STDIN, $post_data, $content_length);
        $self->_decode_url_encoded_data (\$post_data, 'form');

        return wantarray ?
        %{ $self->{web_data} } : $self->{web_data};

    } elsif ($content_type =~ /multipart\/form-data/) {
        ($boundary) = $content_type =~ /boundary=(\S+)$/;
        $self->_parse_multipart_data ($content_length, $boundary);

        return wantarray ?
        %{ $self->{web_data} } : $self->{web_data};

    } else {
        $self->_error ('Invalid content type!');
    }

    } else {





    print "[ Reading query from standard input. Press ^D to stop! ]\n";

    @query_input = <>;
    chomp (@query_input);

    $query_string = join ('&', @query_input);
    $query_string =~ s/\\(.)/sprintf ('%%%x', ord ($1))/eg;

    $self->_decode_url_encoded_data (\$query_string, 'form');

    return wantarray ?
        %{ $self->{web_data} } : $self->{web_data};
    }
}

sub parse_cookies
{
    my $self = shift;
    my $cookies;

    $cookies = $ENV{HTTP_COOKIE} || return;

    $self->_decode_url_encoded_data (\$cookies, 'cookies');

    return wantarray ?
        %{ $self->{web_data} } : $self->{web_data};
}

sub get_ordered_keys
{
    my $self = shift;

    return wantarray ?
    @{ $self->{ordered_keys} } : $self->{ordered_keys};
}

sub print_data
{
    my $self = shift;
    my ($key, $value, $eol);

    $eol = $self->{eol}->{$self->{platform}};

    foreach $key (@{ $self->{ordered_keys} }) {
    $value = $self->{web_data}->{$key};

    if (ref $value) {
        print "$key = @$value$eol";
    } else {
        print "$key = $value$eol";
    }
    }
}

sub print_mime_type
{
    my ($self, $field) = @_;

    return($self->{'mime_types'}->{$field});
}

*print_form_data = *print_cookie_data = \&print_data;

sub wrap_textarea
{
    my ($self, $string, $length) = @_;
    my ($new_string, $platform, $eol);

    $length     = 70 unless ($length);
    $platform   = $self->{platform};
    $eol        = $self->{eol}->{$platform};
    $new_string = $string || return;

    $new_string =~ s/[\0\r]\n?/ /sg;
    $new_string =~ s/(.{0,$length})\s/$1$eol/sg;

    return $new_string;
}

sub get_multiple_values
{
    my ($self, $array) = @_;

    return (ref $array) ? (@$array) : $array;
}

sub create_variables
{
    my ($self, $hash) = @_;
    my ($package, $key, $value);

    $package = $self->_determine_package;

    while (($key, $value) = each %$hash) {
    ${"$package\:\:$key"} = $value;
    }
}

sub is_error
{
    my $self = shift;

    if ($self->{error_status}) {
    return (1);
    } else {
    return (0);
    }
}

sub get_error_message
{
    my $self = shift;

    return $self->{error_message} if ($self->{error_message});
}

sub return_error
{
    my ($self, @messages) = @_;

    print "@messages\n";

    exit (1);
}




sub browser_escape
{
    my $string = shift;

    $string =~ s/([<&"#%>])/sprintf ('&#%d;', ord ($1))/ge;

    return $string;
}

sub url_encode
{
    my $string = shift;

    $string =~ s/([\x00-\x20"#%;<>?{}|\\\\^~`\[\]\x7F-\xFF])/
                 sprintf ('%%%x', ord ($1))/eg;

    return $string;
}




sub url_decode
{
    my $string = shift;

    $string =~ s/%([\da-fA-F]{2})/chr (hex ($1))/eg;

    return $string;
}

sub is_dangerous
{
    my $string = shift;

    if ($string =~ /[;<>\*\|`&\$!#\(\)\[\]\{\}:'"]/) {
        return (1);
    } else {
        return (0);
    }
}

sub escape_dangerous_chars
{
    my $string = shift;

    $string =~ s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'"])/\\$1/g;

    return $string;
}




sub _error
{
    my ($self, $message) = @_;

    $self->{error_status}  = 1;
    $self->{error_message} = $message;
}

sub _determine_package
{
    my $self = shift;
    my ($frame, $this_package, $find_package);

    $frame = -1;
    ($this_package) = split (/=/, $self);

    do {
    $find_package = caller (++$frame);
    } until ($find_package !~ /^$this_package/);

    return ($find_package);
}




sub _decode_url_encoded_data
{
    my ($self, $reference_data, $type) = @_;
    my $code;

    $code = <<'End_of_URL_Decode';

    my (@key_value_pairs, $delimiter, $key_value, $key, $value);

    @key_value_pairs = ();

    return unless ($$reference_data);

    if ($type eq 'cookies') {
    $delimiter = ';\s+';
    } else {
    $delimiter = '&';
    }

    $$reference_data =~ tr/+/ /;
    @key_value_pairs = split (/$delimiter/, $$reference_data);

    foreach $key_value (@key_value_pairs) {
    ($key, $value) = split (/=/, $key_value, 2);

    $value = '' unless defined $value;

    $key   =~ s/%([\da-fA-F]{2})/chr (hex ($1))/eg;
    $value =~ s/%([\da-fA-F]{2})/chr (hex ($1))/eg;

    if ( defined ($self->{web_data}->{$key}) ) {
        $self->{web_data}->{$key} = [$self->{web_data}->{$key}]
            unless ( ref $self->{web_data}->{$key} );

        push (@{ $self->{web_data}->{$key} }, $value);
    } else {
        $self->{web_data}->{$key} = $value;
        push (@{ $self->{ordered_keys} }, $key);
    }
    }

End_of_URL_Decode

    eval ($code);
    $self->_error ($@) if $@;
}




sub _parse_multipart_data
{
    my ($self, $total_bytes, $boundary) = @_;
    my ($code, $files);

    local $^W = 0;
    $files    = {};

    $code = <<'End_of_Multipart';

    my ($seen, $buffer_size, $byte_count, $platform, $eol, $handle,
    $directory, $bytes_left, $buffer_size, $new_data, $old_data,
    $current_buffer, $changed, $store, $disposition, $headers,
        $mime_type, $convert, $field, $file, $new_name, $full_path);

    $seen        = {};
    $buffer_size = $self->{buffer_size};
    $byte_count  = 0;
    $platform    = $self->{platform};
    $eol         = $self->{eol}->{$platform};
    $handle      = 'CL00';
    $directory   = $self->{multipart_dir} || $self->{default_dir};

    while (1) {
    if ( ($byte_count < $total_bytes) &&
         (length ($current_buffer) < ($buffer_size * 2)) ) {

        $bytes_left  = $total_bytes - $byte_count;
        $buffer_size = $bytes_left if ($bytes_left < $buffer_size);

        read (STDIN, $new_data, $buffer_size);
            $self->_error ("Oh, Oh! I'm upset! Can't read what I want.")
        if (length ($new_data) != $buffer_size);

        $byte_count += $buffer_size;

        if ($old_data) {
        $current_buffer = join ('', $old_data, $new_data);
        } else {
        $current_buffer = $new_data;
        }

    } elsif ($old_data) {
        $current_buffer = $old_data;
        $old_data = undef;

    } else {
        last;
    }

    $changed = 0;







    if ($current_buffer =~
            /(.*?)(?:\015?\012)?-*$boundary-*[\015\012]*(?=(.*))/os) {

        ($store, $old_data) = ($1, $2);

            if ($current_buffer =~
             /[Cc]ontent-[Dd]isposition: ([^\015\012]+)\015?\012  # Disposition
              (?:([A-Za-z].*?)(?:\015?\012){2})?                  # Headers
              (?:\015?\012)?                                      # End
              (?=(.*))
             /xs) {

        ($disposition, $headers, $current_buffer) = ($1, $2, $3);
        $old_data = $current_buffer;

        ($mime_type) = $headers =~ /[Cc]ontent-[Tt]ype: (\S+)/;

        $self->_store ($platform, $file, $convert, $handle, $eol,
                   $field, \$store, $seen);

        close ($handle) if (fileno ($handle));

        if ($mime_type && $self->{convert}->{$mime_type}) {
            $convert = 1;
        } else {
            $convert = 0;
        }

        $changed = 1;

        ($field) = $disposition =~ /name="([^"]+)"/;
        ++$seen->{$field};

        $self->{'mime_types'}->{$field} = $mime_type;

                if ($seen->{$field} > 1) {
                    $self->{web_data}->{$field} = [$self->{web_data}->{$field}]
                        unless (ref $self->{web_data}->{$field});
                } else {
                    push (@{ $self->{ordered_keys} }, $field);
                }

                if (($file) = $disposition =~ /filename="(.*)"/) {
                    $file =~ s|.*[:/\\](.*)|$1|;

                    $new_name = $self->_get_file_name ($platform,
                                                       $directory, $file);

                    $self->{web_data}->{$field} = $new_name;

                    $full_path = join ($self->{file}->{$platform},
                                       $directory, $new_name);

                    open (++$handle, ">$full_path")
                    || $self->_error ("Can't create file: $full_path!");

                    $files->{$new_name} = $full_path;
                }
            }

    } elsif ($old_data) {
            $store    = $old_data;
            $old_data = $new_data;

    } else {
        $store          = $current_buffer;
            $current_buffer = $new_data;
        }

        unless ($changed) {
           $self->_store ($platform, $file, $convert, $handle, $eol,
                          $field, \$store, $seen);
        }
    }

    close ($handle) if (fileno ($handle));

End_of_Multipart

    eval ($code);
    $self->_error ($@) if $@;

    $self->_create_handles ($files) if ($self->{file_type} eq 'handle');
}

sub _store
{
    my ($self, $platform, $file, $convert, $handle, $eol, $field,
    $info, $seen) = @_;

    if ($file) {
    if ($convert) {
        $$info =~ s/\015\012/$eol/og  if ($platform ne 'PC');
        $$info =~ s/\015/$eol/og      if ($platform ne 'Mac');
        $$info =~ s/\012/$eol/og      if ($platform ne 'Unix');
    }

        print $handle $$info;

    } elsif ($field) {
    if ($seen->{$field} > 1) {
        $self->{web_data}->{$field}->[$seen->{$field}-1] .= $$info;
    } else {
        $self->{web_data}->{$field} .= $$info;
        }
    }
}

sub _get_file_name
{
    my ($self, $platform, $directory, $file) = @_;
    my ($filtered_name, $filename, $timestamp, $path);

    $filtered_name = &{ $self->{filter} }($file)
        if (ref ($self->{filter}) eq 'CODE');

    $filename  = $filtered_name || $file;
    $timestamp = time . '__' . $filename;

    if (!$self->{timestamp}) {
    return $filename;

    } elsif ($self->{timestamp} == 1) {
    return $timestamp;

    } elsif ($self->{timestamp} == 2) {
    $path = join ($self->{file}->{$platform}, $directory, $filename);

    return (-e $path) ? $timestamp : $filename;
    }
}

sub _create_handles
{
    my ($self, $files) = @_;
    my ($package, $handle, $name, $path);

    $package = $self->_determine_package;

    while (($name, $path) = each %$files) {
    $handle = "$package\:\:$name";
    open ($handle, "<$path")
            || $self->_error ("Can't read file: $path!");

    push (@{ $self->{all_handles} }, $handle);
    }
}

sub close_all_files
{
    my $self = shift;
    my $handle;

    foreach $handle (@{ $self->{all_handles} }) {
    close $handle;
    }
}

1;


package htmlentity;

%htmlentity::subst;
@htmlentity::multibyte = ();
$htmlentity::multibytecnt = 0;

sub encode
{
    return undef unless defined $_[0];
    my $ref;
    if (defined wantarray)
    {
        my $x = $_[0];
        $ref = \$x;
    }
    else
    {
        $ref = \$_[0];
    }

    my %char2entity = ('&' => '&amp;',
                   '>' => '&gt;',
               '<' => '&lt;',
               "'" => '&apos;',
               '"' => '&quot;');

    if (defined $_[1] && length($_[1]))
    {
        unless (exists $htmlentity::subst{$_[1]})
        {
            my $chars = $_[1];

            $chars =~ s { (?<!\\) ([]/]) } { \\$1 }gox;
            $chars =~ s { (?<!\\) \\\z } { \\\\ }gox;

            my $code = "sub {\$_[0] =~ s/([$chars])/\$char2entity{\$1} || num_entity(\$1)/ge";

            $htmlentity::subst{$_[1]} = eval $code;
            if ($@)
            {
                die("$@ while trying to turn range: \"$_[1]\"\n into code: $code\n");
            }
            &{$htmlentity::subst{$_[1]}}($$ref);
        }
    }
    else
    {

        $$ref =~ s/([^\n\r\t !\#\$%\(-;=?-~])/$char2entity{$1} || num_entity($1)/ge;
    }
    return $$ref;
}

sub num_entity
{
    my $var = $_[0];

    if ($htmlentity::multibytecnt == 0)
    {
        my $int = ord($var);






        if (194 <= $int && $int <= 223)
        {
            push (@htmlentity::multibyte, $var);
            $htmlentity::multibytecnt = 2;
        }

        elsif (224 <= $int && $int <= 239)
        {
            push (@htmlentity::multibyte, $var);
            $htmlentity::multibytecnt = 3;
        }
        elsif (240 <= $int && $int <= 255)
        {
            push (@htmlentity::multibyte, $var);
            $htmlentity::multibytecnt = 4;
        }
        else
        {

            return sprintf("&#x%X", $int);
        }
    }
    else
    {
        push (@htmlentity::multibyte, $var);
        if (@htmlentity::multibyte == $htmlentity::multibytecnt)
        {
            my %codepoint = (2 => 0x1F, 3 => 0x0F, 4 => 0x07);
            my $firstbitmask = $codepoint{$htmlentity::multibytecnt};
            my $remainingbitmask = 0x3F;
            my $int = ord($htmlentity::multibyte[0]) & $firstbitmask;

            for (my $i = 1; $i < $htmlentity::multibytecnt; $i++)
            {
                $int <<= 6;
                $int |= ($remainingbitmask & ord($htmlentity::multibyte[$i]));
            }
            $htmlentity::multibytecnt = 0;
            @htmlentity::multibyte = ();
            return sprintf("&#x%X;", $int);
        }
    }
    return "";
}
