<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>Classes/models/NTLNOAuthConsumer.h</filename>
    </added>
    <added>
      <filename>Classes/models/NTLNOAuthConsumer.m</filename>
    </added>
    <added>
      <filename>Classes/models/NTLNOAuthHttpClient.h</filename>
    </added>
    <added>
      <filename>Classes/models/NTLNOAuthHttpClient.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/Crypto/Base64Transcoder.c</filename>
    </added>
    <added>
      <filename>OAuthConsumer/Crypto/Base64Transcoder.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/Crypto/hmac.c</filename>
    </added>
    <added>
      <filename>OAuthConsumer/Crypto/hmac.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/Crypto/sha1.c</filename>
    </added>
    <added>
      <filename>OAuthConsumer/Crypto/sha1.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/English.lproj/InfoPlist.strings</filename>
    </added>
    <added>
      <filename>OAuthConsumer/Info.plist</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSMutableURLRequest+Parameters.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSMutableURLRequest+Parameters.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSMutableURLRequest+ParametersTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSMutableURLRequest+ParametersTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSString+URLEncoding.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSString+URLEncoding.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSString+URLEncodingTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSString+URLEncodingTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSURL+Base.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSURL+Base.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSURL+BaseTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/NSURL+BaseTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAAsynchronousDataFetcher.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAAsynchronousDataFetcher.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAConsumer.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAConsumer.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAConsumerTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAConsumerTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OADataFetcher.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OADataFetcher.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OADataFetcherTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OADataFetcherTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAHMAC_SHA1SignatureProvider.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAHMAC_SHA1SignatureProvider.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAHMAC_SHA1SignatureProviderTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAHMAC_SHA1SignatureProviderTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAMutableURLRequest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAMutableURLRequest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAMutableURLRequestTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAMutableURLRequestTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAPlaintextSignatureProvider.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAPlaintextSignatureProvider.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAPlaintextSignatureProviderTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAPlaintextSignatureProviderTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OARequestParameter.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OARequestParameter.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OARequestParameterTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OARequestParameterTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAServiceTicket.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAServiceTicket.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OASignatureProviding.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OATestServer.rb</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAToken.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAToken.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OATokenTest.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OATokenTest.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAToken_KeychainExtensions.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAToken_KeychainExtensions.m</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAuthConsumer.h</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAuthConsumer.xcodeproj/jon.pbxuser</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAuthConsumer.xcodeproj/project.pbxproj</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAuthConsumerTestSuite-Info.plist</filename>
    </added>
    <added>
      <filename>OAuthConsumer/OAuthConsumer_Prefix.pch</filename>
    </added>
    <added>
      <filename>README.md</filename>
    </added>
    <added>
      <filename>resources/icons/browser_icons_01.png</filename>
    </added>
    <added>
      <filename>resources/icons/browser_icons_03.png</filename>
    </added>
    <added>
      <filename>resources/icons/browser_icons_05.png</filename>
    </added>
    <added>
      <filename>twitter_apikeys_sample.h</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -32,9 +32,9 @@
 @property (nonatomic, retain) UITabBarController *tabBarController;
 @property (readonly) BOOL applicationActive;
 
-- (NTLNBrowserViewController*)browserViewController;
-- (void)presentTwitterAccountSettingView;
 - (BOOL)isInMoreTab:(UIViewController*)vc;
 
+- (void)resetAllTimelinesAndCache;
+
 @end
 </diff>
      <filename>Classes/NTLNAppDelegate.h</filename>
    </modified>
    <modified>
      <diff>@@ -7,12 +7,14 @@
 #import &quot;NTLNUnreadsViewController.h&quot;
 #import &quot;NTLNSettingViewController.h&quot;
 #import &quot;NTLNCacheCleaner.h&quot;
-#import &quot;NTLNTwitterAccountViewController.h&quot;
 #import &quot;NTLNFavoriteViewController.h&quot;
 #import &quot;NTLNDirectMessageViewController.h&quot;
 #import &quot;NTLNRateLimit.h&quot;
 #import &quot;GTMRegex.h&quot;
 #import &quot;NTLNTwitterPost.h&quot;
+#import &quot;NTLNOAuthConsumer.h&quot;
+#import &quot;OAToken.h&quot;
+#import &quot;NTLNConfigurationKeys.h&quot;
 
 @implementation NTLNAppDelegate
 
@@ -126,22 +128,16 @@
 
 - (void)startup {
 	[self createViews];
-	
-	NSString *user_id = [[NTLNAccount instance] userId];
-	if (user_id == nil || [user_id length] == 0) {
-		[[NTLNAccount instance] getUserId];
-	}
-	
+		
 	window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 	[window addSubview:tabBarController.view];
 	[window makeKeyAndVisible];
 	
-
-	if (![[NTLNAccount instance] valid]) {		
-		[self presentTwitterAccountSettingView];
+	if (! [[NTLNAccount sharedInstance] waitForOAuthCallback] &amp;&amp; 
+		! [[NTLNAccount sharedInstance] valid]) {
+		[[NTLNOAuthConsumer sharedInstance] requestToken:tabBarController];
 	}
-	
-	applicationActive = TRUE;
+	applicationActive = YES;
 }
 
 - (void)applicationDidFinishLaunching:(UIApplication *)application {
@@ -162,11 +158,13 @@
 																				 CFSTR(&quot;&quot;),
 																				 kCFStringEncodingUTF8);
 		[[NTLNTwitterPost shardInstance] updateText:text];
+	} else if ([[NTLNOAuthConsumer sharedInstance] isCallbackURL:url]) {
+		[[NTLNOAuthConsumer sharedInstance] accessToken:url];
+		[[NTLNAccount sharedInstance] setWaitForOAuthCallback:NO];
 	}
 	return YES;
 }
 
-
 - (void)cacheCleanerAlertClosed {
 	[self startup];
 }
@@ -219,15 +217,6 @@
 	[[NTLNCacheCleaner sharedCacheCleaner] shutdown];
 }
 
-- (void)presentTwitterAccountSettingView {
-	UITableViewController *vc = [[[NTLNTwitterAccountViewController alloc] 
-								  initWithStyle:UITableViewStyleGrouped] autorelease];
-	UINavigationController *nc = [[[UINavigationController alloc] 
-								   initWithRootViewController:vc] autorelease];
-	[nc.navigationBar setBarStyle:UIBarStyleBlackOpaque];
-	[tabBarController presentModalViewController:nc animated:YES];
-}
-
 - (BOOL)isInMoreTab:(UIViewController*)vc {
 	int cnt = 0;
 	for (UINavigationController *v in tabBarController.viewControllers) {
@@ -243,4 +232,12 @@
 	return YES;
 }
 
+- (void)resetAllTimelinesAndCache {
+	[replysViewController.timeline clearAndRemoveCache];
+	[directMessageViewController.timeline clearAndRemoveCache];
+	[friendsViewController.timeline clearAndRemoveCache];
+	[sentsViewController.timeline clearAndRemoveCache];
+	[favoriteViewController.timeline clearAndRemoveCache];
+}
+
 @end</diff>
      <filename>Classes/NTLNAppDelegate.m</filename>
    </modified>
    <modified>
      <diff>@@ -7,6 +7,15 @@
 	NTLNWebView *webView;
 	UIToolbar *toobarTop;
 	UIToolbar *toobarBottom;
+
+	BOOL loading;
+	
+	UIBarButtonItem *title;
+	UIBarButtonItem *reloadButton;
+	UIBarButtonItem *prevButton;
+	UIBarButtonItem *nextButton;
+
+	NSMutableArray *toobarTopItems;
 }
 
 @property (readwrite, retain) NSString *url;</diff>
      <filename>Classes/NTLNBrowserViewController.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,140 +5,214 @@
 #import &quot;NTLNTwitterPost.h&quot;
 #import &quot;NTLNTweetPostViewController.h&quot;
 
+@interface NTLNBrowserViewController(Private)
+- (void)setupToolbarTop;
+- (void)setupToolbarBottom;
+- (void)updatePrevNextButton;
+- (void)updateReloadButton;
+
+- (void)reloadButtonPushed:(id)sender;
+- (void)doneButtonPushed:(id)sender;
+- (void)prevButtonPushed:(id)sender;
+- (void)nextButtonPushed:(id)sender;
+- (void)safariButtonPushed:(id)sender;
+- (void)tweetURLButtonPushed:(id)sender;
+										
+@end
+
 @implementation NTLNBrowserViewController
 
 @synthesize url;
 
+- (void)loadView {  
+	self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+	
+	toobarTop = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
+	toobarTop.barStyle = UIBarStyleBlackOpaque;
+	[self setupToolbarTop];
+	[self.view addSubview:toobarTop];
+	
+	
+	webView = [NTLNWebView sharedInstance];
+	webView.frame = CGRectMake(0, 44, 320, 480-44-44);
+	[self.view addSubview:webView];
+	
+	toobarBottom = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 480-44-20, 320, 44)];
+	toobarBottom.barStyle = UIBarStyleBlackOpaque;
+	[self setupToolbarBottom];
+	[self.view addSubview:toobarBottom];
+}
+
+- (void)viewDidDisappear:(BOOL)animated {
+	///	self.view = nil;
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+	webView.delegate = nil;
+}
+
+- (void)viewWillAppear:(BOOL)animated {	
+	webView.delegate = self;
+	[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
+}
+
 - (void)dealloc {
 	LOG(@&quot;NTLNBrowserViewController#dealloc&quot;);
-
+	
 	[url release];
 	[toobarTop release];
 	[toobarBottom release];
+	
+	[reloadButton release];
+	[title release];
+	[prevButton release];
+	[nextButton release];
+	
+	[toobarTopItems release];
+	
 	[self.view release];
 	[super dealloc];
 }
 
-- (void)reloadButtonPushed:(id)sender {
-	[webView reload];
-}
+#pragma mark UIWebView delegate methods
 
-- (void)doneButtonPushed:(id)sender {
-	[webView stopLoading];
-	[webView loadHTMLString:@&quot;&quot; baseURL:nil];
-	[self dismissModalViewControllerAnimated:YES];
+- (void)webViewDidStartLoad:(UIWebView *)aWebView {
+	loading = YES;
+	[self updateReloadButton];
+	[self updatePrevNextButton];
 }
 
-- (void)prevButtonPushed:(id)sender {
-	[webView goBack];
+- (void)webViewDidFinishLoad:(UIWebView *)aWebView {
+	loading = NO;
+	title.title = [webView stringByEvaluatingJavaScriptFromString:@&quot;document.title&quot;];
+	[self updateReloadButton];
+	[self updatePrevNextButton];
 }
 
-- (void)nextButtonPushed:(id)sender {
-	[webView goForward];
+- (void)webView:(UIWebView *)aWebView didFailLoadWithError:(NSError *)error {
+	if (error.code != -999) {
+		[[NTLNAlert instance] alert:@&quot;Browser error&quot; withMessage:error.localizedDescription];
+	}
 }
 
-- (void)safariButtonPushed:(id)sender {
-	[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
+- (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request 
+ navigationType:(UIWebViewNavigationType)navigationType {
+	NSString *scheme = request.mainDocumentURL.scheme;
+	if ([scheme isEqualToString:@&quot;http&quot;] || [scheme isEqualToString:@&quot;https&quot;]) {
+		title.title = request.mainDocumentURL.description;
+		return YES;
+	} else {
+		[[UIApplication sharedApplication] openURL:request.URL];
+	}
+	return NO;
 }
 
-- (void)tweetURLButtonPushed:(id)sender {
-	[[NTLNTwitterPost shardInstance] updateText:[[[webView request] URL] absoluteString]];
-	[NTLNTweetPostViewController present:self];
-}
+#pragma mark Private
 
 - (void)setupToolbarTop {
-	UIBarButtonItem *doneButton = [[[UIBarButtonItem alloc] initWithTitle:@&quot;done&quot; 
-																   style:UIBarButtonItemStyleBordered 
-																  target:self		
+	UIBarButtonItem *doneButton = [[[UIBarButtonItem alloc] initWithTitle:@&quot;close&quot; 
+																	style:UIBarButtonItemStyleBordered 
+																   target:self		
 																   action:@selector(doneButtonPushed:)] autorelease];
 	
-	UIBarButtonItem *reloadButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
-																				  target:self 
-																				   action:@selector(reloadButtonPushed:)] autorelease];
-	[toobarTop setItems:[NSArray arrayWithObjects:doneButton, reloadButton, nil]];
+	[self updateReloadButton];
+	
+	title =	[[UIBarButtonItem alloc] initWithTitle:@&quot;&quot; 
+											 style:UIBarButtonItemStylePlain
+											target:nil 
+											action:nil];
+	title.width = 220;
+	
+	UIBarButtonItem *spacer = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
+																			 target:nil action:nil] autorelease];
+	
+	toobarTopItems = [[NSMutableArray arrayWithObjects:doneButton, spacer, title, spacer, reloadButton, nil] retain];
+	[toobarTop setItems:toobarTopItems];
 }
 
 - (void)setupToolbarBottom {
-	UIBarButtonItem *prevButton = [[[UIBarButtonItem alloc] initWithTitle:@&quot;prev&quot; 
-																	style:UIBarButtonItemStyleBordered 
-																   target:self		
-																   action:@selector(prevButtonPushed:)] autorelease];
 
-	UIBarButtonItem *nextButton = [[[UIBarButtonItem alloc] initWithTitle:@&quot;next&quot; 
-																	style:UIBarButtonItemStyleBordered 
-																   target:self		
-																   action:@selector(nextButtonPushed:)] autorelease];
-
-	UIBarButtonItem *safariButton = [[[UIBarButtonItem alloc] initWithTitle:@&quot;safari&quot; 
-																	style:UIBarButtonItemStyleBordered 
-																   target:self		
-																   action:@selector(safariButtonPushed:)] autorelease];
-
-	UIBarButtonItem *tweetURLButton = [[[UIBarButtonItem alloc] initWithTitle:@&quot;TwURL&quot; 
-																	  style:UIBarButtonItemStyleBordered 
+	
+	prevButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@&quot;browser_icons_01.png&quot;]
+												  style:UIBarButtonItemStylePlain 
+												 target:self		
+												 action:@selector(prevButtonPushed:)];
+	prevButton.enabled = NO;
+	
+	nextButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@&quot;browser_icons_03.png&quot;] 
+												  style:UIBarButtonItemStylePlain 
+												 target:self		
+												 action:@selector(nextButtonPushed:)];
+	nextButton.enabled = NO;
+	
+	UIBarButtonItem *safariButton = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@&quot;browser_icons_05.png&quot;]
+																	  style:UIBarButtonItemStylePlain 
 																	 target:self		
-																	 action:@selector(tweetURLButtonPushed:)] autorelease];
-
-	[toobarBottom setItems:[NSArray arrayWithObjects:prevButton, nextButton, tweetURLButton, safariButton, nil]];
-}
-
-- (void)loadView {  
-	self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
-
-	toobarTop = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
-	toobarTop.barStyle = UIBarStyleBlack;
-	[self setupToolbarTop];
-	[self.view addSubview:toobarTop];
+																	 action:@selector(safariButtonPushed:)] autorelease];
 	
-
-	webView = [NTLNWebView sharedInstance];
-	webView.frame = CGRectMake(0, 44, 320, 480-44-44);
-	[self.view addSubview:webView];
-
-	toobarBottom = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 480-44-20, 320, 44)];
-	toobarBottom.barStyle = UIBarStyleBlack;
-	[self setupToolbarBottom];
-	[self.view addSubview:toobarBottom];
+	UIBarButtonItem *tweetURLButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose 
+																					 target:self 
+																					 action:@selector(tweetURLButtonPushed:)] autorelease];
 	
+	UIBarButtonItem *spacer = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
+																			 target:nil action:nil] autorelease];
+	
+	[toobarBottom setItems:[NSArray arrayWithObjects:prevButton, spacer, nextButton, spacer, tweetURLButton, spacer, safariButton, nil]];
 }
 
-- (void)viewDidDisappear:(BOOL)animated {
-///	self.view = nil;
+- (void)reloadButtonPushed:(id)sender {
+	if (loading) {
+		[webView stopLoading];
+	} else {
+		[webView reload];
+	}
 }
 
-- (void)viewWillDisappear:(BOOL)animated {
-	webView.delegate = nil;
+- (void)doneButtonPushed:(id)sender {
+	[webView stopLoading];
+	[webView loadHTMLString:@&quot;&quot; baseURL:nil];
+	[self dismissModalViewControllerAnimated:YES];
 }
 
-- (void)viewWillAppear:(BOOL)animated {
-//	[self.navigationItem setTitle:@&quot;Copyright Notice&quot;];
-	
-	webView.delegate = self;
-	[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
+- (void)prevButtonPushed:(id)sender {
+	[webView goBack];
 }
 
-#pragma mark UIWebView delegate methods
+- (void)nextButtonPushed:(id)sender {
+	[webView goForward];
+}
 
-- (void)webViewDidStartLoad:(UIWebView *)webView {
+- (void)safariButtonPushed:(id)sender {
+	[[UIApplication sharedApplication] openURL:[[webView request] mainDocumentURL]];
 }
 
-- (void)webViewDidFinishLoad:(UIWebView *)webView {
+- (void)tweetURLButtonPushed:(id)sender {
+	[[NTLNTwitterPost shardInstance] updateText:[[[webView request] mainDocumentURL] absoluteString]];
+	[NTLNTweetPostViewController present:self];
 }
 
-- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
-//	if (shown &amp;&amp; error.code != -999) {
-//		[[NTLNAlert instance] alert:@&quot;Browser error&quot; withMessage:error.localizedDescription];
-//	}
+- (void)updatePrevNextButton {
+	prevButton.enabled = [webView canGoBack];
+	nextButton.enabled = [webView canGoForward];
 }
 
-- (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
-	NSString *scheme = request.URL.scheme;
-	if ([scheme isEqualToString:@&quot;http&quot;] || [scheme isEqualToString:@&quot;https&quot;]) {
-		return YES;
+- (void)updateReloadButton {
+	UIBarButtonSystemItem item;
+	if (loading) {
+		item = UIBarButtonSystemItemStop;
 	} else {
-		[[UIApplication sharedApplication] openURL:request.URL];
+		item = UIBarButtonSystemItemRefresh;
+	}
+	
+	[reloadButton release];
+	reloadButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:item
+																 target:self 
+																 action:@selector(reloadButtonPushed:)];
+	
+	if (toobarTop.items.count &gt; 0) {
+		[toobarTopItems replaceObjectAtIndex:4 withObject:reloadButton];
+		[toobarTop setItems:toobarTopItems];
 	}
-	return NO;
 }
 
 @end</diff>
      <filename>Classes/NTLNBrowserViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,6 @@
 #import &quot;NTLNAccount.h&quot;
 #import &quot;NTLNConfiguration.h&quot;
 #import &quot;NTLNCache.h&quot;
-#import &quot;NTLNTwitterXMLReader.h&quot;
 #import &quot;NTLNTwitterClient.h&quot;
 #import &quot;NTLNHttpClientPool.h&quot;
 </diff>
      <filename>Classes/NTLNDirectMessageViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -27,7 +27,7 @@
 
 	[screenNameInternal release];
 	if (screenName == nil) {
-		screenNameInternal = [[[NTLNAccount instance] username] retain];
+		screenNameInternal = [[[NTLNAccount sharedInstance] screenName] retain];
 		[self.navigationItem setTitle:@&quot;Favorites&quot;];
 	} else {
 		screenNameInternal = [screenName retain];</diff>
      <filename>Classes/NTLNFavoriteViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,5 @@
 #import &quot;NTLNLinkViewController.h&quot;
 #import &quot;NTLNMessage.h&quot;
-#import &quot;NTLNURLUtils.h&quot;
 #import &quot;NTLNBrowserViewController.h&quot;
 #import &quot;NTLNFriendsViewController.h&quot;
 #import &quot;NTLNTweetPostViewController.h&quot;
@@ -20,6 +19,7 @@
 #import &quot;NTLNConversationViewController.h&quot;
 #import &quot;NTLNImages.h&quot;
 #import &quot;NTLNHttpClientPool.h&quot;
+#import &quot;GTMRegex.h&quot;
 
 #define TEXT_FONT_SIZE	16.0
 
@@ -201,7 +201,7 @@
 //		[[self navigationController] pushViewController:browser animated:YES];
 		
 //		[self tabBarController].modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
-		browser.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
+//		browser.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
 		[[self tabBarController] presentModalViewController:browser animated:YES]; 
 	}
 }
@@ -404,26 +404,41 @@
 }
 
 - (void)parseToken {
-	NTLNURLUtils *utils = [NTLNURLUtils utils];
-    NSArray *tokens = [utils tokenizeByAll:message.text];
-	int i;
-    for (i = 0; i &lt; [tokens count]; i++) {
-        NSString *token = [tokens objectAtIndex:i];
-        if ([utils isURLToken:token]) {
-			NTLNURLPair *pair = [[NTLNURLPair alloc] init];
-			pair.text = token;
-			pair.url = token;
-			[links addObject:pair];
-			[pair release];
-		} else if ([utils isIDToken:token] &amp;&amp; 
-				   ! [message.screenName isEqualToString:[token substringFromIndex:1]]) {
-			NTLNURLPair *pair = [[NTLNURLPair alloc] init];
-			pair.text = [NSString stringWithFormat:@&quot;%@ + %@&quot;, message.screenName, [token substringFromIndex:1]];
-			pair.screenName = [token substringFromIndex:1];
-			[links addObject:pair];
-			[pair release];
-        }
-    }
+	NSString *text = message.text;
+	NSArray *a;
+
+	a = [text gtm_allSubstringsMatchedByPattern:@&quot;@[[:alnum:]_]+&quot;];
+	for (NSString *s in a) {
+		NTLNURLPair *pair = [[NTLNURLPair alloc] init];
+		pair.text = [NSString stringWithFormat:@&quot;%@ + %@&quot;, message.screenName, [s substringFromIndex:1]];
+		pair.screenName = [s substringFromIndex:1];
+		[links addObject:pair];
+		[pair release];
+	}
+
+	a = [text gtm_allSubstringsMatchedByPattern:@&quot;http:\\/\\/[^[:space:]]+&quot;];
+	for (NSString *s in a) {
+		NTLNURLPair *pair = [[NTLNURLPair alloc] init];
+		pair.text = s;
+		pair.url = s;
+		[links addObject:pair];
+		[pair release];
+	}
+
+	a = [text gtm_allSubstringsMatchedByPattern:@&quot;https:\\/\\/[^[:space:]]+&quot;];
+	for (NSString *s in a) {
+		NTLNURLPair *pair = [[NTLNURLPair alloc] init];
+		pair.text = s;
+		pair.url = s;
+		[links addObject:pair];
+		[pair release];
+	}
+/*
+	a = [text gtm_allSubstringsMatchedByPattern:@&quot;#[^[:space:]]+&quot;];
+	for (NSString *s in a) {
+		NSLog(@&quot;hashtags: %@&quot;, s);
+	}
+*/	
 }
 
 - (void)twitterClientSucceeded:(NTLNTwitterClient*)sender messages:(NSArray*)messages {</diff>
      <filename>Classes/NTLNLinkViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,6 @@
 #import &quot;NTLNAccount.h&quot;
 #import &quot;NTLNConfiguration.h&quot;
 #import &quot;NTLNCache.h&quot;
-#import &quot;NTLNTwitterXMLReader.h&quot;
 #import &quot;NTLNTwitterClient.h&quot;
 #import &quot;NTLNFriendsViewController.h&quot;
 #import &quot;NTLNHttpClientPool.h&quot;</diff>
      <filename>Classes/NTLNReplysViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -56,10 +56,18 @@
 	if (imageRef) {
 		CGImageRelease(imageRef);
 	}
+
 	imageRef = NULL;
-	if ([image isKindOfClass:[UIImage class]]) {
-		imageRef = CGImageRetain([image CGImage]);
+
+	@try {
+		if ([image isKindOfClass:[UIImage class]]) {
+			imageRef = CGImageRetain([image CGImage]);
+		}
 	}
+	@catch (NSException *exception) {
+		imageRef = NULL;
+	}
+	
 	[self setNeedsDisplay];
 }
 </diff>
      <filename>Classes/NTLNRoundedIconView.m</filename>
    </modified>
    <modified>
      <diff>@@ -5,9 +5,9 @@
 #import &quot;NTLNConfiguration.h&quot;
 #import &quot;NTLNColors.h&quot;
 #import &quot;NTLNAccelerometerSensor.h&quot;
-#import &quot;NTLNTwitterAccountViewController.h&quot;
 #import &quot;NTLNAppDelegate.h&quot;
 #import &quot;NTLNFooterSettingViewController.h&quot;
+#import &quot;NTLNOAuthConsumer.h&quot;
 
 @interface NTLNSettingViewController(Private)
 - (void)setupPrototypes;
@@ -122,7 +122,8 @@
 
 	// for &quot;Twitter account&quot; cell
 	if ([indexPath section] == 0 &amp;&amp; [indexPath row] == 0) {
-		[(NTLNAppDelegate*)[UIApplication sharedApplication].delegate presentTwitterAccountSettingView];
+
+		[[NTLNOAuthConsumer sharedInstance] requestToken:self.tabBarController];
 	}
 	
 	// for &quot;Footer&quot; cell</diff>
      <filename>Classes/NTLNSettingViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -42,6 +42,7 @@
 - (void)disactivate;
 - (void)clear;
 - (void)prefetch;
+- (void)clearAndRemoveCache;
 
 - (void)getTimelineWithPage:(int)page autoload:(BOOL)autoload;
 </diff>
      <filename>Classes/NTLNTimeline.h</filename>
    </modified>
    <modified>
      <diff>@@ -114,6 +114,14 @@ static int compareStatus(NTLNStatus *a, NTLNStatus *b, void *ptr);
 	}
 }
 
+- (void)clearAndRemoveCache {
+	[self clear];
+	if (archiverCachePath) {
+		NSMutableArray *statuses = [NSMutableArray array];
+		[NSKeyedArchiver archiveRootObject:statuses toFile:archiverCachePath];
+	}
+}
+
 #pragma mark Archive(Private)
 
 - (void)loadArchive {
@@ -283,7 +291,7 @@ static int compareStatus(NTLNStatus *a, NTLNStatus *b, void *ptr)
 #pragma mark Private
 
 - (void)getTimelineWithPage:(int)page autoload:(BOOL)autoload {
-	if (activeTwitterClient == nil &amp;&amp; [[NTLNAccount instance] valid]) {
+	if (activeTwitterClient == nil &amp;&amp; [[NTLNAccount sharedInstance] valid]) {
 		[self stopTimer];
 		NSDate *now = [NSDate date];
 		BOOL got = NO;</diff>
      <filename>Classes/NTLNTimeline.m</filename>
    </modified>
    <modified>
      <diff>@@ -121,7 +121,7 @@ static NTLNTweetPostViewController *_tweetViewController;
 
 - (void)setMaxTextLength {
 	maxTextLength = 140;
-	NSString *footer = [[NTLNAccount instance] footer];
+	NSString *footer = [[NTLNAccount sharedInstance] footer];
 	if (footer &amp;&amp; [footer length] &gt; 0 &amp;&amp; 
 		! [[NTLNTwitterPost shardInstance] isDirectMessage]) {
 		maxTextLength -= [footer length] + 1;</diff>
      <filename>Classes/NTLNTweetPostViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -1,23 +1,25 @@
-#import &lt;UIKit/UIKit.h&gt;
-#import &quot;NTLNTwitterUserClient.h&quot;
+#import &lt;Foundation/Foundation.h&gt;
+#import &quot;OAToken.h&quot;
 
-@interface NTLNAccount : NSObject&lt;NTLNTwitterUserClientDelegate&gt; {
+@interface NTLNAccount : NSObject {
+	OAToken *userToken;
+	NSString *screenName;
 }
 
-+ (id) instance;
-+ (id) newInstance;
++ (NTLNAccount*)sharedInstance;
 
-- (NSString*)username;
-- (NSString*)password;
-- (NSString*)userId;
-- (NSString*)footer;
+- (BOOL)valid;
+
+- (void)setScreenName:(NSString*)screenName;
+- (NSString*)screenName;
 
-- (void)setUsername:(NSString*)username;
-- (void)setPassword:(NSString*)password;
-	
-- (BOOL) valid;
+- (OAToken*)userToken;
+- (void)setUserToken:(OAToken*)token;
 
-- (void)getUserId;
+- (BOOL)waitForOAuthCallback;
+- (void)setWaitForOAuthCallback:(BOOL)wait;
+
+- (NSString*)footer;
 
 @end
 </diff>
      <filename>Classes/models/NTLNAccount.h</filename>
    </modified>
    <modified>
      <diff>@@ -1,86 +1,66 @@
 #import &quot;NTLNAccount.h&quot;
 #import &quot;NTLNConfigurationKeys.h&quot;
-#import &quot;NTLNHttpClientPool.h&quot;
-
-static NTLNAccount *_instance;
+#import &quot;GTMObjectSingleton.h&quot;
 
 @implementation NTLNAccount
 
-+ (id) instance {
-    if (!_instance) {
-        return [NTLNAccount newInstance];
-    }
-    return _instance;
-}
+GTMOBJECT_SINGLETON_BOILERPLATE(NTLNAccount, sharedInstance)
 
-+ (id) newInstance {
-    if (_instance) {
-        [_instance release];
-        _instance = nil;
-    }
-    
-    _instance = [[NTLNAccount alloc] init];
-    return _instance;
+- (id)init {
+	if (self = [super init]) {
+		userToken = [[OAToken alloc] initWithUserDefaultsUsingServiceProviderName:NTLN_OAUTH_PROVIDER 
+																		   prefix:NTLN_OAUTH_PREFIX];
+		screenName = [[[NSUserDefaults standardUserDefaults] stringForKey:NTLN_PREFERENCE_USERID] retain];
+	}
+	return self;
 }
 
 - (void) dealloc {
+	[userToken release];
+	[screenName release];
     [super dealloc];
 }
 
-- (void)setUsername:(NSString*)username {
-    [[NSUserDefaults standardUserDefaults] setObject:username forKey:NTLN_PREFERENCE_USERID];
-    [[NSUserDefaults standardUserDefaults] synchronize];
-}
-
-- (void)setPassword:(NSString*)password {
-    [[NSUserDefaults standardUserDefaults] setObject:password forKey:NTLN_PREFERENCE_PASSWORD];
-    [[NSUserDefaults standardUserDefaults] synchronize];
-}
-
-- (void)setUserId:(NSString*)user_id {
-    [[NSUserDefaults standardUserDefaults] setObject:user_id forKey:NTLN_PREFERENCE_TWITTER_USERID];
+- (void)setScreenName:(NSString*)sn {
+	[screenName release];
+	screenName = [sn retain];
+    [[NSUserDefaults standardUserDefaults] setObject:screenName forKey:NTLN_PREFERENCE_USERID];
     [[NSUserDefaults standardUserDefaults] synchronize];
 }
 
-- (NSString*) username {
-	return [[NSUserDefaults standardUserDefaults] stringForKey:NTLN_PREFERENCE_USERID];
-}
-
-- (NSString*) password {
-	return [[NSUserDefaults standardUserDefaults] stringForKey:NTLN_PREFERENCE_PASSWORD];
-}
-
-- (NSString*) userId {
-	return [[NSUserDefaults standardUserDefaults] stringForKey:NTLN_PREFERENCE_TWITTER_USERID];
+- (NSString*)screenName {
+	return screenName;
 }
 
 - (NSString*)footer {
 	return [[NSUserDefaults standardUserDefaults] stringForKey:NTLN_PREFERENCE_FOOTER];
 }
 
-- (BOOL) valid {
-	NSString *pwd = self.password;
-	NSString *usn = self.username;
-	return usn != nil &amp;&amp; usn.length &gt; 0 &amp;&amp;
-			pwd != nil &amp;&amp; pwd.length &gt; 0;
+- (BOOL)valid {
+	return screenName.length &gt; 0 &amp;&amp;
+	userToken &amp;&amp; 
+	userToken.key.length &gt; 0 &amp;&amp;
+	userToken.secret.length &gt; 0;
 }
 
-- (void)getUserId {
-	
-	NTLNTwitterUserClient *c = [[NTLNHttpClientPool sharedInstance] idleClientWithType:NTLNHttpClientPoolClientType_TwitterUserClient];
-	c.delegate = self;
-	[c getUserInfoForScreenName:[self username]];
+- (OAToken*)userToken {
+	return userToken;
 }
 
-- (void)twitterUserClientSucceeded:(NTLNTwitterUserClient*)sender {
-	if ([sender.users count] &gt; 0) {
-		NTLNUser *user = [sender.users objectAtIndex:0];
-		[self setUserId:user.user_id];
-	}	
+- (void)setUserToken:(OAToken*)token {
+	[userToken release];
+	userToken = [token retain];
+	[userToken storeInUserDefaultsWithServiceProviderName:NTLN_OAUTH_PROVIDER 
+												   prefix:NTLN_OAUTH_PREFIX];
 }
 
-- (void)twitterUserClientFailed:(NTLNTwitterUserClient*)sender {
+- (BOOL)waitForOAuthCallback {
+	return [[NSUserDefaults standardUserDefaults] boolForKey:NTLN_OAUTH_WAIT_FOR_CALLBACK];
 }
 
+- (void)setWaitForOAuthCallback:(BOOL)wait {
+	[[NSUserDefaults standardUserDefaults] setBool:wait forKey:NTLN_OAUTH_WAIT_FOR_CALLBACK];
+    [[NSUserDefaults standardUserDefaults] synchronize];
+}
 
 @end</diff>
      <filename>Classes/models/NTLNAccount.m</filename>
    </modified>
    <modified>
      <diff>@@ -12,4 +12,9 @@
 
 #define NTLN_PREFERENCE_FOOTER					@&quot;footer&quot;
 
-#define NTLN_PREFERENCE_LEFTHAND				@&quot;lefthand&quot;
\ No newline at end of file
+#define NTLN_PREFERENCE_LEFTHAND				@&quot;lefthand&quot;
+
+#define NTLN_OAUTH_PROVIDER						@&quot;twitter.com&quot;
+#define NTLN_OAUTH_PREFIX						@&quot;NatsuLion&quot;
+
+#define NTLN_OAUTH_WAIT_FOR_CALLBACK			@&quot;oAuthWaitForCallback&quot;</diff>
      <filename>Classes/models/NTLNConfigurationKeys.h</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,7 @@
 #import &lt;UIKit/UIKit.h&gt;
 
+#define TIMEOUT_SEC		20.0
+
 @interface NTLNHttpClient : NSObject {
     NSURLConnection *connection;
     NSMutableData *recievedData;
@@ -12,9 +14,7 @@
 }
 
 - (void)requestGET:(NSString*)url;
-- (void)requestGET:(NSString*)url username:(NSString*)username password:(NSString*)password;
-//- (void)requestPOST:(NSString*)url body:(NSString*)body;
-- (void)requestPOST:(NSString*)url body:(NSString*)body username:(NSString*)username password:(NSString*)password;
+- (void)requestPOST:(NSString*)url body:(NSString*)body;
 - (void)cancel;
 
 - (void)requestSucceeded;</diff>
      <filename>Classes/models/NTLNHttpClient.h</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,5 @@
 #import &quot;NTLNHttpClient.h&quot;
 
-
-#define TIMEOUT_SEC		20.0
-
 @implementation NTLNHttpClient
 
 @synthesize recievedData, statusCode;
@@ -79,13 +76,6 @@
 	return request;
 }
 
-- (NSMutableURLRequest*)makeRequest:(NSString*)url username:(NSString*)username password:(NSString*)password {
-	NSMutableURLRequest *request = [self makeRequest:url];
-	[request setValue:[NTLNHttpClient stringOfAuthorizationHeaderWithUsername:username password:password]
-		forHTTPHeaderField:@&quot;Authorization&quot;];
-	return request;
-}
-
 - (void)reset {
 	[recievedData release];
 	recievedData = [[NSMutableData alloc] init];
@@ -101,25 +91,25 @@
 	rate_limit_remaining = 0;
 }
 
-- (void)requestGET:(NSString*)url {
-	[self reset];
-	NSMutableURLRequest *request = [self makeRequest:url];
-	connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
+- (void)prepareWithRequest:(NSMutableURLRequest*)request {
+	// do nothing (for OAuthHttpClient)
 }
 
-- (void)requestGET:(NSString*)url username:(NSString*)username password:(NSString*)password {
+- (void)requestGET:(NSString*)url {
 	[self reset];
-	NSMutableURLRequest *request = [self makeRequest:url username:username password:password];
+	NSMutableURLRequest *request = [self makeRequest:url];
+	[self prepareWithRequest:request];
 	connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
 }
 
-- (void)requestPOST:(NSString*)url body:(NSString*)body username:(NSString*)username password:(NSString*)password {
+- (void)requestPOST:(NSString*)url body:(NSString*)body {
 	[self reset];
-	NSMutableURLRequest *request = [self makeRequest:url username:username password:password];
+	NSMutableURLRequest *request = [self makeRequest:url];
     [request setHTTPMethod:@&quot;POST&quot;];
 	if (body) {
 		[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
 	}
+	[self prepareWithRequest:request];
 	connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
 }
 </diff>
      <filename>Classes/models/NTLNHttpClient.m</filename>
    </modified>
    <modified>
      <diff>@@ -65,6 +65,10 @@ GTMOBJECT_SINGLETON_BOILERPLATE(NTLNHttpClientPool, sharedInstance)
 	return ret;
 }
 
+- (void)hideNetworkActivityIndicator {
+	[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
+}
+
 - (void)releaseClient:(id)client {
 	@synchronized (self) {
 		[clientsIdle addObject:client];
@@ -73,7 +77,12 @@ GTMOBJECT_SINGLETON_BOILERPLATE(NTLNHttpClientPool, sharedInstance)
 			  [[client class] description], clientsIdle.count, clientsActive.count);
 
 		if (clientsActive.count == 0) {
-			[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
+			[NSObject cancelPreviousPerformRequestsWithTarget:self 
+													 selector:@selector(hideNetworkActivityIndicator) 
+													   object:nil];
+			[self performSelector:@selector(hideNetworkActivityIndicator) 
+					   withObject:nil 
+					   afterDelay:0.3];
 		}
 		
 		NSNotification *notification = [NSNotification notificationWithName:IDLE_CLIENT_NOTIFICATION</diff>
      <filename>Classes/models/NTLNHttpClientPool.m</filename>
    </modified>
    <modified>
      <diff>@@ -85,14 +85,14 @@
 }
 
 - (BOOL) isReplyToMe {
-    if ([text hasPrefix:[@&quot;@&quot; stringByAppendingString:[[NTLNAccount instance] username]]]) {
+    if ([text hasPrefix:[@&quot;@&quot; stringByAppendingString:[[NTLNAccount sharedInstance] screenName]]]) {
         return TRUE;
     }
     return FALSE;
 }
 
 - (BOOL) isProbablyReplyToMe {
-    NSString *query = [@&quot;@&quot; stringByAppendingString:[[NTLNAccount instance] username]];
+    NSString *query = [@&quot;@&quot; stringByAppendingString:[[NTLNAccount sharedInstance] screenName]];
     NSRange range = [text rangeOfString:query];
     
     if (range.location != NSNotFound) {
@@ -102,7 +102,7 @@
 }
 
 - (BOOL) isMyUpdate {
-    return [screenName isEqualToString:[[NTLNAccount instance] username]];
+    return [screenName isEqualToString:[[NTLNAccount sharedInstance] screenName]];
 }
 
 - (void) finishedToSetProperties:(BOOL)forDirectMessage {</diff>
      <filename>Classes/models/NTLNMessage.m</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 #import &lt;UIKit/UIKit.h&gt;
-#import &quot;NTLNHttpClient.h&quot;
+#import &quot;NTLNOAuthHttpClient.h&quot;
 #import &quot;NTLNTwitterXMLParser.h&quot;
 
 @class NTLNTwitterClient;
@@ -11,7 +11,7 @@
 - (void)twitterClientFailed:(NTLNTwitterClient*)sender;
 @end
 
-@interface NTLNTwitterClient : NTLNHttpClient {
+@interface NTLNTwitterClient : NTLNOAuthHttpClient {
 	int requestPage;
 	NSString *screenNameForUserTimeline;
 	BOOL parseResultXML;</diff>
      <filename>Classes/models/NTLNTwitterClient.h</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,6 @@
 #import &quot;NTLNAccount.h&quot;
 #import &quot;NTLNXMLHTTPEncoder.h&quot;
 #import &quot;NTLNConfiguration.h&quot;
-#import &quot;NTLNTwitterXMLReader.h&quot;
 #import &quot;NTLNAlert.h&quot;
 #import &quot;NTLNRateLimit.h&quot;
 #import &quot;NSDateExtended.h&quot;
@@ -36,11 +35,7 @@
 	parseResultXML = YES;
 	requestForTimeline = YES;
 	
-	NSString *username = [[NTLNAccount instance] username];
-	NSString *password = [[NTLNAccount instance] password];
-
-	[super requestGET:url username:username password:password];
-//		[super requestGET:@&quot;http://www.livedoor.com/&quot;];
+	[super requestGET:url];
 	
 	[delegate twitterClientBegin:self];
 }
@@ -234,29 +229,19 @@
 					  reply_id]; 
 	}
 	
-	NSString *username = [[NTLNAccount instance] username];
-	NSString *password = [[NTLNAccount instance] password];
-
-	[self requestPOST:url body:postString username:username password:password];
+	[self requestPOST:url body:postString];
 }
 
 - (void)createFavoriteWithID:(NSString*)messageId {
 	NSString* url = [NSString stringWithFormat:@&quot;%@favorites/create/%@.xml&quot;, 
 					 [NTLNTwitterClient URLForTwitterWithAccount], messageId];
-	
-	NSString *username = [[NTLNAccount instance] username];
-	NSString *password = [[NTLNAccount instance] password];
-
-	[self requestPOST:url body:nil username:username password:password];
+	[self requestPOST:url body:nil];
 }
 
 - (void)destroyFavoriteWithID:(NSString*)messageId {
 	NSString* url = [NSString stringWithFormat:@&quot;%@favorites/destroy/%@.xml&quot;, 
 					 [NTLNTwitterClient URLForTwitterWithAccount], messageId];
-	NSString *username = [[NTLNAccount instance] username];
-	NSString *password = [[NTLNAccount instance] password];
-
-	[self requestPOST:url body:nil username:username password:password];
+	[self requestPOST:url body:nil];
 }
 
 - (void)getFavoriteWithScreenName:(NSString*)screenName page:(int)page since_id:(NSString*)since_id{</diff>
      <filename>Classes/models/NTLNTwitterClient.m</filename>
    </modified>
    <modified>
      <diff>@@ -62,7 +62,7 @@ SHARD_INSTANCE_IMPL
 							 idleClientWithType:NTLNHttpClientPoolClientType_TwitterClient];
 	tc.delegate = self;
 	if (text.length &gt; 0) {
-		NSString *footer = [[NTLNAccount instance] footer];
+		NSString *footer = [[NTLNAccount sharedInstance] footer];
 		if (footer &amp;&amp; footer.length &gt; 0 &amp;&amp; ! [self isDirectMessage]) {
 			[tc post:[NSString stringWithFormat:@&quot;%@ %@&quot;, text, footer] reply_id:replyMessage.statusId];
 		} else {</diff>
      <filename>Classes/models/NTLNTwitterPost.m</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 #import &lt;UIKit/UIKit.h&gt;
 #import &quot;NTLNUser.h&quot;
-#import &quot;NTLNHttpClient.h&quot;
+#import &quot;NTLNOAuthHttpClient.h&quot;
 
 @class NTLNTwitterUserClient;
 
@@ -9,7 +9,7 @@
 - (void)twitterUserClientFailed:(NTLNTwitterUserClient*)sender;
 @end
 
-@interface NTLNTwitterUserClient : NTLNHttpClient {
+@interface NTLNTwitterUserClient : NTLNOAuthHttpClient {
 	@private
 	NSObject&lt;NTLNTwitterUserClientDelegate&gt; *delegate;
 	NSMutableArray *users;</diff>
      <filename>Classes/models/NTLNTwitterUserClient.h</filename>
    </modified>
    <modified>
      <diff>@@ -32,10 +32,7 @@
 	if (page &gt; 1) {
 		url = [NSString stringWithFormat:@&quot;%@?page=%d&quot;, url, page];
 	}
-
-	NSString *username = [[NTLNAccount instance] username];
-	NSString *password = [[NTLNAccount instance] password];
-	[super requestGET:url username:username password:password];
+	[super requestGET:url];
 }
 
 - (void)getFollowersWithScreenName:(NSString*)screen_name page:(int)page {
@@ -43,10 +40,7 @@
 	if (page &gt; 1) {
 		url = [NSString stringWithFormat:@&quot;%@?page=%d&quot;, url, page];
 	}
-	
-	NSString *username = [[NTLNAccount instance] username];
-	NSString *password = [[NTLNAccount instance] password];
-	[super requestGET:url username:username password:password];
+	[super requestGET:url];
 }
 
 - (void)requestSucceeded {</diff>
      <filename>Classes/models/NTLNTwitterUserClient.m</filename>
    </modified>
    <modified>
      <diff>@@ -74,11 +74,7 @@ static void startElementSAX(void *ctx,
 
 static void didParseMessage(ParserContext *p) {
 	[p-&gt;currentMessage setIconForURL:p-&gt;currentIconURL];
-	if ([p-&gt;currentInReplyToUserId isEqualToString:[[NTLNAccount instance] userId]]) {
-		p-&gt;currentMessage.replyType = NTLN_MESSAGE_REPLY_TYPE_REPLY;
-	} else {
-		[p-&gt;currentMessage finishedToSetProperties:p-&gt;currentMsgDirectMessage];
-	}
+	[p-&gt;currentMessage finishedToSetProperties:p-&gt;currentMsgDirectMessage];
 
 	[p-&gt;messages addObject:p-&gt;currentMessage];
 </diff>
      <filename>Classes/models/NTLNTwitterXMLParser.m</filename>
    </modified>
    <modified>
      <diff>@@ -10,7 +10,6 @@
 		1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
 		8D02D5130FA4582200005428 /* NTLNTweetPostView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D02D5120FA4582200005428 /* NTLNTweetPostView.m */; };
 		8D02D5B90FA45FF500005428 /* NTLNTweetQuoteView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D02D5B80FA45FF500005428 /* NTLNTweetQuoteView.m */; };
-		8D1248DA0ED74A180021BB00 /* NTLNTwitterAccountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D1248D90ED74A180021BB00 /* NTLNTwitterAccountViewController.m */; };
 		8D1B908D0E3A009500916B34 /* NTLNRoundedIconView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D1B908C0E3A009500916B34 /* NTLNRoundedIconView.m */; };
 		8D1B91930E3A0FCF00916B34 /* NTLNColors.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D1B91920E3A0FCF00916B34 /* NTLNColors.m */; };
 		8D1EF2B70FA58EB600BD452F /* NTLNTwitterXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D1EF2B50FA58EB600BD452F /* NTLNTwitterXMLParser.m */; };
@@ -139,7 +138,6 @@
 		F1216BBB0E04C37F0073A653 /* NTLNIconRepository.m in Sources */ = {isa = PBXBuildFile; fileRef = F1216BA70E04C37F0073A653 /* NTLNIconRepository.m */; };
 		F1216BBC0E04C37F0073A653 /* NTLNMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = F1216BA90E04C37F0073A653 /* NTLNMessage.m */; };
 		F1216BBD0E04C37F0073A653 /* NTLNUser.m in Sources */ = {isa = PBXBuildFile; fileRef = F1216BAC0E04C37F0073A653 /* NTLNUser.m */; };
-		F1216BC00E04C37F0073A653 /* NTLNURLUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F1216BB30E04C37F0073A653 /* NTLNURLUtils.m */; };
 		F1216BC10E04C37F0073A653 /* NTLNXMLHTTPEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = F1216BB50E04C37F0073A653 /* NTLNXMLHTTPEncoder.m */; };
 		F13420C40E11595B00F2AF64 /* NTLNUnreadsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F13420C30E11595B00F2AF64 /* NTLNUnreadsViewController.m */; };
 		F13E2B380FB806C50086B0E7 /* readme.html in Resources */ = {isa = PBXBuildFile; fileRef = F13E2B370FB806C50086B0E7 /* readme.html */; };
@@ -150,11 +148,30 @@
 		F17419080E2A2E6A008BA863 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F17419040E2A2E6A008BA863 /* SystemConfiguration.framework */; };
 		F17419090E2A2E6A008BA863 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F17419050E2A2E6A008BA863 /* Security.framework */; };
 		F174190A0E2A2E6A008BA863 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F17419060E2A2E6A008BA863 /* Foundation.framework */; };
-		F17419750E2A3A46008BA863 /* NTLNTwitterXMLReader.m in Sources */ = {isa = PBXBuildFile; fileRef = F17419740E2A3A46008BA863 /* NTLNTwitterXMLReader.m */; };
 		F17419A90E2A45AF008BA863 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F17419A80E2A45AF008BA863 /* CoreGraphics.framework */; };
 		F1816C120E0BEB2400C55465 /* NTLNBrowserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F1816C110E0BEB2400C55465 /* NTLNBrowserViewController.m */; };
+		F19C451D0FC158E200FF2279 /* browser_icons_01.png in Resources */ = {isa = PBXBuildFile; fileRef = F19C451A0FC158E200FF2279 /* browser_icons_01.png */; };
+		F19C451E0FC158E200FF2279 /* browser_icons_05.png in Resources */ = {isa = PBXBuildFile; fileRef = F19C451B0FC158E200FF2279 /* browser_icons_05.png */; };
+		F19C451F0FC158E200FF2279 /* browser_icons_03.png in Resources */ = {isa = PBXBuildFile; fileRef = F19C451C0FC158E200FF2279 /* browser_icons_03.png */; };
 		F1D470190E04483900E9CB1D /* NTLNLinkViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F1D470180E04483900E9CB1D /* NTLNLinkViewController.m */; };
 		F1D471030E04A1B500E9CB1D /* NTLNFriendsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F1D471020E04A1B500E9CB1D /* NTLNFriendsViewController.m */; };
+		F1E17DC30FBE9DFF0023636F /* Base64Transcoder.c in Sources */ = {isa = PBXBuildFile; fileRef = F1E17D840FBE9DFF0023636F /* Base64Transcoder.c */; };
+		F1E17DC40FBE9DFF0023636F /* hmac.c in Sources */ = {isa = PBXBuildFile; fileRef = F1E17D860FBE9DFF0023636F /* hmac.c */; };
+		F1E17DC50FBE9DFF0023636F /* sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = F1E17D880FBE9DFF0023636F /* sha1.c */; };
+		F1E17DC80FBE9DFF0023636F /* NSMutableURLRequest+Parameters.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17D8E0FBE9DFF0023636F /* NSMutableURLRequest+Parameters.m */; };
+		F1E17DCA0FBE9DFF0023636F /* NSString+URLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17D920FBE9DFF0023636F /* NSString+URLEncoding.m */; };
+		F1E17DCC0FBE9DFF0023636F /* NSURL+Base.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17D960FBE9DFF0023636F /* NSURL+Base.m */; };
+		F1E17DCE0FBE9DFF0023636F /* OAAsynchronousDataFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17D9A0FBE9DFF0023636F /* OAAsynchronousDataFetcher.m */; };
+		F1E17DCF0FBE9DFF0023636F /* OAConsumer.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17D9C0FBE9DFF0023636F /* OAConsumer.m */; };
+		F1E17DD10FBE9DFF0023636F /* OADataFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17DA00FBE9DFF0023636F /* OADataFetcher.m */; };
+		F1E17DD30FBE9DFF0023636F /* OAHMAC_SHA1SignatureProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17DA40FBE9DFF0023636F /* OAHMAC_SHA1SignatureProvider.m */; };
+		F1E17DD50FBE9DFF0023636F /* OAMutableURLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17DA80FBE9DFF0023636F /* OAMutableURLRequest.m */; };
+		F1E17DD70FBE9DFF0023636F /* OAPlaintextSignatureProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17DAC0FBE9DFF0023636F /* OAPlaintextSignatureProvider.m */; };
+		F1E17DD90FBE9DFF0023636F /* OARequestParameter.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17DB00FBE9DFF0023636F /* OARequestParameter.m */; };
+		F1E17DDB0FBE9DFF0023636F /* OAServiceTicket.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17DB40FBE9DFF0023636F /* OAServiceTicket.m */; };
+		F1E17DDD0FBE9DFF0023636F /* OAToken.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17DB80FBE9DFF0023636F /* OAToken.m */; };
+		F1E17E460FBEA7D70023636F /* NTLNOAuthConsumer.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17E450FBEA7D70023636F /* NTLNOAuthConsumer.m */; };
+		F1E17F6A0FBEBEC80023636F /* NTLNOAuthHttpClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E17F690FBEBEC80023636F /* NTLNOAuthHttpClient.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
@@ -166,8 +183,6 @@
 		8D02D5B70FA45FF500005428 /* NTLNTweetQuoteView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNTweetQuoteView.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		8D02D5B80FA45FF500005428 /* NTLNTweetQuoteView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNTweetQuoteView.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = &quot;&lt;group&gt;&quot;; };
-		8D1248D80ED74A180021BB00 /* NTLNTwitterAccountViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNTwitterAccountViewController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		8D1248D90ED74A180021BB00 /* NTLNTwitterAccountViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNTwitterAccountViewController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		8D1B908B0E3A009500916B34 /* NTLNRoundedIconView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNRoundedIconView.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		8D1B908C0E3A009500916B34 /* NTLNRoundedIconView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNRoundedIconView.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		8D1B91910E3A0FCF00916B34 /* NTLNColors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNColors.h; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -364,8 +379,6 @@
 		F1216BAA0E04C37F0073A653 /* NTLNNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNNotification.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F1216BAB0E04C37F0073A653 /* NTLNUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNUser.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F1216BAC0E04C37F0073A653 /* NTLNUser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNUser.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		F1216BB20E04C37F0073A653 /* NTLNURLUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNURLUtils.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		F1216BB30E04C37F0073A653 /* NTLNURLUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNURLUtils.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F1216BB40E04C37F0073A653 /* NTLNXMLHTTPEncoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNXMLHTTPEncoder.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F1216BB50E04C37F0073A653 /* NTLNXMLHTTPEncoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNXMLHTTPEncoder.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F13420C20E11595B00F2AF64 /* NTLNUnreadsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNUnreadsViewController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -381,14 +394,52 @@
 		F17419040E2A2E6A008BA863 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
 		F17419050E2A2E6A008BA863 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
 		F17419060E2A2E6A008BA863 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
-		F17419730E2A3A46008BA863 /* NTLNTwitterXMLReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNTwitterXMLReader.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		F17419740E2A3A46008BA863 /* NTLNTwitterXMLReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNTwitterXMLReader.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F17419A80E2A45AF008BA863 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		F1816C100E0BEB2400C55465 /* NTLNBrowserViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNBrowserViewController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F1816C110E0BEB2400C55465 /* NTLNBrowserViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNBrowserViewController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F19C451A0FC158E200FF2279 /* browser_icons_01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = browser_icons_01.png; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F19C451B0FC158E200FF2279 /* browser_icons_05.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = browser_icons_05.png; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F19C451C0FC158E200FF2279 /* browser_icons_03.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = browser_icons_03.png; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F1D470170E04483900E9CB1D /* NTLNLinkViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNLinkViewController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F1D470180E04483900E9CB1D /* NTLNLinkViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNLinkViewController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		F1D471020E04A1B500E9CB1D /* NTLNFriendsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNFriendsViewController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D840FBE9DFF0023636F /* Base64Transcoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Base64Transcoder.c; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D850FBE9DFF0023636F /* Base64Transcoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64Transcoder.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D860FBE9DFF0023636F /* hmac.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hmac.c; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D870FBE9DFF0023636F /* hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D880FBE9DFF0023636F /* sha1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sha1.c; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D890FBE9DFF0023636F /* sha1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha1.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D8D0FBE9DFF0023636F /* NSMutableURLRequest+Parameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = &quot;NSMutableURLRequest+Parameters.h&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D8E0FBE9DFF0023636F /* NSMutableURLRequest+Parameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = &quot;NSMutableURLRequest+Parameters.m&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D910FBE9DFF0023636F /* NSString+URLEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = &quot;NSString+URLEncoding.h&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D920FBE9DFF0023636F /* NSString+URLEncoding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = &quot;NSString+URLEncoding.m&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D950FBE9DFF0023636F /* NSURL+Base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = &quot;NSURL+Base.h&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D960FBE9DFF0023636F /* NSURL+Base.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = &quot;NSURL+Base.m&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D990FBE9DFF0023636F /* OAAsynchronousDataFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAAsynchronousDataFetcher.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D9A0FBE9DFF0023636F /* OAAsynchronousDataFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAAsynchronousDataFetcher.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D9B0FBE9DFF0023636F /* OAConsumer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAConsumer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D9C0FBE9DFF0023636F /* OAConsumer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAConsumer.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17D9F0FBE9DFF0023636F /* OADataFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OADataFetcher.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DA00FBE9DFF0023636F /* OADataFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OADataFetcher.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DA30FBE9DFF0023636F /* OAHMAC_SHA1SignatureProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAHMAC_SHA1SignatureProvider.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DA40FBE9DFF0023636F /* OAHMAC_SHA1SignatureProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAHMAC_SHA1SignatureProvider.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DA70FBE9DFF0023636F /* OAMutableURLRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAMutableURLRequest.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DA80FBE9DFF0023636F /* OAMutableURLRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAMutableURLRequest.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DAB0FBE9DFF0023636F /* OAPlaintextSignatureProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAPlaintextSignatureProvider.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DAC0FBE9DFF0023636F /* OAPlaintextSignatureProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAPlaintextSignatureProvider.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DAF0FBE9DFF0023636F /* OARequestParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OARequestParameter.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DB00FBE9DFF0023636F /* OARequestParameter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OARequestParameter.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DB30FBE9DFF0023636F /* OAServiceTicket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAServiceTicket.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DB40FBE9DFF0023636F /* OAServiceTicket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAServiceTicket.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DB50FBE9DFF0023636F /* OASignatureProviding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OASignatureProviding.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DB70FBE9DFF0023636F /* OAToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAToken.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DB80FBE9DFF0023636F /* OAToken.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAToken.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17DBD0FBE9DFF0023636F /* OAuthConsumer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAuthConsumer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17E280FBEA3B20023636F /* twitter_apikeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = twitter_apikeys.h; sourceTree = SOURCE_ROOT; };
+		F1E17E440FBEA7D70023636F /* NTLNOAuthConsumer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNOAuthConsumer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17E450FBEA7D70023636F /* NTLNOAuthConsumer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNOAuthConsumer.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17F680FBEBEC80023636F /* NTLNOAuthHttpClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NTLNOAuthHttpClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		F1E17F690FBEBEC80023636F /* NTLNOAuthHttpClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NTLNOAuthHttpClient.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -420,6 +471,7 @@
 				8D62786A0E7C4C6700CF345E /* viewUtils */,
 				8D81BEF80E9FED5C000D30E7 /* NTLNAppDelegate.h */,
 				8D81BEF70E9FED5C000D30E7 /* NTLNAppDelegate.m */,
+				F1E17E280FBEA3B20023636F /* twitter_apikeys.h */,
 				8DBCE2540E56D08D00E4A1C2 /* version.h */,
 			);
 			path = Classes;
@@ -436,6 +488,7 @@
 		29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
 			isa = PBXGroup;
 			children = (
+				F1E17D820FBE9DFF0023636F /* OAuthConsumer */,
 				8DDE3B830F93635B00B007C3 /* gtm */,
 				080E96DDFE201D6D7F000001 /* Classes */,
 				29B97315FDCFA39411CA2CEA /* Other Sources */,
@@ -609,6 +662,9 @@
 		8DBB73020F87E83500B54378 /* icons */ = {
 			isa = PBXGroup;
 			children = (
+				F19C451A0FC158E200FF2279 /* browser_icons_01.png */,
+				F19C451B0FC158E200FF2279 /* browser_icons_05.png */,
+				F19C451C0FC158E200FF2279 /* browser_icons_03.png */,
 				8DD55EC40FA435E5005E143B /* checkmark.png */,
 				8DF5E3740F910D340096B849 /* dm.png */,
 				8DF5E3750F910D340096B849 /* favorites.png */,
@@ -681,6 +737,8 @@
 				8D76CFE00F9EEB7E006D1050 /* NTLNTwitterClientOperation.m */,
 				8D76CFE20F9EEBFC006D1050 /* NTLNTwitterClientOperationQueue.h */,
 				8D76CFE30F9EEBFC006D1050 /* NTLNTwitterClientOperationQueue.m */,
+				F1E17F680FBEBEC80023636F /* NTLNOAuthHttpClient.h */,
+				F1E17F690FBEBEC80023636F /* NTLNOAuthHttpClient.m */,
 			);
 			name = network;
 			sourceTree = &quot;&lt;group&gt;&quot;;
@@ -719,8 +777,6 @@
 				8DDB08D80ED42E1F007602E6 /* NTLNSettingViewController.m */,
 				8D6786D70E4E187400F06BE3 /* NTLNAboutViewController.h */,
 				8D6786D80E4E187400F06BE3 /* NTLNAboutViewController.m */,
-				8D1248D80ED74A180021BB00 /* NTLNTwitterAccountViewController.h */,
-				8D1248D90ED74A180021BB00 /* NTLNTwitterAccountViewController.m */,
 				8DF436A80ED8172C005D284D /* NTLNFooterSettingViewController.h */,
 				8DF436A90ED8172C005D284D /* NTLNFooterSettingViewController.m */,
 			);
@@ -770,8 +826,6 @@
 				F1216BAC0E04C37F0073A653 /* NTLNUser.m */,
 				8D1EF2B60FA58EB600BD452F /* NTLNTwitterXMLParser.h */,
 				8D1EF2B50FA58EB600BD452F /* NTLNTwitterXMLParser.m */,
-				F17419730E2A3A46008BA863 /* NTLNTwitterXMLReader.h */,
-				F17419740E2A3A46008BA863 /* NTLNTwitterXMLReader.m */,
 				8D988F5A0E84174B00AA6845 /* NTLNTwitterUserXMLReader.h */,
 				8D988F5B0E84174B00AA6845 /* NTLNTwitterUserXMLReader.m */,
 				8DBBB31D0E4343AE00638CB3 /* NTLNCache.h */,
@@ -787,6 +841,8 @@
 				8DF5E09D0F90C9CD0096B849 /* NSDateExtended.m */,
 				8D6E22ED0F9129DD00B622D2 /* NTLNRateLimit.h */,
 				8D6E22EE0F9129DD00B622D2 /* NTLNRateLimit.m */,
+				F1E17E440FBEA7D70023636F /* NTLNOAuthConsumer.h */,
+				F1E17E450FBEA7D70023636F /* NTLNOAuthConsumer.m */,
 			);
 			path = models;
 			sourceTree = &quot;&lt;group&gt;&quot;;
@@ -794,14 +850,59 @@
 		F1216BAF0E04C37F0073A653 /* util */ = {
 			isa = PBXGroup;
 			children = (
-				F1216BB20E04C37F0073A653 /* NTLNURLUtils.h */,
-				F1216BB30E04C37F0073A653 /* NTLNURLUtils.m */,
 				F1216BB40E04C37F0073A653 /* NTLNXMLHTTPEncoder.h */,
 				F1216BB50E04C37F0073A653 /* NTLNXMLHTTPEncoder.m */,
 			);
 			path = util;
 			sourceTree = &quot;&lt;group&gt;&quot;;
 		};
+		F1E17D820FBE9DFF0023636F /* OAuthConsumer */ = {
+			isa = PBXGroup;
+			children = (
+				F1E17D830FBE9DFF0023636F /* Crypto */,
+				F1E17D8D0FBE9DFF0023636F /* NSMutableURLRequest+Parameters.h */,
+				F1E17D8E0FBE9DFF0023636F /* NSMutableURLRequest+Parameters.m */,
+				F1E17D910FBE9DFF0023636F /* NSString+URLEncoding.h */,
+				F1E17D920FBE9DFF0023636F /* NSString+URLEncoding.m */,
+				F1E17D950FBE9DFF0023636F /* NSURL+Base.h */,
+				F1E17D960FBE9DFF0023636F /* NSURL+Base.m */,
+				F1E17D990FBE9DFF0023636F /* OAAsynchronousDataFetcher.h */,
+				F1E17D9A0FBE9DFF0023636F /* OAAsynchronousDataFetcher.m */,
+				F1E17D9B0FBE9DFF0023636F /* OAConsumer.h */,
+				F1E17D9C0FBE9DFF0023636F /* OAConsumer.m */,
+				F1E17D9F0FBE9DFF0023636F /* OADataFetcher.h */,
+				F1E17DA00FBE9DFF0023636F /* OADataFetcher.m */,
+				F1E17DA30FBE9DFF0023636F /* OAHMAC_SHA1SignatureProvider.h */,
+				F1E17DA40FBE9DFF0023636F /* OAHMAC_SHA1SignatureProvider.m */,
+				F1E17DA70FBE9DFF0023636F /* OAMutableURLRequest.h */,
+				F1E17DA80FBE9DFF0023636F /* OAMutableURLRequest.m */,
+				F1E17DAB0FBE9DFF0023636F /* OAPlaintextSignatureProvider.h */,
+				F1E17DAC0FBE9DFF0023636F /* OAPlaintextSignatureProvider.m */,
+				F1E17DAF0FBE9DFF0023636F /* OARequestParameter.h */,
+				F1E17DB00FBE9DFF0023636F /* OARequestParameter.m */,
+				F1E17DB30FBE9DFF0023636F /* OAServiceTicket.h */,
+				F1E17DB40FBE9DFF0023636F /* OAServiceTicket.m */,
+				F1E17DB50FBE9DFF0023636F /* OASignatureProviding.h */,
+				F1E17DB70FBE9DFF0023636F /* OAToken.h */,
+				F1E17DB80FBE9DFF0023636F /* OAToken.m */,
+				F1E17DBD0FBE9DFF0023636F /* OAuthConsumer.h */,
+			);
+			path = OAuthConsumer;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
+		F1E17D830FBE9DFF0023636F /* Crypto */ = {
+			isa = PBXGroup;
+			children = (
+				F1E17D840FBE9DFF0023636F /* Base64Transcoder.c */,
+				F1E17D850FBE9DFF0023636F /* Base64Transcoder.h */,
+				F1E17D860FBE9DFF0023636F /* hmac.c */,
+				F1E17D870FBE9DFF0023636F /* hmac.h */,
+				F1E17D880FBE9DFF0023636F /* sha1.c */,
+				F1E17D890FBE9DFF0023636F /* sha1.h */,
+			);
+			path = Crypto;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -904,6 +1005,9 @@
 				8DD636D90FA9F3DC00C49838 /* pushed_black_02.png in Resources */,
 				8DD636DA0FA9F3DC00C49838 /* pushed_black_04.png in Resources */,
 				F13E2B380FB806C50086B0E7 /* readme.html in Resources */,
+				F19C451D0FC158E200FF2279 /* browser_icons_01.png in Resources */,
+				F19C451E0FC158E200FF2279 /* browser_icons_05.png in Resources */,
+				F19C451F0FC158E200FF2279 /* browser_icons_03.png in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -939,13 +1043,11 @@
 				F1216BBB0E04C37F0073A653 /* NTLNIconRepository.m in Sources */,
 				F1216BBC0E04C37F0073A653 /* NTLNMessage.m in Sources */,
 				F1216BBD0E04C37F0073A653 /* NTLNUser.m in Sources */,
-				F1216BC00E04C37F0073A653 /* NTLNURLUtils.m in Sources */,
 				F1216BC10E04C37F0073A653 /* NTLNXMLHTTPEncoder.m in Sources */,
 				F1816C120E0BEB2400C55465 /* NTLNBrowserViewController.m in Sources */,
 				F145D5E10E0EC22500DAE9EF /* NTLNReplysViewController.m in Sources */,
 				F145D5E50E0EC24900DAE9EF /* NTLNSentsViewController.m in Sources */,
 				F13420C40E11595B00F2AF64 /* NTLNUnreadsViewController.m in Sources */,
-				F17419750E2A3A46008BA863 /* NTLNTwitterXMLReader.m in Sources */,
 				8D908F370E364E99002E7502 /* NTLNTweetPostViewController.m in Sources */,
 				8D1B908D0E3A009500916B34 /* NTLNRoundedIconView.m in Sources */,
 				8D1B91930E3A0FCF00916B34 /* NTLNColors.m in Sources */,
@@ -986,7 +1088,6 @@
 				8DDB08AE0ED42D5E007602E6 /* UICPrototypeTableCell.m in Sources */,
 				8DDB08AF0ED42D5E007602E6 /* UICPrototypeTableCellTextInput.m in Sources */,
 				8DDB08D90ED42E1F007602E6 /* NTLNSettingViewController.m in Sources */,
-				8D1248DA0ED74A180021BB00 /* NTLNTwitterAccountViewController.m in Sources */,
 				8DF4362D0ED80A4F005D284D /* NTLNTwitterPost.m in Sources */,
 				8DF436AA0ED8172C005D284D /* NTLNFooterSettingViewController.m in Sources */,
 				8D3EC54C0F88CAD40090DCB1 /* NTLNUserViewController.m in Sources */,
@@ -1013,6 +1114,23 @@
 				8D4408F80FA6E6400087F6ED /* NTLNHttpClientPool.m in Sources */,
 				8DD633B80FA8785B00C49838 /* NTLNTweetTextView.m in Sources */,
 				F13E2CBF0FB959A20086B0E7 /* NTLNWebView.m in Sources */,
+				F1E17DC30FBE9DFF0023636F /* Base64Transcoder.c in Sources */,
+				F1E17DC40FBE9DFF0023636F /* hmac.c in Sources */,
+				F1E17DC50FBE9DFF0023636F /* sha1.c in Sources */,
+				F1E17DC80FBE9DFF0023636F /* NSMutableURLRequest+Parameters.m in Sources */,
+				F1E17DCA0FBE9DFF0023636F /* NSString+URLEncoding.m in Sources */,
+				F1E17DCC0FBE9DFF0023636F /* NSURL+Base.m in Sources */,
+				F1E17DCE0FBE9DFF0023636F /* OAAsynchronousDataFetcher.m in Sources */,
+				F1E17DCF0FBE9DFF0023636F /* OAConsumer.m in Sources */,
+				F1E17DD10FBE9DFF0023636F /* OADataFetcher.m in Sources */,
+				F1E17DD30FBE9DFF0023636F /* OAHMAC_SHA1SignatureProvider.m in Sources */,
+				F1E17DD50FBE9DFF0023636F /* OAMutableURLRequest.m in Sources */,
+				F1E17DD70FBE9DFF0023636F /* OAPlaintextSignatureProvider.m in Sources */,
+				F1E17DD90FBE9DFF0023636F /* OARequestParameter.m in Sources */,
+				F1E17DDB0FBE9DFF0023636F /* OAServiceTicket.m in Sources */,
+				F1E17DDD0FBE9DFF0023636F /* OAToken.m in Sources */,
+				F1E17E460FBEA7D70023636F /* NTLNOAuthConsumer.m in Sources */,
+				F1E17F6A0FBEBEC80023636F /* NTLNOAuthHttpClient.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};</diff>
      <filename>ntlniph.xcodeproj/project.pbxproj</filename>
    </modified>
    <modified>
      <diff>@@ -98,5 +98,32 @@ the License.
 
 &lt;/p&gt;
 
+&lt;h3&gt;OAuthConsumer&lt;/h3&gt;
+
+&lt;p&gt;
+Created by Jon Crosby on 10/19/07.&lt;br/&gt;
+Copyright 2007 Kaboomerang LLC. All rights reserved.
+&lt;/p&gt;
+&lt;p&gt;
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the &quot;Software&quot;), 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:
+&lt;/p&gt;
+&lt;p&gt;
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+&lt;/p&gt;
+&lt;p&gt;
+THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, 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.
+&lt;/p&gt;
+
 &lt;/body&gt;	
 &lt;/html&gt;
\ No newline at end of file</diff>
      <filename>readme.html</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>Classes/NTLNTwitterAccountViewController.h</filename>
    </removed>
    <removed>
      <filename>Classes/NTLNTwitterAccountViewController.m</filename>
    </removed>
    <removed>
      <filename>Classes/models/NTLNTwitterXMLReader.h</filename>
    </removed>
    <removed>
      <filename>Classes/models/NTLNTwitterXMLReader.m</filename>
    </removed>
    <removed>
      <filename>Classes/models/util/NTLNURLUtils.h</filename>
    </removed>
    <removed>
      <filename>Classes/models/util/NTLNURLUtils.m</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>68818afdc322ac761cde2af653e199f9b3b8a8eb</id>
    </parent>
    <parent>
      <id>708d1d8b835ae01b7cff066f77f393d7c9cd8c0d</id>
    </parent>
  </parents>
  <author>
    <name>takuma104</name>
    <email>takuma104@gmail.com</email>
  </author>
  <url>http://github.com/takuma104/ntlniph/commit/dc2a286a25d19657a810f97e76496f4ab3d4e27d</url>
  <id>dc2a286a25d19657a810f97e76496f4ab3d4e27d</id>
  <committed-date>2009-05-31T01:55:29-07:00</committed-date>
  <authored-date>2009-05-31T01:55:29-07:00</authored-date>
  <message>merge oauth</message>
  <tree>9c798530510db6425e31495da669a5af319aec97</tree>
  <committer>
    <name>takuma104</name>
    <email>takuma104@gmail.com</email>
  </committer>
</commit>
