Jump to content

Auto generate a number


robin339

Recommended Posts

Hello everyone,

 

I use an online ordering system. Is there a way to automatically generate a random 6+ digit unique number and also print the number on the confirmation page? I dont use mysql or any database.

 

Here is the link for the actual page. You can go ahead and submit something (just use "Test" on the name field)

 

Here are the codes:

 

Order.html

 

<html>
<head>
<title>Alliance Couriers, Your personal delivery system.</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- Fireworks MX Dreamweaver MX target.  Created Sun Feb 25 03:27:17 GMT-0500 (Eastern Standard Time) 2007-->

<script type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>
<body bgcolor="#ffffff" link="#990000" vlink="#990000" alink="#990000" onLoad="MM_preloadImages('../images/buttons/home_down.gif')">
<table width="200" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><!-- #BeginLibraryItem "/Library/top.lbi" --><table width="750" align="center">
      <td><img name="new_logo_2_r1_c1" src="../SLICES/new_logo_2_r1_c1.jpg" width="750" height="93" border="0" alt="Alliance Couriers"><br>
        <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0">
          <tr>
            <td width="86%"><a href="order.html"><img src="../images/arrows.gif" border="0"><img src="../images/request.gif" alt="Place a pickup/delivery request" border="0" longdesc="order.php"></a></td>
            <td width="5%"><a href="../index.html"><img src="../images/home.gif" alt="Home" width="35" height="16" border="0"></a></td>
            <td width="2%"><div align="center"><img src="../images/spacer.gif"  height="21"></div></td>
            <td width="7%"><div align="left"><a href="../careers.html"><img src="../images/careers.gif" alt="Careers at Alliance Couriers" width="46" height="16" border="0"></a></div></td>
          </tr>
        </table></td>
       
      </table><!-- #EndLibraryItem --><table width="750" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
          <td width="107" background="../images/TOP.gif"><div align="left"><a href="../index.html" onMouseOut="MM_swapImgRestore()" onMouseClick="MM_swapImage('999','','../images/buttons/home_down.gif',1)"><img src="../images/buttons/services_up.gif" alt="Home" name="home" width="106" height="20" border="0"></a></div>            <div align="left"><a href="../about.html" onMouseOut="MM_swapImgRestore()" onmouseclick="MM_swapImage('home','','../images/buttons/home_down.gif',1)"></a></div></td>
            <td width="131" background="../images/TOP.gif"><div align="left"><a href="../rates.html" onMouseOut="MM_swapImgRestore()" onmouseclick="MM_swapImage('home','','../images/buttons/home_down.gif',1)"></a><a href="https://www.alliancecouriers.com/new.php" onMouseOut="MM_swapImgRestore()" onmouseclick="MM_swapImage('home','','../images/buttons/home_down.gif',1)"><img src="../images/buttons/newacc_up.gif" width="130" height="20" border="0" longdesc="https://alliancecouriers.com/new.php"></a></div></td>
            <td width="107" background="../images/TOP.gif"><div align="left"><a href="../contact.html"><img src="../images/buttons/contact_down.gif" alt="Contact Us" width="106" height="20" border="0"></a></div></td>
            <td width="107" background="../images/TOP.gif"><div align="left"><a href="../logon.php"><img src="../images/buttons/logon_up.gif" alt="Log on to your account" width="106" height="20" border="0"></a></div></td>
            <td width="298" background="../images/TOP.gif"><div align="right"></div></td>
        </tr>
        <tr>
          <td colspan="5"><table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
            <tr>
              <td width="75%"><p align="left"><font size="-1">There areseveral simple ways to place a pickup/delivery order.<br>
                <img src="../images/icon_configured.gif" width="14" height="16"></font><font size="-1"> C</font><font size="-1">all 540-288-1555 <br>
                    <img src="../images/icon_configured.gif" width="14" height="16"> Fax us at 540-301-1557 <br>
                    <img src="../images/icon_configured.gif" width="14" height="16"> Send us an email at <a href="mailto:sales@alliancecouriers.com">sales@alliancecouriers.com</a> (Standard 5 hours delivery only)<br>
                      <img src="../images/icon_configured.gif" width="14" height="16"> Use the web order form below. (Standard 5 hours delivery only)<br>
                      Please include your name, your phone number, company name or account number and pickup location with your Fax and email orders. <br>
                </font></p>                </td>
              <td width="25%"><center><script type="text/javascript" src="http://alliancecouriers.com/live/livehelp_js.php?department=1&pingtimes=15"></script></center> </td>
            </tr>
            <tr>
              <td height="35" colspan="2"><form enctype='multipart/form-data' action='process.php' method='post'>
                <tr><tr>
<table width='100%' border=0>
<tr>
  <td colspan="5" bgcolor='ffffff'><div align="center"><font size="-1"><font color="#FF0000"><strong>Important:</strong></font> <strong>The fax , email & web orders are for standard 5 hours delivery only.</strong></font></div></td>
</tr>
<tr>
  <td colspan="5" background="../images/tableh1_bg.gif" bgcolor='ffffff'><strong><font color="#660000">Billing info </font></strong></td>
  </tr>
<tr><td width="15%" bgcolor='ffffff'><font size="-1"> Customer Name<font color='#ff0000'>*</font></font></td>
<td colspan="4" bgcolor='ffffff'>
  <font size="-1">
  <input name='CustomerName' type=text size="15">
  </font></td></tr>
<tr><td bgcolor='ffffff'><font size="-1"> Company Name</font></td>
<td width="15%" bgcolor='ffffff'>
  <font size="-1">
  <input name='CompanyName' type=text size="15">
  </font></td>
<td width="18%" bgcolor='ffffff'> <div align="center"><font size="-1">or, </font></div></td>
<td width="14%" bgcolor='ffffff'><font size="-1">Account # </font></td>
<td width="38%" bgcolor='ffffff'><font size="-1">
  <input type=text name='Account'>
</font></td>
</tr>
<tr><td colspan="5" bgcolor='ffffff'> </td>
</tr>
<tr>
  <td colspan="5" background="../images/tableh1_bg.gif" bgcolor='ffffff'><strong><font color="#660000">Shipping info</font></strong> </td>
</tr>
<tr>
  <td colspan="2" bgcolor='ffffff'><strong><font size="-1"> Number of Package(s)<font color='#ff0000'>*</font>
        <input type=text name='NumberofPackage' size=6>
  </font></strong></td>
  <td colspan="2" bgcolor='ffffff'><strong><font size="-1">Total package weight<font color='#ff0000'>*</font>
        <input type=text name='Totalpackageweight' size=6>
    * </font></strong></td>
  <td bgcolor='ffffff'><font size="-1">* estimated weight of all your packages </font></td>
</tr>
<tr>
  <td colspan="3" bgcolor='ffffff'><table width="95%" border="0" align="center" cellpadding="2" cellspacing="2" background="../images/maintable_bg.gif" bgcolor="#CCCCCC">
    </table>
    <table width="95%" border="0" align="center" cellpadding="2" cellspacing="2" background="../images/maintable_bg.gif" bgcolor="#CCCCCC">
      <caption>
      <strong>Pickup From        </strong>
      </caption>
      <tr>
        <th scope="row"> </th>
          <th scope="row"><div align="right"><font size="-1"><font size="-1">
            <font size="-1">Pickup Time<font color='#ff0000'> *</font></font>
            <input type=text name='PickupTime' size=10>
            </font></font></div></th>
      </tr>
      <tr>
        <th scope="row"><div align="left"><font size="-1"> Name<font color='#ff0000'>*</font></font></div></th>
          <td><font size="-1">
            <input name='FromName' type=text size="15">
              <input name='sameasbilling2' type=hidden value='No' checked>
              <input type=hidden name='sameasbilling' value='Yes'>
          </font></td>
      </tr>
      <tr>
        <th scope="row"><div align="left"><font size="-1">Street</font><font size="-1"><font color='#ff0000'>*</font></font></div></th>
          <td><font size="-1">
            <input name='FromStreet' type=text size="20">
            suite
            <input type=text name='Fromsuite' size=5>
            </font></td>
      </tr>
      <tr>
        <th scope="row"><div align="left"><font size="-1"> City<font color='#ff0000'>*</font></font></div></th>
          <td><font size="-1">
            <input name='Fromcity' type=text size="15">
            <strong>Zip</strong><font color='#ff0000'>*</font><font size="-1">
              <input name='Fromzip' type=text size="10">
              </font></font></td>
      </tr>
      <tr>
        <th scope="row"><div align="left"><font size="-1">Phone<font color='#ff0000'>*</font></font></div></th>
          <td><font size="-1">
            <input name='Fromphone' type=text size="12">
            </font></td>
      </tr>
      <tr>
        <th scope="row"><div align="left"></div></th>
          <td> </td>
      </tr>
      </table>    </td>
  <td colspan="2" bgcolor='ffffff'><table width="95%" border="0" align="center" cellpadding="2" cellspacing="2" background="../images/maintable_bg.gif" bgcolor="#CCCCCC">
    <caption>
    <strong>Deliver to</strong><font size="-1">
    <input name='Deliverby' type='hidden' value="Web order. Standard 5 hours" size=10>

    </font>
    </caption>
    
    <tr>
      <th colspan="2" scope="row"> </th>
      </tr>
    <tr>
      <th width="28%" scope="row"><div align="left"><font size="-1">Name<font color='#ff0000'>*</font></font></div></th>
      <td width="72%"><font size="-1">
        <input name='Toname' type=text size="15">
      </font></td>
    </tr>
    <tr>
      <th scope="row"><div align="left"><font size="-1">Street</font><font size="-1"><font color='#ff0000'>*</font></font></div></th>
      <td><font size="-1">
        <input name='Tostreet' type=text size="20">
      suite 
      <input name='Tosuite' type=text size="5">
      </font></td>
    </tr>
    <tr>
      <th scope="row"><div align="left"><font size="-1">City<font color='#ff0000'>*</font></font></div></th>
      <td><font size="-1">
        <input name='Tocity' type=text size="15">
        <strong>Zip</strong><font color='#ff0000'>*</font><font size="-1">
        <input name='Tozip' type=text size="10">
        </font></font></td>
    </tr>
    <tr>
      <th scope="row"><div align="left"><font size="-1">Phone<font color='#ff0000'>*</font></font></div></th>
      <td background="../images/maintable_bg.gif"><font size="-1">
        <input name='Tophone' type=text size="12">
      </font></td>
    </tr>
    <tr>
      <th scope="row"><div align="left"></div></th>
      <td> </td>
    </tr>
  </table></td>
  </tr>
<tr><td bgcolor='ffffff'><div align="center"><font size="-1"> Special instructions</font></div></td>
<td colspan="4" bgcolor='ffffff'>
  <div align="center"><font size="-1">
    <textarea name='Specialinstructions' rows=5 cols=60></textarea>
  </font></div></td></tr>
</table>

<div align="center">By clicking "Submit Order" ,I agree to all <a href="../terms.html">terms and conditions</a> 
  <input type='submit' value='Submit Order'> 
  <input type=reset value='Clear Form'>
</div>
                </form>
		  
		   </p>                </td>
              </tr>
            </table></td>
        </tr>
      </table>
    </td></tr>
</table>
</body>
</html>

 

Here is the process.php

 

<?php
include("global.inc.php");
$errors=0;
$error="The following errors occured while processing your form input.<ul>";
pt_register('POST','CustomerName');
pt_register('POST','CompanyName');
pt_register('POST','Account');
pt_register('POST','NumberofPackage');
pt_register('POST','Totalpackageweight');
pt_register('POST','PickupTime');
pt_register('POST','Deliverby');
pt_register('POST','FromName');
pt_register('POST','FromStreet');
pt_register('POST','Fromsuite');
pt_register('POST','Fromcity');
pt_register('POST','Fromzip');
pt_register('POST','Fromphone');
pt_register('POST','Toname');
pt_register('POST','Tophone');
pt_register('POST','Tostreet');
pt_register('POST','Tosuite');
pt_register('POST','Tocity');
pt_register('POST','Tozip');
pt_register('POST','Specialinstructions');
$Specialinstructions=preg_replace("/(\015\012)|(\015)|(\012)/"," <br />", $Specialinstructions);pt_register('POST','sameasbilling');

if($CustomerName=="" || $NumberofPackage=="" || $Totalpackageweight=="" || $PickupTime=="" || $Deliverby=="" || $FromName=="" || $Fromphone=="" || $Toname=="" || $Tophone=="" || $Tostreet=="" || $Tocity=="" || $Tozip=="" ){
$errors=1;
$error.="<li>You did not enter one or more of the required fields. Please go back and try again.";
}
if($errors==1) echo $error;
else{
$where_form_is="http".($HTTP_SERVER_VARS["HTTPS"]=="on"?"s":"")."://".$SERVER_NAME.strrev(strstr(strrev($PHP_SELF),"/"));
$message="Customer Name: ".$CustomerName."
Company Name: ".$CompanyName."
Account: ".$Account."
Number of Package: ".$NumberofPackage."
Total package weight: ".$Totalpackageweight."
Pickup Time: ".$PickupTime."
Deliver by: ".$Deliverby."
From Name: ".$FromName."
From Street: ".$FromStreet."
From suite: ".$Fromsuite."
From city: ".$Fromcity."
From zip: ".$Fromzip."
From phone: ".$Fromphone."
To name: ".$Toname."
To phone: ".$Tophone."
To street: ".$Tostreet."
To suite: ".$Tosuite."
To city: ".$Tocity."
To zip: ".$Tozip."
Special instructions: ".$Specialinstructions."
same as billing: ".$sameasbilling."
confirmation email: ".$confirmationemail."
";
$message = stripslashes($message);
mail("MY-EMAIL@gmail.com","Form Submitted at your website",$message,"From: ACS Web order");
?>


<!-- This is the content of the Thank you page, be careful while changing it -->
<style type="text/css">
<!--
.style2 {font-size: small}
.style4 {
font-size: x-small;
font-weight: bold;
}
.style6 {
font-size: x-small;
color: #990000;
font-weight: bold;
}
.style7 {
font-size: large;
font-weight: bold;
}
-->
</style>
<br />
<br />
<table width="70%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td background="Drag to a file to choose it."><div align="right"><img src="../images/printable logo.jpg" width="217" height="49" /></div></td>
  </tr>
</table>
<SCRIPT Language="Javascript">
function printit(){
if (window.print) {
    window.print() ;
} else {
    var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
    WebBrowser1.ExecWB(6, 2);//Use a 1 vs. a 2 for a prompting dialog box WebBrowser1.outerHTML = "";
}
}
</script>




<table width="60%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="50%"><span class="style2"><strong>From:<br />
      <?php echo $FromName; ?><br />
      <?php echo $FromStreet; ?>, Suite <?php echo $Fromsuite; ?><br />
      <?php echo $Fromcity; ?>, <?php echo $Fromzip; ?><br />
    Phone: <?php echo $Fromphone; ?><br />
    Pick up time : <?php echo $PickupTime; ?></strong><br />    
    </span></td>
    <td width="50%"><span class="style2"><span class="style7"><?php echo $Deliverby; ?></strong></span><br />
    </span></td>
  </tr>
  <tr>
    <td><div align="center"><span class="style2"><img src="../images/barcode.jpg" width="102" height="17" /></span></div></td>
    <td><p class="style2"><strong>To:<br />
        <?php echo $Toname; ?><br />
        <?php echo $Tostreet; ?>, Suite <?php echo $Tosuite; ?><br />
        <?php echo $Tocity; ?>, <?php echo $Tozip; ?><br />
        Phone: <?php echo $Tophone; ?></strong></p>    </td>
  </tr>
  <tr>
    <td><span class="style2"><strong>Bill to <?php echo $CustomerName; ?>, Company: <?php echo $CompanyName; ?> (Account # <?php echo $Account; ?>)</strong></span></td>
    <td><span class="style2"><strong>Special Instructions : <?php echo $Specialinstructions; ?></strong></span></td>
  </tr>
</table>
<br />
<br />
<div align="center">
  <!-- Do not change anything below this line -->
  <?php 
}
?>
  <SCRIPT Language="Javascript">
var NS = (navigator.appName == "Netscape");
var VERSION = parseInt(navigator.appVersion);
if (VERSION > 3) {
    document.write('<form><input type=button value="Print this Page" name="Print" onClick="printit()"></form>');
}
</script> 
  <span class="style6">Please print 2 copies of this page, attach one to your package and keep one for your records</span><span class="style4">.</span></div>

 

Thanks so much guys...

 

Robin

Link to comment
Share on other sites

If you want the number to be unique, you are going to have to store the previously used numbers somewhere.

 

Not really. You could use some bastardization of the timestamp to get a unique id.

 

absolutely. in fact, this method is used more often than you'd think.

Link to comment
Share on other sites

Thanks for the replies guys.

 

I am so lost. I have no experience with php :-(

 

everybody starts somewhere. your project is not a bad place to start. what are you having trouble understanding?

 

I was reading through the link provided above. I did not understand which part comes into play as far as creating a unique ID. It describes "how to create, open, and close a file. How to read, write, append, truncate, and uploading files with PHP".

 

Honestly following are the only two things I need to find out how to achieve. I really dont need to keep track of the numbers later (like insert into a mysql or even a txt based database). The numbers and the info will get emailed to me. Dont need to save the information on the server.

 

Q. How do I create a field in my current page to generate an unique ID

Q. How do I "print" that Id in the confirmation page.

 

If it can't be done without some sort of database in place, then I will have more questions :)

 

Is there a way to manupulate and add commands to the exsisting process.php that I have above.

 

Thanks for answering my questions so patiently.

 

Link to comment
Share on other sites

well... the reason you would need to store them is so that the script doesn't duplicate the "random" number again in the future.

 

 

 

How do I get my page to create a number?

 

How do I get my page to write the number on a file and read it for future refences?

 

Thanks

Link to comment
Share on other sites

How do I get my page to create a number?

 

How do I get my page to write the number on a file and read it for future refences?

 

Thanks

 

here's how you generate a random number with 6+ characters:

<?php
        $totalChar = rand(6, 25);
        $salt = "1234567890";
        srand((double)microtime()*1000000);
        $keyGen=""; // set the inital variable

        for($i = 0;$ i< $totalChar; $i++)  // loop and create password
                $keyGen = $password . substr ($salt, rand() % strlen($salt), 1);
        }
?>

 

and the way you write this random digit to a flat file and then read from the flat file later is by using the tutorial i provided for you in previous posts.

Link to comment
Share on other sites

sorry, the key generator is wrong... this is what you want:

<?php
        $totalChar = rand(6, 25);
        $salt = "1234567890";
        srand((double)microtime()*1000000);
        $keyGen="";

        for($i = 0;$ i< $totalChar; $i++){
                $keyGen .= substr ($salt, rand() % strlen($salt), 1);
        }
?>

Link to comment
Share on other sites

ok thanks.

 

this is what i got so far..

<?php
include("global.inc.php");

// generate a number
$totalChar = rand(6, 25);
        $salt = "1234567890";
        srand((double)microtime()*1000000);
        $keyGen="606778"; // set the inital variable

        for($i = 0; i< $totalChar; $i++)  // loop and create password
                $keyGen = $password . substr ($salt, rand() % strlen($salt), 1);
//
$ourFileName = "ordernumber.txt";
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
fclose($ourFileHandle);

// open for writing
$myFile = "ordernumber.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $keygen);
fclose($fh);

// close file

 

I created a file called ordernumber.txt and CHMOD 777

 

The page doesnt load :(

Link to comment
Share on other sites

ok

 

now i have this

<?php
include("global.inc.php");


// generate a number
$totalChar = rand(6, 25);
        $salt = "1234567890";
        srand((double)microtime()*1000000);
        $keyGen="606778"; // set the inital variable

        for($i = 0; $i< $totalChar; $i++)  // loop and create password
                $keyGen = $password . substr ($salt, rand() % strlen($salt), 1);


$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "Test Text\n";
fwrite($fh, $salt);
fclose($fh);

 

It does write, but the only thing it writes is 1234567890, if i put $keygen in fwrite

($fh, $keygen);

it doesnt write anything.

 

Thanks so much for the help man :-)

Link to comment
Share on other sites

no problem buddy. try this:

<?php
        $totalChar = rand(6, 15); // number of chars in the password
        $salt = "1234567890";  // salt to select chars from
        srand((double)microtime() * 1000000); // start the random generator
        $serialNum = NULL; // set the inital variable

        for($i = 0; $i < $totalChar; $i++){
                $serialNum .= substr($salt, rand() % strlen($salt), 1);
        }

        $myFile = "testFile.txt";
        $fh = fopen($myFile, 'w') or die("can't open file");
        $stringData = "Test Text\n";
        fwrite($fh, $serialNum);
        fclose($fh);
?>

Link to comment
Share on other sites

Wouldn't it be easier to take the CRC32 checksum of some data added together from whatever is already unique, say the username for instance.

 

what makes you think there will be a username? i'm not sure, but i'd say that's part of the reason why he wants to generate a serial number for the customer.

 

 

@robin339: why does it have to be only numbers? why can't it contain letters? if this is feasible then you could just use session_id().

<?php
        session_id();
        session_start();

        /*boom*/
?>

Link to comment
Share on other sites

  • 1 year later...

I have created a blank document with

<?php
        $totalChar = rand(6, 25);
        $salt = "1234567890";
        srand((double)microtime()*1000000);
        $keyGen="";

        for($i = 0;$ $i< $totalChar; $i++){
                $keyGen .= substr ($salt, rand() % strlen($salt), 1);
        }
?>

 

but i have an error:

 

Notice: Undefined variable: 0 in /var/www/vhosts/cowperrecruitment.co.uk/httpdocs/keygen.php on line 7

but it keeps increasing, so i'm currently up to 95621....

 

I just want to echo the $var for 305 different numbers...

 

I also need to generate 305 random unique codes... can I add some code to make it repeat 305 times?

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.