Anonymous avatar Anonymous committed a663bb7

initial import

Comments (0)

Files changed (63)

Base64Transcoder/Base64Transcoder.xcodeproj/project.pbxproj

+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXAggregateTarget section */
+		ED1D3A3B136899B2007369A1 /* Universal_Framework */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = ED1D3A46136899B2007369A1 /* Build configuration list for PBXAggregateTarget "Universal_Framework" */;
+			buildPhases = (
+				ED1D3A3A136899B2007369A1 /* ShellScript */,
+			);
+			dependencies = (
+			);
+			name = Universal_Framework;
+			productName = Universal_Framework;
+		};
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+		ED1D3A40136899B2007369A1 /* Base64Transcoder-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = ED1D3A3F136899B2007369A1 /* Base64Transcoder-Info.plist */; };
+		ED1D3A4B13689A06007369A1 /* Base64Transcoder.c in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3A4913689A06007369A1 /* Base64Transcoder.c */; };
+		ED1D3A4C13689A06007369A1 /* Base64Transcoder.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3A4A13689A06007369A1 /* Base64Transcoder.h */; settings = {ATTRIBUTES = (Public, ); }; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		ED1D3A38136899B2007369A1 /* Base64Transcoder.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Base64Transcoder.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		ED1D3A3E136899B2007369A1 /* Base64Transcoder-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Base64Transcoder-Prefix.pch"; sourceTree = "<group>"; };
+		ED1D3A3F136899B2007369A1 /* Base64Transcoder-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Base64Transcoder-Info.plist"; sourceTree = "<group>"; };
+		ED1D3A4913689A06007369A1 /* Base64Transcoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Base64Transcoder.c; sourceTree = "<group>"; };
+		ED1D3A4A13689A06007369A1 /* Base64Transcoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64Transcoder.h; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		ED1D3A33136899B2007369A1 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		ED1D3A2B136899B2007369A1 = {
+			isa = PBXGroup;
+			children = (
+				ED1D3A3C136899B2007369A1 /* Base64Transcoder */,
+				ED1D3A39136899B2007369A1 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		ED1D3A39136899B2007369A1 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				ED1D3A38136899B2007369A1 /* Base64Transcoder.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		ED1D3A3C136899B2007369A1 /* Base64Transcoder */ = {
+			isa = PBXGroup;
+			children = (
+				ED1D3A4913689A06007369A1 /* Base64Transcoder.c */,
+				ED1D3A4A13689A06007369A1 /* Base64Transcoder.h */,
+				ED1D3A3F136899B2007369A1 /* Base64Transcoder-Info.plist */,
+				ED1D3A3D136899B2007369A1 /* Supporting Files */,
+			);
+			path = Base64Transcoder;
+			sourceTree = "<group>";
+		};
+		ED1D3A3D136899B2007369A1 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				ED1D3A3E136899B2007369A1 /* Base64Transcoder-Prefix.pch */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		ED1D3A34136899B2007369A1 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED1D3A4C13689A06007369A1 /* Base64Transcoder.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		ED1D3A37136899B2007369A1 /* Base64Transcoder */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = ED1D3A43136899B2007369A1 /* Build configuration list for PBXNativeTarget "Base64Transcoder" */;
+			buildPhases = (
+				ED1D3A32136899B2007369A1 /* Sources */,
+				ED1D3A33136899B2007369A1 /* Frameworks */,
+				ED1D3A34136899B2007369A1 /* Headers */,
+				ED1D3A35136899B2007369A1 /* Resources */,
+				ED1D3A36136899B2007369A1 /* ShellScript */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = Base64Transcoder;
+			productName = Base64Transcoder;
+			productReference = ED1D3A38136899B2007369A1 /* Base64Transcoder.framework */;
+			productType = "com.apple.product-type.bundle";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		ED1D3A2D136899B2007369A1 /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = ED1D3A30136899B2007369A1 /* Build configuration list for PBXProject "Base64Transcoder" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = ED1D3A2B136899B2007369A1;
+			productRefGroup = ED1D3A39136899B2007369A1 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				ED1D3A37136899B2007369A1 /* Base64Transcoder */,
+				ED1D3A3B136899B2007369A1 /* Universal_Framework */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		ED1D3A35136899B2007369A1 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED1D3A40136899B2007369A1 /* Base64Transcoder-Info.plist in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		ED1D3A36136899B2007369A1 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\nrm -f \"${CONFIGURATION_BUILD_DIR}/FakeFramework\"\nif [ -f \"${CONFIGURATION_BUILD_DIR}/${EXECUTABLE_PATH}\" ]; then\n\tcp \"${CONFIGURATION_BUILD_DIR}/${EXECUTABLE_PATH}\" \"${CONFIGURATION_BUILD_DIR}/FakeFramework\"\nfi\n\t\t\t\t\t";
+		};
+		ED1D3A3A136899B2007369A1 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\n# Config\n\nUFW_TARGET=${PROJECT}\n\n\n\n# Defaults\n\n# Default build dir\nUFW_BUILD_DIR=\"./build\"\n\n\n\n# Global vars\n\n#if [ ! -z ${BUILD_DIR} ]; then\n## Use the build dir specified by XCode\n#    UFW_BUILD_DIR=\"${BUILD_DIR}\"\n#fi\n\nif [ -z ${SDK_NAME} ]; then\n    # Use the latest iphoneos SDK available\n    UFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\n    while read -r line; do\n    UFW_SDK_VERSION=\"${line}\"\n    done <<< \"${UFW_GREP_RESULT}\"\nelse\n    # Use the SDK specified by XCode\n    UFW_SDK_VERSION=\"${SDK_NAME}\"\nfi\n\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\nUFW_EXE_FOLDER_PATH=\"${UFW_TARGET}.framework\"\nUFW_EXE_PATH=\"${UFW_EXE_FOLDER_PATH}/${UFW_TARGET}\"\nUFW_IPHONE_DIR=\"${UFW_BUILD_DIR}/Release-iphoneos\"\nUFW_SIMULATOR_DIR=\"${UFW_BUILD_DIR}/Release-iphonesimulator\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\n\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -target \"${UFW_TARGET}\" -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -target \"${UFW_TARGET}\" -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nif [ ! -f \"${UFW_IPHONE_DIR}/${UFW_EXE_PATH}\" ]; then\n    echo \"Framework target \\\"${UFW_TARGET}\\\" had no source files to build from. Make sure your source files have the correct target membership\"\n    exit 1\nfi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -a \"${UFW_IPHONE_DIR}/${UFW_EXE_FOLDER_PATH}\" \"${UFW_UNIVERSAL_DIR}/${UFW_EXE_FOLDER_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: cp failed\"; exit 1; fi\n\nlipo -create -output \"${UFW_UNIVERSAL_DIR}/${UFW_EXE_PATH}\" \"${UFW_IPHONE_DIR}/${UFW_EXE_PATH}\" \"${UFW_SIMULATOR_DIR}/${UFW_EXE_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n\t\t\t\t\t";
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		ED1D3A32136899B2007369A1 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED1D3A4B13689A06007369A1 /* Base64Transcoder.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		ED1D3A41136899B2007369A1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				COPY_PHASE_STRIP = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_VERSION = com.apple.compilers.llvmgcc42;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+				SDKROOT = iphoneos;
+			};
+			name = Debug;
+		};
+		ED1D3A42136899B2007369A1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				COPY_PHASE_STRIP = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_VERSION = com.apple.compilers.llvmgcc42;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+				SDKROOT = iphoneos;
+			};
+			name = Release;
+		};
+		ED1D3A44136899B2007369A1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				DEAD_CODE_STRIPPING = NO;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				FRAMEWORK_VERSION = A;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "Base64Transcoder/Base64Transcoder-Prefix.pch";
+				LINK_WITH_STANDARD_LIBRARIES = NO;
+				MACH_O_TYPE = mh_object;
+				OTHER_LDFLAGS = "-ObjC";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Debug;
+		};
+		ED1D3A45136899B2007369A1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				DEAD_CODE_STRIPPING = NO;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				FRAMEWORK_VERSION = A;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "Base64Transcoder/Base64Transcoder-Prefix.pch";
+				LINK_WITH_STANDARD_LIBRARIES = NO;
+				MACH_O_TYPE = mh_object;
+				OTHER_LDFLAGS = "-ObjC";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Release;
+		};
+		ED1D3A47136899B2007369A1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = UniversalFramework;
+			};
+			name = Debug;
+		};
+		ED1D3A48136899B2007369A1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = UniversalFramework;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		ED1D3A30136899B2007369A1 /* Build configuration list for PBXProject "Base64Transcoder" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				ED1D3A41136899B2007369A1 /* Debug */,
+				ED1D3A42136899B2007369A1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		ED1D3A43136899B2007369A1 /* Build configuration list for PBXNativeTarget "Base64Transcoder" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				ED1D3A44136899B2007369A1 /* Debug */,
+				ED1D3A45136899B2007369A1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		ED1D3A46136899B2007369A1 /* Build configuration list for PBXAggregateTarget "Universal_Framework" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				ED1D3A47136899B2007369A1 /* Debug */,
+				ED1D3A48136899B2007369A1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = ED1D3A2D136899B2007369A1 /* Project object */;
+}

Base64Transcoder/Base64Transcoder.xcodeproj/xcuserdata/slemke.xcuserdatad/xcschemes/Base64Transcoder.xcscheme

+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "ED1D3A37136899B2007369A1"
+               BuildableName = "Base64Transcoder.framework"
+               BlueprintName = "Base64Transcoder"
+               ReferencedContainer = "container:Base64Transcoder.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+      displayScaleIsEnabled = "NO"
+      displayScale = "1.00"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Debug">
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      displayScaleIsEnabled = "NO"
+      displayScale = "1.00"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

Base64Transcoder/Base64Transcoder.xcodeproj/xcuserdata/slemke.xcuserdatad/xcschemes/Universal_Framework.xcscheme

+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "ED1D3A3B136899B2007369A1"
+               BuildableName = "Universal_Framework"
+               BlueprintName = "Universal_Framework"
+               ReferencedContainer = "container:Base64Transcoder.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+      displayScaleIsEnabled = "NO"
+      displayScale = "1.00"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Debug">
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      displayScaleIsEnabled = "NO"
+      displayScale = "1.00"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

Base64Transcoder/Base64Transcoder.xcodeproj/xcuserdata/slemke.xcuserdatad/xcschemes/xcschememanagement.plist

+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>Base64Transcoder.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>3</integer>
+		</dict>
+		<key>Universal_Framework.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>4</integer>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict>
+		<key>ED1D3A37136899B2007369A1</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+		<key>ED1D3A3B136899B2007369A1</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+	</dict>
+</dict>
+</plist>

Base64Transcoder/Base64Transcoder/Base64Transcoder-Info.plist

+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<string>CFBundleDevelopmentRegion</string>
+</plist>

Base64Transcoder/Base64Transcoder/Base64Transcoder-Prefix.pch

+//
+// Prefix header for all source files of the 'Base64Transcoder' target in the 'Base64Transcoder' project
+//
+
+#ifdef __OBJC__
+	#import <Foundation/Foundation.h>
+#endif

Base64Transcoder/Base64Transcoder/Base64Transcoder.c

+/*
+ *  Base64Transcoder.c
+ *  Base64Test
+ *
+ *  Created by Jonathan Wight on Tue Mar 18 2003.
+ *  Copyright (c) 2003 Toxic Software. All rights reserved.
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy
+ *  of this software and associated documentation files (the "Software"), to deal
+ *  in the Software without restriction, including without limitation the rights
+ *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ *  copies of the Software, and to permit persons to whom the Software is
+ *  furnished to do so, subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in
+ *  all copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ *  THE SOFTWARE.
+ *
+ */
+
+#include "Base64Transcoder.h"
+
+#include <math.h>
+#include <string.h>
+
+const u_int8_t kBase64EncodeTable[64] = {
+	/*  0 */ 'A',	/*  1 */ 'B',	/*  2 */ 'C',	/*  3 */ 'D', 
+	/*  4 */ 'E',	/*  5 */ 'F',	/*  6 */ 'G',	/*  7 */ 'H', 
+	/*  8 */ 'I',	/*  9 */ 'J',	/* 10 */ 'K',	/* 11 */ 'L', 
+	/* 12 */ 'M',	/* 13 */ 'N',	/* 14 */ 'O',	/* 15 */ 'P', 
+	/* 16 */ 'Q',	/* 17 */ 'R',	/* 18 */ 'S',	/* 19 */ 'T', 
+	/* 20 */ 'U',	/* 21 */ 'V',	/* 22 */ 'W',	/* 23 */ 'X', 
+	/* 24 */ 'Y',	/* 25 */ 'Z',	/* 26 */ 'a',	/* 27 */ 'b', 
+	/* 28 */ 'c',	/* 29 */ 'd',	/* 30 */ 'e',	/* 31 */ 'f', 
+	/* 32 */ 'g',	/* 33 */ 'h',	/* 34 */ 'i',	/* 35 */ 'j', 
+	/* 36 */ 'k',	/* 37 */ 'l',	/* 38 */ 'm',	/* 39 */ 'n', 
+	/* 40 */ 'o',	/* 41 */ 'p',	/* 42 */ 'q',	/* 43 */ 'r', 
+	/* 44 */ 's',	/* 45 */ 't',	/* 46 */ 'u',	/* 47 */ 'v', 
+	/* 48 */ 'w',	/* 49 */ 'x',	/* 50 */ 'y',	/* 51 */ 'z', 
+	/* 52 */ '0',	/* 53 */ '1',	/* 54 */ '2',	/* 55 */ '3', 
+	/* 56 */ '4',	/* 57 */ '5',	/* 58 */ '6',	/* 59 */ '7', 
+	/* 60 */ '8',	/* 61 */ '9',	/* 62 */ '+',	/* 63 */ '/'
+};
+
+/*
+-1 = Base64 end of data marker.
+-2 = White space (tabs, cr, lf, space)
+-3 = Noise (all non whitespace, non-base64 characters) 
+-4 = Dangerous noise
+-5 = Illegal noise (null byte)
+*/
+
+const int8_t kBase64DecodeTable[128] = {
+	/* 0x00 */ -5, 	/* 0x01 */ -3, 	/* 0x02 */ -3, 	/* 0x03 */ -3,
+	/* 0x04 */ -3, 	/* 0x05 */ -3, 	/* 0x06 */ -3, 	/* 0x07 */ -3,
+	/* 0x08 */ -3, 	/* 0x09 */ -2, 	/* 0x0a */ -2, 	/* 0x0b */ -2,
+	/* 0x0c */ -2, 	/* 0x0d */ -2, 	/* 0x0e */ -3, 	/* 0x0f */ -3,
+	/* 0x10 */ -3, 	/* 0x11 */ -3, 	/* 0x12 */ -3, 	/* 0x13 */ -3,
+	/* 0x14 */ -3, 	/* 0x15 */ -3, 	/* 0x16 */ -3, 	/* 0x17 */ -3,
+	/* 0x18 */ -3, 	/* 0x19 */ -3, 	/* 0x1a */ -3, 	/* 0x1b */ -3,
+	/* 0x1c */ -3, 	/* 0x1d */ -3, 	/* 0x1e */ -3, 	/* 0x1f */ -3,
+	/* ' ' */ -2,	/* '!' */ -3,	/* '"' */ -3,	/* '#' */ -3,
+	/* '$' */ -3,	/* '%' */ -3,	/* '&' */ -3,	/* ''' */ -3,
+	/* '(' */ -3,	/* ')' */ -3,	/* '*' */ -3,	/* '+' */ 62,
+	/* ',' */ -3,	/* '-' */ -3,	/* '.' */ -3,	/* '/' */ 63,
+	/* '0' */ 52,	/* '1' */ 53,	/* '2' */ 54,	/* '3' */ 55,
+	/* '4' */ 56,	/* '5' */ 57,	/* '6' */ 58,	/* '7' */ 59,
+	/* '8' */ 60,	/* '9' */ 61,	/* ':' */ -3,	/* ';' */ -3,
+	/* '<' */ -3,	/* '=' */ -1,	/* '>' */ -3,	/* '?' */ -3,
+	/* '@' */ -3,	/* 'A' */ 0,	/* 'B' */  1,	/* 'C' */  2,
+	/* 'D' */  3,	/* 'E' */  4,	/* 'F' */  5,	/* 'G' */  6,
+	/* 'H' */  7,	/* 'I' */  8,	/* 'J' */  9,	/* 'K' */ 10,
+	/* 'L' */ 11,	/* 'M' */ 12,	/* 'N' */ 13,	/* 'O' */ 14,
+	/* 'P' */ 15,	/* 'Q' */ 16,	/* 'R' */ 17,	/* 'S' */ 18,
+	/* 'T' */ 19,	/* 'U' */ 20,	/* 'V' */ 21,	/* 'W' */ 22,
+	/* 'X' */ 23,	/* 'Y' */ 24,	/* 'Z' */ 25,	/* '[' */ -3,
+	/* '\' */ -3,	/* ']' */ -3,	/* '^' */ -3,	/* '_' */ -3,
+	/* '`' */ -3,	/* 'a' */ 26,	/* 'b' */ 27,	/* 'c' */ 28,
+	/* 'd' */ 29,	/* 'e' */ 30,	/* 'f' */ 31,	/* 'g' */ 32,
+	/* 'h' */ 33,	/* 'i' */ 34,	/* 'j' */ 35,	/* 'k' */ 36,
+	/* 'l' */ 37,	/* 'm' */ 38,	/* 'n' */ 39,	/* 'o' */ 40,
+	/* 'p' */ 41,	/* 'q' */ 42,	/* 'r' */ 43,	/* 's' */ 44,
+	/* 't' */ 45,	/* 'u' */ 46,	/* 'v' */ 47,	/* 'w' */ 48,
+	/* 'x' */ 49,	/* 'y' */ 50,	/* 'z' */ 51,	/* '{' */ -3,
+	/* '|' */ -3,	/* '}' */ -3,	/* '~' */ -3,	/* 0x7f */ -3
+};
+
+const u_int8_t kBits_00000011 = 0x03;
+const u_int8_t kBits_00001111 = 0x0F;
+const u_int8_t kBits_00110000 = 0x30;
+const u_int8_t kBits_00111100 = 0x3C;
+const u_int8_t kBits_00111111 = 0x3F;
+const u_int8_t kBits_11000000 = 0xC0;
+const u_int8_t kBits_11110000 = 0xF0;
+const u_int8_t kBits_11111100 = 0xFC;
+
+size_t EstimateBas64EncodedDataSize(size_t inDataSize)
+{
+size_t theEncodedDataSize = (int)ceil(inDataSize / 3.0) * 4;
+theEncodedDataSize = theEncodedDataSize / 72 * 74 + theEncodedDataSize % 72;
+return(theEncodedDataSize);
+}
+
+size_t EstimateBas64DecodedDataSize(size_t inDataSize)
+{
+size_t theDecodedDataSize = (int)ceil(inDataSize / 4.0) * 3;
+//theDecodedDataSize = theDecodedDataSize / 72 * 74 + theDecodedDataSize % 72;
+return(theDecodedDataSize);
+}
+
+bool Base64EncodeData(const void *inInputData, size_t inInputDataSize, char *outOutputData, size_t *ioOutputDataSize)
+{
+size_t theEncodedDataSize = EstimateBas64EncodedDataSize(inInputDataSize);
+if (*ioOutputDataSize < theEncodedDataSize)
+	return(false);
+*ioOutputDataSize = theEncodedDataSize;
+const u_int8_t *theInPtr = (const u_int8_t *)inInputData;
+u_int32_t theInIndex = 0, theOutIndex = 0;
+for (; theInIndex < (inInputDataSize / 3) * 3; theInIndex += 3)
+	{
+	outOutputData[theOutIndex++] = kBase64EncodeTable[(theInPtr[theInIndex] & kBits_11111100) >> 2];
+	outOutputData[theOutIndex++] = kBase64EncodeTable[(theInPtr[theInIndex] & kBits_00000011) << 4 | (theInPtr[theInIndex + 1] & kBits_11110000) >> 4];
+	outOutputData[theOutIndex++] = kBase64EncodeTable[(theInPtr[theInIndex + 1] & kBits_00001111) << 2 | (theInPtr[theInIndex + 2] & kBits_11000000) >> 6];
+	outOutputData[theOutIndex++] = kBase64EncodeTable[(theInPtr[theInIndex + 2] & kBits_00111111) >> 0];
+	if (theOutIndex % 74 == 72)
+		{
+		outOutputData[theOutIndex++] = '\r';
+		outOutputData[theOutIndex++] = '\n';
+		}
+	}
+const size_t theRemainingBytes = inInputDataSize - theInIndex;
+if (theRemainingBytes == 1)
+	{
+	outOutputData[theOutIndex++] = kBase64EncodeTable[(theInPtr[theInIndex] & kBits_11111100) >> 2];
+	outOutputData[theOutIndex++] = kBase64EncodeTable[(theInPtr[theInIndex] & kBits_00000011) << 4 | (0 & kBits_11110000) >> 4];
+	outOutputData[theOutIndex++] = '=';
+	outOutputData[theOutIndex++] = '=';
+	if (theOutIndex % 74 == 72)
+		{
+		outOutputData[theOutIndex++] = '\r';
+		outOutputData[theOutIndex++] = '\n';
+		}
+	}
+else if (theRemainingBytes == 2)
+	{
+	outOutputData[theOutIndex++] = kBase64EncodeTable[(theInPtr[theInIndex] & kBits_11111100) >> 2];
+	outOutputData[theOutIndex++] = kBase64EncodeTable[(theInPtr[theInIndex] & kBits_00000011) << 4 | (theInPtr[theInIndex + 1] & kBits_11110000) >> 4];
+	outOutputData[theOutIndex++] = kBase64EncodeTable[(theInPtr[theInIndex + 1] & kBits_00001111) << 2 | (0 & kBits_11000000) >> 6];
+	outOutputData[theOutIndex++] = '=';
+	if (theOutIndex % 74 == 72)
+		{
+		outOutputData[theOutIndex++] = '\r';
+		outOutputData[theOutIndex++] = '\n';
+		}
+	}
+return(true);
+}
+
+bool Base64DecodeData(const void *inInputData, size_t inInputDataSize, void *ioOutputData, size_t *ioOutputDataSize)
+{
+memset(ioOutputData, '.', *ioOutputDataSize);
+
+size_t theDecodedDataSize = EstimateBas64DecodedDataSize(inInputDataSize);
+if (*ioOutputDataSize < theDecodedDataSize)
+	return(false);
+*ioOutputDataSize = 0;
+const u_int8_t *theInPtr = (const u_int8_t *)inInputData;
+u_int8_t *theOutPtr = (u_int8_t *)ioOutputData;
+size_t theInIndex = 0, theOutIndex = 0;
+u_int8_t theOutputOctet;
+size_t theSequence = 0;
+for (; theInIndex < inInputDataSize; )
+	{
+	int8_t theSextet = 0;
+	
+	int8_t theCurrentInputOctet = theInPtr[theInIndex];
+	theSextet = kBase64DecodeTable[theCurrentInputOctet];
+	if (theSextet == -1)
+		break;
+	while (theSextet == -2)
+		{
+		theCurrentInputOctet = theInPtr[++theInIndex];
+		theSextet = kBase64DecodeTable[theCurrentInputOctet];
+		}
+	while (theSextet == -3)
+		{
+		theCurrentInputOctet = theInPtr[++theInIndex];
+		theSextet = kBase64DecodeTable[theCurrentInputOctet];
+		}
+	if (theSequence == 0)
+		{
+		theOutputOctet = (theSextet >= 0 ? theSextet : 0) << 2 & kBits_11111100;
+		}
+	else if (theSequence == 1)
+		{
+		theOutputOctet |= (theSextet >- 0 ? theSextet : 0) >> 4 & kBits_00000011;
+		theOutPtr[theOutIndex++] = theOutputOctet;
+		}
+	else if (theSequence == 2)
+		{
+		theOutputOctet = (theSextet >= 0 ? theSextet : 0) << 4 & kBits_11110000;
+		}
+	else if (theSequence == 3)
+		{
+		theOutputOctet |= (theSextet >= 0 ? theSextet : 0) >> 2 & kBits_00001111;
+		theOutPtr[theOutIndex++] = theOutputOctet;
+		}
+	else if (theSequence == 4)
+		{
+		theOutputOctet = (theSextet >= 0 ? theSextet : 0) << 6 & kBits_11000000;
+		}
+	else if (theSequence == 5)
+		{
+		theOutputOctet |= (theSextet >= 0 ? theSextet : 0) >> 0 & kBits_00111111;
+		theOutPtr[theOutIndex++] = theOutputOctet;
+		}
+	theSequence = (theSequence + 1) % 6;
+	if (theSequence != 2 && theSequence != 4)
+		theInIndex++;
+	}
+*ioOutputDataSize = theOutIndex;
+return(true);
+}

Base64Transcoder/Base64Transcoder/Base64Transcoder.h

+/*
+ *  Base64Transcoder.h
+ *  Base64Test
+ *
+ *  Created by Jonathan Wight on Tue Mar 18 2003.
+ *  Copyright (c) 2003 Toxic Software. All rights reserved.
+ *
+ *  Permission is hereby granted, free of charge, to any person obtaining a copy
+ *  of this software and associated documentation files (the "Software"), to deal
+ *  in the Software without restriction, including without limitation the rights
+ *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ *  copies of the Software, and to permit persons to whom the Software is
+ *  furnished to do so, subject to the following conditions:
+ *
+ *  The above copyright notice and this permission notice shall be included in
+ *  all copies or substantial portions of the Software.
+ *
+ *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ *  THE SOFTWARE.
+ *
+ */
+
+#include <stdlib.h>
+#include <stdbool.h>
+
+extern size_t EstimateBas64EncodedDataSize(size_t inDataSize);
+extern size_t EstimateBas64DecodedDataSize(size_t inDataSize);
+
+extern bool Base64EncodeData(const void *inInputData, size_t inInputDataSize, char *outOutputData, size_t *ioOutputDataSize);
+extern bool Base64DecodeData(const void *inInputData, size_t inInputDataSize, void *ioOutputData, size_t *ioOutputDataSize);
+

PhotobucketAPI.xcodeproj/project.pbxproj

+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXAggregateTarget section */
+		ED1D3AE91368A2A9007369A1 /* Universal_Framework */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = ED1D3AF41368A2A9007369A1 /* Build configuration list for PBXAggregateTarget "Universal_Framework" */;
+			buildPhases = (
+				ED1D3AE81368A2A9007369A1 /* ShellScript */,
+			);
+			dependencies = (
+				CD06DA2113FD75A90079E91D /* PBXTargetDependency */,
+				CD06DA1F13FD75A60079E91D /* PBXTargetDependency */,
+			);
+			name = Universal_Framework;
+			productName = Universal_Framework;
+		};
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+		ED1D3AEE1368A2A9007369A1 /* PhotobucketAPI-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = ED1D3AED1368A2A9007369A1 /* PhotobucketAPI-Info.plist */; };
+		ED1D3B141368A2C5007369A1 /* ASIAuthenticationDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3AF81368A2C5007369A1 /* ASIAuthenticationDialog.h */; };
+		ED1D3B151368A2C5007369A1 /* ASIAuthenticationDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3AF91368A2C5007369A1 /* ASIAuthenticationDialog.m */; };
+		ED1D3B161368A2C5007369A1 /* ASIFormDataRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3AFA1368A2C5007369A1 /* ASIFormDataRequest.h */; };
+		ED1D3B171368A2C5007369A1 /* ASIFormDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3AFB1368A2C5007369A1 /* ASIFormDataRequest.m */; };
+		ED1D3B181368A2C5007369A1 /* ASIHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3AFC1368A2C5007369A1 /* ASIHTTPRequest.h */; };
+		ED1D3B191368A2C5007369A1 /* ASIHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3AFD1368A2C5007369A1 /* ASIHTTPRequest.m */; };
+		ED1D3B1A1368A2C5007369A1 /* ASIInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3AFE1368A2C5007369A1 /* ASIInputStream.h */; };
+		ED1D3B1B1368A2C5007369A1 /* ASIInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3AFF1368A2C5007369A1 /* ASIInputStream.m */; };
+		ED1D3B1C1368A2C5007369A1 /* ASINetworkQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B001368A2C5007369A1 /* ASINetworkQueue.h */; };
+		ED1D3B1D1368A2C5007369A1 /* ASINetworkQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3B011368A2C5007369A1 /* ASINetworkQueue.m */; };
+		ED1D3B1E1368A2C5007369A1 /* ASINSStringAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B021368A2C5007369A1 /* ASINSStringAdditions.h */; };
+		ED1D3B1F1368A2C5007369A1 /* ASINSStringAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3B031368A2C5007369A1 /* ASINSStringAdditions.m */; };
+		ED1D3B201368A2C5007369A1 /* Reachability.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B051368A2C5007369A1 /* Reachability.h */; };
+		ED1D3B211368A2C5007369A1 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3B061368A2C5007369A1 /* Reachability.m */; };
+		ED1D3B221368A2C5007369A1 /* OAuthASIFormDataRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B071368A2C5007369A1 /* OAuthASIFormDataRequest.h */; };
+		ED1D3B231368A2C5007369A1 /* OAuthASIFormDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3B081368A2C5007369A1 /* OAuthASIFormDataRequest.m */; };
+		ED1D3B241368A2C5007369A1 /* OAuthASIHTTPRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B091368A2C5007369A1 /* OAuthASIHTTPRequest.h */; };
+		ED1D3B251368A2C5007369A1 /* OAuthASIHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3B0A1368A2C5007369A1 /* OAuthASIHTTPRequest.m */; };
+		ED1D3B261368A2C5007369A1 /* OAuthUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B0B1368A2C5007369A1 /* OAuthUtils.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		ED1D3B271368A2C5007369A1 /* OAuthUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3B0C1368A2C5007369A1 /* OAuthUtils.m */; };
+		ED1D3B281368A2C5007369A1 /* PhotobucketAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B0D1368A2C5007369A1 /* PhotobucketAPI.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		ED1D3B291368A2C5007369A1 /* PhotobucketAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3B0E1368A2C5007369A1 /* PhotobucketAPI.m */; };
+		ED1D3B2A1368A2C5007369A1 /* PhotobucketAPIGlobalErrorDelegateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B0F1368A2C5007369A1 /* PhotobucketAPIGlobalErrorDelegateProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		ED1D3B2B1368A2C5007369A1 /* PhotobucketAPIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B101368A2C5007369A1 /* PhotobucketAPIRequest.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		ED1D3B2C1368A2C5007369A1 /* PhotobucketAPIRequestDelegateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B111368A2C5007369A1 /* PhotobucketAPIRequestDelegateProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		ED1D3B2D1368A2C5007369A1 /* RequestDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = ED1D3B121368A2C5007369A1 /* RequestDelegate.h */; };
+		ED1D3B2E1368A2C5007369A1 /* RequestDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1D3B131368A2C5007369A1 /* RequestDelegate.m */; };
+		ED7B47251369D6CB00B04D8C /* Base64Transcoder.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7B47241369D6CB00B04D8C /* Base64Transcoder.framework */; };
+		ED7B472D1369D71800B04D8C /* TouchJSON.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7B472C1369D71800B04D8C /* TouchJSON.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		CD06DA1A13FD759D0079E91D /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = ED7B47321369D9C700B04D8C /* TouchJSON.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = ED1D3AA11368A177007369A1;
+			remoteInfo = TouchJSON;
+		};
+		CD06DA1C13FD75A10079E91D /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = ED7B47391369D9D000B04D8C /* Base64Transcoder.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = ED1D3A37136899B2007369A1;
+			remoteInfo = Base64Transcoder;
+		};
+		CD06DA1E13FD75A60079E91D /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = ED7B47321369D9C700B04D8C /* TouchJSON.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = ED1D3AA51368A177007369A1;
+			remoteInfo = Universal_Framework;
+		};
+		CD06DA2013FD75A90079E91D /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = ED7B47391369D9D000B04D8C /* Base64Transcoder.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = ED1D3A3B136899B2007369A1;
+			remoteInfo = Universal_Framework;
+		};
+		ED7B47371369D9C700B04D8C /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = ED7B47321369D9C700B04D8C /* TouchJSON.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = ED1D3AA21368A177007369A1;
+			remoteInfo = TouchJSON;
+		};
+		ED7B473E1369D9D000B04D8C /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = ED7B47391369D9D000B04D8C /* Base64Transcoder.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = ED1D3A38136899B2007369A1;
+			remoteInfo = Base64Transcoder;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		ED1D3AE61368A2A9007369A1 /* PhotobucketAPI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PhotobucketAPI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		ED1D3AEC1368A2A9007369A1 /* PhotobucketAPI-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PhotobucketAPI-Prefix.pch"; sourceTree = "<group>"; };
+		ED1D3AED1368A2A9007369A1 /* PhotobucketAPI-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PhotobucketAPI-Info.plist"; sourceTree = "<group>"; };
+		ED1D3AF81368A2C5007369A1 /* ASIAuthenticationDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIAuthenticationDialog.h; sourceTree = "<group>"; };
+		ED1D3AF91368A2C5007369A1 /* ASIAuthenticationDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASIAuthenticationDialog.m; sourceTree = "<group>"; };
+		ED1D3AFA1368A2C5007369A1 /* ASIFormDataRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIFormDataRequest.h; sourceTree = "<group>"; };
+		ED1D3AFB1368A2C5007369A1 /* ASIFormDataRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASIFormDataRequest.m; sourceTree = "<group>"; };
+		ED1D3AFC1368A2C5007369A1 /* ASIHTTPRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIHTTPRequest.h; sourceTree = "<group>"; };
+		ED1D3AFD1368A2C5007369A1 /* ASIHTTPRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASIHTTPRequest.m; sourceTree = "<group>"; };
+		ED1D3AFE1368A2C5007369A1 /* ASIInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASIInputStream.h; sourceTree = "<group>"; };
+		ED1D3AFF1368A2C5007369A1 /* ASIInputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASIInputStream.m; sourceTree = "<group>"; };
+		ED1D3B001368A2C5007369A1 /* ASINetworkQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASINetworkQueue.h; sourceTree = "<group>"; };
+		ED1D3B011368A2C5007369A1 /* ASINetworkQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASINetworkQueue.m; sourceTree = "<group>"; };
+		ED1D3B021368A2C5007369A1 /* ASINSStringAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASINSStringAdditions.h; sourceTree = "<group>"; };
+		ED1D3B031368A2C5007369A1 /* ASINSStringAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASINSStringAdditions.m; sourceTree = "<group>"; };
+		ED1D3B051368A2C5007369A1 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = "<group>"; };
+		ED1D3B061368A2C5007369A1 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = "<group>"; };
+		ED1D3B071368A2C5007369A1 /* OAuthASIFormDataRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAuthASIFormDataRequest.h; sourceTree = "<group>"; };
+		ED1D3B081368A2C5007369A1 /* OAuthASIFormDataRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAuthASIFormDataRequest.m; sourceTree = "<group>"; };
+		ED1D3B091368A2C5007369A1 /* OAuthASIHTTPRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAuthASIHTTPRequest.h; sourceTree = "<group>"; };
+		ED1D3B0A1368A2C5007369A1 /* OAuthASIHTTPRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAuthASIHTTPRequest.m; sourceTree = "<group>"; };
+		ED1D3B0B1368A2C5007369A1 /* OAuthUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAuthUtils.h; sourceTree = "<group>"; };
+		ED1D3B0C1368A2C5007369A1 /* OAuthUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAuthUtils.m; sourceTree = "<group>"; };
+		ED1D3B0D1368A2C5007369A1 /* PhotobucketAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotobucketAPI.h; sourceTree = "<group>"; };
+		ED1D3B0E1368A2C5007369A1 /* PhotobucketAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotobucketAPI.m; sourceTree = "<group>"; };
+		ED1D3B0F1368A2C5007369A1 /* PhotobucketAPIGlobalErrorDelegateProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotobucketAPIGlobalErrorDelegateProtocol.h; sourceTree = "<group>"; };
+		ED1D3B101368A2C5007369A1 /* PhotobucketAPIRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotobucketAPIRequest.h; sourceTree = "<group>"; };
+		ED1D3B111368A2C5007369A1 /* PhotobucketAPIRequestDelegateProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotobucketAPIRequestDelegateProtocol.h; sourceTree = "<group>"; };
+		ED1D3B121368A2C5007369A1 /* RequestDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RequestDelegate.h; sourceTree = "<group>"; };
+		ED1D3B131368A2C5007369A1 /* RequestDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RequestDelegate.m; sourceTree = "<group>"; };
+		ED7B47241369D6CB00B04D8C /* Base64Transcoder.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Base64Transcoder.framework; path = "Base64Transcoder/build/Release-universal/Base64Transcoder.framework"; sourceTree = SOURCE_ROOT; };
+		ED7B472C1369D71800B04D8C /* TouchJSON.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TouchJSON.framework; path = "TouchJSON/build/Release-universal/TouchJSON.framework"; sourceTree = SOURCE_ROOT; };
+		ED7B47321369D9C700B04D8C /* TouchJSON.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = TouchJSON.xcodeproj; path = TouchJSON/TouchJSON.xcodeproj; sourceTree = SOURCE_ROOT; };
+		ED7B47391369D9D000B04D8C /* Base64Transcoder.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Base64Transcoder.xcodeproj; path = Base64Transcoder/Base64Transcoder.xcodeproj; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		ED1D3AE11368A2A9007369A1 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED7B47251369D6CB00B04D8C /* Base64Transcoder.framework in Frameworks */,
+				ED7B472D1369D71800B04D8C /* TouchJSON.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		ED1D3AD91368A2A9007369A1 = {
+			isa = PBXGroup;
+			children = (
+				ED1D3AEA1368A2A9007369A1 /* PhotobucketAPI */,
+				ED1D3AE71368A2A9007369A1 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		ED1D3AE71368A2A9007369A1 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				ED1D3AE61368A2A9007369A1 /* PhotobucketAPI.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		ED1D3AEA1368A2A9007369A1 /* PhotobucketAPI */ = {
+			isa = PBXGroup;
+			children = (
+				ED1D3AF71368A2C5007369A1 /* ASI */,
+				ED1D3B071368A2C5007369A1 /* OAuthASIFormDataRequest.h */,
+				ED1D3B081368A2C5007369A1 /* OAuthASIFormDataRequest.m */,
+				ED1D3B091368A2C5007369A1 /* OAuthASIHTTPRequest.h */,
+				ED1D3B0A1368A2C5007369A1 /* OAuthASIHTTPRequest.m */,
+				ED1D3B0B1368A2C5007369A1 /* OAuthUtils.h */,
+				ED1D3B0C1368A2C5007369A1 /* OAuthUtils.m */,
+				ED1D3B0D1368A2C5007369A1 /* PhotobucketAPI.h */,
+				ED1D3B0E1368A2C5007369A1 /* PhotobucketAPI.m */,
+				ED1D3B0F1368A2C5007369A1 /* PhotobucketAPIGlobalErrorDelegateProtocol.h */,
+				ED1D3B101368A2C5007369A1 /* PhotobucketAPIRequest.h */,
+				ED1D3B111368A2C5007369A1 /* PhotobucketAPIRequestDelegateProtocol.h */,
+				ED1D3B121368A2C5007369A1 /* RequestDelegate.h */,
+				ED1D3B131368A2C5007369A1 /* RequestDelegate.m */,
+				ED1D3AED1368A2A9007369A1 /* PhotobucketAPI-Info.plist */,
+				ED1D3B331368A312007369A1 /* Frameworks */,
+				ED1D3AEB1368A2A9007369A1 /* Supporting Files */,
+				ED7B47401369D9DB00B04D8C /* Dependencies */,
+			);
+			path = PhotobucketAPI;
+			sourceTree = "<group>";
+		};
+		ED1D3AEB1368A2A9007369A1 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				ED1D3AEC1368A2A9007369A1 /* PhotobucketAPI-Prefix.pch */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		ED1D3AF71368A2C5007369A1 /* ASI */ = {
+			isa = PBXGroup;
+			children = (
+				ED1D3AF81368A2C5007369A1 /* ASIAuthenticationDialog.h */,
+				ED1D3AF91368A2C5007369A1 /* ASIAuthenticationDialog.m */,
+				ED1D3AFA1368A2C5007369A1 /* ASIFormDataRequest.h */,
+				ED1D3AFB1368A2C5007369A1 /* ASIFormDataRequest.m */,
+				ED1D3AFC1368A2C5007369A1 /* ASIHTTPRequest.h */,
+				ED1D3AFD1368A2C5007369A1 /* ASIHTTPRequest.m */,
+				ED1D3AFE1368A2C5007369A1 /* ASIInputStream.h */,
+				ED1D3AFF1368A2C5007369A1 /* ASIInputStream.m */,
+				ED1D3B001368A2C5007369A1 /* ASINetworkQueue.h */,
+				ED1D3B011368A2C5007369A1 /* ASINetworkQueue.m */,
+				ED1D3B021368A2C5007369A1 /* ASINSStringAdditions.h */,
+				ED1D3B031368A2C5007369A1 /* ASINSStringAdditions.m */,
+				ED1D3B041368A2C5007369A1 /* External */,
+			);
+			path = ASI;
+			sourceTree = "<group>";
+		};
+		ED1D3B041368A2C5007369A1 /* External */ = {
+			isa = PBXGroup;
+			children = (
+				ED1D3B051368A2C5007369A1 /* Reachability.h */,
+				ED1D3B061368A2C5007369A1 /* Reachability.m */,
+			);
+			path = External;
+			sourceTree = "<group>";
+		};
+		ED1D3B331368A312007369A1 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				ED7B47241369D6CB00B04D8C /* Base64Transcoder.framework */,
+				ED7B472C1369D71800B04D8C /* TouchJSON.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		ED7B47331369D9C700B04D8C /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				ED7B47381369D9C700B04D8C /* TouchJSON.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		ED7B473A1369D9D000B04D8C /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				ED7B473F1369D9D000B04D8C /* Base64Transcoder.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		ED7B47401369D9DB00B04D8C /* Dependencies */ = {
+			isa = PBXGroup;
+			children = (
+				ED7B47391369D9D000B04D8C /* Base64Transcoder.xcodeproj */,
+				ED7B47321369D9C700B04D8C /* TouchJSON.xcodeproj */,
+			);
+			name = Dependencies;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		ED1D3AE21368A2A9007369A1 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED1D3B281368A2C5007369A1 /* PhotobucketAPI.h in Headers */,
+				ED1D3B2A1368A2C5007369A1 /* PhotobucketAPIGlobalErrorDelegateProtocol.h in Headers */,
+				ED1D3B2B1368A2C5007369A1 /* PhotobucketAPIRequest.h in Headers */,
+				ED1D3B2C1368A2C5007369A1 /* PhotobucketAPIRequestDelegateProtocol.h in Headers */,
+				ED1D3B261368A2C5007369A1 /* OAuthUtils.h in Headers */,
+				ED1D3B141368A2C5007369A1 /* ASIAuthenticationDialog.h in Headers */,
+				ED1D3B161368A2C5007369A1 /* ASIFormDataRequest.h in Headers */,
+				ED1D3B181368A2C5007369A1 /* ASIHTTPRequest.h in Headers */,
+				ED1D3B1A1368A2C5007369A1 /* ASIInputStream.h in Headers */,
+				ED1D3B1C1368A2C5007369A1 /* ASINetworkQueue.h in Headers */,
+				ED1D3B1E1368A2C5007369A1 /* ASINSStringAdditions.h in Headers */,
+				ED1D3B201368A2C5007369A1 /* Reachability.h in Headers */,
+				ED1D3B221368A2C5007369A1 /* OAuthASIFormDataRequest.h in Headers */,
+				ED1D3B241368A2C5007369A1 /* OAuthASIHTTPRequest.h in Headers */,
+				ED1D3B2D1368A2C5007369A1 /* RequestDelegate.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		ED1D3AE51368A2A9007369A1 /* PhotobucketAPI */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = ED1D3AF11368A2A9007369A1 /* Build configuration list for PBXNativeTarget "PhotobucketAPI" */;
+			buildPhases = (
+				ED1D3AE01368A2A9007369A1 /* Sources */,
+				ED1D3AE11368A2A9007369A1 /* Frameworks */,
+				ED1D3AE21368A2A9007369A1 /* Headers */,
+				ED1D3AE31368A2A9007369A1 /* Resources */,
+				ED1D3AE41368A2A9007369A1 /* ShellScript */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				CD06DA1D13FD75A10079E91D /* PBXTargetDependency */,
+				CD06DA1B13FD759D0079E91D /* PBXTargetDependency */,
+			);
+			name = PhotobucketAPI;
+			productName = PhotobucketAPI;
+			productReference = ED1D3AE61368A2A9007369A1 /* PhotobucketAPI.framework */;
+			productType = "com.apple.product-type.bundle";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		ED1D3ADB1368A2A9007369A1 /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = ED1D3ADE1368A2A9007369A1 /* Build configuration list for PBXProject "PhotobucketAPI" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = ED1D3AD91368A2A9007369A1;
+			productRefGroup = ED1D3AE71368A2A9007369A1 /* Products */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = ED7B473A1369D9D000B04D8C /* Products */;
+					ProjectRef = ED7B47391369D9D000B04D8C /* Base64Transcoder.xcodeproj */;
+				},
+				{
+					ProductGroup = ED7B47331369D9C700B04D8C /* Products */;
+					ProjectRef = ED7B47321369D9C700B04D8C /* TouchJSON.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				ED1D3AE51368A2A9007369A1 /* PhotobucketAPI */,
+				ED1D3AE91368A2A9007369A1 /* Universal_Framework */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+		ED7B47381369D9C700B04D8C /* TouchJSON.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.cfbundle;
+			path = TouchJSON.framework;
+			remoteRef = ED7B47371369D9C700B04D8C /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		ED7B473F1369D9D000B04D8C /* Base64Transcoder.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.cfbundle;
+			path = Base64Transcoder.framework;
+			remoteRef = ED7B473E1369D9D000B04D8C /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+		ED1D3AE31368A2A9007369A1 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED1D3AEE1368A2A9007369A1 /* PhotobucketAPI-Info.plist in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		ED1D3AE41368A2A9007369A1 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\nrm -f \"${CONFIGURATION_BUILD_DIR}/FakeFramework\"\nif [ -f \"${CONFIGURATION_BUILD_DIR}/${EXECUTABLE_PATH}\" ]; then\n\tcp \"${CONFIGURATION_BUILD_DIR}/${EXECUTABLE_PATH}\" \"${CONFIGURATION_BUILD_DIR}/FakeFramework\"\nfi\n\t\t\t\t\t";
+		};
+		ED1D3AE81368A2A9007369A1 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\n# Config\n\nUFW_TARGET=${PROJECT}\n\n\n\n# Defaults\n\n# Default build dir\nUFW_BUILD_DIR=\"./build\"\n\n\n\n# Global vars\n\n#if [ ! -z ${BUILD_DIR} ]; then\n## Use the build dir specified by XCode\n#    UFW_BUILD_DIR=\"${BUILD_DIR}\"\n#fi\n\nif [ -z ${SDK_NAME} ]; then\n    # Use the latest iphoneos SDK available\n    UFW_GREP_RESULT=$(xcodebuild -showsdks | grep -o \"iphoneos.*$\")\n    while read -r line; do\n    UFW_SDK_VERSION=\"${line}\"\n    done <<< \"${UFW_GREP_RESULT}\"\nelse\n    # Use the SDK specified by XCode\n    UFW_SDK_VERSION=\"${SDK_NAME}\"\nfi\n\nUFW_SDK_VERSION=$(echo \"${UFW_SDK_VERSION}\" | grep -o \"[0-9].*$\")\nUFW_EXE_FOLDER_PATH=\"${UFW_TARGET}.framework\"\nUFW_EXE_PATH=\"${UFW_EXE_FOLDER_PATH}/${UFW_TARGET}\"\nUFW_IPHONE_DIR=\"${UFW_BUILD_DIR}/Release-iphoneos\"\nUFW_SIMULATOR_DIR=\"${UFW_BUILD_DIR}/Release-iphonesimulator\"\nUFW_UNIVERSAL_DIR=\"${UFW_BUILD_DIR}/Release-universal\"\n\n\n# Build Framework\n\nrm -rf \"${UFW_UNIVERSAL_DIR}\"\n\nxcodebuild -target \"${UFW_TARGET}\" -configuration Release -sdk iphoneos${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\nxcodebuild -target \"${UFW_TARGET}\" -configuration Release -sdk iphonesimulator${UFW_SDK_VERSION} clean build\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: xcodebuild failed\"; exit 1; fi\n\nif [ ! -f \"${UFW_IPHONE_DIR}/${UFW_EXE_PATH}\" ]; then\n    echo \"Framework target \\\"${UFW_TARGET}\\\" had no source files to build from. Make sure your source files have the correct target membership\"\n    exit 1\nfi\n\nmkdir -p \"${UFW_UNIVERSAL_DIR}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: mkdir failed\"; exit 1; fi\n\ncp -a \"${UFW_IPHONE_DIR}/${UFW_EXE_FOLDER_PATH}\" \"${UFW_UNIVERSAL_DIR}/${UFW_EXE_FOLDER_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: cp failed\"; exit 1; fi\n\nlipo -create -output \"${UFW_UNIVERSAL_DIR}/${UFW_EXE_PATH}\" \"${UFW_IPHONE_DIR}/${UFW_EXE_PATH}\" \"${UFW_SIMULATOR_DIR}/${UFW_EXE_PATH}\"\nif [ \"$?\" != \"0\" ]; then echo >&2 \"Error: lipo failed\"; exit 1; fi\n\t\t\t\t\t";
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		ED1D3AE01368A2A9007369A1 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				ED1D3B151368A2C5007369A1 /* ASIAuthenticationDialog.m in Sources */,
+				ED1D3B171368A2C5007369A1 /* ASIFormDataRequest.m in Sources */,
+				ED1D3B191368A2C5007369A1 /* ASIHTTPRequest.m in Sources */,
+				ED1D3B1B1368A2C5007369A1 /* ASIInputStream.m in Sources */,
+				ED1D3B1D1368A2C5007369A1 /* ASINetworkQueue.m in Sources */,
+				ED1D3B1F1368A2C5007369A1 /* ASINSStringAdditions.m in Sources */,
+				ED1D3B211368A2C5007369A1 /* Reachability.m in Sources */,
+				ED1D3B231368A2C5007369A1 /* OAuthASIFormDataRequest.m in Sources */,
+				ED1D3B251368A2C5007369A1 /* OAuthASIHTTPRequest.m in Sources */,
+				ED1D3B271368A2C5007369A1 /* OAuthUtils.m in Sources */,
+				ED1D3B291368A2C5007369A1 /* PhotobucketAPI.m in Sources */,
+				ED1D3B2E1368A2C5007369A1 /* RequestDelegate.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		CD06DA1B13FD759D0079E91D /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = TouchJSON;
+			targetProxy = CD06DA1A13FD759D0079E91D /* PBXContainerItemProxy */;
+		};
+		CD06DA1D13FD75A10079E91D /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = Base64Transcoder;
+			targetProxy = CD06DA1C13FD75A10079E91D /* PBXContainerItemProxy */;
+		};
+		CD06DA1F13FD75A60079E91D /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = Universal_Framework;
+			targetProxy = CD06DA1E13FD75A60079E91D /* PBXContainerItemProxy */;
+		};
+		CD06DA2113FD75A90079E91D /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = Universal_Framework;
+			targetProxy = CD06DA2013FD75A90079E91D /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+		ED1D3AEF1368A2A9007369A1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				COPY_PHASE_STRIP = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_VERSION = com.apple.compilers.llvmgcc42;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 4.0;
+				SDKROOT = iphoneos;
+			};
+			name = Debug;
+		};
+		ED1D3AF01368A2A9007369A1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				COPY_PHASE_STRIP = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_VERSION = com.apple.compilers.llvmgcc42;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 4.0;
+				SDKROOT = iphoneos;
+			};
+			name = Release;
+		};
+		ED1D3AF21368A2A9007369A1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				DEAD_CODE_STRIPPING = NO;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../Base64Transcoder/build/Release-universal\"",
+					"\"$(SRCROOT)/../TouchJSON/build/Release-universal\"",
+					"\"$(SRCROOT)/Base64Transcoder/build/Release-universal\"",
+					"\"$(SRCROOT)/TouchJSON/build/Release-universal\"",
+				);
+				FRAMEWORK_VERSION = A;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "PhotobucketAPI/PhotobucketAPI-Prefix.pch";
+				LINK_WITH_STANDARD_LIBRARIES = NO;
+				MACH_O_TYPE = mh_object;
+				OTHER_LDFLAGS = "-ObjC";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Debug;
+		};
+		ED1D3AF31368A2A9007369A1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				DEAD_CODE_STRIPPING = NO;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../Base64Transcoder/build/Release-universal\"",
+					"\"$(SRCROOT)/../TouchJSON/build/Release-universal\"",
+					"\"$(SRCROOT)/Base64Transcoder/build/Release-universal\"",
+					"\"$(SRCROOT)/TouchJSON/build/Release-universal\"",
+				);
+				FRAMEWORK_VERSION = A;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "PhotobucketAPI/PhotobucketAPI-Prefix.pch";
+				LINK_WITH_STANDARD_LIBRARIES = NO;
+				MACH_O_TYPE = mh_object;
+				OTHER_LDFLAGS = "-ObjC";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Release;
+		};
+		ED1D3AF51368A2A9007369A1 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = UniversalFramework;
+			};
+			name = Debug;
+		};
+		ED1D3AF61368A2A9007369A1 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = UniversalFramework;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		ED1D3ADE1368A2A9007369A1 /* Build configuration list for PBXProject "PhotobucketAPI" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				ED1D3AEF1368A2A9007369A1 /* Debug */,
+				ED1D3AF01368A2A9007369A1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		ED1D3AF11368A2A9007369A1 /* Build configuration list for PBXNativeTarget "PhotobucketAPI" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				ED1D3AF21368A2A9007369A1 /* Debug */,
+				ED1D3AF31368A2A9007369A1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		ED1D3AF41368A2A9007369A1 /* Build configuration list for PBXAggregateTarget "Universal_Framework" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				ED1D3AF51368A2A9007369A1 /* Debug */,
+				ED1D3AF61368A2A9007369A1 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = ED1D3ADB1368A2A9007369A1 /* Project object */;
+}

PhotobucketAPI.xcodeproj/xcuserdata/slemke.xcuserdatad/xcschemes/PhotobucketAPI.xcscheme

+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "ED1D3AE51368A2A9007369A1"
+               BuildableName = "PhotobucketAPI.framework"
+               BlueprintName = "PhotobucketAPI"
+               ReferencedContainer = "container:PhotobucketAPI.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+      displayScaleIsEnabled = "NO"
+      displayScale = "1.00"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Debug">
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      displayScaleIsEnabled = "NO"
+      displayScale = "1.00"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

PhotobucketAPI.xcodeproj/xcuserdata/slemke.xcuserdatad/xcschemes/Universal_Framework.xcscheme

+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "ED1D3AE91368A2A9007369A1"
+               BuildableName = "Universal_Framework"
+               BlueprintName = "Universal_Framework"
+               ReferencedContainer = "container:PhotobucketAPI.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+      displayScaleIsEnabled = "NO"
+      displayScale = "1.00"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Debug">
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      displayScaleIsEnabled = "NO"
+      displayScale = "1.00"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      buildConfiguration = "Release">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

PhotobucketAPI.xcodeproj/xcuserdata/slemke.xcuserdatad/xcschemes/xcschememanagement.plist

+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>PhotobucketAPI.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>2</integer>
+		</dict>
+		<key>Universal_Framework.xcscheme</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>5</integer>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict>
+		<key>ED1D3AE51368A2A9007369A1</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+		<key>ED1D3AE91368A2A9007369A1</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+	</dict>
+</dict>
+</plist>

PhotobucketAPI/ASI/ASIAuthenticationDialog.h

+//
+//  ASIAuthenticationDialog.h
+//  iPhone
+//
+//  Created by Ben Copsey on 21/08/2009.
+//  Copyright 2009 All-Seeing Interactive. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+@class ASIHTTPRequest;
+
+typedef enum _ASIAuthenticationType {
+	ASIStandardAuthenticationType = 0,
+    ASIProxyAuthenticationType = 1
+} ASIAuthenticationType;
+	
+@interface ASIAuthenticationDialog : NSObject <UIActionSheetDelegate, UITableViewDelegate, UITableViewDataSource> {
+	ASIHTTPRequest *request;
+	UIActionSheet *loginDialog;
+	ASIAuthenticationType type;
+}
++ (void)presentAuthenticationDialogForRequest:(ASIHTTPRequest *)request;
++ (void)presentProxyAuthenticationDialogForRequest:(ASIHTTPRequest *)request;
+
+@property (retain) ASIHTTPRequest *request;
+@property (retain) UIActionSheet *loginDialog;
+@property (assign) ASIAuthenticationType type;
+@end

PhotobucketAPI/ASI/ASIAuthenticationDialog.m

+//
+//  ASIAuthenticationDialog.m
+//  iPhone
+//
+//  Created by Ben Copsey on 21/08/2009.
+//  Copyright 2009 All-Seeing Interactive. All rights reserved.
+//
+
+#import "ASIAuthenticationDialog.h"
+#import "ASIHTTPRequest.h"
+
+ASIAuthenticationDialog *sharedDialog = nil;
+NSLock *dialogLock = nil;
+
+@interface ASIAuthenticationDialog ()
+- (void)show;
+@end
+
+@implementation ASIAuthenticationDialog
+
++ (void)initialize
+{
+	if (self == [ASIAuthenticationDialog class]) {
+		dialogLock = [[NSLock alloc] init];
+	}
+}
+
++ (void)presentProxyAuthenticationDialogForRequest:(ASIHTTPRequest *)request
+{
+	[dialogLock lock];
+	[sharedDialog release];
+	sharedDialog = [[self alloc] init];
+	[sharedDialog setRequest:request];
+	[sharedDialog setType:ASIProxyAuthenticationType];
+	[sharedDialog show];
+	[dialogLock unlock];	
+}
+
++ (void)presentAuthenticationDialogForRequest:(ASIHTTPRequest *)request
+{
+	[dialogLock lock];
+	[sharedDialog release];
+	sharedDialog = [[self alloc] init];
+	[sharedDialog setRequest:request];
+	[sharedDialog show];
+	[dialogLock unlock];
+	
+}
+
+- (void)show
+{
+	// Create an action sheet to show the login dialog
+	[self setLoginDialog:[[[UIActionSheet alloc] init] autorelease]];
+	[[self loginDialog] setActionSheetStyle:UIActionSheetStyleBlackOpaque];
+	[[self loginDialog] setDelegate:self];
+	
+	// We show the login form in a table view, similar to Safari's authentication dialog
+	UITableView *table = [[[UITableView alloc] initWithFrame:CGRectMake(0,80,320,480) style:UITableViewStyleGrouped] autorelease];
+	[table setDelegate:self];
+	[table setDataSource:self];
+	[[self loginDialog] addSubview:table];
+	[[self loginDialog] showInView:[[[UIApplication sharedApplication] windows] objectAtIndex:0]];
+	[[self loginDialog] setFrame:CGRectMake(0,0,320,480)];
+	
+	// Setup the title (Couldn't figure out how to put this in the same toolbar as the buttons)
+	UIToolbar *titleBar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0,0,320,30)] autorelease];
+	UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10,0,300,30)] autorelease];
+	if ([self type] == ASIProxyAuthenticationType) {
+		[label setText:@"Login to this secure proxy server."];
+	} else {
+		[label setText:@"Login to this secure server."];
+	}
+	[label setTextColor:[UIColor blackColor]];
+	[label setFont:[UIFont systemFontOfSize:13.0]];
+	[label setShadowColor:[UIColor colorWithRed:1 green:1 blue:1 alpha:0.5]];
+	[label setShadowOffset:CGSizeMake(0, 1.0)];
+	[label setOpaque:NO];
+	[label setBackgroundColor:nil];
+	[label setTextAlignment:UITextAlignmentCenter];
+	
+	[titleBar addSubview:label];
+	[[self loginDialog] addSubview:titleBar];
+	
+	// Setup the toolbar 
+	UIToolbar *toolbar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0,30,320,50)] autorelease];
+
+	NSMutableArray *items = [[[NSMutableArray alloc] init] autorelease];
+	UIBarButtonItem *backButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelAuthenticationFromDialog:)] autorelease];
+	[items addObject:backButton];
+	
+	label = [[[UILabel alloc] initWithFrame:CGRectMake(0,0,170,50)] autorelease];
+	if ([self type] == ASIProxyAuthenticationType) {
+		[label setText:[[self request] proxyHost]];
+	} else {
+		[label setText:[[[self request] url] host]];
+	}
+	[label setTextColor:[UIColor whiteColor]];
+	[label setFont:[UIFont boldSystemFontOfSize:22.0]];
+	[label setShadowColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]];
+	[label setShadowOffset:CGSizeMake(0, -1.0)];
+	[label setOpaque:NO];
+	[label setBackgroundColor:nil];
+	[label setTextAlignment:UITextAlignmentCenter];
+	
+	[toolbar addSubview:label];
+
+	UIBarButtonItem *labelButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:nil action:nil] autorelease];
+	[labelButton setCustomView:label];
+	[items addObject:labelButton];
+	[items addObject:[[[UIBarButtonItem alloc] initWithTitle:@"Login" style:UIBarButtonItemStyleDone target:self action:@selector(loginWithCredentialsFromDialog:)] autorelease]];
+	[toolbar setItems:items];
+	
+	[[self loginDialog] addSubview:toolbar];
+	
+	// Force reload the table content, and focus the first field to show the keyboard
+	[table reloadData];
+	[[[[table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] subviews] objectAtIndex:2] becomeFirstResponder];
+	
+}
+
+- (void)cancelAuthenticationFromDialog:(id)sender
+{
+	[[self request] cancelAuthentication];
+	[[self loginDialog] dismissWithClickedButtonIndex:0 animated:YES];
+}
+
+- (void)loginWithCredentialsFromDialog:(id)sender
+{
+	NSString *username = [[[[[[[self loginDialog] subviews] objectAtIndex:0] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] subviews] objectAtIndex:2] text];
+	NSString *password = [[[[[[[self loginDialog] subviews] objectAtIndex:0] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]] subviews] objectAtIndex:2] text];
+	
+	if ([self type] == ASIProxyAuthenticationType) {
+		[[self request] setProxyUsername:username];
+		[[self request] setProxyPassword:password];
+	} else {
+		[[self request] setUsername:username];
+		[[self request] setPassword:password];		
+	}
+	
+	// Handle NTLM domains
+	NSString *scheme = ([self type] == ASIStandardAuthenticationType) ? [[self request] authenticationScheme] : [[self request] proxyAuthenticationScheme];
+	if ([scheme isEqualToString:(NSString *)kCFHTTPAuthenticationSchemeNTLM]) {
+		NSString *domain = [[[[[[[self loginDialog] subviews] objectAtIndex:0] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:2]] subviews] objectAtIndex:2] text];
+		if ([self type] == ASIProxyAuthenticationType) {
+			[[self request] setProxyDomain:domain];
+		} else {
+			[[self request] setDomain:domain];
+		}
+	}
+	
+	[[self loginDialog] dismissWithClickedButtonIndex:1 animated:YES];
+	[[self request] retryUsingSuppliedCredentials];	
+}
+
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
+{
+	NSString *scheme = ([self type] == ASIStandardAuthenticationType) ? [[self request] authenticationScheme] : [[self request] proxyAuthenticationScheme];
+	if ([scheme isEqualToString:(NSString *)kCFHTTPAuthenticationSchemeNTLM]) {
+		return 3;
+	}
+	return 2;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
+{
+	if (section == [self numberOfSectionsInTableView:tableView]-1) {
+		return 30;
+	}
+	return 0;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
+{
+	if (section == 0) {
+		return 30;
+	}
+	return 0;
+}
+
+- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
+{
+	if (section == 0) {
+		return [[self request] authenticationRealm];
+	}
+	return nil;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_0
+	UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];
+#else
+	UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
+#endif
+
+	[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+	UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(20,12,260,25)] autorelease];
+	[textField setAutocapitalizationType:UITextAutocapitalizationTypeNone];
+	if ([indexPath section] == 0) {
+		[textField setPlaceholder:@"User"];
+	} else if ([indexPath section] == 1) {
+		[textField setPlaceholder:@"Password"];
+		[textField setSecureTextEntry:YES];
+	} else if ([indexPath section] == 2) {
+		[textField setPlaceholder:@"Domain"];
+	}	
+	[cell addSubview:textField];
+	
+	return cell;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
+{
+	return 1;
+}
+
+
+- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
+{
+	if (section == [self numberOfSectionsInTableView:tableView]-1) {
+		// If we're using Basic authentication and the connection is not using SSL, we'll show the plain text message
+		if ([[[self request] authenticationScheme] isEqualToString:(NSString *)kCFHTTPAuthenticationSchemeBasic] && ![[[[self request] url] scheme] isEqualToString:@"https"]) {
+			return @"Password will be sent in the clear.";
+		// We are using Digest, NTLM, or any scheme over SSL
+		} else {
+			return @"Password will be sent securely.";
+		}
+	}
+	return nil;
+}
+
+@synthesize request;
+@synthesize loginDialog;
+@synthesize type;
+@end

PhotobucketAPI/ASI/ASIFormDataRequest.h

+//
+//  ASIFormDataRequest.h
+//  asi-http-request
+//
+//  Created by Ben Copsey on 07/11/2008.
+//  Copyright 2008-2009 All-Seeing Interactive. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "OAuthASIHTTPRequest.h"
+
+typedef enum _ASIPostFormat {
+    ASIMultipartFormDataPostFormat = 0,
+    ASIURLEncodedPostFormat = 1
+	
+} ASIPostFormat;
+
+@interface ASIFormDataRequest : OAuthASIHTTPRequest {
+
+	// Parameters that will be POSTed to the url
+	NSMutableDictionary *postData;
+	
+	// Files that will be POSTed to the url
+	NSMutableDictionary *fileData;
+	
+	ASIPostFormat postFormat;
+	
+	NSStringEncoding stringEncoding;
+}
+
+#pragma mark utilities 
+- (NSString*)encodeURL:(NSString *)string; 
+ 
+#pragma mark setup request
+
+// Add a POST variable to the request
+- (void)setPostValue:(id <NSObject>)value forKey:(NSString *)key;
+
+// Add the contents of a local file to the request
+- (void)setFile:(NSString *)filePath forKey:(NSString *)key;
+
+// Same as above, but you can specify the content-type and file name
+- (void)setFile:(id)data withFileName:(NSString *)fileName andContentType:(NSString *)contentType forKey:(NSString *)key;
+
+// Add the contents of an NSData object to the request
+- (void)setData:(NSData *)data forKey:(NSString *)key;
+
+// Same as above, but you can specify the content-type and file name
+- (void)setData:(id)data withFileName:(NSString *)fileName andContentType:(NSString *)contentType forKey:(NSString *)key;
+
+
+@property (assign) ASIPostFormat postFormat;
+@property (assign) NSStringEncoding stringEncoding;
+@end

PhotobucketAPI/ASI/ASIFormDataRequest.m

+//
+//  ASIFormDataRequest.m
+//  asi-http-request
+//
+//  Created by Ben Copsey on 07/11/2008.
+//  Copyright 2008-2009 All-Seeing Interactive. All rights reserved.
+//
+
+#import "ASIFormDataRequest.h"
+#import <AssetsLibrary/AssetsLibrary.h>
+
+// Private stuff
+@interface ASIFormDataRequest ()
+- (void)buildMultipartFormDataPostBody;
+- (void)buildURLEncodedPostBody;
+@property (retain) NSMutableDictionary *postData;
+@property (retain) NSMutableDictionary *fileData;
+@end
+
+@implementation ASIFormDataRequest