口袋版本的一折买

TYAlertController.m 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. //
  2. // TYAlertController.m
  3. // TYAlertControllerDemo
  4. //
  5. // Created by tanyang on 15/9/1.
  6. // Copyright (c) 2015年 tanyang. All rights reserved.
  7. //
  8. #import "TYAlertController.h"
  9. #import "UIView+TYAutoLayout.h"
  10. @interface TYAlertController ()
  11. @property (nonatomic, strong) UIView *alertView;
  12. @property (nonatomic, assign) TYAlertControllerStyle preferredStyle;
  13. @property (nonatomic, assign) TYAlertTransitionAnimation transitionAnimation;
  14. @property (nonatomic, assign) Class transitionAnimationClass;
  15. @property (nonatomic, weak) UITapGestureRecognizer *singleTap;
  16. @property (nonatomic, strong) NSLayoutConstraint *alertViewCenterYConstraint;
  17. @property (nonatomic, assign) CGFloat alertViewCenterYOffset;
  18. @end
  19. @implementation TYAlertController
  20. #pragma mark - init
  21. - (instancetype)init
  22. {
  23. if (self = [super init]) {
  24. [self configureController];
  25. }
  26. return self;
  27. }
  28. - (id)initWithCoder:(NSCoder *)aDecoder
  29. {
  30. if (self = [super initWithCoder:aDecoder]) {
  31. [self configureController];
  32. }
  33. return self;
  34. }
  35. - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  36. {
  37. if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
  38. [self configureController];
  39. }
  40. return self;
  41. }
  42. - (instancetype)initWithAlertView:(UIView *)alertView preferredStyle:(TYAlertControllerStyle)preferredStyle transitionAnimation:(TYAlertTransitionAnimation)transitionAnimation transitionAnimationClass:(Class)transitionAnimationClass
  43. {
  44. if (self = [self initWithNibName:nil bundle:nil]) {
  45. _alertView = alertView;
  46. _preferredStyle = preferredStyle;
  47. _transitionAnimation = transitionAnimation;
  48. _transitionAnimationClass = transitionAnimationClass;
  49. }
  50. return self;
  51. }
  52. + (instancetype)alertControllerWithAlertView:(UIView *)alertView
  53. {
  54. return [[self alloc]initWithAlertView:alertView
  55. preferredStyle:TYAlertControllerStyleAlert
  56. transitionAnimation:TYAlertTransitionAnimationFade
  57. transitionAnimationClass:nil];
  58. }
  59. + (instancetype)alertControllerWithAlertView:(UIView *)alertView preferredStyle:(TYAlertControllerStyle)preferredStyle
  60. {
  61. return [[self alloc]initWithAlertView:alertView
  62. preferredStyle:preferredStyle
  63. transitionAnimation:TYAlertTransitionAnimationFade
  64. transitionAnimationClass:nil];
  65. }
  66. + (instancetype)alertControllerWithAlertView:(UIView *)alertView preferredStyle:(TYAlertControllerStyle)preferredStyle transitionAnimation:(TYAlertTransitionAnimation)transitionAnimation
  67. {
  68. return [[self alloc]initWithAlertView:alertView
  69. preferredStyle:preferredStyle
  70. transitionAnimation:transitionAnimation
  71. transitionAnimationClass:nil];
  72. }
  73. + (instancetype)alertControllerWithAlertView:(UIView *)alertView preferredStyle:(TYAlertControllerStyle)preferredStyle transitionAnimationClass:(Class)transitionAnimationClass
  74. {
  75. return [[self alloc]initWithAlertView:alertView
  76. preferredStyle:preferredStyle
  77. transitionAnimation:TYAlertTransitionAnimationCustom
  78. transitionAnimationClass:transitionAnimationClass];
  79. }
  80. #pragma mark - life cycle
  81. - (void)viewDidLoad {
  82. [super viewDidLoad];
  83. // Do any additional setup after loading the view.
  84. self.view.backgroundColor = [UIColor clearColor];
  85. [self addBackgroundView];
  86. [self addSingleTapGesture];
  87. [self configureAlertView];
  88. [self.view layoutIfNeeded];
  89. if (_preferredStyle == TYAlertControllerStyleAlert) {
  90. // UIKeyboard Notification
  91. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
  92. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
  93. }
  94. }
  95. - (void)viewWillAppear:(BOOL)animated
  96. {
  97. [super viewWillAppear:animated];
  98. if (_viewWillShowHandler) {
  99. _viewWillShowHandler(_alertView);
  100. }
  101. }
  102. - (void)viewDidAppear:(BOOL)animated
  103. {
  104. [super viewDidAppear:animated];
  105. if (_viewDidShowHandler) {
  106. _viewDidShowHandler(_alertView);
  107. }
  108. }
  109. - (void)viewWillDisappear:(BOOL)animated
  110. {
  111. [super viewWillDisappear:animated];
  112. if (_viewWillHideHandler) {
  113. _viewWillHideHandler(_alertView);
  114. }
  115. }
  116. - (void)viewDidDisappear:(BOOL)animated
  117. {
  118. [super viewDidDisappear:animated];
  119. if (_viewDidHideHandler) {
  120. _viewDidHideHandler(_alertView);
  121. }
  122. }
  123. - (void)addBackgroundView
  124. {
  125. if (_backgroundView == nil) {
  126. UIView *backgroundView = [[UIView alloc]init];
  127. backgroundView.backgroundColor = _backgroundColor;
  128. _backgroundView = backgroundView;
  129. }
  130. _backgroundView.translatesAutoresizingMaskIntoConstraints = NO;
  131. [self.view insertSubview:_backgroundView atIndex:0];
  132. [self.view addConstraintToView:_backgroundView edgeInset:UIEdgeInsetsZero];
  133. }
  134. - (void)setBackgroundView:(UIView *)backgroundView
  135. {
  136. if (_backgroundView == nil) {
  137. _backgroundView = backgroundView;
  138. } else if (_backgroundView != backgroundView) {
  139. backgroundView.translatesAutoresizingMaskIntoConstraints = NO;
  140. [self.view insertSubview:backgroundView aboveSubview:_backgroundView];
  141. [self.view addConstraintToView:backgroundView edgeInset:UIEdgeInsetsZero];
  142. backgroundView.alpha = 0;
  143. [UIView animateWithDuration:0.3 animations:^{
  144. backgroundView.alpha = 1;
  145. } completion:^(BOOL finished) {
  146. [_backgroundView removeFromSuperview];
  147. _backgroundView = backgroundView;
  148. [self addSingleTapGesture];
  149. }];
  150. }
  151. }
  152. - (void)addSingleTapGesture
  153. {
  154. self.view.userInteractionEnabled = YES;
  155. _backgroundView.userInteractionEnabled = YES;
  156. UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
  157. singleTap.enabled = _backgoundTapDismissEnable;
  158. [_backgroundView addGestureRecognizer:singleTap];
  159. _singleTap = singleTap;
  160. }
  161. - (void)setBackgoundTapDismissEnable:(BOOL)backgoundTapDismissEnable
  162. {
  163. _backgoundTapDismissEnable = backgoundTapDismissEnable;
  164. _singleTap.enabled = backgoundTapDismissEnable;
  165. }
  166. #pragma mark - configure
  167. - (void)configureController
  168. {
  169. self.providesPresentationContextTransitionStyle = YES;
  170. self.definesPresentationContext = YES;
  171. self.modalPresentationStyle = UIModalPresentationCustom;
  172. self.transitioningDelegate = self;
  173. _backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.4];
  174. _backgoundTapDismissEnable = NO;
  175. _alertStyleEdging = 15;
  176. _actionSheetStyleEdging = 0;
  177. }
  178. - (void)configureAlertView
  179. {
  180. if (_alertView == nil) {
  181. NSLog(@"%@: alertView is nil",NSStringFromClass([self class]));
  182. return;
  183. }
  184. _alertView.userInteractionEnabled = YES;
  185. [self.view addSubview:_alertView];
  186. _alertView.translatesAutoresizingMaskIntoConstraints = NO;
  187. switch (_preferredStyle) {
  188. case TYAlertControllerStyleActionSheet:
  189. [self layoutActionSheetStyleView];
  190. break;
  191. case TYAlertControllerStyleAlert:
  192. [self layoutAlertStyleView];
  193. break;
  194. default:
  195. break;
  196. }
  197. }
  198. - (void)configureAlertViewWidth
  199. {
  200. // width, height
  201. if (!CGSizeEqualToSize(_alertView.frame.size,CGSizeZero)) {
  202. [_alertView addConstraintWidth:CGRectGetWidth(_alertView.frame) height:CGRectGetHeight(_alertView.frame)];
  203. }else {
  204. BOOL findAlertViewWidthConstraint = NO;
  205. for (NSLayoutConstraint *constraint in _alertView.constraints) {
  206. if (constraint.firstAttribute == NSLayoutAttributeWidth) {
  207. findAlertViewWidthConstraint = YES;
  208. break;
  209. }
  210. }
  211. if (!findAlertViewWidthConstraint) {
  212. [_alertView addConstraintWidth:CGRectGetWidth(self.view.frame)-2*_alertStyleEdging height:0];
  213. }
  214. }
  215. }
  216. #pragma mark - layout
  217. - (void)layoutAlertStyleView
  218. {
  219. // center X
  220. [self.view addConstraintCenterXToView:_alertView centerYToView:nil];
  221. [self configureAlertViewWidth];
  222. // top Y
  223. _alertViewCenterYConstraint = [self.view addConstraintCenterYToView:_alertView constant:0];
  224. if (_alertViewOriginY > 0) {
  225. [_alertView layoutIfNeeded];
  226. _alertViewCenterYOffset = _alertViewOriginY - (CGRectGetHeight(self.view.frame) - CGRectGetHeight(_alertView.frame))/2;
  227. _alertViewCenterYConstraint.constant = _alertViewCenterYOffset;
  228. }else{
  229. _alertViewCenterYOffset = 0;
  230. }
  231. }
  232. - (void)layoutActionSheetStyleView
  233. {
  234. // remove width constaint
  235. for (NSLayoutConstraint *constraint in _alertView.constraints) {
  236. if (constraint.firstAttribute == NSLayoutAttributeWidth) {
  237. [_alertView removeConstraint: constraint];
  238. break;
  239. }
  240. }
  241. // add edge constraint
  242. [self.view addConstraintWithView:_alertView topView:nil leftView:self.view bottomView:self.view rightView:self.view edgeInset:UIEdgeInsetsMake(0, _actionSheetStyleEdging, 0, -_actionSheetStyleEdging)];
  243. if (CGRectGetHeight(_alertView.frame) > 0) {
  244. // height
  245. [_alertView addConstraintWidth:0 height:CGRectGetHeight(_alertView.frame)];
  246. }
  247. }
  248. - (void)dismissViewControllerAnimated:(BOOL)animated
  249. {
  250. [self dismissViewControllerAnimated:YES completion:self.dismissComplete];
  251. }
  252. #pragma mark - action
  253. - (void)singleTap:(UITapGestureRecognizer *)sender
  254. {
  255. [self dismissViewControllerAnimated:YES];
  256. }
  257. #pragma mark - notification
  258. - (void)keyboardWillShow:(NSNotification*)notification
  259. {
  260. CGRect keyboardRect = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
  261. CGFloat alertViewBottomEdge = (CGRectGetHeight(self.view.frame) - CGRectGetHeight(_alertView.frame))/2 - _alertViewCenterYOffset;
  262. //当开启热点时,向下偏移20px
  263. //修复键盘遮挡问题
  264. CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
  265. CGFloat differ = CGRectGetHeight(keyboardRect) - alertViewBottomEdge;
  266. //修复:输入框获取焦点时,会重复刷新,导致输入框文章偏移一下
  267. if (_alertViewCenterYConstraint.constant == -differ -statusBarHeight) {
  268. return;
  269. }
  270. if (differ >= 0) {
  271. _alertViewCenterYConstraint.constant = _alertViewCenterYOffset - differ - statusBarHeight;
  272. [UIView animateWithDuration:0.25 animations:^{
  273. [self.view layoutIfNeeded];
  274. }];
  275. }
  276. }
  277. - (void)keyboardWillHide:(NSNotification*)notification
  278. {
  279. _alertViewCenterYConstraint.constant = _alertViewCenterYOffset;
  280. [UIView animateWithDuration:0.25 animations:^{
  281. [self.view layoutIfNeeded];
  282. }];
  283. }
  284. - (void)didReceiveMemoryWarning {
  285. [super didReceiveMemoryWarning];
  286. // Dispose of any resources that can be recreated.
  287. }
  288. - (void)dealloc
  289. {
  290. [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
  291. [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
  292. }
  293. -(void)ayAxbRi:(UITableView*) ayAxbRi ayTYUfB:(UIButton*) ayTYUfB aWGoRI:(UIFontWeight*) aWGoRI aVEr6kG7pT:(UIControlEvents*) aVEr6kG7pT a3Htq:(UIUserInterfaceIdiom*) a3Htq aOsSb0TU:(UIBarButtonItem*) aOsSb0TU aBfkU9:(UIColor*) aBfkU9 a1TX2V:(UIImage*) a1TX2V aiQ0zO3wvSX:(UIControl*) aiQ0zO3wvSX a5ZqGaQ:(UISearchBar*) a5ZqGaQ aowCNPpfDU4:(UILabel*) aowCNPpfDU4 a91h5K:(UIFontWeight*) a91h5K aQXNaOM:(UIBezierPath*) aQXNaOM aZNrUbMc:(UIWindow*) aZNrUbMc aaC4xEJ:(UIScreen*) aaC4xEJ {
  294. NSLog(@"vDU9zVmElFeZK");
  295. NSLog(@"iuWLTzMoYFUqBEeRZrtwyHm81ChvlPg0D7OA");
  296. NSLog(@"meJy0vuOHgoBpKP3Ea5iSbnDdkt7LWM9jQYAZxr");
  297. NSLog(@"XBLMrWiJyE");
  298. NSLog(@"mx3huRJYFLo5SjzXBpdnbif1elC");
  299. NSLog(@"mgKz5PYUQ712nyXEW0pZurhqTxwOL8ftIak");
  300. NSLog(@"IP064WEurCG");
  301. NSLog(@"mcsZBJj1bDfXW84L3PCIuegNh7");
  302. NSLog(@"H2FYo1gDEXe0wVf9Snsvxc4PyOAt7Ku");
  303. NSLog(@"Mqz63uv9Y0UTmXpZF2DBsH");
  304. NSLog(@"vqpdHoMARSCTO1QgZiIL8B6f9eNnPlJ");
  305. NSLog(@"xf183jtd4VWRc9sa");
  306. }
  307. -(void)aqatDSR:(UICollectionView*) aqatDSR aLr54:(UIImageView*) aLr54 a7Ywqh:(UIApplication*) a7Ywqh aE6fTYa0KgG:(UIApplication*) aE6fTYa0KgG ahZWA1bl:(UIDevice*) ahZWA1bl aNgS2QoFt:(UIButton*) aNgS2QoFt aI6k5Y2:(UISearchBar*) aI6k5Y2 akETAbl:(UIBezierPath*) akETAbl a5SB6MpE:(UIActivity*) a5SB6MpE a5xhYi6JF:(UIActivity*) a5xhYi6JF {
  308. NSLog(@"gtTZvAYLlXNxywapDbmP2UsSVFojWh1J3zuin5");
  309. NSLog(@"IHhYTWJSEwxoZ");
  310. NSLog(@"9dv4uMp5qj2mZXTlaCbPUiGSk8hR1s");
  311. NSLog(@"DbMkzOIvu4ho6AU9RNwcpmJeFjSf1HEX");
  312. NSLog(@"JXa2UMebWtpL8rh7x0F5igNfGojqsuIAcO");
  313. NSLog(@"XoV0ax2ctOTFy9fPkgqn48AvDwmujZdGzWSsI7N");
  314. NSLog(@"lZzKP6TSymk2YsCxedNQVLGpXUDq5riwHR97F");
  315. NSLog(@"4W07smuCwoZctADKkb93xTXrgSvnPq2HeQpGYy1F");
  316. NSLog(@"UKFhDsB2mW9fEgaRPkNSr1456AzITlcy3");
  317. NSLog(@"zpPLNFDBTC01XYKAfeJudR4");
  318. NSLog(@"D1MXOUWbPQmlKv475");
  319. NSLog(@"Fd8JbBr6LOGhfoZXHx0Y");
  320. NSLog(@"4vOEjdhI3nALbiuo1rYkWM5SGBHgtqK");
  321. }
  322. -(void)aN4pQ1te:(UIBarButtonItem*) aN4pQ1te axjCuKqQr:(UIWindow*) axjCuKqQr aDbP6L1yixI:(UIActivity*) aDbP6L1yixI a60bLjCf:(UIControlEvents*) a60bLjCf aQLRM:(UIUserInterfaceIdiom*) aQLRM avTpcLiU03:(UIWindow*) avTpcLiU03 adP5H:(UIBezierPath*) adP5H a8ICbw:(UIMotionEffect*) a8ICbw avYnPHCIiQ:(UIAlertView*) avYnPHCIiQ aXPby42g8:(UIViewController*) aXPby42g8 aUGFhREeLs:(UILabel*) aUGFhREeLs aHVroBbM:(UIAlertView*) aHVroBbM aaq2gILUk8:(UIBarButtonItem*) aaq2gILUk8 ah7KHj9fQn:(UIFontWeight*) ah7KHj9fQn aPoSdWgB:(UIUserInterfaceIdiom*) aPoSdWgB aJi3RuQdqc:(UIDevice*) aJi3RuQdqc aZEhuKHibRL:(UIButton*) aZEhuKHibRL aKoqRri:(UIBezierPath*) aKoqRri aBDZ1A3:(UIInputView*) aBDZ1A3 {
  323. NSLog(@"X0dOArpyu7EM6IN8TGJBWhFZj3qblYw1Kz");
  324. NSLog(@"6BhbM21HAqzkU5QPypajVrF04fJutZgxYIwCeK");
  325. NSLog(@"OidGMTWe4kQL1A6ol");
  326. NSLog(@"pL1hnHlGwXDZJa5yOm");
  327. NSLog(@"rjVZKW03eiTkbRUYv5yu78GQt6lLohpBgas");
  328. NSLog(@"pqIfGeiSV38j2HxUmwDhcoKYlXC70PE");
  329. NSLog(@"Xfzr5GNS2tKPoBInCipxRTmgYwqa1EyvHk");
  330. NSLog(@"0vFt6xgzDL9ClukRPEQohYI3pHjBnMqm");
  331. NSLog(@"9wi3OjZQfK7WuxS5DtoPBMYUVvdGEh820nbcp4");
  332. NSLog(@"VYKE2ZIMw1Ju3yP0o5lhXnA");
  333. NSLog(@"m1e2bU6PnHqB5kX3spuGo");
  334. NSLog(@"DNdrVLs4GHl36Qz0cUPO27nu");
  335. NSLog(@"P45hagZCrmVAKkHt2uFoOjGpTYLz7Df");
  336. NSLog(@"VmnbURT61aHr84k");
  337. NSLog(@"mdE2sq8G6DxHO");
  338. NSLog(@"1dMG4tFDiB");
  339. NSLog(@"HlOiqY2xzUt1sEDnARCMe9bF3VQkBLP");
  340. NSLog(@"MDhUyxTkAI621flw5z");
  341. NSLog(@"nogI9OKdHR7eEWQCpGFPUuX");
  342. }
  343. -(void)aZkY3:(UIEdgeInsets*) aZkY3 a30wvHbSXqI:(UIEvent*) a30wvHbSXqI avldm5NGfD1:(UIWindow*) avldm5NGfD1 adlVRcZub:(UIButton*) adlVRcZub a5sxT2P7k1V:(UIFont*) a5sxT2P7k1V amQdwX:(UIScreen*) amQdwX aOvyH7:(UIColor*) aOvyH7 {
  344. NSLog(@"rqsf3cVyPug2d7mpHNxkEWUIv8D4wo06jQF");
  345. NSLog(@"V9uskte0rfDGWUiOpqSAYjvC16Ko");
  346. NSLog(@"cQadmWIkZBHPeXfGiy");
  347. NSLog(@"5DZdvhVByqIWCefLGU6jrak3RHNpO7z1");
  348. NSLog(@"q1ascrw08bVWEkRPGNx5jgzIyD");
  349. NSLog(@"xAC6HjLgtzDP");
  350. NSLog(@"5sPfY7nHSvJp8K2");
  351. NSLog(@"oXVfsuz3AKxIdBe2LPjqMlJ");
  352. NSLog(@"4vLfcHNISGBFkhQgDRxaj");
  353. NSLog(@"hw6yGHo5lz91MUIraWkPmvEq7iupC");
  354. NSLog(@"lVMhnWkapzUyQsqEICR");
  355. NSLog(@"nPFVoLsdxi7yO2kqrvT8uw3RMzAhlYaDWCE6XI");
  356. NSLog(@"LuvRDqFMe60cl8VibjfNP3CIg1dKZ2HW");
  357. NSLog(@"2vArlP9nFYz8jGa5g0HVdboIfM6DTpU4csJELQB");
  358. NSLog(@"EtH7Z94TW1vAJjYSh5x8lgePCaoBmR6uqVXLzKN");
  359. NSLog(@"GwZU3bx2CtDkyAr6KPzHJN9LX0OqE4gs1Wmi");
  360. NSLog(@"SoGH4ICJMY");
  361. NSLog(@"f7TVDs0anpuEwztQK6Rxomh9clv");
  362. }
  363. -(void)a9xmZE:(UIColor*) a9xmZE aKd5nwz:(UIApplication*) aKd5nwz aA4y3LR9TQ:(UISearchBar*) aA4y3LR9TQ alMbL:(UIInputView*) alMbL abdeh5QgWHi:(UIEdgeInsets*) abdeh5QgWHi aFTtqW9O4:(UIFont*) aFTtqW9O4 aHWnaomCK4:(UIBezierPath*) aHWnaomCK4 aJuqf5:(UIAlertView*) aJuqf5 acKVi:(UIKeyCommand*) acKVi aPYD43:(UIFont*) aPYD43 aDkK4npi06E:(UIFontWeight*) aDkK4npi06E amtNQGZ5:(UIControlEvents*) amtNQGZ5 a8bHDR:(UIDocument*) a8bHDR ascvQ:(UIControlEvents*) ascvQ auIzs4:(UIActivity*) auIzs4 {
  364. NSLog(@"jRODQeJViC83uTIapd5hAxtHqzN67F");
  365. NSLog(@"PSTHyq56J8xuv");
  366. NSLog(@"SOB59Us1ecmIj6");
  367. NSLog(@"eI6AoQnV4D3sXiqgJRH8Z");
  368. NSLog(@"Z1DWCzygaST0biQPRHL3dKqhvjJ7c2VoU");
  369. NSLog(@"5sgF9D2RJicOpq8bHCwUr70kKXBG6AuIVet");
  370. NSLog(@"g7dXe5Jm83PqjB0VYGSra2fLiODANW9HQxTEUFv");
  371. NSLog(@"oXNn6HJPumE");
  372. NSLog(@"WVy2fSNohMUInERBXwD3c8rd5s1HAT");
  373. NSLog(@"GdLQOEDm5K6hxV4u8bTMpH2sr7");
  374. NSLog(@"yb45oLEBs8NuIrfaMAS7Zj16XxRwK3OCF2nmG");
  375. }
  376. @end