static void DemonstrateThreeSharpWrapper()
        {
            Console.WriteLine("===========================================");
            Console.WriteLine("Demonstrating the ThreeSharp Library Wrapper");
            Console.WriteLine("===========================================");

            // Convert the bucket name to lowercase for vanity domains.
            // the bucket must be lower case since DNS is case-insensitive.
            Random r = new Random();
            string testBucketName = awsAccessKeyId.ToLower() + "-test-bucket" + r.Next(50000).ToString(); ;
            string testBucketName2 = awsAccessKeyId.ToLower() + "-test-bucket" + r.Next(50000).ToString(); ;
            string stringKeyName = "StringObject";

            ThreeSharpWrapper wrapper = new ThreeSharpWrapper(awsAccessKeyId, awsSecretAccessKey);

            Console.WriteLine("\n----- Creating Bucket " + testBucketName + " -----");
            wrapper.AddBucket(testBucketName);
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Listing Bucket " + testBucketName + " -----");
            Console.WriteLine(wrapper.ListBucket(testBucketName));
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Creating Bucket " + testBucketName2 + " -----");
            wrapper.AddBucket(testBucketName2);
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Listing Bucket " + testBucketName2 + " -----");
            Console.WriteLine(wrapper.ListBucket(testBucketName2));
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Adding String Object -----");
            wrapper.AddStringObject(testBucketName, stringKeyName, "This is a test");
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Copying String Object -----");
            wrapper.CopyObject(testBucketName, stringKeyName, testBucketName2, stringKeyName + "Copy");
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Getting Copied String Object -----");
            Console.WriteLine(wrapper.GetStringObject(testBucketName2, stringKeyName + "Copy"));
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Streaming File Object -----");
            wrapper.AddFileObject(testBucketName, uploadFile, uploadPath + uploadFile);
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Streaming/Encrypting File Object -----");
            wrapper.AddEncryptFileObject(testBucketName, uploadFile + "Encrypted", uploadPath + uploadFile, encryptionKey, encryptionIV);
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Listing Bucket -----");
            Console.WriteLine(wrapper.ListBucket(testBucketName));
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Streaming File to Disk -----");
            wrapper.GetFileObject(testBucketName, uploadFile, downloadPath + uploadFile);
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Streaming/Decrypting File to Disk -----");
            wrapper.GetDecryptFileObject(testBucketName, uploadFile + "Encrypted", downloadPath + "decrypted-" + uploadFile, encryptionKey, encryptionIV);
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Query String Authorization Example -----");
            Console.WriteLine("Try this url in your web browser (it will only work for 60 seconds)\n");
            Console.WriteLine(wrapper.GetUrl(testBucketName, uploadFile));
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Deleting Objects -----");
            wrapper.DeleteObject(testBucketName, stringKeyName);
            wrapper.DeleteObject(testBucketName2, stringKeyName + "Copy");
            wrapper.DeleteObject(testBucketName, uploadFile);
            wrapper.DeleteObject(testBucketName, uploadFile + "Encrypted");
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Listing Bucket " + testBucketName + " -----");
            Console.WriteLine(wrapper.ListBucket(testBucketName));
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Listing Bucket " + testBucketName2 + " -----");
            Console.WriteLine(wrapper.ListBucket(testBucketName2));
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Listing All My Buckets -----");
            Console.WriteLine(wrapper.ListBucket(null));
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Deleting Bucket " + testBucketName + " -----");
            wrapper.DeleteBucket(testBucketName);
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Deleting Bucket " + testBucketName2 + " -----");
            wrapper.DeleteBucket(testBucketName2);
            Console.WriteLine("\npress enter >");
            Console.ReadLine();

            Console.WriteLine("\n----- Listing All My Buckets -----");
            Console.WriteLine(wrapper.ListBucket(null));
            Console.WriteLine("\npress enter >");
            Console.ReadLine();
            
        }