Full Code of bang590/JSPatch for AI

master e80a5573af22 cached
228 files
1.1 MB
327.2k tokens
202 symbols
1 requests
Download .txt
Showing preview only (1,180K chars total). Download the full file or copy to clipboard to get everything.
Repository: bang590/JSPatch
Branch: master
Commit: e80a5573af22
Files: 228
Total size: 1.1 MB

Directory structure:
gitextract_5skxgrji/

├── .gitignore
├── .travis.yml
├── Demo/
│   ├── DribbbleDemo/
│   │   ├── Podfile
│   │   ├── README.md
│   │   ├── dribbbleDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Images.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   ├── LaunchImage-1.launchimage/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── LaunchImage.launchimage/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── dribbble/
│   │   │   │   ├── CommonDefine.js
│   │   │   │   ├── DBDataSource.js
│   │   │   │   ├── DBDetailController.js
│   │   │   │   ├── DBDetailViews.js
│   │   │   │   ├── DBTimelineController.js
│   │   │   │   ├── DBTimelineViews.js
│   │   │   │   ├── DBUserController.js
│   │   │   │   ├── DBUserViews.js
│   │   │   │   ├── main.js
│   │   │   │   └── tmpData.js
│   │   │   └── main.m
│   │   ├── dribbbleDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   └── dribbbleDemoTests/
│   │       ├── Info.plist
│   │       └── dribbbleDemoTests.m
│   ├── OSXDemo/
│   │   ├── JSPatchOSXDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Base.lproj/
│   │   │   │   └── MainMenu.xib
│   │   │   ├── Info.plist
│   │   │   ├── demo.js
│   │   │   └── main.m
│   │   └── JSPatchOSXDemo.xcodeproj/
│   │       ├── project.pbxproj
│   │       └── project.xcworkspace/
│   │           └── contents.xcworkspacedata
│   ├── SwiftDemo/
│   │   ├── SwiftDemo/
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── SwiftDemo-Bridging-Header.h
│   │   │   ├── TestObject.swift
│   │   │   ├── ViewController.swift
│   │   │   └── demo.js
│   │   └── SwiftDemo.xcodeproj/
│   │       ├── project.pbxproj
│   │       └── project.xcworkspace/
│   │           └── contents.xcworkspacedata
│   ├── iOSDemo/
│   │   ├── JSPatchDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── JPViewController.h
│   │   │   ├── JPViewController.m
│   │   │   ├── Supporting Files/
│   │   │   │   ├── Images.xcassets/
│   │   │   │   │   └── AppIcon.appiconset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── Info.plist
│   │   │   │   └── main.m
│   │   │   └── demo.js
│   │   ├── JSPatchDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace/
│   │   │   │   └── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── JSPatchDemo.xcscheme
│   │   └── JSPatchTests/
│   │       ├── Info.plist
│   │       ├── InheritTest.js
│   │       ├── JPCFunctionTest.h
│   │       ├── JPCFunctionTest.m
│   │       ├── JPInheritanceTestObjects.h
│   │       ├── JPInheritanceTestObjects.m
│   │       ├── JPJSClassTest.h
│   │       ├── JPJSClassTest.m
│   │       ├── JPMultithreadTestObject.h
│   │       ├── JPMultithreadTestObject.m
│   │       ├── JPNumberTest.h
│   │       ├── JPNumberTest.m
│   │       ├── JPPerformanceTest.h
│   │       ├── JPPerformanceTest.m
│   │       ├── JPSuperTestObject.h
│   │       ├── JPSuperTestObject.m
│   │       ├── JPTestObject.h
│   │       ├── JPTestObject.m
│   │       ├── JSPatchTests.m
│   │       ├── jsCFunctionTest.js
│   │       ├── jsClassTest.js
│   │       ├── jsNumberTest.js
│   │       ├── multithreadTest.js
│   │       ├── newBlockTest.h
│   │       ├── newBlockTest.js
│   │       ├── newBlockTest.m
│   │       ├── newProtocolTest.h
│   │       ├── newProtocolTest.js
│   │       ├── newProtocolTest.m
│   │       ├── performanceTest.js
│   │       ├── protocolTest.js
│   │       ├── superTest.js
│   │       └── test.js
│   ├── iOSPlayground/
│   │   ├── JSPatchPlayground/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Brand Assets.launchimage/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   └── LaunchImage.launchimage/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── JPErrorMsgViewController.h
│   │   │   ├── JPErrorMsgViewController.m
│   │   │   ├── JPRootViewController.h
│   │   │   ├── JPRootViewController.m
│   │   │   ├── libs/
│   │   │   │   ├── SGDirWatchdog.h
│   │   │   │   └── SGDirWatchdog.m
│   │   │   ├── main.m
│   │   │   └── src/
│   │   │       ├── JPDemoController.js
│   │   │       └── main.js
│   │   ├── JSPatchPlayground.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   └── README.md
│   ├── iOSPlaygroundToolDemo/
│   │   ├── JSPatchPlaygroundDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   └── apple.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── JPRootViewController.h
│   │   │   ├── JPRootViewController.m
│   │   │   ├── js/
│   │   │   │   └── demo.js
│   │   │   └── main.m
│   │   ├── JSPatchPlaygroundDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   └── README.md
│   └── tvOSDemo/
│       ├── JSPatchDemo/
│       │   ├── AppDelegate.h
│       │   ├── AppDelegate.m
│       │   ├── JPViewController.h
│       │   ├── JPViewController.m
│       │   ├── Supporting Files/
│       │   │   ├── Images.xcassets/
│       │   │   │   └── AppIcon.appiconset/
│       │   │   │       └── Contents.json
│       │   │   ├── Info.plist
│       │   │   └── main.m
│       │   └── demo.js
│       └── JSPatchDemo.xcodeproj/
│           ├── project.pbxproj
│           └── project.xcworkspace/
│               └── contents.xcworkspacedata
├── Extensions/
│   ├── JPBlock/
│   │   ├── JPBlock.h
│   │   ├── JPBlock.m
│   │   ├── JPBlockWrapper.h
│   │   └── JPBlockWrapper.m
│   ├── JPCFunction/
│   │   ├── JPCFunction.h
│   │   ├── JPCFunction.m
│   │   ├── JPMemory.h
│   │   ├── JPMemory.m
│   │   ├── JPStructPointer.h
│   │   └── JPStructPointer.m
│   ├── JPCFunctionBinder/
│   │   ├── CoreGraphics/
│   │   │   ├── JPCGBitmapContext.h
│   │   │   ├── JPCGBitmapContext.m
│   │   │   ├── JPCGColor.h
│   │   │   ├── JPCGColor.m
│   │   │   ├── JPCGContext.h
│   │   │   ├── JPCGContext.m
│   │   │   ├── JPCGGeometry.h
│   │   │   ├── JPCGGeometry.m
│   │   │   ├── JPCGImage.h
│   │   │   ├── JPCGImage.m
│   │   │   ├── JPCGPath.h
│   │   │   ├── JPCGPath.m
│   │   │   ├── JPCGTransform.h
│   │   │   ├── JPCGTransform.m
│   │   │   ├── JPCoreGraphics.h
│   │   │   └── JPCoreGraphics.m
│   │   └── UIKit/
│   │       ├── JPUIGeometry.h
│   │       ├── JPUIGeometry.m
│   │       ├── JPUIGraphics.h
│   │       ├── JPUIGraphics.m
│   │       ├── JPUIImage.h
│   │       ├── JPUIImage.m
│   │       ├── JPUIKit.h
│   │       └── JPUIKit.m
│   ├── JPCleaner.h
│   ├── JPCleaner.m
│   ├── JPDispatch.h
│   ├── JPDispatch.m
│   ├── JPLibffi/
│   │   ├── JPMethodSignature.h
│   │   ├── JPMethodSignature.m
│   │   └── libffi/
│   │       ├── ffi.h
│   │       ├── ffi_arm.h
│   │       ├── ffi_arm64.h
│   │       ├── ffi_i386.h
│   │       ├── ffi_x86_64.h
│   │       ├── ffitarget.h
│   │       ├── ffitarget_arm.h
│   │       ├── ffitarget_arm64.h
│   │       ├── ffitarget_i386.h
│   │       ├── ffitarget_x86_64.h
│   │       └── libffi.a
│   ├── JPLocker.h
│   ├── JPLocker.m
│   ├── JPNumber.h
│   ├── JPNumber.m
│   ├── JPPlaygroundTool/
│   │   ├── JPPlayground.h
│   │   ├── JPPlayground.m
│   │   ├── JPPlaygroundModule/
│   │   │   ├── JPKeyCommands.h
│   │   │   ├── JPKeyCommands.m
│   │   │   ├── SGDirWatchdog.h
│   │   │   └── SGDirWatchdog.m
│   │   ├── JPPlaygroundView/
│   │   │   ├── JPDevErrorView.h
│   │   │   ├── JPDevErrorView.m
│   │   │   ├── JPDevMenu.h
│   │   │   ├── JPDevMenu.m
│   │   │   ├── JPDevTipView.h
│   │   │   └── JPDevTipView.m
│   │   └── README.md
│   ├── JPProtocol.h
│   ├── JPProtocol.m
│   ├── JPSpecialInit.h
│   └── JPSpecialInit.m
├── JSPatch/
│   ├── JPEngine.h
│   ├── JPEngine.m
│   └── JSPatch.js
├── JSPatch.podspec
├── LICENSE
├── Loader/
│   ├── JPLoader.h
│   ├── JPLoader.m
│   ├── libs/
│   │   ├── RSA.h
│   │   ├── RSA.m
│   │   ├── ZipArchive.h
│   │   ├── ZipArchive.m
│   │   └── minizip/
│   │       ├── crypt.h
│   │       ├── ioapi.c
│   │       ├── ioapi.h
│   │       ├── mztools.c
│   │       ├── mztools.h
│   │       ├── unzip.c
│   │       ├── unzip.h
│   │       ├── zip.c
│   │       └── zip.h
│   └── tools/
│       └── packer.php
├── README-CN.md
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# General
.DS_Store

# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control

Pods/

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build


================================================
FILE: .travis.yml
================================================
language: objective-c
osx_image: xcode7.3
env:
  - UDID="D72029C0-E8E1-4349-B423-E458466135B3", IOS_DEVICE="iPhone 4s (8.1)"
  - UDID="5752202B-E7A2-4B6C-9D7B-B211C2F54654", IOS_DEVICE="iPhone 6s (9.3)"

script:
    - xcrun instruments -s devices
    - open -a "simulator" --args -CurrentDeviceUDID $UDID
    - xcodebuild test -project ./Demo/iOSDemo/JSPatchDemo.xcodeproj -scheme JSPatchDemo -sdk iphonesimulator -destination "platform=iOS Simulator,id=$UDID"
    - osascript -e 'tell app "Simulator" to quit'


================================================
FILE: Demo/DribbbleDemo/Podfile
================================================
platform :ios, '7.0'
target 'dribbbleDemo' do
        pod "AFNetworking", "~> 2.0"
		pod "SDWebImage"
end

================================================
FILE: Demo/DribbbleDemo/README.md
================================================
# JSPatch Dribbble Demo

![Screenshot](https://raw.github.com/bang590/JSPatch/master/Demo/DribbbleDemo/Screenshot.gif)

A Dribbble iOS client write in JSPatch.

Please install the cocoapods and run `pod install`.

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/AppDelegate.h
================================================
//
//  AppDelegate.h
//  dribbbleDemo
//
//  Created by bang on 15/9/1.
//  Copyright (c) 2015年 bang. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end



================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/AppDelegate.m
================================================
//
//  AppDelegate.m
//  dribbbleDemo
//
//  Created by bang on 15/9/1.
//  Copyright (c) 2015年 bang. All rights reserved.
//

#import "AppDelegate.h"
#import "JPEngine.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [self.window makeKeyAndVisible];
    
    [JPEngine startEngine];
    NSString *sourcePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"dribbble/main.js"];
    [JPEngine evaluateScriptWithPath:sourcePath];
    
    [self initRootViewController];
    return YES;
}

- (void)initRootViewController
{
}

- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

@end


================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/Images.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "iphone",
      "size" : "29x29",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "29x29",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "size" : "40x40",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "40x40",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "size" : "60x60",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "60x60",
      "scale" : "3x"
    },
    {
      "idiom" : "ipad",
      "size" : "29x29",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "29x29",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "40x40",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "40x40",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "76x76",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "76x76",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "83.5x83.5",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/Images.xcassets/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/Images.xcassets/LaunchImage-1.launchimage/Contents.json
================================================
{
  "images" : [

  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/Images.xcassets/LaunchImage.launchimage/Contents.json
================================================
{
  "images" : [
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "736h",
      "filename" : "Default-576@2x.png",
      "minimum-system-version" : "8.0",
      "orientation" : "portrait",
      "scale" : "3x"
    },
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "736h",
      "filename" : "Default-736@3x.png",
      "minimum-system-version" : "8.0",
      "orientation" : "landscape",
      "scale" : "3x"
    },
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "667h",
      "filename" : "Default-667@2x.png",
      "minimum-system-version" : "8.0",
      "orientation" : "portrait",
      "scale" : "2x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "iphone",
      "filename" : "Default@2x.png",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "2x"
    },
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "retina4",
      "filename" : "Default-568h@2x.png",
      "minimum-system-version" : "7.0",
      "orientation" : "portrait",
      "scale" : "2x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "ipad",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "1x"
    },
    {
      "orientation" : "landscape",
      "idiom" : "ipad",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "1x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "ipad",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "2x"
    },
    {
      "orientation" : "landscape",
      "idiom" : "ipad",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>com.jspatch..$(PRODUCT_NAME:rfc1034identifier)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>


================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/CommonDefine.js
================================================
global.SCREEN_WIDTH = require('UIScreen').mainScreen().bounds().width;
global.SCREEN_HEIGHT = require('UIScreen').mainScreen().bounds().height;

global.UIHelper = {
  bottomY: function(view) {
    var f = view.frame();
    return f.height + f.y;
  },
  rightX: function(view) {
    var f = view.frame();
    return f.width + f.x;
  },
  setWidth: function(view, width) {
    var f = view.frame();
    f.width = width
    view.setFrame(f)	
  },
  setHeight: function(view, height) {
    var f = view.frame();
    f.height = height
    view.setFrame(f)	
  },
  setX: function(view, x) {
    var f = view.frame();
    f.x = x
    view.setFrame(f)	
  },
  setY: function(view, y) {
    var f = view.frame();
    f.y = y
    view.setFrame(f)	
  }
}

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/DBDataSource.js
================================================
var _dataSourceShareInstance;
defineJSClass('DBDataSource', {
  init: function(){
    this.dribbbleHost = 'https://api.dribbble.com/v1';
    this.requestManager = require('AFHTTPRequestOperationManager').manager();
    this.requestManager.requestSerializer().setValue_forHTTPHeaderField('Bearer deeb37c0823d3866650db12df9e36730a0453a5a7b8e6493e0ac5ece15929613', 'Authorization');
    return this;
  },

  _get: function(path, params, succ, fail){
    var url = this.dribbbleHost + path
    this.requestManager.GET_parameters_success_failure(url, params, 
      block('AFHTTPRequestOperation *, id', function(operation, responseObject) {
          if (succ) succ(responseObject);
      }), 
      block('AFHTTPRequestOperation *, NSError *', function(operation, error) {
          if (fail) fail(error);
      })
    );
  },
  loadPublicShots: function(page, per_page, succ, fail) {
    var path = '/shots';
    this._get(path, {page: page, per_page:per_page}, succ, fail)
  },
  loadComments: function(id, page, per_page, succ, fail) {
    var path = '/shots/' + id + '/comments';
    this._get(path, {page: page, per_page:per_page}, succ, fail)
  },

  loadUserShots: function(userId, page, per_page, succ, fail) {
    var path = '/users/' + userId + '/shots';
    this._get(path, {page: page, per_page:per_page}, succ, fail)
  },

}, {
  shareInstance: function(){
    if (!_dataSourceShareInstance) {
      _dataSourceShareInstance = DBDataSource.alloc().init();
    }
    return _dataSourceShareInstance;
  },
})


/*item struct:

{
    "id": 2619381,
    "title": "Seaborn Oyster Co.",
    "description": null,
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher_teaser.jpg"
    },
    "views_count": 2166,
    "likes_count": 235,
    "comments_count": 2,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 11,
    "created_at": "2016-03-29T17:12:41Z",
    "updated_at": "2016-03-29T17:12:53Z",
    "html_url": "https://dribbble.com/shots/2619381-Seaborn-Oyster-Co",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619381/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619381/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619381/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619381/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619381/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619381/rebounds",
    "animated": false,
    "tags": [
      "charleston",
      "company",
      "ocean",
      "oyster",
      "sea",
      "wave"
    ],
    "user": {
      "id": 52758,
      "name": "Jay Fletcher",
      "username": "jfletcherdesign",
      "html_url": "https://dribbble.com/jfletcherdesign",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/52758/avatars/normal/J_FLETCHER_DESIGN_LOGO-01.jpg?1401983283",
      "bio": "",
      "location": "Charleston, SC",
      "links": {
        "web": "http://www.jfletcherdesign.com",
        "twitter": "https://twitter.com/jfletcherdesign"
      },
      "buckets_count": 0,
      "comments_received_count": 5239,
      "followers_count": 13803,
      "followings_count": 558,
      "likes_count": 6531,
      "likes_received_count": 104895,
      "projects_count": 10,
      "rebounds_received_count": 325,
      "shots_count": 481,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/52758/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/52758/followers",
      "following_url": "https://api.dribbble.com/v1/users/52758/following",
      "likes_url": "https://api.dribbble.com/v1/users/52758/likes",
      "projects_url": "https://api.dribbble.com/v1/users/52758/projects",
      "shots_url": "https://api.dribbble.com/v1/users/52758/shots",
      "teams_url": "https://api.dribbble.com/v1/users/52758/teams",
      "created_at": "2011-08-13T23:30:38Z",
      "updated_at": "2016-03-29T17:12:53Z"
    },
    "team": null
  },

  */

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/DBDetailController.js
================================================
include('DBDetailViews.js')
include('DBUserController.js')

defineClass('DBDetailViewController: UITableViewController', [
  'loadingView', 
  'isLoading',
  'commentsData',
  'itemData',
  'currPage'
  ], {
  initWithItem: function(item){
    self = self.super().init();
    if (self) {
      self.tableView().setSeparatorStyle(0);
      self.setTitle(item['title']);

      var headerView = DBDetailHeaderView.alloc().initWithItem(item);
      var slf = self;
      headerView.setTapUserCallback(function(user){
        slf._handleGotoUser(user);
      })
      self.tableView().setTableHeaderView(headerView);


      var loadingView = require('UIActivityIndicatorView').alloc().initWithActivityIndicatorStyle(2);
      loadingView.setFrame({x: (SCREEN_WIDTH - 40) / 2, y:headerView.frame().height + 30, width:40, height:40});
      loadingView.startAnimating();
      self.view().addSubview(loadingView);
      self.setLoadingView(loadingView);

      self.setCommentsData([]);
      self.setItemData(item);
      self.setCurrPage(1);
      self._loadComment();
    }
    return self;
  },

  _loadComment: function(){
    self.setIsLoading(1)
    var item = self.itemData();
    var perPage = 10;
    var slf = self;
    DBDataSource.shareInstance().loadComments(item['id'], self.currPage(), perPage, function(comments){
      slf.loadingView().removeFromSuperview();
      slf.setCommentsData(slf.commentsData().concat(comments));
      slf.setCurrPage(slf.currPage() + 1);
      slf.setIsLoading(0);

      if (comments.length >= perPage) {
        slf.tableView().setTableFooterView(DBLoadMoreView.alloc().init());
      } else {
        slf.tableView().setTableFooterView(null);
      }
      slf.tableView().reloadData();
    }, function(){
      //fail
    })
  },
  numberOfSectionsInTableView: function(tableView) {
    return 1;
  },
  tableView_numberOfRowsInSection: function(tableView, section) {
    if (!self.commentsData()) return 0;
    return self.commentsData().length;
  },
  tableView_cellForRowAtIndexPath: function(tableView, indexPath) {
    var cell = tableView.dequeueReusableCellWithIdentifier("cell") 
    if (!cell) {
      cell = DBCommentViewCell.alloc().initWithStyle_reuseIdentifier(0, "cell")
      var slf = self;
      cell.setTapUserCallback(function(user){
        slf._handleGotoUser(user);
      })
    }

    cell.renderWithComment(self.commentsData()[indexPath.row()]);
    return cell
  },
  tableView_heightForRowAtIndexPath: function(tableView, indexPath) {
    var comment = self.commentsData()[indexPath.row()];
    if (!comment['contentHeight']) {
      comment['contentHeight'] = DBCommentViewCell.heightWithComment(comment);
    }
    return comment['contentHeight'];
  },

  scrollViewDidScroll: function(scrollView) {
    var contentOffset = scrollView.contentOffset();
    var contentSize = scrollView.contentSize();
    if (!self.isLoading() && self.tableView().tableFooterView() && contentOffset.y - contentSize.height > -SCREEN_HEIGHT) {
      self._loadComment();
    }
  },

  _handleGotoUser: function(user) {
    var userVC = DBUserViewController.alloc().initWithUser(user);
    self.navigationController().pushViewController_animated(userVC, YES);
  }
})

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/DBDetailViews.js
================================================
require('UIView, UIImage')
var gap = 10;
var avatarSize = 40;
defineClass('DBDetailHeaderView: UIView', ['tapUserCallback', 'itemData'], {
  initWithItem: function(item) {
    self = self.super().init();
    if (self) {
      self.setItemData(item);

      var avatarButton = require('UIButton')
                              .alloc()
                              .initWithFrame({x:gap, y:gap, width:avatarSize, height:avatarSize});
      avatarButton.addTarget_action_forControlEvents(self, 'handleTapUser', 1 <<  6);

      var nameLabel = UILabel
                        .alloc()
                        .initWithFrame({x: gap * 2 + avatarSize, y:gap, width:SCREEN_WIDTH - avatarSize - gap * 3 , height:20});
      nameLabel.setFont(UIFont.systemFontOfSize(14));

      var timeLabel = UILabel
                        .alloc()
                        .initWithFrame({x: gap * 2 + avatarSize, y:gap + 20, width:SCREEN_WIDTH - avatarSize - gap * 3 , height:20});
      timeLabel.setFont(UIFont.systemFontOfSize(12));
      timeLabel.setTextColor(UIColor.grayColor());

      var contentImageView = require('UIImageView')
                              .alloc()
                              .initWithFrame({x: gap, y:gap*2 + avatarSize, width:SCREEN_WIDTH - gap*2, height:(SCREEN_WIDTH - gap*2)*3/4});

      self.addSubview(avatarButton);
      self.addSubview(nameLabel);
      self.addSubview(timeLabel);
      self.addSubview(contentImageView);

      var panelView = self._genPanelViewWithItem(item);
      var panelFrame = panelView.frame();
      panelFrame.x = SCREEN_WIDTH - (gap + panelFrame.width);
      panelFrame.y = contentImageView.frame().y + contentImageView.frame().height + gap;
      panelView.setFrame(panelFrame);
      self.addSubview(panelView);

      avatarButton.sd__setImageWithURL_forState(require('NSURL').URLWithString(item['user']['avatar_url']), 0);
      contentImageView.sd__setImageWithURL(require('NSURL').URLWithString(item['images']['normal']));
      nameLabel.setText(item['user']['name'])

      var d = new Date(item['created_at']);
      var dateStr = d.getFullYear() + '年' + (d.getMonth() + 1) + '月' + d.getDate() + '日' + ' ' + d.getHours() + ':' + d.getMinutes();
      timeLabel.setText(dateStr);

      self.setFrame({x:0, y:0, width: SCREEN_WIDTH, height:panelView.frame().y + panelView.frame().height});
    }
    return self;
  },
  handleTapUser : function(){
    var cb = self.tapUserCallback();
    if (cb) cb(self.itemData()['user']);
  },
  _genPanelViewWithItem : function(item) {
    var panelView = UIView
                      .alloc()
                      .init();

    var iconSize = 12;
    var viewImageView = UIImageView
                          .alloc()
                          .initWithFrame({x:0, y:0, width:15, height: 15});
    viewImageView.setImage(UIImage.imageWithContentsOfFile(resourcePath('imgs/view.png')));
    panelView.addSubview(viewImageView);

    var viewLabel = self._genPanelLabel(item['views_count'], {x: UIHelper.rightX(viewImageView) + 5, y:0, width:40, height:iconSize});
    panelView.addSubview(viewLabel);



    var commentImageView = UIImageView
                          .alloc()
                          .initWithFrame({x:UIHelper.rightX(viewLabel) + 10, y:3, width:iconSize, height: iconSize});
    commentImageView.setImage(UIImage.imageWithContentsOfFile(resourcePath('imgs/comment.png')));
    panelView.addSubview(commentImageView);

    var commentLabel = self._genPanelLabel(item['comments_count'], {x: UIHelper.rightX(commentImageView) + 5, y:0, width:40, height:iconSize});
    panelView.addSubview(commentLabel);




    var likeImageView = UIImageView
                          .alloc()
                          .initWithFrame({x:UIHelper.rightX(commentLabel) + 10, y:3, width:iconSize, height: iconSize});
    likeImageView.setImage(UIImage.imageWithContentsOfFile(resourcePath('imgs/like.png')));
    panelView.addSubview(likeImageView);


    var commentLabel = self._genPanelLabel(item['likes_count'], {x: UIHelper.rightX(likeImageView) + 5, y:0, width:40, height:iconSize});
    panelView.addSubview(commentLabel);

    panelView.setFrame({x:0, y:0, width:UIHelper.rightX(commentLabel), height:40});

    return panelView;
  },
  _genPanelLabel: function(val, frame) {
    var viewLabel = UILabel.alloc().initWithFrame(frame)
    viewLabel.setText(val.toString());
    viewLabel.setFont(UIFont.systemFontOfSize(14));
    viewLabel.setTextColor(UIColor.colorWithWhite_alpha(.5, 1))
    viewLabel.sizeToFit();
    return viewLabel;
  }
})




defineClass('DBCommentViewCell: UITableViewCell', [
    'avatarButton', 
    'nameLabel',
    'timeLabel',
    'contentLabel',
    'tapUserCallback',
    'commentData',
], {
  initWithStyle_reuseIdentifier: function(style, reuseIdentifier) {
    self = self.super().initWithStyle_reuseIdentifier(style, reuseIdentifier);
    if (self) {
      self.setSelectionStyle(0);

      var avatarButton = require('UIButton')
                              .alloc()
                              .initWithFrame({x:gap, y:gap, width:avatarSize, height:avatarSize});
      avatarButton.addTarget_action_forControlEvents(self, 'handleTapUser', 1 <<  6);

      var nameLabel = UILabel
                        .alloc()
                        .initWithFrame({x: gap * 2 + avatarSize, y:gap, width:SCREEN_WIDTH - avatarSize - gap * 3 , height:20});
      nameLabel.setFont(UIFont.systemFontOfSize(14));
      nameLabel.setTextColor(UIColor.colorWithWhite_alpha(.5, 1))

      var timeLabel = UILabel
                        .alloc()
                        .initWithFrame({x: SCREEN_WIDTH - gap - 200, y:gap, width:200 , height:20});
      timeLabel.setFont(UIFont.systemFontOfSize(12));
      timeLabel.setTextColor(UIColor.colorWithWhite_alpha(.7, 1));
      timeLabel.setTextAlignment(2);

      var contentLabel = DBCommentViewCell._genContentLabel();
      self.addSubview(avatarButton);
      self.addSubview(nameLabel);
      self.addSubview(timeLabel);
      self.addSubview(contentLabel);

      self.setAvatarButton(avatarButton);
      self.setNameLabel(nameLabel);
      self.setTimeLabel(timeLabel);
      self.setContentLabel(contentLabel);
    }
    return self;
  },
  renderWithComment: function(comment) {
    self.avatarButton().sd__setImageWithURL_forState(require('NSURL').URLWithString(comment['user']['avatar_url']), 0);
    self.nameLabel().setText(comment['user']['name'])

    var d = new Date(comment['created_at']);
    var dateStr = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + '-';// + ' ' + d.getHours() + ':' + d.getMinutes();
    self.timeLabel().setText(dateStr);

    DBCommentViewCell._renderContentLabel(comment, self.contentLabel());

    self.setCommentData(comment);
  },

  handleTapUser : function(){
    var cb = self.tapUserCallback();
    if (cb) cb(self.commentData()['user']);
  },
  

}, {

  heightWithComment: function(comment) {
    var contentLabel = self._genContentLabel();
    self._renderContentLabel(comment, contentLabel);
    var contentFrame = contentLabel.frame();
    return contentFrame.height + contentFrame.y + gap;
  },

  _renderContentLabel: function(comment, contentLabel) {
    if (!comment['bodyText']) {
      comment['bodyText'] = comment['body'].replace('\n', '').replace('</p>', '\n').replace(/<[^>]+>/g,"")
    }
    contentLabel.setText(comment['bodyText']);

    var size = contentLabel.sizeThatFits({width:contentLabel.frame().width, height:1000});
    var frame = contentLabel.frame();
    frame.height = size.height;
    contentLabel.setFrame(frame);
  },

  _genContentLabel: function() {
    var contentLabel = require('UILabel')
                                  .alloc()
                                  .initWithFrame({x:gap * 2 + avatarSize, y: gap*2 + 15, width:SCREEN_WIDTH - gap * 3 - avatarSize, height:0});

    contentLabel.setFont(UIFont.systemFontOfSize(16));
    contentLabel.setNumberOfLines(0);
    return contentLabel;
  }
})

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/DBTimelineController.js
================================================
include('DBTimelineViews.js')
include('DBDetailController.js')

defineClass('WBTimelineViewController: UITableViewController', [
  'loadingView', 
  'isLoading',
  'shots',
  'currPage'
], {
  init: function(){
    self = self.super().init();

    var loadingView = require('UIActivityIndicatorView').alloc().initWithActivityIndicatorStyle(2);
    loadingView.setFrame({x: (SCREEN_WIDTH - 40) / 2, y:(SCREEN_HEIGHT - 40 - 64) / 2, width:40, height:40});
    loadingView.startAnimating();
    self.view().addSubview(loadingView);
    self.setLoadingView(loadingView);

    self.tableView().setBackgroundColor(UIColor.colorWithWhite_alpha(.9, 1));
    self.tableView().setSeparatorStyle(0);
    self.setTitle('Dribbble');

    self.setShots([]);
    self.setCurrPage(1);
    self._loadShots();
    return self;
  },

  _loadShots: function() {
    self.setIsLoading(1)
    var perPage = 20;
    var slf = self;
    DBDataSource.shareInstance().loadPublicShots(self.currPage(), perPage, function(shots){
      slf.loadingView().removeFromSuperview();
      slf.setShots(slf.shots().concat(shots));
      slf.setCurrPage(slf.currPage() + 1);
      slf.setIsLoading(0);

      if (shots.length >= perPage) {
        slf.tableView().setTableFooterView(DBLoadMoreView.alloc().init());
      } else {
        slf.tableView().setTableFooterView(null);
      }
      slf.tableView().reloadData();
    }, function(){
      //fail
    })
  },
  numberOfSectionsInTableView: function(tableView) {
    return 1;
  },
  tableView_numberOfRowsInSection: function(tableView, section) {
    return self.shots().length / 2;
  },
  tableView_cellForRowAtIndexPath: function(tableView, indexPath) {
    var cell = tableView.dequeueReusableCellWithIdentifier("cell") 
    if (!cell) {
      cell = DBTimelineViewCell.alloc().initWithStyle_reuseIdentifier(0, "cell")
      var slf = self;
      cell.setTapCallback(function(item){
        slf._handleGotoItem(item);
      })
    }

    cell.renderWithItems(self.shots()[indexPath.row()*2],
                         self.shots()[indexPath.row()*2 + 1]);
    return cell
  },
  tableView_heightForRowAtIndexPath: function(tableView, indexPath) {
    return (SCREEN_WIDTH / 2) *3/4 + 30;
  },

  scrollViewDidScroll: function(scrollView) {
    var contentOffset = scrollView.contentOffset();
    var contentSize = scrollView.contentSize();
    if (!self.isLoading() && contentOffset.y - contentSize.height > -SCREEN_HEIGHT) {
      self._loadShots();
    }
  },

  _handleGotoItem: function(item) {
    var detailVC = DBDetailViewController.alloc().initWithItem(item);
    self.navigationController().pushViewController_animated(detailVC, YES);
  }
})

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/DBTimelineViews.js
================================================
var gap = 10;
var avatarSize = 40;
require('UILabel, UIColor, UIFont, UITextView');


defineClass('DBTimelineItemView: UIView', [
    'avatarImageView', 
    'nameLabel',
    'contentImageBtn',
    'tapCallback'
], {
  init: function(){
    self = self.super().init();

    var imgGap = 5;
    var width = (SCREEN_WIDTH - 10 * 3) / 2;
    self.setFrame({x: 0, y: 0, width:width, height: width * 3/4 + 30});
    self.setBackgroundColor(UIColor.whiteColor());

    var contentImageBtn = require('UIButton')
                            .alloc()
                            .initWithFrame({x: imgGap, y:imgGap, width:width - 2*imgGap, height:(width - 2*imgGap)*3/4});
    self.addSubview(contentImageBtn);
    self.setContentImageBtn(contentImageBtn);
    contentImageBtn.addTarget_action_forControlEvents(self, 'handleTap', 1 <<  6);

    var avatarSize = 18;

    var avatarImageView = require('UIImageView')
                            .alloc()
                            .initWithFrame({x:imgGap, y:contentImageBtn.frame().height + contentImageBtn.frame().y + imgGap + 2, width:avatarSize, height:avatarSize});
    self.addSubview(avatarImageView);
    self.setAvatarImageView(avatarImageView);

    var nameLabel = UILabel
                      .alloc()
                      .initWithFrame({x: imgGap + avatarSize + 5, y:avatarImageView.frame().y, width:width - avatarSize - imgGap*2 - 5 , height:avatarSize});
    nameLabel.setFont(UIFont.systemFontOfSize(12));
    nameLabel.setTextColor(UIColor.grayColor());
    self.addSubview(nameLabel);
    self.setNameLabel(nameLabel);

    return self;
  },

  handleTap: function() {
    var cb = self.tapCallback();
    if (cb) cb();
  },

  renderWithItem: function(item) {
    self.contentImageBtn().sd__setImageWithURL_forState(require('NSURL').URLWithString(item['images']['normal']), 0);
    self.avatarImageView().sd__setImageWithURL(require('NSURL').URLWithString(item['user']['avatar_url']));
    self.nameLabel().setText(item['user']['name']);
  },

})

defineClass('DBTimelineViewCell: UITableViewCell', [
    'itemView1', 
    'itemView2',
    'tapCallback',
], {
  initWithStyle_reuseIdentifier: function(style, reuseIdentifier) {
      self = self.super().initWithStyle_reuseIdentifier(style, reuseIdentifier);
      if (self) {
        self.setSelectionStyle(0);
        self.contentView().setBackgroundColor(UIColor.colorWithWhite_alpha(.9, 1));
        self._initItemView();
      }
      return self;
  },
  _initItemView: function(){
    var itemView1 = DBTimelineItemView.alloc().init();
    var itemView2 = DBTimelineItemView.alloc().init();

    itemView1.setFrame({x:gap, y: gap, width: itemView1.frame().width, height: itemView1.frame().height});
    itemView2.setFrame({x:gap*2 + itemView1.frame().width, y: gap, width: itemView2.frame().width, height: itemView2.frame().height});

    self.setItemView1(itemView1);
    self.setItemView2(itemView2);

    self.addSubview(itemView1);
    self.addSubview(itemView2);
  },
  renderWithItems: function(item1, item2) {
    if (item1) {
      self.itemView1().renderWithItem(item1);
    }
    if (item2) {
      self.itemView2().renderWithItem(item2);
    }
    self.itemView1().setHidden(!item1);
    self.itemView2().setHidden(!item2);

    var slf = self
    self.itemView1().setTapCallback(function(){
      var cb = slf.tapCallback();
      if (cb) cb(item1);
    })
    self.itemView2().setTapCallback(function(){
      var cb = slf.tapCallback();
      if (cb) cb(item2);
    })
  }
})

defineClass('DBLoadMoreView:UIView', {
  init: function(){
    self = self.super().init();
    
    var loadingView = require('UIActivityIndicatorView').alloc().initWithActivityIndicatorStyle(2);
    loadingView.startAnimating();
    loadingView.setFrame({x:(SCREEN_WIDTH - 140) / 2, y: 10, width:40, height: 40});

    var loadingLabel = require('UILabel').alloc().init();
    loadingLabel.setText('Loading...');
    loadingLabel.setFrame({x:(SCREEN_WIDTH - 140) / 2 + 40, y: 10, width:90, height: 40});
    loadingLabel.setTextColor(require('UIColor').grayColor());

    self.addSubview(loadingView);
    self.addSubview(loadingLabel);

    self.setFrame({x:0, y:0, width:SCREEN_WIDTH, height: 60});
    return self;
  },
})

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/DBUserController.js
================================================
include('DBTimelineViews.js')
include('DBUserViews.js')

defineClass('DBUserViewController: UITableViewController', [
  'loadingView', 
  'isLoading',
  'commentsData',
  'user',
  'shots',
  'currPage'
  ], {
  initWithUser: function(user){
    self = self.super().init();
    if (self) {
      self.tableView().setSeparatorStyle(0);
      self.tableView().setBackgroundColor(UIColor.colorWithWhite_alpha(.9, 1));
      self.setTitle(user['name']);

      var headerView = DBUserHeaderView.alloc().initWithUser(user);
      self.tableView().setTableHeaderView(headerView);

      var loadingView = require('UIActivityIndicatorView').alloc().initWithActivityIndicatorStyle(2);
      loadingView.setFrame({x: (SCREEN_WIDTH - 40) / 2, y:headerView.frame().height + 30, width:40, height:40});
      loadingView.startAnimating();
      self.view().addSubview(loadingView);
      self.setLoadingView(loadingView);

      self.setShots([]);
      self.setUser(user);
      self.setCurrPage(1);
      self._loadShots();
    }
    return self;
  },

  _loadShots: function(){
    self.setIsLoading(1)
    var user = self.user();
    var perPage = 10;
    var slf = self;
    DBDataSource.shareInstance().loadUserShots(user['id'], self.currPage(), perPage, function(newShots){
      slf.loadingView().removeFromSuperview();
      slf.setShots(slf.shots().concat(newShots));
      slf.setCurrPage(slf.currPage() + 1);
      slf.setIsLoading(0);

      if (newShots.length >= perPage) {
        slf.tableView().setTableFooterView(DBLoadMoreView.alloc().init());
      } else {
        slf.tableView().setTableFooterView(null);
      }
      slf.tableView().reloadData();
    }, function(){
      //fail
    })
  },
  numberOfSectionsInTableView: function(tableView) {
    return 1;
  },
  tableView_numberOfRowsInSection: function(tableView, section) {
    if (!self.shots()) return 0;
    return self.shots().length / 2;
  },
  tableView_cellForRowAtIndexPath: function(tableView, indexPath) {
    var cell = tableView.dequeueReusableCellWithIdentifier("cell") 
    if (!cell) {
      cell = DBUserViewCell.alloc().initWithStyle_reuseIdentifier(0, "cell")
      var slf = self;
      cell.setTapCallback(function(item){
        slf._handleGotoItem(item);
      })
    }

    cell.renderWithItems(self.shots()[indexPath.row()*2],
                         self.shots()[indexPath.row()*2 + 1]);
    return cell
  },
  tableView_heightForRowAtIndexPath: function(tableView, indexPath) {
    return (SCREEN_WIDTH / 2) *3/4;
  },

  scrollViewDidScroll: function(scrollView) {
    var contentOffset = scrollView.contentOffset();
    var contentSize = scrollView.contentSize();
    if (!self.isLoading() && self.tableView().tableFooterView() && contentOffset.y - contentSize.height > -SCREEN_HEIGHT) {
      self._loadShots();
    }
  },

  _handleGotoItem: function(item) {
    if (!item.user) item.user = self.user();
    var detailVC = DBDetailViewController.alloc().initWithItem(item);
    self.navigationController().pushViewController_animated(detailVC, YES);
  }
})

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/DBUserViews.js
================================================
var gap = 10;

defineClass('DBUserHeaderView: UIView', {
  initWithUser: function(user) {
    self = self.super().init();
    if (self) {
      var avatarSize = 100;
      var avatarImageView = require('UIImageView')
                              .alloc()
                              .initWithFrame({x:(SCREEN_WIDTH - avatarSize) / 2, y:30, width:avatarSize, height:avatarSize});


      var nameLabel = UILabel
                        .alloc()
                        .initWithFrame({x: 0, y:UIHelper.bottomY(avatarImageView) + 10, width:SCREEN_WIDTH, height:30});
      nameLabel.setFont(UIFont.systemFontOfSize(18));
      nameLabel.setTextAlignment(1);


      var panelView = UIView
                        .alloc()
                        .initWithFrame({x:0, y:UIHelper.bottomY(nameLabel) + 10,width:SCREEN_WIDTH, height:80});

      var followerView = self._genUserDataView('follower', user['followers_count']);
      var shotsView = self._genUserDataView('shots', user['shots_count']);
      var likeView = self._genUserDataView('likes', user['likes_received_count']);

      UIHelper.setX(shotsView, UIHelper.rightX(followerView));
      UIHelper.setX(likeView, UIHelper.rightX(shotsView));

      panelView.addSubview(followerView);
      panelView.addSubview(shotsView);
      panelView.addSubview(likeView);

      self.addSubview(avatarImageView);
      self.addSubview(nameLabel);
      self.addSubview(panelView);

      avatarImageView.sd__setImageWithURL(require('NSURL').URLWithString(user['avatar_url']));
      nameLabel.setText(user['name']);

      self.setFrame({x:0, y:0, width:SCREEN_WIDTH, height: UIHelper.bottomY(panelView)});
    }
    return self;
  },
  _genUserDataView : function(name, num) {
    var width = SCREEN_WIDTH / 3
    var panelView = UIView
                      .alloc()
                      .initWithFrame({x:0,y:0,width:width,height:80});

    var numLabel = UILabel.alloc().initWithFrame({x:0,y:0,width:width,height:40})
    numLabel.setText(self._formatNum(num));
    numLabel.setFont(UIFont.systemFontOfSize(22));
    numLabel.setTextAlignment(1);

    var nameLabel = UILabel.alloc().initWithFrame({x:0,y:35,width:width,height:30})
    nameLabel.setText(name);
    nameLabel.setFont(UIFont.systemFontOfSize(15));
    nameLabel.setTextColor(UIColor.colorWithWhite_alpha(.5, 1))
    nameLabel.setTextAlignment(1);

    panelView.addSubview(numLabel);
    panelView.addSubview(nameLabel);

    return panelView;
  },
  _formatNum: function(num){
    if (num >= 1000) {
      return (num/1000).toFixed(1) + 'k'
    }
    return num ? num.toString() : 0;
  }
})




defineClass('DBUserItemView: DBTimelineItemView', {
  init: function() {
    self = self.super().init();
    self.avatarImageView().removeFromSuperview();
    self.nameLabel().removeFromSuperview();
    var width = (SCREEN_WIDTH - 10 * 3) / 2;
    self.setFrame({x: 0, y: 0, width:width, height: width * 3/4 + 5});
    return self;
  },
  renderWithItem: function(item) {
    self.contentImageBtn().sd__setImageWithURL_forState(require('NSURL').URLWithString(item['images']['normal']), 0);
  },

});



defineClass('DBUserViewCell: DBTimelineViewCell', {
  _initItemView: function() {
    var itemView1 = DBUserItemView.alloc().init();
    var itemView2 = DBUserItemView.alloc().init();

    itemView1.setFrame({x:gap, y: gap, width: itemView1.frame().width, height: itemView1.frame().height});
    itemView2.setFrame({x:gap*2 + itemView1.frame().width, y: gap, width: itemView2.frame().width, height: itemView2.frame().height});

    self.setItemView1(itemView1);
    self.setItemView2(itemView2);

    self.addSubview(itemView1);
    self.addSubview(itemView2);
  },

});





================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/main.js
================================================
autoConvertOCType(1)
include('CommonDefine.js')
include('DBDataSource.js')
include('DBTimelineController.js')

defineClass('AppDelegate', {
  initRootViewController: function() {
    var tableViewCtrl = WBTimelineViewController.alloc().init()
    var navCtrl = require('UINavigationController').alloc().initWithRootViewController(tableViewCtrl);
    self.window().setRootViewController(navCtrl);
  }
})


================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/dribbble/tmpData.js
================================================

var tmpData = [
  {
    "id": 2619381,
    "title": "Seaborn Oyster Co.",
    "description": null,
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher_teaser.jpg"
    },
    "views_count": 2166,
    "likes_count": 235,
    "comments_count": 2,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 11,
    "created_at": "2016-03-29T17:12:41Z",
    "updated_at": "2016-03-29T17:12:53Z",
    "html_url": "https://dribbble.com/shots/2619381-Seaborn-Oyster-Co",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619381/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619381/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619381/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619381/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619381/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619381/rebounds",
    "animated": false,
    "tags": [
      "charleston",
      "company",
      "ocean",
      "oyster",
      "sea",
      "wave"
    ],
    "user": {
      "id": 52758,
      "name": "Jay Fletcher",
      "username": "jfletcherdesign",
      "html_url": "https://dribbble.com/jfletcherdesign",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/52758/avatars/normal/J_FLETCHER_DESIGN_LOGO-01.jpg?1401983283",
      "bio": "",
      "location": "Charleston, SC",
      "links": {
        "web": "http://www.jfletcherdesign.com",
        "twitter": "https://twitter.com/jfletcherdesign"
      },
      "buckets_count": 0,
      "comments_received_count": 5239,
      "followers_count": 13803,
      "followings_count": 558,
      "likes_count": 6531,
      "likes_received_count": 104895,
      "projects_count": 10,
      "rebounds_received_count": 325,
      "shots_count": 481,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/52758/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/52758/followers",
      "following_url": "https://api.dribbble.com/v1/users/52758/following",
      "likes_url": "https://api.dribbble.com/v1/users/52758/likes",
      "projects_url": "https://api.dribbble.com/v1/users/52758/projects",
      "shots_url": "https://api.dribbble.com/v1/users/52758/shots",
      "teams_url": "https://api.dribbble.com/v1/users/52758/teams",
      "created_at": "2011-08-13T23:30:38Z",
      "updated_at": "2016-03-29T17:12:53Z"
    },
    "team": null
  },
  {
    "id": 2619494,
    "title": "Mystery Project 72.1",
    "description": "<p>We're excited to be onboard for a new year of Outside Lands festival branding! Stay tuned for weekly updates including Ranger Dave's new patch series, the 2016 lineup, and more!</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/31348/screenshots/2619494/patches-30.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/31348/screenshots/2619494/patches-30_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/31348/screenshots/2619494/patches-30_teaser.jpg"
    },
    "views_count": 2304,
    "likes_count": 252,
    "comments_count": 4,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 11,
    "created_at": "2016-03-29T18:05:57Z",
    "updated_at": "2016-03-29T18:07:21Z",
    "html_url": "https://dribbble.com/shots/2619494-Mystery-Project-72-1",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619494/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619494/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619494/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619494/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619494/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619494/rebounds",
    "rebound_source_url": "https://api.dribbble.com/v1/shots/2454166",
    "animated": false,
    "tags": [
      "badge",
      "branding",
      "bridge",
      "city",
      "dan kuhlken",
      "dkng",
      "logo",
      "nathan goldman",
      "patch",
      "san francisco",
      "vector"
    ],
    "user": {
      "id": 31348,
      "name": "DKNG",
      "username": "DKNG",
      "html_url": "https://dribbble.com/DKNG",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/31348/avatars/original/dkng_twitter.jpg?1305140827",
      "bio": "Established in 2005, DKNG is a design studio based in Los Angeles, California with a focus on the music and entertainment industries.",
      "location": "Los Angeles, CA",
      "links": {
        "web": "http://www.dkngstudios.com",
        "twitter": "https://twitter.com/DKNGstudios"
      },
      "buckets_count": 0,
      "comments_received_count": 5274,
      "followers_count": 24704,
      "followings_count": 256,
      "likes_count": 197,
      "likes_received_count": 125646,
      "projects_count": 47,
      "rebounds_received_count": 324,
      "shots_count": 479,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/31348/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/31348/followers",
      "following_url": "https://api.dribbble.com/v1/users/31348/following",
      "likes_url": "https://api.dribbble.com/v1/users/31348/likes",
      "projects_url": "https://api.dribbble.com/v1/users/31348/projects",
      "shots_url": "https://api.dribbble.com/v1/users/31348/shots",
      "teams_url": "https://api.dribbble.com/v1/users/31348/teams",
      "created_at": "2011-04-28T20:48:48Z",
      "updated_at": "2016-03-29T18:07:21Z"
    },
    "team": null
  },
  {
    "id": 2619183,
    "title": "Bonsai",
    "description": null,
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/44323/screenshots/2619183/bonsai.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/44323/screenshots/2619183/bonsai_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/44323/screenshots/2619183/bonsai_teaser.png"
    },
    "views_count": 2143,
    "likes_count": 259,
    "comments_count": 11,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 18,
    "created_at": "2016-03-29T15:48:38Z",
    "updated_at": "2016-03-29T15:49:04Z",
    "html_url": "https://dribbble.com/shots/2619183-Bonsai",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619183/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619183/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619183/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619183/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619183/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619183/rebounds",
    "animated": false,
    "tags": [
      "bonsai",
      "illustration",
      "nature",
      "plant",
      "pot",
      "tree",
      "zen"
    ],
    "user": {
      "id": 44323,
      "name": "Zach Roszczewski",
      "username": "ZachRoszczewski",
      "html_url": "https://dribbble.com/ZachRoszczewski",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/44323/avatars/normal/18f509c70a25627b40d5e3499b1cba2f.png?1419195740",
      "bio": "Iconographer &amp; Illustrator. Creator of <a href=\"http://www.flaticons.co\" rel=\"nofollow noreferrer\">www.flaticons.co</a> &amp; <a href=\"http://www.mojiapp.net\" rel=\"nofollow noreferrer\">www.mojiapp.net</a>.",
      "location": "Encinitas, California",
      "links": {
        "web": "http://zachroszczewski.com",
        "twitter": "https://twitter.com/ZachRoszczewski"
      },
      "buckets_count": 10,
      "comments_received_count": 1682,
      "followers_count": 9067,
      "followings_count": 1541,
      "likes_count": 14094,
      "likes_received_count": 34409,
      "projects_count": 7,
      "rebounds_received_count": 14,
      "shots_count": 113,
      "teams_count": 2,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/44323/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/44323/followers",
      "following_url": "https://api.dribbble.com/v1/users/44323/following",
      "likes_url": "https://api.dribbble.com/v1/users/44323/likes",
      "projects_url": "https://api.dribbble.com/v1/users/44323/projects",
      "shots_url": "https://api.dribbble.com/v1/users/44323/shots",
      "teams_url": "https://api.dribbble.com/v1/users/44323/teams",
      "created_at": "2011-07-07T14:49:07Z",
      "updated_at": "2016-03-29T15:49:04Z"
    },
    "team": null
  },
  {
    "id": 2619255,
    "title": "Canvas—A new space for big ideas",
    "description": "<p>A month ago the our team launched Canvas, a product for brands to tell their story and highlight products. It's been amazing to see your excitement for the creative possibilities and we can't wait to see how you use it. </p>\n\n<p>One of the best aspects of working on ads at Facebook is striving to find the sweet spot between the goals of our advertisers and those of people browsing their feed. Canvas allows businesses to create a more compelling experience for people, and in turn provides people with an ad they actually enjoy. Stay tuned for more :) </p>\n\n<p>If your interested in learning more about Canvas, or building one, you should check out <a href=\"https://canvas.facebook.com/\" target=\"_blank\" rel=\"noreferrer\">https://canvas.facebook.com/</a>\n<br />To learn more about our process check out Jaime Rovira's medium post <a href=\"https://medium.com/facebook-design/canvas-how-we-crafted-facebook-s-new-immersive-ads-696870e66b3f#.jy9w9l51m\" target=\"_blank\" rel=\"noreferrer\">https://medium.com/facebook-design/canvas-how-we-crafted-facebook-s-new-immersive-ads-696870e66b3f#.jy9w9l51m</a></p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/476251/screenshots/2619255/startdribbble.gif",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/476251/screenshots/2619255/startdribbble_1x.gif",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/476251/screenshots/2619255/startdribbble_teaser.gif"
    },
    "views_count": 3502,
    "likes_count": 262,
    "comments_count": 9,
    "attachments_count": 2,
    "rebounds_count": 0,
    "buckets_count": 12,
    "created_at": "2016-03-29T16:18:33Z",
    "updated_at": "2016-03-29T16:19:50Z",
    "html_url": "https://dribbble.com/shots/2619255-Canvas-A-new-space-for-big-ideas",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619255/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619255/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619255/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619255/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619255/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619255/rebounds",
    "animated": true,
    "tags": [
      "android",
      "animation",
      "creative",
      "illustration",
      "ios",
      "mobile",
      "tool"
    ],
    "user": {
      "id": 476251,
      "name": "ali griffin",
      "username": "aligdanger",
      "html_url": "https://dribbble.com/aligdanger",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/476251/avatars/normal/ali.png?1404762398",
      "bio": "Designing product <a href=\"https://dribbble.com/Facebook\">@Facebook</a>",
      "location": "San Francisco, CA",
      "links": {
        "twitter": "https://twitter.com/aligdanger"
      },
      "buckets_count": 0,
      "comments_received_count": 203,
      "followers_count": 513,
      "followings_count": 289,
      "likes_count": 1302,
      "likes_received_count": 2487,
      "projects_count": 3,
      "rebounds_received_count": 9,
      "shots_count": 22,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/476251/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/476251/followers",
      "following_url": "https://api.dribbble.com/v1/users/476251/following",
      "likes_url": "https://api.dribbble.com/v1/users/476251/likes",
      "projects_url": "https://api.dribbble.com/v1/users/476251/projects",
      "shots_url": "https://api.dribbble.com/v1/users/476251/shots",
      "teams_url": "https://api.dribbble.com/v1/users/476251/teams",
      "created_at": "2014-01-10T18:37:14Z",
      "updated_at": "2016-03-30T04:07:49Z"
    },
    "team": {
      "id": 333588,
      "name": "Facebook",
      "username": "Facebook",
      "html_url": "https://dribbble.com/Facebook",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/333588/avatars/normal/9a9d5301e289975fa16abd070f1615c0.png?1440610176",
      "bio": "",
      "location": "1 Hacker Way, Menlo Park, CA",
      "links": {
        "web": "https://www.facebook.com/design",
        "twitter": "https://twitter.com/facebookdesign"
      },
      "buckets_count": 0,
      "comments_received_count": 0,
      "followers_count": 14039,
      "followings_count": 0,
      "likes_count": 2,
      "likes_received_count": 0,
      "projects_count": 0,
      "rebounds_received_count": 0,
      "shots_count": 121,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/333588/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/333588/followers",
      "following_url": "https://api.dribbble.com/v1/users/333588/following",
      "likes_url": "https://api.dribbble.com/v1/users/333588/likes",
      "projects_url": "https://api.dribbble.com/v1/users/333588/projects",
      "shots_url": "https://api.dribbble.com/v1/users/333588/shots",
      "created_at": "2013-05-15T23:13:37Z",
      "updated_at": "2016-03-30T04:07:49Z",
      "members_count": 39,
      "members_url": "https://api.dribbble.com/v1/teams/333588/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/333588/shots"
    }
  },
  {
    "id": 2619346,
    "title": "Sunset",
    "description": "<p>Baker Beach sunset from this weekend.</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/3460/screenshots/2619346/sunset.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/3460/screenshots/2619346/sunset_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/3460/screenshots/2619346/sunset_teaser.png"
    },
    "views_count": 2897,
    "likes_count": 231,
    "comments_count": 3,
    "attachments_count": 1,
    "rebounds_count": 0,
    "buckets_count": 6,
    "created_at": "2016-03-29T16:55:27Z",
    "updated_at": "2016-03-29T16:56:47Z",
    "html_url": "https://dribbble.com/shots/2619346-Sunset",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619346/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619346/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619346/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619346/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619346/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619346/rebounds",
    "animated": false,
    "tags": [
      "beach",
      "cartoon",
      "comics",
      "hand-darwn",
      "illustration",
      "nature",
      "sketch",
      "sunset"
    ],
    "user": {
      "id": 3460,
      "name": "Ryan Putnam",
      "username": "RypeArts",
      "html_url": "https://dribbble.com/RypeArts",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/3460/avatars/normal/4ed7a7a4737e971e3fa37f0705f5cc51.png?1457564367",
      "bio": "designer, illustrator, potter, and father",
      "location": "San Francisco, CA",
      "links": {
        "web": "http://ryanputn.am",
        "twitter": "https://twitter.com/RypeArts"
      },
      "buckets_count": 3,
      "comments_received_count": 9722,
      "followers_count": 46667,
      "followings_count": 518,
      "likes_count": 10207,
      "likes_received_count": 211321,
      "projects_count": 34,
      "rebounds_received_count": 373,
      "shots_count": 589,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/3460/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/3460/followers",
      "following_url": "https://api.dribbble.com/v1/users/3460/following",
      "likes_url": "https://api.dribbble.com/v1/users/3460/likes",
      "projects_url": "https://api.dribbble.com/v1/users/3460/projects",
      "shots_url": "https://api.dribbble.com/v1/users/3460/shots",
      "teams_url": "https://api.dribbble.com/v1/users/3460/teams",
      "created_at": "2010-07-16T12:48:16Z",
      "updated_at": "2016-03-29T16:56:47Z"
    },
    "team": null
  },
  {
    "id": 2619340,
    "title": "Skies Like These ",
    "description": "<p>In anticipation for their release of the paperback version of the book, Skies Like These, Macmillan commissioned us to redesign the cover artwork. </p>\n\n<p>The story is about a twelve-year-old girl name Jade who is sent to spend the summer with her aunt in Wyoming by her parents. She meets a rebellious boy who called himself Roy Parker, after the legendary Butch Cassidy. Jade tries to be a good friend Roy, but worries about the trouble he might get her into while he tries to plan stunts worthy of Butch Cassidy himself.\n</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/44585/screenshots/2619340/skies-like-these-dribbble.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/44585/screenshots/2619340/skies-like-these-dribbble_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/44585/screenshots/2619340/skies-like-these-dribbble_teaser.png"
    },
    "views_count": 1548,
    "likes_count": 177,
    "comments_count": 5,
    "attachments_count": 1,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T16:50:48Z",
    "updated_at": "2016-03-29T16:53:16Z",
    "html_url": "https://dribbble.com/shots/2619340-Skies-Like-These",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619340/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619340/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619340/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619340/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619340/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619340/rebounds",
    "animated": false,
    "tags": [
      "book",
      "book cover",
      "cover artwork",
      "cover design",
      "cowboy hat",
      "illustration",
      "mountain",
      "planets",
      "sky",
      "stars"
    ],
    "user": {
      "id": 44585,
      "name": "Brad Woodard",
      "username": "bradwwoodard",
      "html_url": "https://dribbble.com/bradwwoodard",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/44585/avatars/normal/593686b9b9c0d2b6a496d8404f24ce1f.png?1444862250",
      "bio": "Designer • Illustrator • Braver of the Woods",
      "location": "Austin, TX",
      "links": {
        "web": "http://www.bravethewoods.com/",
        "twitter": "https://twitter.com/brave_the_woods"
      },
      "buckets_count": 1,
      "comments_received_count": 2598,
      "followers_count": 8556,
      "followings_count": 412,
      "likes_count": 2285,
      "likes_received_count": 45938,
      "projects_count": 21,
      "rebounds_received_count": 16,
      "shots_count": 324,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/44585/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/44585/followers",
      "following_url": "https://api.dribbble.com/v1/users/44585/following",
      "likes_url": "https://api.dribbble.com/v1/users/44585/likes",
      "projects_url": "https://api.dribbble.com/v1/users/44585/projects",
      "shots_url": "https://api.dribbble.com/v1/users/44585/shots",
      "teams_url": "https://api.dribbble.com/v1/users/44585/teams",
      "created_at": "2011-07-08T15:47:58Z",
      "updated_at": "2016-03-29T16:53:16Z"
    },
    "team": null
  },
  {
    "id": 2619544,
    "title": "Robinhood",
    "description": "<p>Robinhood integrations illustration. </p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/4598/screenshots/2619544/integrations_header_01.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/4598/screenshots/2619544/integrations_header_01_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/4598/screenshots/2619544/integrations_header_01_teaser.png"
    },
    "views_count": 1530,
    "likes_count": 177,
    "comments_count": 6,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T18:24:59Z",
    "updated_at": "2016-03-29T18:26:47Z",
    "html_url": "https://dribbble.com/shots/2619544-Robinhood",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619544/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619544/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619544/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619544/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619544/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619544/rebounds",
    "animated": false,
    "tags": [
      "chart",
      "finance",
      "illustration",
      "money",
      "stock"
    ],
    "user": {
      "id": 4598,
      "name": "Ty Wilkins",
      "username": "tywilkins",
      "html_url": "https://dribbble.com/tywilkins",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/4598/avatars/normal/fox2.jpg?1391573055",
      "bio": "hello@tywilkins.com",
      "location": "San Francisco, CA",
      "links": {
        "web": "http://www.tywilkins.com",
        "twitter": "https://twitter.com/tywilkins"
      },
      "buckets_count": 0,
      "comments_received_count": 1080,
      "followers_count": 8222,
      "followings_count": 527,
      "likes_count": 0,
      "likes_received_count": 21359,
      "projects_count": 8,
      "rebounds_received_count": 0,
      "shots_count": 97,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/4598/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/4598/followers",
      "following_url": "https://api.dribbble.com/v1/users/4598/following",
      "likes_url": "https://api.dribbble.com/v1/users/4598/likes",
      "projects_url": "https://api.dribbble.com/v1/users/4598/projects",
      "shots_url": "https://api.dribbble.com/v1/users/4598/shots",
      "teams_url": "https://api.dribbble.com/v1/users/4598/teams",
      "created_at": "2010-09-30T20:31:02Z",
      "updated_at": "2016-03-29T18:27:54Z"
    },
    "team": null
  },
  {
    "id": 2619187,
    "title": "Confidential iPad App part #2",
    "description": "<p>Over the holidays, Rally built an iPad app for a confidential client and conference. This is video directly from interacting with the native iOS app.</p>\n\n<p>Myself, <a href=\"https://dribbble.com/4777\">@Geof Crowl</a>, and Wes tackled the project in just 15 days. It was intense but fun. Geof and I did the design and helped with layout in Xcode using Nibs. Wes built the globe and the data visualizations from a json file using our own Open GL globe library we've been building on an off for the past year. </p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/3816/screenshots/2619187/confidential-ipad-app-rally.gif",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/3816/screenshots/2619187/confidential-ipad-app-rally_1x.gif",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/3816/screenshots/2619187/confidential-ipad-app-rally_teaser.gif"
    },
    "views_count": 3205,
    "likes_count": 183,
    "comments_count": 9,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 20,
    "created_at": "2016-03-29T15:50:05Z",
    "updated_at": "2016-03-29T15:51:33Z",
    "html_url": "https://dribbble.com/shots/2619187-Confidential-iPad-App-part-2",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619187/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619187/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619187/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619187/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619187/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619187/rebounds",
    "animated": true,
    "tags": [

    ],
    "user": {
      "id": 3816,
      "name": "Ben Cline",
      "username": "letsgorally",
      "html_url": "https://dribbble.com/letsgorally",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/3816/avatars/normal/bb00fd14001a8cdd5e0e354df52a7fa4.png?1450769044",
      "bio": "<a href=\"https://dribbble.com/RALLY\">@RALLY</a> Co-Founder / Designer",
      "location": "Salt Lake City",
      "links": {
        "web": "http://beta.rallyinteractive.com",
        "twitter": "https://twitter.com/yocline"
      },
      "buckets_count": 3,
      "comments_received_count": 4525,
      "followers_count": 30105,
      "followings_count": 241,
      "likes_count": 6878,
      "likes_received_count": 87892,
      "projects_count": 10,
      "rebounds_received_count": 28,
      "shots_count": 257,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/3816/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/3816/followers",
      "following_url": "https://api.dribbble.com/v1/users/3816/following",
      "likes_url": "https://api.dribbble.com/v1/users/3816/likes",
      "projects_url": "https://api.dribbble.com/v1/users/3816/projects",
      "shots_url": "https://api.dribbble.com/v1/users/3816/shots",
      "teams_url": "https://api.dribbble.com/v1/users/3816/teams",
      "created_at": "2010-07-30T17:30:31Z",
      "updated_at": "2016-03-29T15:51:33Z"
    },
    "team": {
      "id": 559317,
      "name": "RALLY",
      "username": "rally",
      "html_url": "https://dribbble.com/rally",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/559317/avatars/normal/rally_logo.png?1398641637",
      "bio": "Interactive Studio. Design &amp; Development",
      "location": "Salt Lake City",
      "links": {
        "web": "http://beta.rallyinteractive.com",
        "twitter": "https://twitter.com/letsgorally"
      },
      "buckets_count": 0,
      "comments_received_count": 0,
      "followers_count": 8281,
      "followings_count": 6,
      "likes_count": 73,
      "likes_received_count": 0,
      "projects_count": 14,
      "rebounds_received_count": 0,
      "shots_count": 273,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/559317/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/559317/followers",
      "following_url": "https://api.dribbble.com/v1/users/559317/following",
      "likes_url": "https://api.dribbble.com/v1/users/559317/likes",
      "projects_url": "https://api.dribbble.com/v1/users/559317/projects",
      "shots_url": "https://api.dribbble.com/v1/users/559317/shots",
      "created_at": "2014-04-27T23:31:42Z",
      "updated_at": "2016-03-29T15:51:33Z",
      "members_count": 5,
      "members_url": "https://api.dribbble.com/v1/teams/559317/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/559317/shots"
    }
  },
  {
    "id": 2619200,
    "title": "Eilean Donan Castle",
    "description": "<p>Day 209/365</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/283823/screenshots/2619200/eilean_donan_castle-01.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/283823/screenshots/2619200/eilean_donan_castle-01_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/283823/screenshots/2619200/eilean_donan_castle-01_teaser.jpg"
    },
    "views_count": 1434,
    "likes_count": 162,
    "comments_count": 4,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T15:54:42Z",
    "updated_at": "2016-03-29T15:55:23Z",
    "html_url": "https://dribbble.com/shots/2619200-Eilean-Donan-Castle",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619200/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619200/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619200/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619200/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619200/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619200/rebounds",
    "rebound_source_url": "https://api.dribbble.com/v1/shots/2614735",
    "animated": false,
    "tags": [
      "icon",
      "illustration",
      "lake",
      "scotland",
      "vector"
    ],
    "user": {
      "id": 283823,
      "name": "Scott Tusk",
      "username": "Tusk",
      "html_url": "https://dribbble.com/Tusk",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/283823/avatars/normal/c71f583fd2f781e48da28697c6ec2211.jpg?1456193406",
      "bio": "",
      "location": "Chicago",
      "links": {
      },
      "buckets_count": 0,
      "comments_received_count": 1118,
      "followers_count": 5013,
      "followings_count": 812,
      "likes_count": 2295,
      "likes_received_count": 45133,
      "projects_count": 1,
      "rebounds_received_count": 214,
      "shots_count": 282,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/283823/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/283823/followers",
      "following_url": "https://api.dribbble.com/v1/users/283823/following",
      "likes_url": "https://api.dribbble.com/v1/users/283823/likes",
      "projects_url": "https://api.dribbble.com/v1/users/283823/projects",
      "shots_url": "https://api.dribbble.com/v1/users/283823/shots",
      "teams_url": "https://api.dribbble.com/v1/users/283823/teams",
      "created_at": "2013-02-17T16:32:29Z",
      "updated_at": "2016-03-29T15:55:23Z"
    },
    "team": null
  },
  {
    "id": 2619378,
    "title": "Infinite Coffee",
    "description": "<p>It's Monday, I need coffee. Forever.</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/60266/screenshots/2619378/coffee.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/60266/screenshots/2619378/coffee_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/60266/screenshots/2619378/coffee_teaser.jpg"
    },
    "views_count": 1301,
    "likes_count": 146,
    "comments_count": 6,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 2,
    "created_at": "2016-03-29T17:11:50Z",
    "updated_at": "2016-03-29T17:18:17Z",
    "html_url": "https://dribbble.com/shots/2619378-Infinite-Coffee",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619378/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619378/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619378/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619378/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619378/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619378/rebounds",
    "animated": false,
    "tags": [
      "8",
      "coffee",
      "cup",
      "food",
      "geometric",
      "illustration",
      "infinite",
      "kite",
      "liquid",
      "mug",
      "stroke"
    ],
    "user": {
      "id": 60266,
      "name": "Gustavo Zambelli",
      "username": "zamax",
      "html_url": "https://dribbble.com/zamax",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/60266/avatars/normal/83d4ac61d50bf5b2fedc9f9cc45a62d9.png?1453312126",
      "bio": "Hi, I&#39;m Lead of illustration at <a href=\"https://dribbble.com/aerolab\">@aerolab</a> &amp; Superman at <a href=\"https://dribbble.com/RicosQuesos\">@RicosQuesos</a>",
      "location": "Neuquén, Argentina.",
      "links": {
        "web": "http://zamax.tumblr.com",
        "twitter": "https://twitter.com/zamax4"
      },
      "buckets_count": 19,
      "comments_received_count": 1645,
      "followers_count": 4198,
      "followings_count": 1253,
      "likes_count": 8828,
      "likes_received_count": 36018,
      "projects_count": 4,
      "rebounds_received_count": 133,
      "shots_count": 305,
      "teams_count": 4,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/60266/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/60266/followers",
      "following_url": "https://api.dribbble.com/v1/users/60266/following",
      "likes_url": "https://api.dribbble.com/v1/users/60266/likes",
      "projects_url": "https://api.dribbble.com/v1/users/60266/projects",
      "shots_url": "https://api.dribbble.com/v1/users/60266/shots",
      "teams_url": "https://api.dribbble.com/v1/users/60266/teams",
      "created_at": "2011-09-07T19:27:31Z",
      "updated_at": "2016-03-29T17:18:17Z"
    },
    "team": {
      "id": 171431,
      "name": "Aerolab",
      "username": "aerolab",
      "html_url": "https://dribbble.com/aerolab",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/171431/avatars/normal/1283d5fbcd21a809d0cdc2f96a560096.png?1458077891",
      "bio": "We design and develop beautiful digital products for startups and leading brands.",
      "location": "Buenos Aires - San Francisco",
      "links": {
        "web": "http://aerolab.co",
        "twitter": "https://twitter.com/aerolab"
      },
      "buckets_count": 5,
      "comments_received_count": 157,
      "followers_count": 3845,
      "followings_count": 128,
      "likes_count": 4228,
      "likes_received_count": 2121,
      "projects_count": 24,
      "rebounds_received_count": 2,
      "shots_count": 579,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/171431/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/171431/followers",
      "following_url": "https://api.dribbble.com/v1/users/171431/following",
      "likes_url": "https://api.dribbble.com/v1/users/171431/likes",
      "projects_url": "https://api.dribbble.com/v1/users/171431/projects",
      "shots_url": "https://api.dribbble.com/v1/users/171431/shots",
      "created_at": "2012-07-04T02:31:07Z",
      "updated_at": "2016-03-29T17:18:17Z",
      "members_count": 21,
      "members_url": "https://api.dribbble.com/v1/teams/171431/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/171431/shots"
    }
  },
  {
    "id": 2619645,
    "title": "Hello, Is It Me You're Looking For?",
    "description": "<p>I had the privilege of getting to collaborate with <a href=\"https://dribbble.com/72483\">@Jordan Wade</a> on a hero illustration for his SVG post. And let me tell you, watching your work come alive with CSS and JS is pretty much the jam.</p>\n\n<p><a href=\"https://dribbble.com/shots/2619653-Hello-from-the-other-side\" rel=\"nofollow noreferrer\">Check it out all alive n' stuff!</a></p>\n\n<p><a href=\"https://www.codeschool.com/blog/2016/03/29/benefits-of-learning-how-to-use-svg/\" rel=\"nofollow noreferrer\">Go read about why you should learn more about SVG for the web</a>.</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/13774/screenshots/2619645/hello.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/13774/screenshots/2619645/hello_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/13774/screenshots/2619645/hello_teaser.png"
    },
    "views_count": 1771,
    "likes_count": 146,
    "comments_count": 2,
    "attachments_count": 0,
    "rebounds_count": 1,
    "buckets_count": 2,
    "created_at": "2016-03-29T19:12:57Z",
    "updated_at": "2016-03-29T20:26:49Z",
    "html_url": "https://dribbble.com/shots/2619645-Hello-Is-It-Me-You-re-Looking-For",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619645/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619645/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619645/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619645/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619645/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619645/rebounds",
    "animated": false,
    "tags": [
      "hello"
    ],
    "user": {
      "id": 13774,
      "name": "Justin Mezzell",
      "username": "JustinMezzell",
      "html_url": "https://dribbble.com/JustinMezzell",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/13774/avatars/normal/Me_Web.jpg?1380768479",
      "bio": "Designer? Illustrator? Why not. Directing Art at <a href=\"https://dribbble.com/codeschool\">@codeschool</a>.",
      "location": "Orlando, FL",
      "links": {
        "web": "http://justinmezzell.com/",
        "twitter": "https://twitter.com/JustinMezzell"
      },
      "buckets_count": 0,
      "comments_received_count": 5736,
      "followers_count": 31449,
      "followings_count": 713,
      "likes_count": 5548,
      "likes_received_count": 113425,
      "projects_count": 0,
      "rebounds_received_count": 55,
      "shots_count": 312,
      "teams_count": 4,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/13774/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/13774/followers",
      "following_url": "https://api.dribbble.com/v1/users/13774/following",
      "likes_url": "https://api.dribbble.com/v1/users/13774/likes",
      "projects_url": "https://api.dribbble.com/v1/users/13774/projects",
      "shots_url": "https://api.dribbble.com/v1/users/13774/shots",
      "teams_url": "https://api.dribbble.com/v1/users/13774/teams",
      "created_at": "2011-01-26T06:58:50Z",
      "updated_at": "2016-03-29T20:26:49Z"
    },
    "team": {
      "id": 333539,
      "name": "Code School",
      "username": "codeschool",
      "html_url": "https://dribbble.com/codeschool",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/333539/avatars/normal/329ac818d30ca1a7b900c09b105ce277.jpg?1410890340",
      "bio": "Code School teaches web technologies in the comfort of your browser with video lessons, coding challenges, and screencasts.",
      "location": "Orlando, FL",
      "links": {
        "web": "http://codeschool.com",
        "twitter": "https://twitter.com/codeschool"
      },
      "buckets_count": 0,
      "comments_received_count": 0,
      "followers_count": 3057,
      "followings_count": 13,
      "likes_count": 1,
      "likes_received_count": 0,
      "projects_count": 0,
      "rebounds_received_count": 0,
      "shots_count": 154,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/333539/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/333539/followers",
      "following_url": "https://api.dribbble.com/v1/users/333539/following",
      "likes_url": "https://api.dribbble.com/v1/users/333539/likes",
      "projects_url": "https://api.dribbble.com/v1/users/333539/projects",
      "shots_url": "https://api.dribbble.com/v1/users/333539/shots",
      "created_at": "2013-05-15T21:37:44Z",
      "updated_at": "2016-03-29T20:26:49Z",
      "members_count": 10,
      "members_url": "https://api.dribbble.com/v1/teams/333539/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/333539/shots"
    }
  },
  {
    "id": 2619181,
    "title": "Costa Rica",
    "description": "<p>Shirt graphic for offsite meeting in Costa Rica. </p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/21030/screenshots/2619181/costa.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/21030/screenshots/2619181/costa_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/21030/screenshots/2619181/costa_teaser.png"
    },
    "views_count": 1261,
    "likes_count": 136,
    "comments_count": 7,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T15:48:25Z",
    "updated_at": "2016-03-29T15:49:13Z",
    "html_url": "https://dribbble.com/shots/2619181-Costa-Rica",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619181/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619181/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619181/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619181/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619181/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619181/rebounds",
    "animated": false,
    "tags": [
      "bird",
      "costa rica",
      "design",
      "illustration",
      "leaf",
      "toucan",
      "tropical"
    ],
    "user": {
      "id": 21030,
      "name": "Trevor Basset",
      "username": "trevorbasset",
      "html_url": "https://dribbble.com/trevorbasset",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/21030/avatars/normal/e9907b8b54ea842b30c5787ef95acc3a.png?1426787498",
      "bio": "Design, art direction, illustration, birds. ",
      "location": "Seattle, WA",
      "links": {
        "web": "http://www.trevorbasset.com",
        "twitter": "https://twitter.com/trevorbasset"
      },
      "buckets_count": 0,
      "comments_received_count": 244,
      "followers_count": 1169,
      "followings_count": 367,
      "likes_count": 1204,
      "likes_received_count": 3660,
      "projects_count": 0,
      "rebounds_received_count": 4,
      "shots_count": 85,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/21030/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/21030/followers",
      "following_url": "https://api.dribbble.com/v1/users/21030/following",
      "likes_url": "https://api.dribbble.com/v1/users/21030/likes",
      "projects_url": "https://api.dribbble.com/v1/users/21030/projects",
      "shots_url": "https://api.dribbble.com/v1/users/21030/shots",
      "teams_url": "https://api.dribbble.com/v1/users/21030/teams",
      "created_at": "2011-03-03T20:05:14Z",
      "updated_at": "2016-03-30T04:08:03Z"
    },
    "team": null
  },
  {
    "id": 2619381,
    "title": "Seaborn Oyster Co.",
    "description": null,
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher_teaser.jpg"
    },
    "views_count": 2166,
    "likes_count": 235,
    "comments_count": 2,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 11,
    "created_at": "2016-03-29T17:12:41Z",
    "updated_at": "2016-03-29T17:12:53Z",
    "html_url": "https://dribbble.com/shots/2619381-Seaborn-Oyster-Co",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619381/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619381/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619381/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619381/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619381/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619381/rebounds",
    "animated": false,
    "tags": [
      "charleston",
      "company",
      "ocean",
      "oyster",
      "sea",
      "wave"
    ],
    "user": {
      "id": 52758,
      "name": "Jay Fletcher",
      "username": "jfletcherdesign",
      "html_url": "https://dribbble.com/jfletcherdesign",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/52758/avatars/normal/J_FLETCHER_DESIGN_LOGO-01.jpg?1401983283",
      "bio": "",
      "location": "Charleston, SC",
      "links": {
        "web": "http://www.jfletcherdesign.com",
        "twitter": "https://twitter.com/jfletcherdesign"
      },
      "buckets_count": 0,
      "comments_received_count": 5239,
      "followers_count": 13803,
      "followings_count": 558,
      "likes_count": 6531,
      "likes_received_count": 104895,
      "projects_count": 10,
      "rebounds_received_count": 325,
      "shots_count": 481,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/52758/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/52758/followers",
      "following_url": "https://api.dribbble.com/v1/users/52758/following",
      "likes_url": "https://api.dribbble.com/v1/users/52758/likes",
      "projects_url": "https://api.dribbble.com/v1/users/52758/projects",
      "shots_url": "https://api.dribbble.com/v1/users/52758/shots",
      "teams_url": "https://api.dribbble.com/v1/users/52758/teams",
      "created_at": "2011-08-13T23:30:38Z",
      "updated_at": "2016-03-29T17:12:53Z"
    },
    "team": null
  },
  {
    "id": 2619494,
    "title": "Mystery Project 72.1",
    "description": "<p>We're excited to be onboard for a new year of Outside Lands festival branding! Stay tuned for weekly updates including Ranger Dave's new patch series, the 2016 lineup, and more!</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/31348/screenshots/2619494/patches-30.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/31348/screenshots/2619494/patches-30_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/31348/screenshots/2619494/patches-30_teaser.jpg"
    },
    "views_count": 2304,
    "likes_count": 252,
    "comments_count": 4,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 11,
    "created_at": "2016-03-29T18:05:57Z",
    "updated_at": "2016-03-29T18:07:21Z",
    "html_url": "https://dribbble.com/shots/2619494-Mystery-Project-72-1",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619494/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619494/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619494/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619494/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619494/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619494/rebounds",
    "rebound_source_url": "https://api.dribbble.com/v1/shots/2454166",
    "animated": false,
    "tags": [
      "badge",
      "branding",
      "bridge",
      "city",
      "dan kuhlken",
      "dkng",
      "logo",
      "nathan goldman",
      "patch",
      "san francisco",
      "vector"
    ],
    "user": {
      "id": 31348,
      "name": "DKNG",
      "username": "DKNG",
      "html_url": "https://dribbble.com/DKNG",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/31348/avatars/original/dkng_twitter.jpg?1305140827",
      "bio": "Established in 2005, DKNG is a design studio based in Los Angeles, California with a focus on the music and entertainment industries.",
      "location": "Los Angeles, CA",
      "links": {
        "web": "http://www.dkngstudios.com",
        "twitter": "https://twitter.com/DKNGstudios"
      },
      "buckets_count": 0,
      "comments_received_count": 5274,
      "followers_count": 24704,
      "followings_count": 256,
      "likes_count": 197,
      "likes_received_count": 125646,
      "projects_count": 47,
      "rebounds_received_count": 324,
      "shots_count": 479,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/31348/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/31348/followers",
      "following_url": "https://api.dribbble.com/v1/users/31348/following",
      "likes_url": "https://api.dribbble.com/v1/users/31348/likes",
      "projects_url": "https://api.dribbble.com/v1/users/31348/projects",
      "shots_url": "https://api.dribbble.com/v1/users/31348/shots",
      "teams_url": "https://api.dribbble.com/v1/users/31348/teams",
      "created_at": "2011-04-28T20:48:48Z",
      "updated_at": "2016-03-29T18:07:21Z"
    },
    "team": null
  },
  {
    "id": 2619183,
    "title": "Bonsai",
    "description": null,
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/44323/screenshots/2619183/bonsai.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/44323/screenshots/2619183/bonsai_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/44323/screenshots/2619183/bonsai_teaser.png"
    },
    "views_count": 2143,
    "likes_count": 259,
    "comments_count": 11,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 18,
    "created_at": "2016-03-29T15:48:38Z",
    "updated_at": "2016-03-29T15:49:04Z",
    "html_url": "https://dribbble.com/shots/2619183-Bonsai",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619183/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619183/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619183/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619183/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619183/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619183/rebounds",
    "animated": false,
    "tags": [
      "bonsai",
      "illustration",
      "nature",
      "plant",
      "pot",
      "tree",
      "zen"
    ],
    "user": {
      "id": 44323,
      "name": "Zach Roszczewski",
      "username": "ZachRoszczewski",
      "html_url": "https://dribbble.com/ZachRoszczewski",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/44323/avatars/normal/18f509c70a25627b40d5e3499b1cba2f.png?1419195740",
      "bio": "Iconographer &amp; Illustrator. Creator of <a href=\"http://www.flaticons.co\" rel=\"nofollow noreferrer\">www.flaticons.co</a> &amp; <a href=\"http://www.mojiapp.net\" rel=\"nofollow noreferrer\">www.mojiapp.net</a>.",
      "location": "Encinitas, California",
      "links": {
        "web": "http://zachroszczewski.com",
        "twitter": "https://twitter.com/ZachRoszczewski"
      },
      "buckets_count": 10,
      "comments_received_count": 1682,
      "followers_count": 9067,
      "followings_count": 1541,
      "likes_count": 14094,
      "likes_received_count": 34409,
      "projects_count": 7,
      "rebounds_received_count": 14,
      "shots_count": 113,
      "teams_count": 2,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/44323/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/44323/followers",
      "following_url": "https://api.dribbble.com/v1/users/44323/following",
      "likes_url": "https://api.dribbble.com/v1/users/44323/likes",
      "projects_url": "https://api.dribbble.com/v1/users/44323/projects",
      "shots_url": "https://api.dribbble.com/v1/users/44323/shots",
      "teams_url": "https://api.dribbble.com/v1/users/44323/teams",
      "created_at": "2011-07-07T14:49:07Z",
      "updated_at": "2016-03-29T15:49:04Z"
    },
    "team": null
  },
  {
    "id": 2619255,
    "title": "Canvas—A new space for big ideas",
    "description": "<p>A month ago the our team launched Canvas, a product for brands to tell their story and highlight products. It's been amazing to see your excitement for the creative possibilities and we can't wait to see how you use it. </p>\n\n<p>One of the best aspects of working on ads at Facebook is striving to find the sweet spot between the goals of our advertisers and those of people browsing their feed. Canvas allows businesses to create a more compelling experience for people, and in turn provides people with an ad they actually enjoy. Stay tuned for more :) </p>\n\n<p>If your interested in learning more about Canvas, or building one, you should check out <a href=\"https://canvas.facebook.com/\" target=\"_blank\" rel=\"noreferrer\">https://canvas.facebook.com/</a>\n<br />To learn more about our process check out Jaime Rovira's medium post <a href=\"https://medium.com/facebook-design/canvas-how-we-crafted-facebook-s-new-immersive-ads-696870e66b3f#.jy9w9l51m\" target=\"_blank\" rel=\"noreferrer\">https://medium.com/facebook-design/canvas-how-we-crafted-facebook-s-new-immersive-ads-696870e66b3f#.jy9w9l51m</a></p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/476251/screenshots/2619255/startdribbble.gif",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/476251/screenshots/2619255/startdribbble_1x.gif",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/476251/screenshots/2619255/startdribbble_teaser.gif"
    },
    "views_count": 3502,
    "likes_count": 262,
    "comments_count": 9,
    "attachments_count": 2,
    "rebounds_count": 0,
    "buckets_count": 12,
    "created_at": "2016-03-29T16:18:33Z",
    "updated_at": "2016-03-29T16:19:50Z",
    "html_url": "https://dribbble.com/shots/2619255-Canvas-A-new-space-for-big-ideas",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619255/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619255/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619255/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619255/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619255/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619255/rebounds",
    "animated": true,
    "tags": [
      "android",
      "animation",
      "creative",
      "illustration",
      "ios",
      "mobile",
      "tool"
    ],
    "user": {
      "id": 476251,
      "name": "ali griffin",
      "username": "aligdanger",
      "html_url": "https://dribbble.com/aligdanger",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/476251/avatars/normal/ali.png?1404762398",
      "bio": "Designing product <a href=\"https://dribbble.com/Facebook\">@Facebook</a>",
      "location": "San Francisco, CA",
      "links": {
        "twitter": "https://twitter.com/aligdanger"
      },
      "buckets_count": 0,
      "comments_received_count": 203,
      "followers_count": 513,
      "followings_count": 289,
      "likes_count": 1302,
      "likes_received_count": 2487,
      "projects_count": 3,
      "rebounds_received_count": 9,
      "shots_count": 22,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/476251/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/476251/followers",
      "following_url": "https://api.dribbble.com/v1/users/476251/following",
      "likes_url": "https://api.dribbble.com/v1/users/476251/likes",
      "projects_url": "https://api.dribbble.com/v1/users/476251/projects",
      "shots_url": "https://api.dribbble.com/v1/users/476251/shots",
      "teams_url": "https://api.dribbble.com/v1/users/476251/teams",
      "created_at": "2014-01-10T18:37:14Z",
      "updated_at": "2016-03-30T04:07:49Z"
    },
    "team": {
      "id": 333588,
      "name": "Facebook",
      "username": "Facebook",
      "html_url": "https://dribbble.com/Facebook",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/333588/avatars/normal/9a9d5301e289975fa16abd070f1615c0.png?1440610176",
      "bio": "",
      "location": "1 Hacker Way, Menlo Park, CA",
      "links": {
        "web": "https://www.facebook.com/design",
        "twitter": "https://twitter.com/facebookdesign"
      },
      "buckets_count": 0,
      "comments_received_count": 0,
      "followers_count": 14039,
      "followings_count": 0,
      "likes_count": 2,
      "likes_received_count": 0,
      "projects_count": 0,
      "rebounds_received_count": 0,
      "shots_count": 121,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/333588/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/333588/followers",
      "following_url": "https://api.dribbble.com/v1/users/333588/following",
      "likes_url": "https://api.dribbble.com/v1/users/333588/likes",
      "projects_url": "https://api.dribbble.com/v1/users/333588/projects",
      "shots_url": "https://api.dribbble.com/v1/users/333588/shots",
      "created_at": "2013-05-15T23:13:37Z",
      "updated_at": "2016-03-30T04:07:49Z",
      "members_count": 39,
      "members_url": "https://api.dribbble.com/v1/teams/333588/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/333588/shots"
    }
  },
  {
    "id": 2619346,
    "title": "Sunset",
    "description": "<p>Baker Beach sunset from this weekend.</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/3460/screenshots/2619346/sunset.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/3460/screenshots/2619346/sunset_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/3460/screenshots/2619346/sunset_teaser.png"
    },
    "views_count": 2897,
    "likes_count": 231,
    "comments_count": 3,
    "attachments_count": 1,
    "rebounds_count": 0,
    "buckets_count": 6,
    "created_at": "2016-03-29T16:55:27Z",
    "updated_at": "2016-03-29T16:56:47Z",
    "html_url": "https://dribbble.com/shots/2619346-Sunset",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619346/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619346/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619346/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619346/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619346/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619346/rebounds",
    "animated": false,
    "tags": [
      "beach",
      "cartoon",
      "comics",
      "hand-darwn",
      "illustration",
      "nature",
      "sketch",
      "sunset"
    ],
    "user": {
      "id": 3460,
      "name": "Ryan Putnam",
      "username": "RypeArts",
      "html_url": "https://dribbble.com/RypeArts",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/3460/avatars/normal/4ed7a7a4737e971e3fa37f0705f5cc51.png?1457564367",
      "bio": "designer, illustrator, potter, and father",
      "location": "San Francisco, CA",
      "links": {
        "web": "http://ryanputn.am",
        "twitter": "https://twitter.com/RypeArts"
      },
      "buckets_count": 3,
      "comments_received_count": 9722,
      "followers_count": 46667,
      "followings_count": 518,
      "likes_count": 10207,
      "likes_received_count": 211321,
      "projects_count": 34,
      "rebounds_received_count": 373,
      "shots_count": 589,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/3460/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/3460/followers",
      "following_url": "https://api.dribbble.com/v1/users/3460/following",
      "likes_url": "https://api.dribbble.com/v1/users/3460/likes",
      "projects_url": "https://api.dribbble.com/v1/users/3460/projects",
      "shots_url": "https://api.dribbble.com/v1/users/3460/shots",
      "teams_url": "https://api.dribbble.com/v1/users/3460/teams",
      "created_at": "2010-07-16T12:48:16Z",
      "updated_at": "2016-03-29T16:56:47Z"
    },
    "team": null
  },
  {
    "id": 2619340,
    "title": "Skies Like These ",
    "description": "<p>In anticipation for their release of the paperback version of the book, Skies Like These, Macmillan commissioned us to redesign the cover artwork. </p>\n\n<p>The story is about a twelve-year-old girl name Jade who is sent to spend the summer with her aunt in Wyoming by her parents. She meets a rebellious boy who called himself Roy Parker, after the legendary Butch Cassidy. Jade tries to be a good friend Roy, but worries about the trouble he might get her into while he tries to plan stunts worthy of Butch Cassidy himself.\n</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/44585/screenshots/2619340/skies-like-these-dribbble.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/44585/screenshots/2619340/skies-like-these-dribbble_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/44585/screenshots/2619340/skies-like-these-dribbble_teaser.png"
    },
    "views_count": 1548,
    "likes_count": 177,
    "comments_count": 5,
    "attachments_count": 1,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T16:50:48Z",
    "updated_at": "2016-03-29T16:53:16Z",
    "html_url": "https://dribbble.com/shots/2619340-Skies-Like-These",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619340/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619340/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619340/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619340/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619340/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619340/rebounds",
    "animated": false,
    "tags": [
      "book",
      "book cover",
      "cover artwork",
      "cover design",
      "cowboy hat",
      "illustration",
      "mountain",
      "planets",
      "sky",
      "stars"
    ],
    "user": {
      "id": 44585,
      "name": "Brad Woodard",
      "username": "bradwwoodard",
      "html_url": "https://dribbble.com/bradwwoodard",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/44585/avatars/normal/593686b9b9c0d2b6a496d8404f24ce1f.png?1444862250",
      "bio": "Designer • Illustrator • Braver of the Woods",
      "location": "Austin, TX",
      "links": {
        "web": "http://www.bravethewoods.com/",
        "twitter": "https://twitter.com/brave_the_woods"
      },
      "buckets_count": 1,
      "comments_received_count": 2598,
      "followers_count": 8556,
      "followings_count": 412,
      "likes_count": 2285,
      "likes_received_count": 45938,
      "projects_count": 21,
      "rebounds_received_count": 16,
      "shots_count": 324,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/44585/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/44585/followers",
      "following_url": "https://api.dribbble.com/v1/users/44585/following",
      "likes_url": "https://api.dribbble.com/v1/users/44585/likes",
      "projects_url": "https://api.dribbble.com/v1/users/44585/projects",
      "shots_url": "https://api.dribbble.com/v1/users/44585/shots",
      "teams_url": "https://api.dribbble.com/v1/users/44585/teams",
      "created_at": "2011-07-08T15:47:58Z",
      "updated_at": "2016-03-29T16:53:16Z"
    },
    "team": null
  },
  {
    "id": 2619544,
    "title": "Robinhood",
    "description": "<p>Robinhood integrations illustration. </p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/4598/screenshots/2619544/integrations_header_01.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/4598/screenshots/2619544/integrations_header_01_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/4598/screenshots/2619544/integrations_header_01_teaser.png"
    },
    "views_count": 1530,
    "likes_count": 177,
    "comments_count": 6,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T18:24:59Z",
    "updated_at": "2016-03-29T18:26:47Z",
    "html_url": "https://dribbble.com/shots/2619544-Robinhood",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619544/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619544/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619544/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619544/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619544/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619544/rebounds",
    "animated": false,
    "tags": [
      "chart",
      "finance",
      "illustration",
      "money",
      "stock"
    ],
    "user": {
      "id": 4598,
      "name": "Ty Wilkins",
      "username": "tywilkins",
      "html_url": "https://dribbble.com/tywilkins",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/4598/avatars/normal/fox2.jpg?1391573055",
      "bio": "hello@tywilkins.com",
      "location": "San Francisco, CA",
      "links": {
        "web": "http://www.tywilkins.com",
        "twitter": "https://twitter.com/tywilkins"
      },
      "buckets_count": 0,
      "comments_received_count": 1080,
      "followers_count": 8222,
      "followings_count": 527,
      "likes_count": 0,
      "likes_received_count": 21359,
      "projects_count": 8,
      "rebounds_received_count": 0,
      "shots_count": 97,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/4598/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/4598/followers",
      "following_url": "https://api.dribbble.com/v1/users/4598/following",
      "likes_url": "https://api.dribbble.com/v1/users/4598/likes",
      "projects_url": "https://api.dribbble.com/v1/users/4598/projects",
      "shots_url": "https://api.dribbble.com/v1/users/4598/shots",
      "teams_url": "https://api.dribbble.com/v1/users/4598/teams",
      "created_at": "2010-09-30T20:31:02Z",
      "updated_at": "2016-03-29T18:27:54Z"
    },
    "team": null
  },
  {
    "id": 2619187,
    "title": "Confidential iPad App part #2",
    "description": "<p>Over the holidays, Rally built an iPad app for a confidential client and conference. This is video directly from interacting with the native iOS app.</p>\n\n<p>Myself, <a href=\"https://dribbble.com/4777\">@Geof Crowl</a>, and Wes tackled the project in just 15 days. It was intense but fun. Geof and I did the design and helped with layout in Xcode using Nibs. Wes built the globe and the data visualizations from a json file using our own Open GL globe library we've been building on an off for the past year. </p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/3816/screenshots/2619187/confidential-ipad-app-rally.gif",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/3816/screenshots/2619187/confidential-ipad-app-rally_1x.gif",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/3816/screenshots/2619187/confidential-ipad-app-rally_teaser.gif"
    },
    "views_count": 3205,
    "likes_count": 183,
    "comments_count": 9,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 20,
    "created_at": "2016-03-29T15:50:05Z",
    "updated_at": "2016-03-29T15:51:33Z",
    "html_url": "https://dribbble.com/shots/2619187-Confidential-iPad-App-part-2",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619187/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619187/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619187/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619187/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619187/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619187/rebounds",
    "animated": true,
    "tags": [

    ],
    "user": {
      "id": 3816,
      "name": "Ben Cline",
      "username": "letsgorally",
      "html_url": "https://dribbble.com/letsgorally",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/3816/avatars/normal/bb00fd14001a8cdd5e0e354df52a7fa4.png?1450769044",
      "bio": "<a href=\"https://dribbble.com/RALLY\">@RALLY</a> Co-Founder / Designer",
      "location": "Salt Lake City",
      "links": {
        "web": "http://beta.rallyinteractive.com",
        "twitter": "https://twitter.com/yocline"
      },
      "buckets_count": 3,
      "comments_received_count": 4525,
      "followers_count": 30105,
      "followings_count": 241,
      "likes_count": 6878,
      "likes_received_count": 87892,
      "projects_count": 10,
      "rebounds_received_count": 28,
      "shots_count": 257,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/3816/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/3816/followers",
      "following_url": "https://api.dribbble.com/v1/users/3816/following",
      "likes_url": "https://api.dribbble.com/v1/users/3816/likes",
      "projects_url": "https://api.dribbble.com/v1/users/3816/projects",
      "shots_url": "https://api.dribbble.com/v1/users/3816/shots",
      "teams_url": "https://api.dribbble.com/v1/users/3816/teams",
      "created_at": "2010-07-30T17:30:31Z",
      "updated_at": "2016-03-29T15:51:33Z"
    },
    "team": {
      "id": 559317,
      "name": "RALLY",
      "username": "rally",
      "html_url": "https://dribbble.com/rally",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/559317/avatars/normal/rally_logo.png?1398641637",
      "bio": "Interactive Studio. Design &amp; Development",
      "location": "Salt Lake City",
      "links": {
        "web": "http://beta.rallyinteractive.com",
        "twitter": "https://twitter.com/letsgorally"
      },
      "buckets_count": 0,
      "comments_received_count": 0,
      "followers_count": 8281,
      "followings_count": 6,
      "likes_count": 73,
      "likes_received_count": 0,
      "projects_count": 14,
      "rebounds_received_count": 0,
      "shots_count": 273,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/559317/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/559317/followers",
      "following_url": "https://api.dribbble.com/v1/users/559317/following",
      "likes_url": "https://api.dribbble.com/v1/users/559317/likes",
      "projects_url": "https://api.dribbble.com/v1/users/559317/projects",
      "shots_url": "https://api.dribbble.com/v1/users/559317/shots",
      "created_at": "2014-04-27T23:31:42Z",
      "updated_at": "2016-03-29T15:51:33Z",
      "members_count": 5,
      "members_url": "https://api.dribbble.com/v1/teams/559317/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/559317/shots"
    }
  },
  {
    "id": 2619200,
    "title": "Eilean Donan Castle",
    "description": "<p>Day 209/365</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/283823/screenshots/2619200/eilean_donan_castle-01.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/283823/screenshots/2619200/eilean_donan_castle-01_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/283823/screenshots/2619200/eilean_donan_castle-01_teaser.jpg"
    },
    "views_count": 1434,
    "likes_count": 162,
    "comments_count": 4,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T15:54:42Z",
    "updated_at": "2016-03-29T15:55:23Z",
    "html_url": "https://dribbble.com/shots/2619200-Eilean-Donan-Castle",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619200/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619200/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619200/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619200/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619200/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619200/rebounds",
    "rebound_source_url": "https://api.dribbble.com/v1/shots/2614735",
    "animated": false,
    "tags": [
      "icon",
      "illustration",
      "lake",
      "scotland",
      "vector"
    ],
    "user": {
      "id": 283823,
      "name": "Scott Tusk",
      "username": "Tusk",
      "html_url": "https://dribbble.com/Tusk",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/283823/avatars/normal/c71f583fd2f781e48da28697c6ec2211.jpg?1456193406",
      "bio": "",
      "location": "Chicago",
      "links": {
      },
      "buckets_count": 0,
      "comments_received_count": 1118,
      "followers_count": 5013,
      "followings_count": 812,
      "likes_count": 2295,
      "likes_received_count": 45133,
      "projects_count": 1,
      "rebounds_received_count": 214,
      "shots_count": 282,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/283823/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/283823/followers",
      "following_url": "https://api.dribbble.com/v1/users/283823/following",
      "likes_url": "https://api.dribbble.com/v1/users/283823/likes",
      "projects_url": "https://api.dribbble.com/v1/users/283823/projects",
      "shots_url": "https://api.dribbble.com/v1/users/283823/shots",
      "teams_url": "https://api.dribbble.com/v1/users/283823/teams",
      "created_at": "2013-02-17T16:32:29Z",
      "updated_at": "2016-03-29T15:55:23Z"
    },
    "team": null
  },
  {
    "id": 2619378,
    "title": "Infinite Coffee",
    "description": "<p>It's Monday, I need coffee. Forever.</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/60266/screenshots/2619378/coffee.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/60266/screenshots/2619378/coffee_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/60266/screenshots/2619378/coffee_teaser.jpg"
    },
    "views_count": 1301,
    "likes_count": 146,
    "comments_count": 6,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 2,
    "created_at": "2016-03-29T17:11:50Z",
    "updated_at": "2016-03-29T17:18:17Z",
    "html_url": "https://dribbble.com/shots/2619378-Infinite-Coffee",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619378/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619378/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619378/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619378/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619378/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619378/rebounds",
    "animated": false,
    "tags": [
      "8",
      "coffee",
      "cup",
      "food",
      "geometric",
      "illustration",
      "infinite",
      "kite",
      "liquid",
      "mug",
      "stroke"
    ],
    "user": {
      "id": 60266,
      "name": "Gustavo Zambelli",
      "username": "zamax",
      "html_url": "https://dribbble.com/zamax",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/60266/avatars/normal/83d4ac61d50bf5b2fedc9f9cc45a62d9.png?1453312126",
      "bio": "Hi, I&#39;m Lead of illustration at <a href=\"https://dribbble.com/aerolab\">@aerolab</a> &amp; Superman at <a href=\"https://dribbble.com/RicosQuesos\">@RicosQuesos</a>",
      "location": "Neuquén, Argentina.",
      "links": {
        "web": "http://zamax.tumblr.com",
        "twitter": "https://twitter.com/zamax4"
      },
      "buckets_count": 19,
      "comments_received_count": 1645,
      "followers_count": 4198,
      "followings_count": 1253,
      "likes_count": 8828,
      "likes_received_count": 36018,
      "projects_count": 4,
      "rebounds_received_count": 133,
      "shots_count": 305,
      "teams_count": 4,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/60266/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/60266/followers",
      "following_url": "https://api.dribbble.com/v1/users/60266/following",
      "likes_url": "https://api.dribbble.com/v1/users/60266/likes",
      "projects_url": "https://api.dribbble.com/v1/users/60266/projects",
      "shots_url": "https://api.dribbble.com/v1/users/60266/shots",
      "teams_url": "https://api.dribbble.com/v1/users/60266/teams",
      "created_at": "2011-09-07T19:27:31Z",
      "updated_at": "2016-03-29T17:18:17Z"
    },
    "team": {
      "id": 171431,
      "name": "Aerolab",
      "username": "aerolab",
      "html_url": "https://dribbble.com/aerolab",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/171431/avatars/normal/1283d5fbcd21a809d0cdc2f96a560096.png?1458077891",
      "bio": "We design and develop beautiful digital products for startups and leading brands.",
      "location": "Buenos Aires - San Francisco",
      "links": {
        "web": "http://aerolab.co",
        "twitter": "https://twitter.com/aerolab"
      },
      "buckets_count": 5,
      "comments_received_count": 157,
      "followers_count": 3845,
      "followings_count": 128,
      "likes_count": 4228,
      "likes_received_count": 2121,
      "projects_count": 24,
      "rebounds_received_count": 2,
      "shots_count": 579,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/171431/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/171431/followers",
      "following_url": "https://api.dribbble.com/v1/users/171431/following",
      "likes_url": "https://api.dribbble.com/v1/users/171431/likes",
      "projects_url": "https://api.dribbble.com/v1/users/171431/projects",
      "shots_url": "https://api.dribbble.com/v1/users/171431/shots",
      "created_at": "2012-07-04T02:31:07Z",
      "updated_at": "2016-03-29T17:18:17Z",
      "members_count": 21,
      "members_url": "https://api.dribbble.com/v1/teams/171431/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/171431/shots"
    }
  },
  {
    "id": 2619645,
    "title": "Hello, Is It Me You're Looking For?",
    "description": "<p>I had the privilege of getting to collaborate with <a href=\"https://dribbble.com/72483\">@Jordan Wade</a> on a hero illustration for his SVG post. And let me tell you, watching your work come alive with CSS and JS is pretty much the jam.</p>\n\n<p><a href=\"https://dribbble.com/shots/2619653-Hello-from-the-other-side\" rel=\"nofollow noreferrer\">Check it out all alive n' stuff!</a></p>\n\n<p><a href=\"https://www.codeschool.com/blog/2016/03/29/benefits-of-learning-how-to-use-svg/\" rel=\"nofollow noreferrer\">Go read about why you should learn more about SVG for the web</a>.</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/13774/screenshots/2619645/hello.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/13774/screenshots/2619645/hello_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/13774/screenshots/2619645/hello_teaser.png"
    },
    "views_count": 1771,
    "likes_count": 146,
    "comments_count": 2,
    "attachments_count": 0,
    "rebounds_count": 1,
    "buckets_count": 2,
    "created_at": "2016-03-29T19:12:57Z",
    "updated_at": "2016-03-29T20:26:49Z",
    "html_url": "https://dribbble.com/shots/2619645-Hello-Is-It-Me-You-re-Looking-For",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619645/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619645/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619645/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619645/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619645/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619645/rebounds",
    "animated": false,
    "tags": [
      "hello"
    ],
    "user": {
      "id": 13774,
      "name": "Justin Mezzell",
      "username": "JustinMezzell",
      "html_url": "https://dribbble.com/JustinMezzell",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/13774/avatars/normal/Me_Web.jpg?1380768479",
      "bio": "Designer? Illustrator? Why not. Directing Art at <a href=\"https://dribbble.com/codeschool\">@codeschool</a>.",
      "location": "Orlando, FL",
      "links": {
        "web": "http://justinmezzell.com/",
        "twitter": "https://twitter.com/JustinMezzell"
      },
      "buckets_count": 0,
      "comments_received_count": 5736,
      "followers_count": 31449,
      "followings_count": 713,
      "likes_count": 5548,
      "likes_received_count": 113425,
      "projects_count": 0,
      "rebounds_received_count": 55,
      "shots_count": 312,
      "teams_count": 4,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/13774/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/13774/followers",
      "following_url": "https://api.dribbble.com/v1/users/13774/following",
      "likes_url": "https://api.dribbble.com/v1/users/13774/likes",
      "projects_url": "https://api.dribbble.com/v1/users/13774/projects",
      "shots_url": "https://api.dribbble.com/v1/users/13774/shots",
      "teams_url": "https://api.dribbble.com/v1/users/13774/teams",
      "created_at": "2011-01-26T06:58:50Z",
      "updated_at": "2016-03-29T20:26:49Z"
    },
    "team": {
      "id": 333539,
      "name": "Code School",
      "username": "codeschool",
      "html_url": "https://dribbble.com/codeschool",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/333539/avatars/normal/329ac818d30ca1a7b900c09b105ce277.jpg?1410890340",
      "bio": "Code School teaches web technologies in the comfort of your browser with video lessons, coding challenges, and screencasts.",
      "location": "Orlando, FL",
      "links": {
        "web": "http://codeschool.com",
        "twitter": "https://twitter.com/codeschool"
      },
      "buckets_count": 0,
      "comments_received_count": 0,
      "followers_count": 3057,
      "followings_count": 13,
      "likes_count": 1,
      "likes_received_count": 0,
      "projects_count": 0,
      "rebounds_received_count": 0,
      "shots_count": 154,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/333539/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/333539/followers",
      "following_url": "https://api.dribbble.com/v1/users/333539/following",
      "likes_url": "https://api.dribbble.com/v1/users/333539/likes",
      "projects_url": "https://api.dribbble.com/v1/users/333539/projects",
      "shots_url": "https://api.dribbble.com/v1/users/333539/shots",
      "created_at": "2013-05-15T21:37:44Z",
      "updated_at": "2016-03-29T20:26:49Z",
      "members_count": 10,
      "members_url": "https://api.dribbble.com/v1/teams/333539/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/333539/shots"
    }
  },
  {
    "id": 2619181,
    "title": "Costa Rica",
    "description": "<p>Shirt graphic for offsite meeting in Costa Rica. </p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/21030/screenshots/2619181/costa.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/21030/screenshots/2619181/costa_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/21030/screenshots/2619181/costa_teaser.png"
    },
    "views_count": 1261,
    "likes_count": 136,
    "comments_count": 7,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T15:48:25Z",
    "updated_at": "2016-03-29T15:49:13Z",
    "html_url": "https://dribbble.com/shots/2619181-Costa-Rica",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619181/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619181/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619181/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619181/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619181/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619181/rebounds",
    "animated": false,
    "tags": [
      "bird",
      "costa rica",
      "design",
      "illustration",
      "leaf",
      "toucan",
      "tropical"
    ],
    "user": {
      "id": 21030,
      "name": "Trevor Basset",
      "username": "trevorbasset",
      "html_url": "https://dribbble.com/trevorbasset",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/21030/avatars/normal/e9907b8b54ea842b30c5787ef95acc3a.png?1426787498",
      "bio": "Design, art direction, illustration, birds. ",
      "location": "Seattle, WA",
      "links": {
        "web": "http://www.trevorbasset.com",
        "twitter": "https://twitter.com/trevorbasset"
      },
      "buckets_count": 0,
      "comments_received_count": 244,
      "followers_count": 1169,
      "followings_count": 367,
      "likes_count": 1204,
      "likes_received_count": 3660,
      "projects_count": 0,
      "rebounds_received_count": 4,
      "shots_count": 85,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/21030/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/21030/followers",
      "following_url": "https://api.dribbble.com/v1/users/21030/following",
      "likes_url": "https://api.dribbble.com/v1/users/21030/likes",
      "projects_url": "https://api.dribbble.com/v1/users/21030/projects",
      "shots_url": "https://api.dribbble.com/v1/users/21030/shots",
      "teams_url": "https://api.dribbble.com/v1/users/21030/teams",
      "created_at": "2011-03-03T20:05:14Z",
      "updated_at": "2016-03-30T04:08:03Z"
    },
    "team": null
  },
  {
    "id": 2619381,
    "title": "Seaborn Oyster Co.",
    "description": null,
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/52758/screenshots/2619381/seaborn_oyster_co_j_fletcher_teaser.jpg"
    },
    "views_count": 2166,
    "likes_count": 235,
    "comments_count": 2,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 11,
    "created_at": "2016-03-29T17:12:41Z",
    "updated_at": "2016-03-29T17:12:53Z",
    "html_url": "https://dribbble.com/shots/2619381-Seaborn-Oyster-Co",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619381/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619381/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619381/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619381/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619381/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619381/rebounds",
    "animated": false,
    "tags": [
      "charleston",
      "company",
      "ocean",
      "oyster",
      "sea",
      "wave"
    ],
    "user": {
      "id": 52758,
      "name": "Jay Fletcher",
      "username": "jfletcherdesign",
      "html_url": "https://dribbble.com/jfletcherdesign",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/52758/avatars/normal/J_FLETCHER_DESIGN_LOGO-01.jpg?1401983283",
      "bio": "",
      "location": "Charleston, SC",
      "links": {
        "web": "http://www.jfletcherdesign.com",
        "twitter": "https://twitter.com/jfletcherdesign"
      },
      "buckets_count": 0,
      "comments_received_count": 5239,
      "followers_count": 13803,
      "followings_count": 558,
      "likes_count": 6531,
      "likes_received_count": 104895,
      "projects_count": 10,
      "rebounds_received_count": 325,
      "shots_count": 481,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/52758/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/52758/followers",
      "following_url": "https://api.dribbble.com/v1/users/52758/following",
      "likes_url": "https://api.dribbble.com/v1/users/52758/likes",
      "projects_url": "https://api.dribbble.com/v1/users/52758/projects",
      "shots_url": "https://api.dribbble.com/v1/users/52758/shots",
      "teams_url": "https://api.dribbble.com/v1/users/52758/teams",
      "created_at": "2011-08-13T23:30:38Z",
      "updated_at": "2016-03-29T17:12:53Z"
    },
    "team": null
  },
  {
    "id": 2619494,
    "title": "Mystery Project 72.1",
    "description": "<p>We're excited to be onboard for a new year of Outside Lands festival branding! Stay tuned for weekly updates including Ranger Dave's new patch series, the 2016 lineup, and more!</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/31348/screenshots/2619494/patches-30.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/31348/screenshots/2619494/patches-30_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/31348/screenshots/2619494/patches-30_teaser.jpg"
    },
    "views_count": 2304,
    "likes_count": 252,
    "comments_count": 4,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 11,
    "created_at": "2016-03-29T18:05:57Z",
    "updated_at": "2016-03-29T18:07:21Z",
    "html_url": "https://dribbble.com/shots/2619494-Mystery-Project-72-1",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619494/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619494/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619494/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619494/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619494/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619494/rebounds",
    "rebound_source_url": "https://api.dribbble.com/v1/shots/2454166",
    "animated": false,
    "tags": [
      "badge",
      "branding",
      "bridge",
      "city",
      "dan kuhlken",
      "dkng",
      "logo",
      "nathan goldman",
      "patch",
      "san francisco",
      "vector"
    ],
    "user": {
      "id": 31348,
      "name": "DKNG",
      "username": "DKNG",
      "html_url": "https://dribbble.com/DKNG",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/31348/avatars/original/dkng_twitter.jpg?1305140827",
      "bio": "Established in 2005, DKNG is a design studio based in Los Angeles, California with a focus on the music and entertainment industries.",
      "location": "Los Angeles, CA",
      "links": {
        "web": "http://www.dkngstudios.com",
        "twitter": "https://twitter.com/DKNGstudios"
      },
      "buckets_count": 0,
      "comments_received_count": 5274,
      "followers_count": 24704,
      "followings_count": 256,
      "likes_count": 197,
      "likes_received_count": 125646,
      "projects_count": 47,
      "rebounds_received_count": 324,
      "shots_count": 479,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/31348/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/31348/followers",
      "following_url": "https://api.dribbble.com/v1/users/31348/following",
      "likes_url": "https://api.dribbble.com/v1/users/31348/likes",
      "projects_url": "https://api.dribbble.com/v1/users/31348/projects",
      "shots_url": "https://api.dribbble.com/v1/users/31348/shots",
      "teams_url": "https://api.dribbble.com/v1/users/31348/teams",
      "created_at": "2011-04-28T20:48:48Z",
      "updated_at": "2016-03-29T18:07:21Z"
    },
    "team": null
  },
  {
    "id": 2619183,
    "title": "Bonsai",
    "description": null,
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/44323/screenshots/2619183/bonsai.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/44323/screenshots/2619183/bonsai_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/44323/screenshots/2619183/bonsai_teaser.png"
    },
    "views_count": 2143,
    "likes_count": 259,
    "comments_count": 11,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 18,
    "created_at": "2016-03-29T15:48:38Z",
    "updated_at": "2016-03-29T15:49:04Z",
    "html_url": "https://dribbble.com/shots/2619183-Bonsai",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619183/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619183/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619183/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619183/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619183/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619183/rebounds",
    "animated": false,
    "tags": [
      "bonsai",
      "illustration",
      "nature",
      "plant",
      "pot",
      "tree",
      "zen"
    ],
    "user": {
      "id": 44323,
      "name": "Zach Roszczewski",
      "username": "ZachRoszczewski",
      "html_url": "https://dribbble.com/ZachRoszczewski",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/44323/avatars/normal/18f509c70a25627b40d5e3499b1cba2f.png?1419195740",
      "bio": "Iconographer &amp; Illustrator. Creator of <a href=\"http://www.flaticons.co\" rel=\"nofollow noreferrer\">www.flaticons.co</a> &amp; <a href=\"http://www.mojiapp.net\" rel=\"nofollow noreferrer\">www.mojiapp.net</a>.",
      "location": "Encinitas, California",
      "links": {
        "web": "http://zachroszczewski.com",
        "twitter": "https://twitter.com/ZachRoszczewski"
      },
      "buckets_count": 10,
      "comments_received_count": 1682,
      "followers_count": 9067,
      "followings_count": 1541,
      "likes_count": 14094,
      "likes_received_count": 34409,
      "projects_count": 7,
      "rebounds_received_count": 14,
      "shots_count": 113,
      "teams_count": 2,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/44323/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/44323/followers",
      "following_url": "https://api.dribbble.com/v1/users/44323/following",
      "likes_url": "https://api.dribbble.com/v1/users/44323/likes",
      "projects_url": "https://api.dribbble.com/v1/users/44323/projects",
      "shots_url": "https://api.dribbble.com/v1/users/44323/shots",
      "teams_url": "https://api.dribbble.com/v1/users/44323/teams",
      "created_at": "2011-07-07T14:49:07Z",
      "updated_at": "2016-03-29T15:49:04Z"
    },
    "team": null
  },
  {
    "id": 2619255,
    "title": "Canvas—A new space for big ideas",
    "description": "<p>A month ago the our team launched Canvas, a product for brands to tell their story and highlight products. It's been amazing to see your excitement for the creative possibilities and we can't wait to see how you use it. </p>\n\n<p>One of the best aspects of working on ads at Facebook is striving to find the sweet spot between the goals of our advertisers and those of people browsing their feed. Canvas allows businesses to create a more compelling experience for people, and in turn provides people with an ad they actually enjoy. Stay tuned for more :) </p>\n\n<p>If your interested in learning more about Canvas, or building one, you should check out <a href=\"https://canvas.facebook.com/\" target=\"_blank\" rel=\"noreferrer\">https://canvas.facebook.com/</a>\n<br />To learn more about our process check out Jaime Rovira's medium post <a href=\"https://medium.com/facebook-design/canvas-how-we-crafted-facebook-s-new-immersive-ads-696870e66b3f#.jy9w9l51m\" target=\"_blank\" rel=\"noreferrer\">https://medium.com/facebook-design/canvas-how-we-crafted-facebook-s-new-immersive-ads-696870e66b3f#.jy9w9l51m</a></p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/476251/screenshots/2619255/startdribbble.gif",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/476251/screenshots/2619255/startdribbble_1x.gif",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/476251/screenshots/2619255/startdribbble_teaser.gif"
    },
    "views_count": 3502,
    "likes_count": 262,
    "comments_count": 9,
    "attachments_count": 2,
    "rebounds_count": 0,
    "buckets_count": 12,
    "created_at": "2016-03-29T16:18:33Z",
    "updated_at": "2016-03-29T16:19:50Z",
    "html_url": "https://dribbble.com/shots/2619255-Canvas-A-new-space-for-big-ideas",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619255/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619255/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619255/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619255/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619255/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619255/rebounds",
    "animated": true,
    "tags": [
      "android",
      "animation",
      "creative",
      "illustration",
      "ios",
      "mobile",
      "tool"
    ],
    "user": {
      "id": 476251,
      "name": "ali griffin",
      "username": "aligdanger",
      "html_url": "https://dribbble.com/aligdanger",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/476251/avatars/normal/ali.png?1404762398",
      "bio": "Designing product <a href=\"https://dribbble.com/Facebook\">@Facebook</a>",
      "location": "San Francisco, CA",
      "links": {
        "twitter": "https://twitter.com/aligdanger"
      },
      "buckets_count": 0,
      "comments_received_count": 203,
      "followers_count": 513,
      "followings_count": 289,
      "likes_count": 1302,
      "likes_received_count": 2487,
      "projects_count": 3,
      "rebounds_received_count": 9,
      "shots_count": 22,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/476251/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/476251/followers",
      "following_url": "https://api.dribbble.com/v1/users/476251/following",
      "likes_url": "https://api.dribbble.com/v1/users/476251/likes",
      "projects_url": "https://api.dribbble.com/v1/users/476251/projects",
      "shots_url": "https://api.dribbble.com/v1/users/476251/shots",
      "teams_url": "https://api.dribbble.com/v1/users/476251/teams",
      "created_at": "2014-01-10T18:37:14Z",
      "updated_at": "2016-03-30T04:07:49Z"
    },
    "team": {
      "id": 333588,
      "name": "Facebook",
      "username": "Facebook",
      "html_url": "https://dribbble.com/Facebook",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/333588/avatars/normal/9a9d5301e289975fa16abd070f1615c0.png?1440610176",
      "bio": "",
      "location": "1 Hacker Way, Menlo Park, CA",
      "links": {
        "web": "https://www.facebook.com/design",
        "twitter": "https://twitter.com/facebookdesign"
      },
      "buckets_count": 0,
      "comments_received_count": 0,
      "followers_count": 14039,
      "followings_count": 0,
      "likes_count": 2,
      "likes_received_count": 0,
      "projects_count": 0,
      "rebounds_received_count": 0,
      "shots_count": 121,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/333588/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/333588/followers",
      "following_url": "https://api.dribbble.com/v1/users/333588/following",
      "likes_url": "https://api.dribbble.com/v1/users/333588/likes",
      "projects_url": "https://api.dribbble.com/v1/users/333588/projects",
      "shots_url": "https://api.dribbble.com/v1/users/333588/shots",
      "created_at": "2013-05-15T23:13:37Z",
      "updated_at": "2016-03-30T04:07:49Z",
      "members_count": 39,
      "members_url": "https://api.dribbble.com/v1/teams/333588/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/333588/shots"
    }
  },
  {
    "id": 2619346,
    "title": "Sunset",
    "description": "<p>Baker Beach sunset from this weekend.</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/3460/screenshots/2619346/sunset.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/3460/screenshots/2619346/sunset_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/3460/screenshots/2619346/sunset_teaser.png"
    },
    "views_count": 2897,
    "likes_count": 231,
    "comments_count": 3,
    "attachments_count": 1,
    "rebounds_count": 0,
    "buckets_count": 6,
    "created_at": "2016-03-29T16:55:27Z",
    "updated_at": "2016-03-29T16:56:47Z",
    "html_url": "https://dribbble.com/shots/2619346-Sunset",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619346/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619346/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619346/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619346/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619346/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619346/rebounds",
    "animated": false,
    "tags": [
      "beach",
      "cartoon",
      "comics",
      "hand-darwn",
      "illustration",
      "nature",
      "sketch",
      "sunset"
    ],
    "user": {
      "id": 3460,
      "name": "Ryan Putnam",
      "username": "RypeArts",
      "html_url": "https://dribbble.com/RypeArts",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/3460/avatars/normal/4ed7a7a4737e971e3fa37f0705f5cc51.png?1457564367",
      "bio": "designer, illustrator, potter, and father",
      "location": "San Francisco, CA",
      "links": {
        "web": "http://ryanputn.am",
        "twitter": "https://twitter.com/RypeArts"
      },
      "buckets_count": 3,
      "comments_received_count": 9722,
      "followers_count": 46667,
      "followings_count": 518,
      "likes_count": 10207,
      "likes_received_count": 211321,
      "projects_count": 34,
      "rebounds_received_count": 373,
      "shots_count": 589,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/3460/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/3460/followers",
      "following_url": "https://api.dribbble.com/v1/users/3460/following",
      "likes_url": "https://api.dribbble.com/v1/users/3460/likes",
      "projects_url": "https://api.dribbble.com/v1/users/3460/projects",
      "shots_url": "https://api.dribbble.com/v1/users/3460/shots",
      "teams_url": "https://api.dribbble.com/v1/users/3460/teams",
      "created_at": "2010-07-16T12:48:16Z",
      "updated_at": "2016-03-29T16:56:47Z"
    },
    "team": null
  },
  {
    "id": 2619340,
    "title": "Skies Like These ",
    "description": "<p>In anticipation for their release of the paperback version of the book, Skies Like These, Macmillan commissioned us to redesign the cover artwork. </p>\n\n<p>The story is about a twelve-year-old girl name Jade who is sent to spend the summer with her aunt in Wyoming by her parents. She meets a rebellious boy who called himself Roy Parker, after the legendary Butch Cassidy. Jade tries to be a good friend Roy, but worries about the trouble he might get her into while he tries to plan stunts worthy of Butch Cassidy himself.\n</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/44585/screenshots/2619340/skies-like-these-dribbble.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/44585/screenshots/2619340/skies-like-these-dribbble_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/44585/screenshots/2619340/skies-like-these-dribbble_teaser.png"
    },
    "views_count": 1548,
    "likes_count": 177,
    "comments_count": 5,
    "attachments_count": 1,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T16:50:48Z",
    "updated_at": "2016-03-29T16:53:16Z",
    "html_url": "https://dribbble.com/shots/2619340-Skies-Like-These",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619340/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619340/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619340/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619340/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619340/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619340/rebounds",
    "animated": false,
    "tags": [
      "book",
      "book cover",
      "cover artwork",
      "cover design",
      "cowboy hat",
      "illustration",
      "mountain",
      "planets",
      "sky",
      "stars"
    ],
    "user": {
      "id": 44585,
      "name": "Brad Woodard",
      "username": "bradwwoodard",
      "html_url": "https://dribbble.com/bradwwoodard",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/44585/avatars/normal/593686b9b9c0d2b6a496d8404f24ce1f.png?1444862250",
      "bio": "Designer • Illustrator • Braver of the Woods",
      "location": "Austin, TX",
      "links": {
        "web": "http://www.bravethewoods.com/",
        "twitter": "https://twitter.com/brave_the_woods"
      },
      "buckets_count": 1,
      "comments_received_count": 2598,
      "followers_count": 8556,
      "followings_count": 412,
      "likes_count": 2285,
      "likes_received_count": 45938,
      "projects_count": 21,
      "rebounds_received_count": 16,
      "shots_count": 324,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/44585/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/44585/followers",
      "following_url": "https://api.dribbble.com/v1/users/44585/following",
      "likes_url": "https://api.dribbble.com/v1/users/44585/likes",
      "projects_url": "https://api.dribbble.com/v1/users/44585/projects",
      "shots_url": "https://api.dribbble.com/v1/users/44585/shots",
      "teams_url": "https://api.dribbble.com/v1/users/44585/teams",
      "created_at": "2011-07-08T15:47:58Z",
      "updated_at": "2016-03-29T16:53:16Z"
    },
    "team": null
  },
  {
    "id": 2619544,
    "title": "Robinhood",
    "description": "<p>Robinhood integrations illustration. </p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/4598/screenshots/2619544/integrations_header_01.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/4598/screenshots/2619544/integrations_header_01_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/4598/screenshots/2619544/integrations_header_01_teaser.png"
    },
    "views_count": 1530,
    "likes_count": 177,
    "comments_count": 6,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T18:24:59Z",
    "updated_at": "2016-03-29T18:26:47Z",
    "html_url": "https://dribbble.com/shots/2619544-Robinhood",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619544/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619544/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619544/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619544/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619544/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619544/rebounds",
    "animated": false,
    "tags": [
      "chart",
      "finance",
      "illustration",
      "money",
      "stock"
    ],
    "user": {
      "id": 4598,
      "name": "Ty Wilkins",
      "username": "tywilkins",
      "html_url": "https://dribbble.com/tywilkins",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/4598/avatars/normal/fox2.jpg?1391573055",
      "bio": "hello@tywilkins.com",
      "location": "San Francisco, CA",
      "links": {
        "web": "http://www.tywilkins.com",
        "twitter": "https://twitter.com/tywilkins"
      },
      "buckets_count": 0,
      "comments_received_count": 1080,
      "followers_count": 8222,
      "followings_count": 527,
      "likes_count": 0,
      "likes_received_count": 21359,
      "projects_count": 8,
      "rebounds_received_count": 0,
      "shots_count": 97,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/4598/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/4598/followers",
      "following_url": "https://api.dribbble.com/v1/users/4598/following",
      "likes_url": "https://api.dribbble.com/v1/users/4598/likes",
      "projects_url": "https://api.dribbble.com/v1/users/4598/projects",
      "shots_url": "https://api.dribbble.com/v1/users/4598/shots",
      "teams_url": "https://api.dribbble.com/v1/users/4598/teams",
      "created_at": "2010-09-30T20:31:02Z",
      "updated_at": "2016-03-29T18:27:54Z"
    },
    "team": null
  },
  {
    "id": 2619187,
    "title": "Confidential iPad App part #2",
    "description": "<p>Over the holidays, Rally built an iPad app for a confidential client and conference. This is video directly from interacting with the native iOS app.</p>\n\n<p>Myself, <a href=\"https://dribbble.com/4777\">@Geof Crowl</a>, and Wes tackled the project in just 15 days. It was intense but fun. Geof and I did the design and helped with layout in Xcode using Nibs. Wes built the globe and the data visualizations from a json file using our own Open GL globe library we've been building on an off for the past year. </p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/3816/screenshots/2619187/confidential-ipad-app-rally.gif",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/3816/screenshots/2619187/confidential-ipad-app-rally_1x.gif",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/3816/screenshots/2619187/confidential-ipad-app-rally_teaser.gif"
    },
    "views_count": 3205,
    "likes_count": 183,
    "comments_count": 9,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 20,
    "created_at": "2016-03-29T15:50:05Z",
    "updated_at": "2016-03-29T15:51:33Z",
    "html_url": "https://dribbble.com/shots/2619187-Confidential-iPad-App-part-2",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619187/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619187/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619187/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619187/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619187/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619187/rebounds",
    "animated": true,
    "tags": [

    ],
    "user": {
      "id": 3816,
      "name": "Ben Cline",
      "username": "letsgorally",
      "html_url": "https://dribbble.com/letsgorally",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/3816/avatars/normal/bb00fd14001a8cdd5e0e354df52a7fa4.png?1450769044",
      "bio": "<a href=\"https://dribbble.com/RALLY\">@RALLY</a> Co-Founder / Designer",
      "location": "Salt Lake City",
      "links": {
        "web": "http://beta.rallyinteractive.com",
        "twitter": "https://twitter.com/yocline"
      },
      "buckets_count": 3,
      "comments_received_count": 4525,
      "followers_count": 30105,
      "followings_count": 241,
      "likes_count": 6878,
      "likes_received_count": 87892,
      "projects_count": 10,
      "rebounds_received_count": 28,
      "shots_count": 257,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/3816/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/3816/followers",
      "following_url": "https://api.dribbble.com/v1/users/3816/following",
      "likes_url": "https://api.dribbble.com/v1/users/3816/likes",
      "projects_url": "https://api.dribbble.com/v1/users/3816/projects",
      "shots_url": "https://api.dribbble.com/v1/users/3816/shots",
      "teams_url": "https://api.dribbble.com/v1/users/3816/teams",
      "created_at": "2010-07-30T17:30:31Z",
      "updated_at": "2016-03-29T15:51:33Z"
    },
    "team": {
      "id": 559317,
      "name": "RALLY",
      "username": "rally",
      "html_url": "https://dribbble.com/rally",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/559317/avatars/normal/rally_logo.png?1398641637",
      "bio": "Interactive Studio. Design &amp; Development",
      "location": "Salt Lake City",
      "links": {
        "web": "http://beta.rallyinteractive.com",
        "twitter": "https://twitter.com/letsgorally"
      },
      "buckets_count": 0,
      "comments_received_count": 0,
      "followers_count": 8281,
      "followings_count": 6,
      "likes_count": 73,
      "likes_received_count": 0,
      "projects_count": 14,
      "rebounds_received_count": 0,
      "shots_count": 273,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/559317/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/559317/followers",
      "following_url": "https://api.dribbble.com/v1/users/559317/following",
      "likes_url": "https://api.dribbble.com/v1/users/559317/likes",
      "projects_url": "https://api.dribbble.com/v1/users/559317/projects",
      "shots_url": "https://api.dribbble.com/v1/users/559317/shots",
      "created_at": "2014-04-27T23:31:42Z",
      "updated_at": "2016-03-29T15:51:33Z",
      "members_count": 5,
      "members_url": "https://api.dribbble.com/v1/teams/559317/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/559317/shots"
    }
  },
  {
    "id": 2619200,
    "title": "Eilean Donan Castle",
    "description": "<p>Day 209/365</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/283823/screenshots/2619200/eilean_donan_castle-01.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/283823/screenshots/2619200/eilean_donan_castle-01_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/283823/screenshots/2619200/eilean_donan_castle-01_teaser.jpg"
    },
    "views_count": 1434,
    "likes_count": 162,
    "comments_count": 4,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T15:54:42Z",
    "updated_at": "2016-03-29T15:55:23Z",
    "html_url": "https://dribbble.com/shots/2619200-Eilean-Donan-Castle",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619200/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619200/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619200/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619200/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619200/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619200/rebounds",
    "rebound_source_url": "https://api.dribbble.com/v1/shots/2614735",
    "animated": false,
    "tags": [
      "icon",
      "illustration",
      "lake",
      "scotland",
      "vector"
    ],
    "user": {
      "id": 283823,
      "name": "Scott Tusk",
      "username": "Tusk",
      "html_url": "https://dribbble.com/Tusk",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/283823/avatars/normal/c71f583fd2f781e48da28697c6ec2211.jpg?1456193406",
      "bio": "",
      "location": "Chicago",
      "links": {
      },
      "buckets_count": 0,
      "comments_received_count": 1118,
      "followers_count": 5013,
      "followings_count": 812,
      "likes_count": 2295,
      "likes_received_count": 45133,
      "projects_count": 1,
      "rebounds_received_count": 214,
      "shots_count": 282,
      "teams_count": 1,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/283823/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/283823/followers",
      "following_url": "https://api.dribbble.com/v1/users/283823/following",
      "likes_url": "https://api.dribbble.com/v1/users/283823/likes",
      "projects_url": "https://api.dribbble.com/v1/users/283823/projects",
      "shots_url": "https://api.dribbble.com/v1/users/283823/shots",
      "teams_url": "https://api.dribbble.com/v1/users/283823/teams",
      "created_at": "2013-02-17T16:32:29Z",
      "updated_at": "2016-03-29T15:55:23Z"
    },
    "team": null
  },
  {
    "id": 2619378,
    "title": "Infinite Coffee",
    "description": "<p>It's Monday, I need coffee. Forever.</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/60266/screenshots/2619378/coffee.jpg",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/60266/screenshots/2619378/coffee_1x.jpg",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/60266/screenshots/2619378/coffee_teaser.jpg"
    },
    "views_count": 1301,
    "likes_count": 146,
    "comments_count": 6,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 2,
    "created_at": "2016-03-29T17:11:50Z",
    "updated_at": "2016-03-29T17:18:17Z",
    "html_url": "https://dribbble.com/shots/2619378-Infinite-Coffee",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619378/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619378/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619378/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619378/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619378/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619378/rebounds",
    "animated": false,
    "tags": [
      "8",
      "coffee",
      "cup",
      "food",
      "geometric",
      "illustration",
      "infinite",
      "kite",
      "liquid",
      "mug",
      "stroke"
    ],
    "user": {
      "id": 60266,
      "name": "Gustavo Zambelli",
      "username": "zamax",
      "html_url": "https://dribbble.com/zamax",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/60266/avatars/normal/83d4ac61d50bf5b2fedc9f9cc45a62d9.png?1453312126",
      "bio": "Hi, I&#39;m Lead of illustration at <a href=\"https://dribbble.com/aerolab\">@aerolab</a> &amp; Superman at <a href=\"https://dribbble.com/RicosQuesos\">@RicosQuesos</a>",
      "location": "Neuquén, Argentina.",
      "links": {
        "web": "http://zamax.tumblr.com",
        "twitter": "https://twitter.com/zamax4"
      },
      "buckets_count": 19,
      "comments_received_count": 1645,
      "followers_count": 4198,
      "followings_count": 1253,
      "likes_count": 8828,
      "likes_received_count": 36018,
      "projects_count": 4,
      "rebounds_received_count": 133,
      "shots_count": 305,
      "teams_count": 4,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/60266/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/60266/followers",
      "following_url": "https://api.dribbble.com/v1/users/60266/following",
      "likes_url": "https://api.dribbble.com/v1/users/60266/likes",
      "projects_url": "https://api.dribbble.com/v1/users/60266/projects",
      "shots_url": "https://api.dribbble.com/v1/users/60266/shots",
      "teams_url": "https://api.dribbble.com/v1/users/60266/teams",
      "created_at": "2011-09-07T19:27:31Z",
      "updated_at": "2016-03-29T17:18:17Z"
    },
    "team": {
      "id": 171431,
      "name": "Aerolab",
      "username": "aerolab",
      "html_url": "https://dribbble.com/aerolab",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/171431/avatars/normal/1283d5fbcd21a809d0cdc2f96a560096.png?1458077891",
      "bio": "We design and develop beautiful digital products for startups and leading brands.",
      "location": "Buenos Aires - San Francisco",
      "links": {
        "web": "http://aerolab.co",
        "twitter": "https://twitter.com/aerolab"
      },
      "buckets_count": 5,
      "comments_received_count": 157,
      "followers_count": 3845,
      "followings_count": 128,
      "likes_count": 4228,
      "likes_received_count": 2121,
      "projects_count": 24,
      "rebounds_received_count": 2,
      "shots_count": 579,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/171431/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/171431/followers",
      "following_url": "https://api.dribbble.com/v1/users/171431/following",
      "likes_url": "https://api.dribbble.com/v1/users/171431/likes",
      "projects_url": "https://api.dribbble.com/v1/users/171431/projects",
      "shots_url": "https://api.dribbble.com/v1/users/171431/shots",
      "created_at": "2012-07-04T02:31:07Z",
      "updated_at": "2016-03-29T17:18:17Z",
      "members_count": 21,
      "members_url": "https://api.dribbble.com/v1/teams/171431/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/171431/shots"
    }
  },
  {
    "id": 2619645,
    "title": "Hello, Is It Me You're Looking For?",
    "description": "<p>I had the privilege of getting to collaborate with <a href=\"https://dribbble.com/72483\">@Jordan Wade</a> on a hero illustration for his SVG post. And let me tell you, watching your work come alive with CSS and JS is pretty much the jam.</p>\n\n<p><a href=\"https://dribbble.com/shots/2619653-Hello-from-the-other-side\" rel=\"nofollow noreferrer\">Check it out all alive n' stuff!</a></p>\n\n<p><a href=\"https://www.codeschool.com/blog/2016/03/29/benefits-of-learning-how-to-use-svg/\" rel=\"nofollow noreferrer\">Go read about why you should learn more about SVG for the web</a>.</p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/13774/screenshots/2619645/hello.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/13774/screenshots/2619645/hello_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/13774/screenshots/2619645/hello_teaser.png"
    },
    "views_count": 1771,
    "likes_count": 146,
    "comments_count": 2,
    "attachments_count": 0,
    "rebounds_count": 1,
    "buckets_count": 2,
    "created_at": "2016-03-29T19:12:57Z",
    "updated_at": "2016-03-29T20:26:49Z",
    "html_url": "https://dribbble.com/shots/2619645-Hello-Is-It-Me-You-re-Looking-For",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619645/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619645/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619645/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619645/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619645/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619645/rebounds",
    "animated": false,
    "tags": [
      "hello"
    ],
    "user": {
      "id": 13774,
      "name": "Justin Mezzell",
      "username": "JustinMezzell",
      "html_url": "https://dribbble.com/JustinMezzell",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/13774/avatars/normal/Me_Web.jpg?1380768479",
      "bio": "Designer? Illustrator? Why not. Directing Art at <a href=\"https://dribbble.com/codeschool\">@codeschool</a>.",
      "location": "Orlando, FL",
      "links": {
        "web": "http://justinmezzell.com/",
        "twitter": "https://twitter.com/JustinMezzell"
      },
      "buckets_count": 0,
      "comments_received_count": 5736,
      "followers_count": 31449,
      "followings_count": 713,
      "likes_count": 5548,
      "likes_received_count": 113425,
      "projects_count": 0,
      "rebounds_received_count": 55,
      "shots_count": 312,
      "teams_count": 4,
      "can_upload_shot": true,
      "type": "Player",
      "pro": true,
      "buckets_url": "https://api.dribbble.com/v1/users/13774/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/13774/followers",
      "following_url": "https://api.dribbble.com/v1/users/13774/following",
      "likes_url": "https://api.dribbble.com/v1/users/13774/likes",
      "projects_url": "https://api.dribbble.com/v1/users/13774/projects",
      "shots_url": "https://api.dribbble.com/v1/users/13774/shots",
      "teams_url": "https://api.dribbble.com/v1/users/13774/teams",
      "created_at": "2011-01-26T06:58:50Z",
      "updated_at": "2016-03-29T20:26:49Z"
    },
    "team": {
      "id": 333539,
      "name": "Code School",
      "username": "codeschool",
      "html_url": "https://dribbble.com/codeschool",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/333539/avatars/normal/329ac818d30ca1a7b900c09b105ce277.jpg?1410890340",
      "bio": "Code School teaches web technologies in the comfort of your browser with video lessons, coding challenges, and screencasts.",
      "location": "Orlando, FL",
      "links": {
        "web": "http://codeschool.com",
        "twitter": "https://twitter.com/codeschool"
      },
      "buckets_count": 0,
      "comments_received_count": 0,
      "followers_count": 3057,
      "followings_count": 13,
      "likes_count": 1,
      "likes_received_count": 0,
      "projects_count": 0,
      "rebounds_received_count": 0,
      "shots_count": 154,
      "can_upload_shot": true,
      "type": "Team",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/333539/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/333539/followers",
      "following_url": "https://api.dribbble.com/v1/users/333539/following",
      "likes_url": "https://api.dribbble.com/v1/users/333539/likes",
      "projects_url": "https://api.dribbble.com/v1/users/333539/projects",
      "shots_url": "https://api.dribbble.com/v1/users/333539/shots",
      "created_at": "2013-05-15T21:37:44Z",
      "updated_at": "2016-03-29T20:26:49Z",
      "members_count": 10,
      "members_url": "https://api.dribbble.com/v1/teams/333539/members",
      "team_shots_url": "https://api.dribbble.com/v1/teams/333539/shots"
    }
  },
  {
    "id": 2619181,
    "title": "Costa Rica",
    "description": "<p>Shirt graphic for offsite meeting in Costa Rica. </p>",
    "width": 400,
    "height": 300,
    "images": {
      "hidpi": "https://d13yacurqjgara.cloudfront.net/users/21030/screenshots/2619181/costa.png",
      "normal": "https://d13yacurqjgara.cloudfront.net/users/21030/screenshots/2619181/costa_1x.png",
      "teaser": "https://d13yacurqjgara.cloudfront.net/users/21030/screenshots/2619181/costa_teaser.png"
    },
    "views_count": 1261,
    "likes_count": 136,
    "comments_count": 7,
    "attachments_count": 0,
    "rebounds_count": 0,
    "buckets_count": 7,
    "created_at": "2016-03-29T15:48:25Z",
    "updated_at": "2016-03-29T15:49:13Z",
    "html_url": "https://dribbble.com/shots/2619181-Costa-Rica",
    "attachments_url": "https://api.dribbble.com/v1/shots/2619181/attachments",
    "buckets_url": "https://api.dribbble.com/v1/shots/2619181/buckets",
    "comments_url": "https://api.dribbble.com/v1/shots/2619181/comments",
    "likes_url": "https://api.dribbble.com/v1/shots/2619181/likes",
    "projects_url": "https://api.dribbble.com/v1/shots/2619181/projects",
    "rebounds_url": "https://api.dribbble.com/v1/shots/2619181/rebounds",
    "animated": false,
    "tags": [
      "bird",
      "costa rica",
      "design",
      "illustration",
      "leaf",
      "toucan",
      "tropical"
    ],
    "user": {
      "id": 21030,
      "name": "Trevor Basset",
      "username": "trevorbasset",
      "html_url": "https://dribbble.com/trevorbasset",
      "avatar_url": "https://d13yacurqjgara.cloudfront.net/users/21030/avatars/normal/e9907b8b54ea842b30c5787ef95acc3a.png?1426787498",
      "bio": "Design, art direction, illustration, birds. ",
      "location": "Seattle, WA",
      "links": {
        "web": "http://www.trevorbasset.com",
        "twitter": "https://twitter.com/trevorbasset"
      },
      "buckets_count": 0,
      "comments_received_count": 244,
      "followers_count": 1169,
      "followings_count": 367,
      "likes_count": 1204,
      "likes_received_count": 3660,
      "projects_count": 0,
      "rebounds_received_count": 4,
      "shots_count": 85,
      "teams_count": 0,
      "can_upload_shot": true,
      "type": "Player",
      "pro": false,
      "buckets_url": "https://api.dribbble.com/v1/users/21030/buckets",
      "followers_url": "https://api.dribbble.com/v1/users/21030/followers",
      "following_url": "https://api.dribbble.com/v1/users/21030/following",
      "likes_url": "https://api.dribbble.com/v1/users/21030/likes",
      "projects_url": "https://api.dribbble.com/v1/users/21030/projects",
      "shots_url": "https://api.dribbble.com/v1/users/21030/shots",
      "teams_url": "https://api.dribbble.com/v1/users/21030/teams",
      "created_at": "2011-03-03T20:05:14Z",
      "updated_at": "2016-03-30T04:08:03Z"
    },
    "team": null
  }
];

================================================
FILE: Demo/DribbbleDemo/dribbbleDemo/main.m
================================================
    //
//  main.m
//  dribbbleDemo
//
//  Created by bang on 15/9/1.
//  Copyright (c) 2015年 bang. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}


================================================
FILE: Demo/DribbbleDemo/dribbbleDemo.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		36091A1B1CAAA2830012490F /* JPEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 36091A191CAAA2830012490F /* JPEngine.m */; };
		36091A1C1CAAA2830012490F /* JSPatch.js in Resources */ = {isa = PBXBuildFile; fileRef = 36091A1A1CAAA2830012490F /* JSPatch.js */; };
		36091A771CAB91990012490F /* JPCleaner.m in Sources */ = {isa = PBXBuildFile; fileRef = 36091A5B1CAB91980012490F /* JPCleaner.m */; };
		36091A791CAB91990012490F /* JPLocker.m in Sources */ = {isa = PBXBuildFile; fileRef = 36091A5F1CAB91980012490F /* JPLocker.m */; };
		36091A7B1CAB91990012490F /* JPSpecialInit.m in Sources */ = {isa = PBXBuildFile; fileRef = 36091A631CAB91980012490F /* JPSpecialInit.m */; };
		36CE19221CB17D6A007D73AC /* dribbble in Resources */ = {isa = PBXBuildFile; fileRef = 36CE19211CB17D6A007D73AC /* dribbble */; };
		DEBA57DF1B95D5A200B4DC66 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DEBA57DE1B95D5A200B4DC66 /* main.m */; };
		DEBA57E21B95D5A300B4DC66 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DEBA57E11B95D5A300B4DC66 /* AppDelegate.m */; };
		DEBA57EA1B95D5A300B4DC66 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DEBA57E91B95D5A300B4DC66 /* Images.xcassets */; };
		DEBA57F91B95D5A300B4DC66 /* dribbbleDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DEBA57F81B95D5A300B4DC66 /* dribbbleDemoTests.m */; };
		DEBA58531B95DA6E00B4DC66 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEBA58521B95DA6E00B4DC66 /* UIKit.framework */; };
		DEBA58551B95DA7C00B4DC66 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEBA58541B95DA7C00B4DC66 /* Security.framework */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
		DEBA57F31B95D5A300B4DC66 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = DEBA57D11B95D5A200B4DC66 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = DEBA57D81B95D5A200B4DC66;
			remoteInfo = dribbbleDemo;
		};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
		0A8B1CDBA40FFAD086BA1A15 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; };
		15903DAE6B51ADB1AEC38472 /* libPods-dribbbleDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dribbbleDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
		36091A181CAAA2830012490F /* JPEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JPEngine.h; sourceTree = "<group>"; };
		36091A191CAAA2830012490F /* JPEngine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JPEngine.m; sourceTree = "<group>"; };
		36091A1A1CAAA2830012490F /* JSPatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = JSPatch.js; sourceTree = "<group>"; };
		36091A5A1CAB91980012490F /* JPCleaner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JPCleaner.h; sourceTree = "<group>"; };
		36091A5B1CAB91980012490F /* JPCleaner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JPCleaner.m; sourceTree = "<group>"; };
		36091A5E1CAB91980012490F /* JPLocker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JPLocker.h; sourceTree = "<group>"; };
		36091A5F1CAB91980012490F /* JPLocker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JPLocker.m; sourceTree = "<group>"; };
		36091A621CAB91980012490F /* JPSpecialInit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JPSpecialInit.h; sourceTree = "<group>"; };
		36091A631CAB91980012490F /* JPSpecialInit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JPSpecialInit.m; sourceTree = "<group>"; };
		36CE19211CB17D6A007D73AC /* dribbble */ = {isa = PBXFileReference; lastKnownFileType = folder; path = dribbble; sourceTree = "<group>"; };
		4E9FF79023501B4C7B8780E6 /* Pods-dribbbleDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dribbbleDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-dribbbleDemo/Pods-dribbbleDemo.debug.xcconfig"; sourceTree = "<group>"; };
		5B21F30B82AD2BCFBD981366 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; };
		A354BF41D400455B098BBF0B /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };
		C74009A42925FAD86E7D36C0 /* Pods-dribbbleDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dribbbleDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-dribbbleDemo/Pods-dribbbleDemo.release.xcconfig"; sourceTree = "<group>"; };
		DEBA57D91B95D5A200B4DC66 /* dribbbleDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dribbbleDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
		DEBA57DD1B95D5A200B4DC66 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		DEBA57DE1B95D5A200B4DC66 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
		DEBA57E01B95D5A300B4DC66 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
		DEBA57E11B95D5A300B4DC66 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
		DEBA57E91B95D5A300B4DC66 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
		DEBA57F21B95D5A300B4DC66 /* dribbbleDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = dribbbleDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
		DEBA57F71B95D5A300B4DC66 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		DEBA57F81B95D5A300B4DC66 /* dribbbleDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = dribbbleDemoTests.m; sourceTree = "<group>"; };
		DEBA58521B95DA6E00B4DC66 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
		DEBA58541B95DA7C00B4DC66 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		DEBA57D61B95D5A200B4DC66 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				DEBA58551B95DA7C00B4DC66 /* Security.framework in Frameworks */,
				DEBA58531B95DA6E00B4DC66 /* UIKit.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		DEBA57EF1B95D5A300B4DC66 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		31AAE1067DD5D5B8CB52EAD4 /* Pods */ = {
			isa = PBXGroup;
			children = (
				5B21F30B82AD2BCFBD981366 /* Pods.debug.xcconfig */,
				0A8B1CDBA40FFAD086BA1A15 /* Pods.release.xcconfig */,
				4E9FF79023501B4C7B8780E6 /* Pods-dribbbleDemo.debug.xcconfig */,
				C74009A42925FAD86E7D36C0 /* Pods-dribbbleDemo.release.xcconfig */,
			);
			name = Pods;
			sourceTree = "<group>";
		};
		36091A171CAAA2830012490F /* JSPatch */ = {
			isa = PBXGroup;
			children = (
				36091A481CAB91980012490F /* Extensions */,
				36091A181CAAA2830012490F /* JPEngine.h */,
				36091A191CAAA2830012490F /* JPEngine.m */,
				36091A1A1CAAA2830012490F /* JSPatch.js */,
			);
			name = JSPatch;
			path = ../../../JSPatch;
			sourceTree = "<group>";
		};
		36091A481CAB91980012490F /* Extensions */ = {
			isa = PBXGroup;
			children = (
				36091A5A1CAB91980012490F /* JPCleaner.h */,
				36091A5B1CAB91980012490F /* JPCleaner.m */,
				36091A5E1CAB91980012490F /* JPLocker.h */,
				36091A5F1CAB91980012490F /* JPLocker.m */,
				36091A621CAB91980012490F /* JPSpecialInit.h */,
				36091A631CAB91980012490F /* JPSpecialInit.m */,
			);
			name = Extensions;
			path = ../Extensions;
			sourceTree = "<group>";
		};
		DEBA57D01B95D5A200B4DC66 = {
			isa = PBXGroup;
			children = (
				DEBA58541B95DA7C00B4DC66 /* Security.framework */,
				DEBA58521B95DA6E00B4DC66 /* UIKit.framework */,
				DEBA57DB1B95D5A200B4DC66 /* dribbbleDemo */,
				DEBA57F51B95D5A300B4DC66 /* dribbbleDemoTests */,
				DEBA57DA1B95D5A200B4DC66 /* Products */,
				31AAE1067DD5D5B8CB52EAD4 /* Pods */,
				FF293541306D58FD4BDAA5CD /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		DEBA57DA1B95D5A200B4DC66 /* Products */ = {
			isa = PBXGroup;
			children = (
				DEBA57D91B95D5A200B4DC66 /* dribbbleDemo.app */,
				DEBA57F21B95D5A300B4DC66 /* dribbbleDemoTests.xctest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		DEBA57DB1B95D5A200B4DC66 /* dribbbleDemo */ = {
			isa = PBXGroup;
			children = (
				36091A171CAAA2830012490F /* JSPatch */,
				DEBA57E01B95D5A300B4DC66 /* AppDelegate.h */,
				DEBA57E11B95D5A300B4DC66 /* AppDelegate.m */,
				36CE19211CB17D6A007D73AC /* dribbble */,
				DEBA57E91B95D5A300B4DC66 /* Images.xcassets */,
				DEBA57DC1B95D5A200B4DC66 /* Supporting Files */,
			);
			path = dribbbleDemo;
			sourceTree = "<group>";
		};
		DEBA57DC1B95D5A200B4DC66 /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				DEBA57DD1B95D5A200B4DC66 /* Info.plist */,
				DEBA57DE1B95D5A200B4DC66 /* main.m */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		DEBA57F51B95D5A300B4DC66 /* dribbbleDemoTests */ = {
			isa = PBXGroup;
			children = (
				DEBA57F81B95D5A300B4DC66 /* dribbbleDemoTests.m */,
				DEBA57F61B95D5A300B4DC66 /* Supporting Files */,
			);
			path = dribbbleDemoTests;
			sourceTree = "<group>";
		};
		DEBA57F61B95D5A300B4DC66 /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				DEBA57F71B95D5A300B4DC66 /* Info.plist */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		FF293541306D58FD4BDAA5CD /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				A354BF41D400455B098BBF0B /* libPods.a */,
				15903DAE6B51ADB1AEC38472 /* libPods-dribbbleDemo.a */,
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		DEBA57D81B95D5A200B4DC66 /* dribbbleDemo */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = DEBA57FC1B95D5A300B4DC66 /* Build configuration list for PBXNativeTarget "dribbbleDemo" */;
			buildPhases = (
				379F843EA00F8D428B9036AE /* 📦 Check Pods Manifest.lock */,
				DEBA57D51B95D5A200B4DC66 /* Sources */,
				DEBA57D61B95D5A200B4DC66 /* Frameworks */,
				DEBA57D71B95D5A200B4DC66 /* Resources */,
				5051F1B8E1BE3F57F4085EA8 /* 📦 Copy Pods Resources */,
				3E10562C003A078AFFFB76ED /* 📦 Embed Pods Frameworks */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = dribbbleDemo;
			productName = dribbbleDemo;
			productReference = DEBA57D91B95D5A200B4DC66 /* dribbbleDemo.app */;
			productType = "com.apple.product-type.application";
		};
		DEBA57F11B95D5A300B4DC66 /* dribbbleDemoTests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = DEBA57FF1B95D5A300B4DC66 /* Build configuration list for PBXNativeTarget "dribbbleDemoTests" */;
			buildPhases = (
				DEBA57EE1B95D5A300B4DC66 /* Sources */,
				DEBA57EF1B95D5A300B4DC66 /* Frameworks */,
				DEBA57F01B95D5A300B4DC66 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				DEBA57F41B95D5A300B4DC66 /* PBXTargetDependency */,
			);
			name = dribbbleDemoTests;
			productName = dribbbleDemoTests;
			productReference = DEBA57F21B95D5A300B4DC66 /* dribbbleDemoTests.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		DEBA57D11B95D5A200B4DC66 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 0640;
				ORGANIZATIONNAME = bang;
				TargetAttributes = {
					DEBA57D81B95D5A200B4DC66 = {
						CreatedOnToolsVersion = 6.4;
					};
					DEBA57F11B95D5A300B4DC66 = {
						CreatedOnToolsVersion = 6.4;
						TestTargetID = DEBA57D81B95D5A200B4DC66;
					};
				};
			};
			buildConfigurationList = DEBA57D41B95D5A200B4DC66 /* Build configuration list for PBXProject "dribbbleDemo" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = DEBA57D01B95D5A200B4DC66;
			productRefGroup = DEBA57DA1B95D5A200B4DC66 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				DEBA57D81B95D5A200B4DC66 /* dribbbleDemo */,
				DEBA57F11B95D5A300B4DC66 /* dribbbleDemoTests */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		DEBA57D71B95D5A200B4DC66 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				36091A1C1CAAA2830012490F /* JSPatch.js in Resources */,
				DEBA57EA1B95D5A300B4DC66 /* Images.xcassets in Resources */,
				36CE19221CB17D6A007D73AC /* dribbble in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		DEBA57F01B95D5A300B4DC66 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		379F843EA00F8D428B9036AE /* 📦 Check Pods Manifest.lock */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "📦 Check Pods Manifest.lock";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n    cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n    exit 1\nfi\n";
			showEnvVarsInLog = 0;
		};
		3E10562C003A078AFFFB76ED /* 📦 Embed Pods Frameworks */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "📦 Embed Pods Frameworks";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-dribbbleDemo/Pods-dribbbleDemo-frameworks.sh\"\n";
			showEnvVarsInLog = 0;
		};
		5051F1B8E1BE3F57F4085EA8 /* 📦 Copy Pods Resources */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "📦 Copy Pods Resources";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-dribbbleDemo/Pods-dribbbleDemo-resources.sh\"\n";
			showEnvVarsInLog = 0;
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		DEBA57D51B95D5A200B4DC66 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				36091A791CAB91990012490F /* JPLocker.m in Sources */,
				36091A771CAB91990012490F /* JPCleaner.m in Sources */,
				36091A1B1CAAA2830012490F /* JPEngine.m in Sources */,
				36091A7B1CAB91990012490F /* JPSpecialInit.m in Sources */,
				DEBA57E21B95D5A300B4DC66 /* AppDelegate.m in Sources */,
				DEBA57DF1B95D5A200B4DC66 /* main.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		DEBA57EE1B95D5A300B4DC66 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				DEBA57F91B95D5A300B4DC66 /* dribbbleDemoTests.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
		DEBA57F41B95D5A300B4DC66 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = DEBA57D81B95D5A200B4DC66 /* dribbbleDemo */;
			targetProxy = DEBA57F31B95D5A300B4DC66 /* PBXContainerItemProxy */;
		};
/* End PBXTargetDependency section */

/* Begin XCBuildConfiguration section */
		DEBA57FA1B95D5A300B4DC66 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 8.4;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		DEBA57FB1B95D5A300B4DC66 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 8.4;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		DEBA57FD1B95D5A300B4DC66 /* Debug */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 4E9FF79023501B4C7B8780E6 /* Pods-dribbbleDemo.debug.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
				INFOPLIST_FILE = dribbbleDemo/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_NAME = "$(TARGET_NAME)";
			};
			name = Debug;
		};
		DEBA57FE1B95D5A300B4DC66 /* Release */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = C74009A42925FAD86E7D36C0 /* Pods-dribbbleDemo.release.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
				INFOPLIST_FILE = dribbbleDemo/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_NAME = "$(TARGET_NAME)";
			};
			name = Release;
		};
		DEBA58001B95D5A300B4DC66 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				BUNDLE_LOADER = "$(TEST_HOST)";
				FRAMEWORK_SEARCH_PATHS = (
					"$(SDKROOT)/Developer/Library/Frameworks",
					"$(inherited)",
				);
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				INFOPLIST_FILE = dribbbleDemoTests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_NAME = "$(TARGET_NAME)";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/dribbbleDemo.app/dribbbleDemo";
			};
			name = Debug;
		};
		DEBA58011B95D5A300B4DC66 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				BUNDLE_LOADER = "$(TEST_HOST)";
				FRAMEWORK_SEARCH_PATHS = (
					"$(SDKROOT)/Developer/Library/Frameworks",
					"$(inherited)",
				);
				INFOPLIST_FILE = dribbbleDemoTests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_NAME = "$(TARGET_NAME)";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/dribbbleDemo.app/dribbbleDemo";
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		DEBA57D41B95D5A200B4DC66 /* Build configuration list for PBXProject "dribbbleDemo" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				DEBA57FA1B95D5A300B4DC66 /* Debug */,
				DEBA57FB1B95D5A300B4DC66 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		DEBA57FC1B95D5A300B4DC66 /* Build configuration list for PBXNativeTarget "dribbbleDemo" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				DEBA57FD1B95D5A300B4DC66 /* Debug */,
				DEBA57FE1B95D5A300B4DC66 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		DEBA57FF1B95D5A300B4DC66 /* Build configuration list for PBXNativeTarget "dribbbleDemoTests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				DEBA58001B95D5A300B4DC66 /* Debug */,
				DEBA58011B95D5A300B4DC66 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = DEBA57D11B95D5A200B4DC66 /* Project object */;
}


================================================
FILE: Demo/DribbbleDemo/dribbbleDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:dribbbleDemo.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: Demo/DribbbleDemo/dribbbleDemoTests/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	
Download .txt
gitextract_5skxgrji/

├── .gitignore
├── .travis.yml
├── Demo/
│   ├── DribbbleDemo/
│   │   ├── Podfile
│   │   ├── README.md
│   │   ├── dribbbleDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Images.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   ├── LaunchImage-1.launchimage/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── LaunchImage.launchimage/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── dribbble/
│   │   │   │   ├── CommonDefine.js
│   │   │   │   ├── DBDataSource.js
│   │   │   │   ├── DBDetailController.js
│   │   │   │   ├── DBDetailViews.js
│   │   │   │   ├── DBTimelineController.js
│   │   │   │   ├── DBTimelineViews.js
│   │   │   │   ├── DBUserController.js
│   │   │   │   ├── DBUserViews.js
│   │   │   │   ├── main.js
│   │   │   │   └── tmpData.js
│   │   │   └── main.m
│   │   ├── dribbbleDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   └── dribbbleDemoTests/
│   │       ├── Info.plist
│   │       └── dribbbleDemoTests.m
│   ├── OSXDemo/
│   │   ├── JSPatchOSXDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Base.lproj/
│   │   │   │   └── MainMenu.xib
│   │   │   ├── Info.plist
│   │   │   ├── demo.js
│   │   │   └── main.m
│   │   └── JSPatchOSXDemo.xcodeproj/
│   │       ├── project.pbxproj
│   │       └── project.xcworkspace/
│   │           └── contents.xcworkspacedata
│   ├── SwiftDemo/
│   │   ├── SwiftDemo/
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets/
│   │   │   │   └── AppIcon.appiconset/
│   │   │   │       └── Contents.json
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── SwiftDemo-Bridging-Header.h
│   │   │   ├── TestObject.swift
│   │   │   ├── ViewController.swift
│   │   │   └── demo.js
│   │   └── SwiftDemo.xcodeproj/
│   │       ├── project.pbxproj
│   │       └── project.xcworkspace/
│   │           └── contents.xcworkspacedata
│   ├── iOSDemo/
│   │   ├── JSPatchDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── JPViewController.h
│   │   │   ├── JPViewController.m
│   │   │   ├── Supporting Files/
│   │   │   │   ├── Images.xcassets/
│   │   │   │   │   └── AppIcon.appiconset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── Info.plist
│   │   │   │   └── main.m
│   │   │   └── demo.js
│   │   ├── JSPatchDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace/
│   │   │   │   └── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── JSPatchDemo.xcscheme
│   │   └── JSPatchTests/
│   │       ├── Info.plist
│   │       ├── InheritTest.js
│   │       ├── JPCFunctionTest.h
│   │       ├── JPCFunctionTest.m
│   │       ├── JPInheritanceTestObjects.h
│   │       ├── JPInheritanceTestObjects.m
│   │       ├── JPJSClassTest.h
│   │       ├── JPJSClassTest.m
│   │       ├── JPMultithreadTestObject.h
│   │       ├── JPMultithreadTestObject.m
│   │       ├── JPNumberTest.h
│   │       ├── JPNumberTest.m
│   │       ├── JPPerformanceTest.h
│   │       ├── JPPerformanceTest.m
│   │       ├── JPSuperTestObject.h
│   │       ├── JPSuperTestObject.m
│   │       ├── JPTestObject.h
│   │       ├── JPTestObject.m
│   │       ├── JSPatchTests.m
│   │       ├── jsCFunctionTest.js
│   │       ├── jsClassTest.js
│   │       ├── jsNumberTest.js
│   │       ├── multithreadTest.js
│   │       ├── newBlockTest.h
│   │       ├── newBlockTest.js
│   │       ├── newBlockTest.m
│   │       ├── newProtocolTest.h
│   │       ├── newProtocolTest.js
│   │       ├── newProtocolTest.m
│   │       ├── performanceTest.js
│   │       ├── protocolTest.js
│   │       ├── superTest.js
│   │       └── test.js
│   ├── iOSPlayground/
│   │   ├── JSPatchPlayground/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Brand Assets.launchimage/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   └── LaunchImage.launchimage/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── JPErrorMsgViewController.h
│   │   │   ├── JPErrorMsgViewController.m
│   │   │   ├── JPRootViewController.h
│   │   │   ├── JPRootViewController.m
│   │   │   ├── libs/
│   │   │   │   ├── SGDirWatchdog.h
│   │   │   │   └── SGDirWatchdog.m
│   │   │   ├── main.m
│   │   │   └── src/
│   │   │       ├── JPDemoController.js
│   │   │       └── main.js
│   │   ├── JSPatchPlayground.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   └── README.md
│   ├── iOSPlaygroundToolDemo/
│   │   ├── JSPatchPlaygroundDemo/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   └── apple.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── JPRootViewController.h
│   │   │   ├── JPRootViewController.m
│   │   │   ├── js/
│   │   │   │   └── demo.js
│   │   │   └── main.m
│   │   ├── JSPatchPlaygroundDemo.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── project.xcworkspace/
│   │   │       └── contents.xcworkspacedata
│   │   └── README.md
│   └── tvOSDemo/
│       ├── JSPatchDemo/
│       │   ├── AppDelegate.h
│       │   ├── AppDelegate.m
│       │   ├── JPViewController.h
│       │   ├── JPViewController.m
│       │   ├── Supporting Files/
│       │   │   ├── Images.xcassets/
│       │   │   │   └── AppIcon.appiconset/
│       │   │   │       └── Contents.json
│       │   │   ├── Info.plist
│       │   │   └── main.m
│       │   └── demo.js
│       └── JSPatchDemo.xcodeproj/
│           ├── project.pbxproj
│           └── project.xcworkspace/
│               └── contents.xcworkspacedata
├── Extensions/
│   ├── JPBlock/
│   │   ├── JPBlock.h
│   │   ├── JPBlock.m
│   │   ├── JPBlockWrapper.h
│   │   └── JPBlockWrapper.m
│   ├── JPCFunction/
│   │   ├── JPCFunction.h
│   │   ├── JPCFunction.m
│   │   ├── JPMemory.h
│   │   ├── JPMemory.m
│   │   ├── JPStructPointer.h
│   │   └── JPStructPointer.m
│   ├── JPCFunctionBinder/
│   │   ├── CoreGraphics/
│   │   │   ├── JPCGBitmapContext.h
│   │   │   ├── JPCGBitmapContext.m
│   │   │   ├── JPCGColor.h
│   │   │   ├── JPCGColor.m
│   │   │   ├── JPCGContext.h
│   │   │   ├── JPCGContext.m
│   │   │   ├── JPCGGeometry.h
│   │   │   ├── JPCGGeometry.m
│   │   │   ├── JPCGImage.h
│   │   │   ├── JPCGImage.m
│   │   │   ├── JPCGPath.h
│   │   │   ├── JPCGPath.m
│   │   │   ├── JPCGTransform.h
│   │   │   ├── JPCGTransform.m
│   │   │   ├── JPCoreGraphics.h
│   │   │   └── JPCoreGraphics.m
│   │   └── UIKit/
│   │       ├── JPUIGeometry.h
│   │       ├── JPUIGeometry.m
│   │       ├── JPUIGraphics.h
│   │       ├── JPUIGraphics.m
│   │       ├── JPUIImage.h
│   │       ├── JPUIImage.m
│   │       ├── JPUIKit.h
│   │       └── JPUIKit.m
│   ├── JPCleaner.h
│   ├── JPCleaner.m
│   ├── JPDispatch.h
│   ├── JPDispatch.m
│   ├── JPLibffi/
│   │   ├── JPMethodSignature.h
│   │   ├── JPMethodSignature.m
│   │   └── libffi/
│   │       ├── ffi.h
│   │       ├── ffi_arm.h
│   │       ├── ffi_arm64.h
│   │       ├── ffi_i386.h
│   │       ├── ffi_x86_64.h
│   │       ├── ffitarget.h
│   │       ├── ffitarget_arm.h
│   │       ├── ffitarget_arm64.h
│   │       ├── ffitarget_i386.h
│   │       ├── ffitarget_x86_64.h
│   │       └── libffi.a
│   ├── JPLocker.h
│   ├── JPLocker.m
│   ├── JPNumber.h
│   ├── JPNumber.m
│   ├── JPPlaygroundTool/
│   │   ├── JPPlayground.h
│   │   ├── JPPlayground.m
│   │   ├── JPPlaygroundModule/
│   │   │   ├── JPKeyCommands.h
│   │   │   ├── JPKeyCommands.m
│   │   │   ├── SGDirWatchdog.h
│   │   │   └── SGDirWatchdog.m
│   │   ├── JPPlaygroundView/
│   │   │   ├── JPDevErrorView.h
│   │   │   ├── JPDevErrorView.m
│   │   │   ├── JPDevMenu.h
│   │   │   ├── JPDevMenu.m
│   │   │   ├── JPDevTipView.h
│   │   │   └── JPDevTipView.m
│   │   └── README.md
│   ├── JPProtocol.h
│   ├── JPProtocol.m
│   ├── JPSpecialInit.h
│   └── JPSpecialInit.m
├── JSPatch/
│   ├── JPEngine.h
│   ├── JPEngine.m
│   └── JSPatch.js
├── JSPatch.podspec
├── LICENSE
├── Loader/
│   ├── JPLoader.h
│   ├── JPLoader.m
│   ├── libs/
│   │   ├── RSA.h
│   │   ├── RSA.m
│   │   ├── ZipArchive.h
│   │   ├── ZipArchive.m
│   │   └── minizip/
│   │       ├── crypt.h
│   │       ├── ioapi.c
│   │       ├── ioapi.h
│   │       ├── mztools.c
│   │       ├── mztools.h
│   │       ├── unzip.c
│   │       ├── unzip.h
│   │       ├── zip.c
│   │       └── zip.h
│   └── tools/
│       └── packer.php
├── README-CN.md
└── README.md
Download .txt
SYMBOL INDEX (202 symbols across 19 files)

FILE: Demo/iOSDemo/JSPatchTests/JPMultithreadTestObject.h
  function interface (line 11) | interface JPMultithreadTestObject : NSObject

FILE: Extensions/JPLibffi/libffi/ffi_arm.h
  type ffi_type (line 103) | typedef struct _ffi_type
  type ffi_status (line 204) | typedef enum {
  type ffi_cif (line 210) | typedef struct {
  type ffi_raw (line 236) | typedef union {
  type ffi_java_raw (line 247) | typedef union {
  type ffi_raw (line 255) | typedef ffi_raw ffi_java_raw;
  type ffi_closure (line 288) | typedef struct {
  type ffi_raw_closure (line 330) | typedef struct {
  type ffi_java_raw_closure (line 355) | typedef struct {
  type ffi_go_closure (line 411) | typedef struct {

FILE: Extensions/JPLibffi/libffi/ffi_arm64.h
  type ffi_type (line 103) | typedef struct _ffi_type
  type ffi_status (line 204) | typedef enum {
  type ffi_cif (line 210) | typedef struct {
  type ffi_raw (line 236) | typedef union {
  type ffi_java_raw (line 247) | typedef union {
  type ffi_raw (line 255) | typedef ffi_raw ffi_java_raw;
  type ffi_closure (line 288) | typedef struct {
  type ffi_raw_closure (line 330) | typedef struct {
  type ffi_java_raw_closure (line 355) | typedef struct {
  type ffi_go_closure (line 411) | typedef struct {

FILE: Extensions/JPLibffi/libffi/ffi_i386.h
  type ffi_type (line 114) | typedef struct _ffi_type
  type ffi_status (line 216) | typedef enum {
  type FFI_TYPE (line 222) | typedef unsigned FFI_TYPE;
  type ffi_cif (line 224) | typedef struct {
  type ffi_raw (line 264) | typedef union {
  type ffi_java_raw (line 275) | typedef union {
  type ffi_raw (line 283) | typedef ffi_raw ffi_java_raw;
  type ffi_closure (line 316) | typedef struct {
  type ffi_raw_closure (line 354) | typedef struct {
  type ffi_java_raw_closure (line 379) | typedef struct {

FILE: Extensions/JPLibffi/libffi/ffi_x86_64.h
  type ffi_type (line 103) | typedef struct _ffi_type
  type ffi_status (line 204) | typedef enum {
  type ffi_cif (line 210) | typedef struct {
  type ffi_raw (line 236) | typedef union {
  type ffi_java_raw (line 247) | typedef union {
  type ffi_raw (line 255) | typedef ffi_raw ffi_java_raw;
  type ffi_closure (line 288) | typedef struct {
  type ffi_raw_closure (line 330) | typedef struct {
  type ffi_java_raw_closure (line 355) | typedef struct {
  type ffi_go_closure (line 411) | typedef struct {

FILE: Extensions/JPLibffi/libffi/ffitarget_arm.h
  type ffi_arg (line 38) | typedef unsigned long          ffi_arg;
  type ffi_sarg (line 39) | typedef signed long            ffi_sarg;
  type ffi_abi (line 41) | typedef enum ffi_abi {

FILE: Extensions/JPLibffi/libffi/ffitarget_arm64.h
  type ffi_arg (line 33) | typedef unsigned long long ffi_arg;
  type ffi_sarg (line 34) | typedef signed long long ffi_sarg;
  type ffi_arg (line 36) | typedef unsigned long ffi_arg;
  type ffi_sarg (line 37) | typedef signed long ffi_sarg;
  type ffi_abi (line 40) | typedef enum ffi_abi

FILE: Extensions/JPLibffi/libffi/ffitarget_i386.h
  type ffi_arg (line 62) | typedef unsigned __int64       ffi_arg;
  type __int64 (line 63) | typedef __int64                ffi_sarg;
  type ffi_arg (line 65) | typedef unsigned long long     ffi_arg;
  type ffi_sarg (line 66) | typedef long long              ffi_sarg;
  type ffi_arg (line 72) | typedef unsigned long long     ffi_arg;
  type ffi_sarg (line 73) | typedef long long              ffi_sarg;
  type ffi_arg (line 75) | typedef unsigned long          ffi_arg;
  type ffi_sarg (line 76) | typedef signed long            ffi_sarg;
  type ffi_abi (line 80) | typedef enum ffi_abi {

FILE: Extensions/JPLibffi/libffi/ffitarget_x86_64.h
  type ffi_arg (line 62) | typedef unsigned __int64       ffi_arg;
  type __int64 (line 63) | typedef __int64                ffi_sarg;
  type ffi_arg (line 65) | typedef unsigned long long     ffi_arg;
  type ffi_sarg (line 66) | typedef long long              ffi_sarg;
  type ffi_arg (line 72) | typedef unsigned long long     ffi_arg;
  type ffi_sarg (line 73) | typedef long long              ffi_sarg;
  type ffi_arg (line 75) | typedef unsigned long          ffi_arg;
  type ffi_sarg (line 76) | typedef signed long            ffi_sarg;
  type ffi_abi (line 80) | typedef enum ffi_abi {

FILE: Extensions/JPPlaygroundTool/JPPlaygroundView/JPDevMenu.h
  type JPDevMenuAction (line 11) | typedef enum : NSUInteger {

FILE: Loader/JPLoader.h
  type JPUpdateError (line 16) | typedef enum {

FILE: Loader/libs/minizip/crypt.h
  function decrypt_byte (line 35) | static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_...
  function update_keys (line 48) | static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32...
  function init_keys (line 65) | static void init_keys(const char* passwd,unsigned long* pkeys,const unsi...
  function crypthead (line 90) | static int crypthead(const char* passwd,      /* password string */

FILE: Loader/libs/minizip/ioapi.c
  function voidpf (line 19) | voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*...
  function call_zseek64 (line 29) | long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filest...
  function ZPOS64_T (line 43) | ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf fi...
  function fill_zlib_filefunc64_32_def_from_filefunc32 (line 57) | void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def*...
  function voidpf (line 83) | static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* file...
  function voidpf (line 101) | static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* fi...
  function uLong (line 120) | static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, vo...
  function uLong (line 127) | static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, c...
  function ftell_file_func (line 134) | static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
  function ZPOS64_T (line 142) | static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
  function fseek_file_func (line 149) | static long ZCALLBACK fseek_file_func (voidpf  opaque, voidpf stream, uL...
  function fseek64_file_func (line 172) | static long ZCALLBACK fseek64_file_func (voidpf  opaque, voidpf stream, ...
  function fclose_file_func (line 198) | static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
  function ferror_file_func (line 205) | static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
  function fill_fopen_filefunc (line 212) | void fill_fopen_filefunc (pzlib_filefunc_def)
  function fill_fopen64_filefunc (line 225) | void fill_fopen64_filefunc (zlib_filefunc64_def*  pzlib_filefunc_def)

FILE: Loader/libs/minizip/ioapi.h
  type IT_INT_CUSTOM_TYPE (line 81) | typedef  64BIT_INT_CUSTOM_TYPE ZPOS64_T;
  type ZPOS64_T (line 85) | typedef uint64_t ZPOS64_T;
  type ZPOS64_T (line 90) | typedef unsigned __int64 ZPOS64_T;
  type ZPOS64_T (line 92) | typedef unsigned long long int ZPOS64_T;
  type zlib_filefunc_def (line 138) | typedef struct zlib_filefunc_def_s
  type zlib_filefunc64_def (line 154) | typedef struct zlib_filefunc64_def_s
  type zlib_filefunc64_32_def (line 170) | typedef struct zlib_filefunc64_32_def_s

FILE: Loader/libs/minizip/mztools.c
  function unzRepair (line 30) | extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, byte...

FILE: Loader/libs/minizip/unzip.c
  type unz_file_info64_internal (line 131) | typedef struct unz_file_info64_internal_s
  type file_in_zip64_read_info_s (line 139) | typedef struct
  type unz64_s (line 170) | typedef struct
  function local (line 217) | local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefun...
  function local (line 244) | local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filef...
  function local (line 271) | local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefu...
  function local (line 307) | local int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_file...
  function local (line 354) | local int strcmpcasenosensitive_internal (const char* fileName1, const c...
  function unzStringFileNameCompare (line 395) | extern int ZEXPORT unzStringFileNameCompare (const char*  fileName1,
  function local (line 418) | local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def*...
  function local (line 483) | local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_de...
  function local (line 589) | local unzFile unzOpenInternal (const void *path,
  function unzFile (line 770) | extern unzFile ZEXPORT unzOpen2 (const char *path,
  function unzFile (line 783) | extern unzFile ZEXPORT unzOpen2_64 (const void *path,
  function unzFile (line 798) | extern unzFile ZEXPORT unzOpen (const char *path)
  function unzFile (line 803) | extern unzFile ZEXPORT unzOpen64 (const void *path)
  function unzClose (line 813) | extern int ZEXPORT unzClose (unzFile file)
  function unzGetGlobalInfo64 (line 833) | extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* ...
  function unzGetGlobalInfo (line 843) | extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglo...
  function local (line 857) | local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
  function local (line 884) | local int unz64local_GetCurrentFileInfoInternal (unzFile file,
  function unzGetCurrentFileInfo64 (line 1129) | extern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file,
  function unzGetCurrentFileInfo (line 1141) | extern int ZEXPORT unzGetCurrentFileInfo (unzFile file,
  function unzGoToFirstFile (line 1183) | extern int ZEXPORT unzGoToFirstFile (unzFile file)
  function unzGoToNextFile (line 1204) | extern int ZEXPORT unzGoToNextFile (unzFile  file)
  function unzLocateFile (line 1237) | extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, ...
  function unzGetFilePos64 (line 1313) | extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos*  file_pos)
  function unzGetFilePos (line 1329) | extern int ZEXPORT unzGetFilePos(
  function unzGoToFilePos64 (line 1343) | extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* ...
  function unzGoToFilePos (line 1365) | extern int ZEXPORT unzGoToFilePos(
  function local (line 1390) | local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* ...
  function unzOpenCurrentFile3 (line 1477) | extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,
  function unzOpenCurrentFile (line 1646) | extern int ZEXPORT unzOpenCurrentFile (unzFile file)
  function unzOpenCurrentFilePassword (line 1651) | extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char*...
  function unzOpenCurrentFile2 (line 1656) | extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* ...
  function ZPOS64_T (line 1663) | extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file)
  function unzReadCurrentFile (line 1689) | extern int ZEXPORT unzReadCurrentFile  (unzFile file, voidp buf, unsigne...
  function z_off_t (line 1893) | extern z_off_t ZEXPORT unztell (unzFile file)
  function ZPOS64_T (line 1908) | extern ZPOS64_T ZEXPORT unztell64 (unzFile file)
  function ZEXPORT (line 1928) | extern int ZEXPORT unzeof (unzFile file)
  function unzGetLocalExtrafield (line 1960) | extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsig...
  function unzCloseCurrentFile (line 2008) | extern int ZEXPORT unzCloseCurrentFile (unzFile file)
  function unzGetGlobalComment (line 2055) | extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, ...
  function ZPOS64_T (line 2083) | extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)
  function uLong (line 2098) | extern uLong ZEXPORT unzGetOffset (unzFile file)
  function unzSetOffset64 (line 2108) | extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)
  function unzSetOffset (line 2126) | extern int ZEXPORT unzSetOffset (unzFile file, uLong pos)

FILE: Loader/libs/minizip/unzip.h
  type unzFile__ (line 67) | typedef struct TagunzFile__ { int unused; } unzFile__;
  type unzFile__ (line 68) | typedef unzFile__ *unzFile;
  type voidp (line 70) | typedef voidp unzFile;
  type tm_unz (line 84) | typedef struct tm_unz_s
  type unz_global_info64 (line 96) | typedef struct unz_global_info64_s
  type unz_global_info (line 103) | typedef struct unz_global_info_s
  type unz_file_info64 (line 111) | typedef struct unz_file_info64_s
  type unz_file_info (line 132) | typedef struct unz_file_info_s
  type unz_file_pos (line 258) | typedef struct unz_file_pos_s
  type unz64_file_pos (line 272) | typedef struct unz64_file_pos_s

FILE: Loader/libs/minizip/zip.c
  type linkedlist_datablock_internal (line 114) | typedef struct linkedlist_datablock_internal_s
  type linkedlist_data (line 123) | typedef struct linkedlist_data_s
  type curfile64_info (line 130) | typedef struct
  type zip64_internal (line 165) | typedef struct
  function local (line 189) | local linkedlist_datablock_internal* allocate_new_datablock()
  function local (line 203) | local void free_datablock(linkedlist_datablock_internal* ldi)
  function local (line 213) | local void init_linkedlist(linkedlist_data* ll)
  function local (line 218) | local void free_linkedlist(linkedlist_data* ll)
  function local (line 225) | local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uL...
  function local (line 287) | local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filef...
  function local (line 311) | local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbB...
  function local (line 332) | local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm)
  function local (line 349) | local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefun...
  function local (line 373) | local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filef...
  function local (line 395) | local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefu...
  function local (line 426) | local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_file...
  function local (line 480) | local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def*...
  function local (line 542) | local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_de...
  function LoadCentralDirectoryRecord (line 640) | int LoadCentralDirectoryRecord(zip64_internal* pziinit)
  function zipFile (line 849) | extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipch...
  function zipFile (line 920) | extern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipch...
  function zipFile (line 932) | extern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zi...
  function zipFile (line 948) | extern zipFile ZEXPORT zipOpen (const char* pathname, int append)
  function zipFile (line 953) | extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)
  function Write_LocalFileHeader (line 958) | int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt...
  function zipOpenNewFileInZip4 (line 1264) | extern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filen...
  function zipOpenNewFileInZip3 (line 1280) | extern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filen...
  function zipOpenNewFileInZip3_64 (line 1295) | extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* fil...
  function zipOpenNewFileInZip2 (line 1310) | extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filena...
  function zipOpenNewFileInZip2_64 (line 1323) | extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* fil...
  function zipOpenNewFileInZip64 (line 1336) | extern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* file...
  function zipOpenNewFileInZip (line 1349) | extern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filena...
  function local (line 1362) | local int zip64FlushWriteBuffer(zip64_internal* zi)
  function zipWriteInFileInZip (line 1401) | extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,uns...
  function zipCloseFileInZipRaw (line 1508) | extern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompresse...
  function zipCloseFileInZipRaw64 (line 1513) | extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncomp...
  function zipCloseFileInZip (line 1747) | extern int ZEXPORT zipCloseFileInZip (zipFile file)
  function Write_Zip64EndOfCentralDirectoryLocator (line 1752) | int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T...
  function Write_Zip64EndOfCentralDirectoryRecord (line 1774) | int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong siz...
  function Write_EndOfCentralDirectoryRecord (line 1813) | int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_cen...
  function Write_GlobalComment (line 1861) | int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
  function zipClose (line 1879) | extern int ZEXPORT zipClose (zipFile file, const char* global_comment)
  function zipRemoveExtraInfoBlock (line 1948) | extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, s...

FILE: Loader/libs/minizip/zip.h
  type zipFile__ (line 66) | typedef struct TagzipFile__ { int unused; } zipFile__;
  type zipFile__ (line 67) | typedef zipFile__ *zipFile;
  type voidp (line 69) | typedef voidp zipFile;
  type tm_zip (line 89) | typedef struct tm_zip_s
  type zip_fileinfo (line 99) | typedef struct
Condensed preview — 228 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,214K chars).
[
  {
    "path": ".gitignore",
    "chars": 653,
    "preview": "# General\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*"
  },
  {
    "path": ".travis.yml",
    "chars": 511,
    "preview": "language: objective-c\nosx_image: xcode7.3\nenv:\n  - UDID=\"D72029C0-E8E1-4349-B423-E458466135B3\", IOS_DEVICE=\"iPhone 4s (8"
  },
  {
    "path": "Demo/DribbbleDemo/Podfile",
    "chars": 105,
    "preview": "platform :ios, '7.0'\ntarget 'dribbbleDemo' do\n        pod \"AFNetworking\", \"~> 2.0\"\n\t\tpod \"SDWebImage\"\nend"
  },
  {
    "path": "Demo/DribbbleDemo/README.md",
    "chars": 212,
    "preview": "# JSPatch Dribbble Demo\n\n![Screenshot](https://raw.github.com/bang590/JSPatch/master/Demo/DribbbleDemo/Screenshot.gif)\n\n"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/AppDelegate.h",
    "chars": 270,
    "preview": "//\n//  AppDelegate.h\n//  dribbbleDemo\n//\n//  Created by bang on 15/9/1.\n//  Copyright (c) 2015年 bang. All rights reserve"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/AppDelegate.m",
    "chars": 2377,
    "preview": "//\n//  AppDelegate.m\n//  dribbbleDemo\n//\n//  Created by bang on 15/9/1.\n//  Copyright (c) 2015年 bang. All rights reserve"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1163,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/Images.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/Images.xcassets/LaunchImage-1.launchimage/Contents.json",
    "chars": 83,
    "preview": "{\n  \"images\" : [\n\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "chars": 1879,
    "preview": "{\n  \"images\" : [\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"736h\",\n      \"filena"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/Info.plist",
    "chars": 1489,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/CommonDefine.js",
    "chars": 743,
    "preview": "global.SCREEN_WIDTH = require('UIScreen').mainScreen().bounds().width;\nglobal.SCREEN_HEIGHT = require('UIScreen').mainSc"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/DBDataSource.js",
    "chars": 4416,
    "preview": "var _dataSourceShareInstance;\ndefineJSClass('DBDataSource', {\n  init: function(){\n    this.dribbbleHost = 'https://api.d"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/DBDetailController.js",
    "chars": 3219,
    "preview": "include('DBDetailViews.js')\ninclude('DBUserController.js')\n\ndefineClass('DBDetailViewController: UITableViewController',"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/DBDetailViews.js",
    "chars": 7992,
    "preview": "require('UIView, UIImage')\nvar gap = 10;\nvar avatarSize = 40;\ndefineClass('DBDetailHeaderView: UIView', ['tapUserCallbac"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/DBTimelineController.js",
    "chars": 2675,
    "preview": "include('DBTimelineViews.js')\ninclude('DBDetailController.js')\n\ndefineClass('WBTimelineViewController: UITableViewContro"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/DBTimelineViews.js",
    "chars": 4236,
    "preview": "var gap = 10;\nvar avatarSize = 40;\nrequire('UILabel, UIColor, UIFont, UITextView');\n\n\ndefineClass('DBTimelineItemView: U"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/DBUserController.js",
    "chars": 3055,
    "preview": "include('DBTimelineViews.js')\ninclude('DBUserViews.js')\n\ndefineClass('DBUserViewController: UITableViewController', [\n  "
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/DBUserViews.js",
    "chars": 3694,
    "preview": "var gap = 10;\n\ndefineClass('DBUserHeaderView: UIView', {\n  initWithUser: function(user) {\n    self = self.super().init()"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/main.js",
    "chars": 403,
    "preview": "autoConvertOCType(1)\ninclude('CommonDefine.js')\ninclude('DBDataSource.js')\ninclude('DBTimelineController.js')\n\ndefineCla"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/dribbble/tmpData.js",
    "chars": 132567,
    "preview": "\nvar tmpData = [\n  {\n    \"id\": 2619381,\n    \"title\": \"Seaborn Oyster Co.\",\n    \"description\": null,\n    \"width\": 400,\n  "
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo/main.m",
    "chars": 331,
    "preview": "    //\n//  main.m\n//  dribbbleDemo\n//\n//  Created by bang on 15/9/1.\n//  Copyright (c) 2015年 bang. All rights reserved.\n"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo.xcodeproj/project.pbxproj",
    "chars": 23532,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 157,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:dribbbleDemo.xc"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemoTests/Info.plist",
    "chars": 751,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Demo/DribbbleDemo/dribbbleDemoTests/dribbbleDemoTests.m",
    "chars": 867,
    "preview": "//\n//  dribbbleDemoTests.m\n//  dribbbleDemoTests\n//\n//  Created by bang on 15/9/1.\n//  Copyright (c) 2015年 bang. All rig"
  },
  {
    "path": "Demo/OSXDemo/JSPatchOSXDemo/AppDelegate.h",
    "chars": 376,
    "preview": "//\n//  AppDelegate.h\n//  JSPatchOSXDemo\n//\n//  Created by Felix Deimel on 26.05.15.\n//  Copyright (c) 2015 Lemon Mojo. A"
  },
  {
    "path": "Demo/OSXDemo/JSPatchOSXDemo/AppDelegate.m",
    "chars": 1213,
    "preview": "//\n//  AppDelegate.m\n//  JSPatchOSXDemo\n//\n//  Created by Felix Deimel on 26.05.15.\n//  Copyright (c) 2015 Lemon Mojo. A"
  },
  {
    "path": "Demo/OSXDemo/JSPatchOSXDemo/Base.lproj/MainMenu.xib",
    "chars": 60047,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3"
  },
  {
    "path": "Demo/OSXDemo/JSPatchOSXDemo/Info.plist",
    "chars": 1100,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Demo/OSXDemo/JSPatchOSXDemo/demo.js",
    "chars": 666,
    "preview": "defineClass('AppDelegate', {\n    buttonJavaScriptTestAction: function(sender) {\n        self.setClickCount(self.clickCou"
  },
  {
    "path": "Demo/OSXDemo/JSPatchOSXDemo/main.m",
    "chars": 248,
    "preview": "//\n//  main.m\n//  JSPatchOSXDemo\n//\n//  Created by Felix Deimel on 26.05.15.\n//  Copyright (c) 2015 Lemon Mojo. All righ"
  },
  {
    "path": "Demo/OSXDemo/JSPatchOSXDemo.xcodeproj/project.pbxproj",
    "chars": 11373,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Demo/OSXDemo/JSPatchOSXDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 159,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:JSPatchOSXDemo."
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo/AppDelegate.swift",
    "chars": 2988,
    "preview": "//\n//  AppDelegate.swift\n//  SwiftDemo\n//\n//  Created by jspatch on 16/2/3.\n//  Copyright © 2016年 Arlen. All rights rese"
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1077,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo/Base.lproj/LaunchScreen.storyboard",
    "chars": 1663,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo/Base.lproj/Main.storyboard",
    "chars": 4391,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo/Info.plist",
    "chars": 1495,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo/SwiftDemo-Bridging-Header.h",
    "chars": 271,
    "preview": "//\n//  SwiftDemo-Bridging-Header.h\n//  SwiftDemo\n//\n//  Created by bang on 2/4/16.\n//  Copyright © 2016 Arlen. All right"
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo/TestObject.swift",
    "chars": 953,
    "preview": "//\n//  TestObject.swift\n//  SwiftDemo\n//\n//  Created by jspatch on 16/2/3.\n//  Copyright © 2016年 Arlen. All rights reser"
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo/ViewController.swift",
    "chars": 1841,
    "preview": "//\n//  ViewController.swift\n//  SwiftDemo\n//\n//  Created by jspatch on 16/2/3.\n//  Copyright © 2016年 Arlen. All rights r"
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo/demo.js",
    "chars": 435,
    "preview": "defineClass('SwiftDemo.ViewController', {\n\tviewDidLoad: function() {\n\t\tconsole.log('js viewDidLoad begin')\n\t\tself.ORIGvi"
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo.xcodeproj/project.pbxproj",
    "chars": 14157,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Demo/SwiftDemo/SwiftDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 154,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:SwiftDemo.xcode"
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo/AppDelegate.h",
    "chars": 265,
    "preview": "//\n//  AppDelegate.h\n//  JSPatch\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015年 bang. All rights reserved.\n/"
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo/AppDelegate.m",
    "chars": 1119,
    "preview": "//\n//  AppDelegate.m\n//  JSPatch\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015年 bang. All rights reserved.\n/"
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo/JPViewController.h",
    "chars": 204,
    "preview": "//\n//  JPViewController.h\n//  JSPatch\n//\n//  Created by bang on 15/5/2.\n//  Copyright (c) 2015年 bang. All rights reserve"
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo/JPViewController.m",
    "chars": 662,
    "preview": "//\n//  JPViewController.m\n//  JSPatch\n//\n//  Created by bang on 15/5/2.\n//  Copyright (c) 2015年 bang. All rights reserve"
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo/Supporting Files/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1077,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo/Supporting Files/Info.plist",
    "chars": 1487,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo/Supporting Files/main.m",
    "chars": 323,
    "preview": "//\n//  main.m\n//  JSPatch\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015年 bang. All rights reserved.\n//\n\n#imp"
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo/demo.js",
    "chars": 1565,
    "preview": "defineClass('JPViewController', {\n  handleBtn: function(sender) {\n    var tableViewCtrl = JPTableViewController.alloc()."
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo.xcodeproj/project.pbxproj",
    "chars": 56341,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef"
  },
  {
    "path": "Demo/iOSDemo/JSPatchDemo.xcodeproj/xcshareddata/xcschemes/JSPatchDemo.xcscheme",
    "chars": 4384,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0630\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/Info.plist",
    "chars": 749,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/InheritTest.js",
    "chars": 942,
    "preview": "var global = this;\n\n(function() {\n  defineClass(\"JPInheritTest01ObjectB\", {\n    m1: function() {\n      return \"JP_01ObjB"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPCFunctionTest.h",
    "chars": 437,
    "preview": "//\n//  JPCFunctionTest.h\n//  JSPatchDemo\n//\n//  Created by bang on 6/1/16.\n//  Copyright © 2016 bang. All rights reserve"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPCFunctionTest.m",
    "chars": 1163,
    "preview": "//\n//  JPCFunctionTest.m\n//  JSPatchDemo\n//\n//  Created by bang on 6/1/16.\n//  Copyright © 2016 bang. All rights reserve"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPInheritanceTestObjects.h",
    "chars": 892,
    "preview": "//\n//  JPInheritanceTestObjects.h\n//  JSPatchDemo\n//\n//  Created by Qiu WeiJia on 6/5/15.\n//  Copyright (c) 2015 bang. A"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPInheritanceTestObjects.m",
    "chars": 1152,
    "preview": "//\n//  JPInheritanceTestObjects.m\n//  JSPatchDemo\n//\n//  Created by Qiu WeiJia on 6/5/15.\n//  Copyright (c) 2015 bang. A"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPJSClassTest.h",
    "chars": 252,
    "preview": "//\n//  JPJSClassTest.h\n//  JSPatchDemo\n//\n//  Created by bang on 4/1/16.\n//  Copyright © 2016 bang. All rights reserved."
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPJSClassTest.m",
    "chars": 292,
    "preview": "//\n//  JPJSClassTest.m\n//  JSPatchDemo\n//\n//  Created by bang on 4/1/16.\n//  Copyright © 2016 bang. All rights reserved."
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPMultithreadTestObject.h",
    "chars": 451,
    "preview": "//\n//  MultithreadTestObject.h\n//  JSPatchDemo\n//\n//  Created by Qiu WeiJia on 15/6/4.\n//  Copyright (c) 2015年 bang. All"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPMultithreadTestObject.m",
    "chars": 924,
    "preview": "//\n//  MultithreadTestObject.m\n//  JSPatchDemo\n//\n//  Created by Qiu WeiJia on 15/6/4.\n//  Copyright (c) 2015年 bang. All"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPNumberTest.h",
    "chars": 312,
    "preview": "//\n//  JPNumberTest.h\n//  JSPatchDemo\n//\n//  Created by pucheng on 16/8/2.\n//  Copyright © 2016年 bang. All rights reserv"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPNumberTest.m",
    "chars": 372,
    "preview": "//\n//  JPNumberTest.m\n//  JSPatchDemo\n//\n//  Created by pucheng on 16/8/2.\n//  Copyright © 2016年 bang. All rights reserv"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPPerformanceTest.h",
    "chars": 695,
    "preview": "//\n//  JPPerformanceTest.h\n//  JSPatchDemo\n//\n//  Created by bang on 4/5/16.\n//  Copyright © 2016 bang. All rights reser"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPPerformanceTest.m",
    "chars": 1829,
    "preview": "//\n//  JPPerformanceTest.m\n//  JSPatchDemo\n//\n//  Created by bang on 4/5/16.\n//  Copyright © 2016 bang. All rights reser"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPSuperTestObject.h",
    "chars": 530,
    "preview": "//\n//  JPSuperTestObject.h\n//  JSPatchDemo\n//\n//  Created by bang on 4/1/16.\n//  Copyright © 2016 bang. All rights reser"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPSuperTestObject.m",
    "chars": 1041,
    "preview": "//\n//  JPSuperTestObject.m\n//  JSPatchDemo\n//\n//  Created by bang on 4/1/16.\n//  Copyright © 2016 bang. All rights reser"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPTestObject.h",
    "chars": 7153,
    "preview": "//\n//  ISTestObject.h\n//  InstaScript\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015 bang. All rights reserve"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JPTestObject.m",
    "chars": 16142,
    "preview": "//\n//  JPTestObject.m\n//  InstaScript\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015 bang. All rights reserve"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/JSPatchTests.m",
    "chars": 21854,
    "preview": "//\n//  InstaScriptTests.m\n//  InstaScriptTests\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015 bang. All right"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/jsCFunctionTest.js",
    "chars": 2192,
    "preview": "require('JPEngine').addExtensions(['JPCFunction'])\nrequire('JPEngine').defineStruct({\n    \"name\": \"CGSize\",\n    \"types\":"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/jsClassTest.js",
    "chars": 1679,
    "preview": "defineClass('JSClsA', ['prop1', 'prop2'], {\n    init: function(){\n        self = self.super().init();\n        self.setPr"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/jsNumberTest.js",
    "chars": 734,
    "preview": "require('JPEngine').addExtensions(['JPNumber'])\n\ndefineClass('JPNumberTest', {}, {\n    testJPNumNSNumber: function() {\n "
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/multithreadTest.js",
    "chars": 222,
    "preview": "var global = this;\n\n(function() {\n\t\n  defineClass('JPMultithreadTestObject', {\n    addValueJS: function(num) {\n      sel"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/newBlockTest.h",
    "chars": 334,
    "preview": "//\n//  newBlockTest.h\n//  JSPatchTests\n//\n//  Created by WELCommand on 2018/3/27.\n//  Copyright © 2018年 bang. All rights"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/newBlockTest.js",
    "chars": 327,
    "preview": "defineClass(\"newBlockTest\", {\ntestJSBlockToOCCall: function() {\n    self.performBlock(block(\"CGFloat, int, CGPoint, doub"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/newBlockTest.m",
    "chars": 838,
    "preview": "//\n//  newBlockTest.m\n//  JSPatchTests\n//\n//  Created by WELCommand on 2018/3/27.\n//  Copyright © 2018年 bang. All rights"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/newProtocolTest.h",
    "chars": 1398,
    "preview": "//\n//  newProrotcolTest.h\n//  JSPatchDemo\n//\n//  Created by Awhisper on 15/12/27.\n//  Copyright © 2015年 bang. All rights"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/newProtocolTest.js",
    "chars": 5697,
    "preview": "defineProtocol(\"baseTestProtocol\",{\n//argument type can be bool  BOOL int NSInterger float CGFloat ... any base type\n   "
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/newProtocolTest.m",
    "chars": 964,
    "preview": "//\n//  newProrotcolTest.m\n//  JSPatchDemo\n//\n//  Created by Awhisper on 15/12/27.\n//  Copyright © 2015年 bang. All rights"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/performanceTest.js",
    "chars": 5322,
    "preview": "var performanceTestObj = require('NSObject').alloc().init();\nvar largeDict = {\n    \"id\": 2619381,\n    \"title\": \"Seaborn "
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/protocolTest.js",
    "chars": 486,
    "preview": "var global = this;\n\n(function() {\n  defineClass(\"JPTestProtocolObject : NSObject <JPTestProtocol, JPTestProtocol2>\", {\n "
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/superTest.js",
    "chars": 1242,
    "preview": "defineClass('JPJSSuperTestA1 : JPSuperTestA', {\n    method: function() {\n        var str = self.super().method().toJS();"
  },
  {
    "path": "Demo/iOSDemo/JSPatchTests/test.js",
    "chars": 15595,
    "preview": "include('protocolTest.js')\ninclude('newProtocolTest.js')\nvar global = this;\n\nrequire('JPEngine').defineStruct({\n    \"nam"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/AppDelegate.h",
    "chars": 273,
    "preview": "//\n//  AppDelegate.h\n//  JSPatchPlayground\n//\n//  Created by bang on 5/14/16.\n//  Copyright © 2016 bang. All rights rese"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/AppDelegate.m",
    "chars": 2400,
    "preview": "//\n//  AppDelegate.m\n//  JSPatchPlayground\n//\n//  Created by bang on 5/14/16.\n//  Copyright © 2016 bang. All rights rese"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 585,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/Assets.xcassets/Brand Assets.launchimage/Contents.json",
    "chars": 378,
    "preview": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"minimum-system-version\" : \"7.0"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/Assets.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/Assets.xcassets/LaunchImage.launchimage/Contents.json",
    "chars": 1879,
    "preview": "{\n  \"images\" : [\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"736h\",\n      \"filena"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/Info.plist",
    "chars": 1151,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/JPErrorMsgViewController.h",
    "chars": 273,
    "preview": "//\n//  JPErrorMsgViewController.h\n//  JSPatchPlayground\n//\n//  Created by bang on 5/14/16.\n//  Copyright © 2016 bang. Al"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/JPErrorMsgViewController.m",
    "chars": 1005,
    "preview": "//\n//  JPErrorMsgViewController.m\n//  JSPatchPlayground\n//\n//  Created by bang on 5/14/16.\n//  Copyright © 2016 bang. Al"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/JPRootViewController.h",
    "chars": 217,
    "preview": "//\n//  ViewController.h\n//  JSPatchPlayground\n//\n//  Created by bang on 5/14/16.\n//  Copyright © 2016 bang. All rights r"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/JPRootViewController.m",
    "chars": 4108,
    "preview": "//\n//  ViewController.m\n//  JSPatchPlayground\n//\n//  Created by bang on 5/14/16.\n//  Copyright © 2016 bang. All rights r"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/libs/SGDirWatchdog.h",
    "chars": 448,
    "preview": "//\n//  SGDirObserver.h\n//  DirectoryObserver\n//\n//  Copyright (c) 2011 Simon Grätzer.\n//\n\n#import <Foundation/Foundation"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/libs/SGDirWatchdog.m",
    "chars": 4595,
    "preview": "//\n//  SGDirObserver.m\n//  DirectoryObserver\n//\n//  Copyright (c) 2011 Simon Grätzer.\n//\n\n#import \"SGDirWatchdog.h\"\n#imp"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/main.m",
    "chars": 330,
    "preview": "//\n//  main.m\n//  JSPatchPlayground\n//\n//  Created by bang on 5/14/16.\n//  Copyright © 2016 bang. All rights reserved.\n/"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/src/JPDemoController.js",
    "chars": 928,
    "preview": "require('UILabel, UIColor, UIFont, UIScreen, UIImageView, UIImage')\n\nvar screenWidth = UIScreen.mainScreen().bounds().wi"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground/src/main.js",
    "chars": 239,
    "preview": "include('JPDemoController.js');\ndefineClass('JPRootViewController', {\n    showController: function() {\n        var ctrl "
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground.xcodeproj/project.pbxproj",
    "chars": 15967,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Demo/iOSPlayground/JSPatchPlayground.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 162,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:JSPatchPlaygrou"
  },
  {
    "path": "Demo/iOSPlayground/README.md",
    "chars": 735,
    "preview": "# JSPatch Playground\n\n![Screenshot](https://raw.github.com/bang590/JSPatch/master/Demo/iOSPlayground/Screenshot.gif)\n\n##"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/AppDelegate.h",
    "chars": 265,
    "preview": "//\n//  AppDelegate.h\n//  JSPatch\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015年 bang. All rights reserved.\n/"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/AppDelegate.m",
    "chars": 756,
    "preview": "//\n//  AppDelegate.m\n//  JSPatch\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015年 bang. All rights reserved.\n/"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1163,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/Assets.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/Assets.xcassets/apple.imageset/Contents.json",
    "chars": 302,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"apple.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n  "
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/Base.lproj/LaunchScreen.storyboard",
    "chars": 1664,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/Base.lproj/Main.storyboard",
    "chars": 1575,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/Info.plist",
    "chars": 1563,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/JPRootViewController.h",
    "chars": 217,
    "preview": "//\n//  ViewController.h\n//  JSPatchPlayground\n//\n//  Created by bang on 5/14/16.\n//  Copyright © 2016 bang. All rights r"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/JPRootViewController.m",
    "chars": 1744,
    "preview": "//\n//  ViewController.m\n//  JSPatchPlayground\n//\n//  Created by bang on 5/14/16.\n//  Copyright © 2016 bang. All rights r"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/js/demo.js",
    "chars": 886,
    "preview": "require('UILabel, UIColor, UIFont, UIScreen, UIImageView, UIImage')\n\nvar screenWidth = UIScreen.mainScreen().bounds().wi"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo/main.m",
    "chars": 339,
    "preview": "//\n//  main.m\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. All rights re"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo.xcodeproj/project.pbxproj",
    "chars": 41645,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/JSPatchPlaygroundDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 166,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:JSPatchPlaygrou"
  },
  {
    "path": "Demo/iOSPlaygroundToolDemo/README.md",
    "chars": 3429,
    "preview": "# JSPatchPlaygroundTool\n\nJSPatch天然能实现playground黑科技一样的效果,什么样的黑科技呢?我们改的每一行代码,每一个语句,完全无需重新运行app,直接能立刻看到效果。\n\n并且bang哥已经给出了如何操"
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo/AppDelegate.h",
    "chars": 265,
    "preview": "//\n//  AppDelegate.h\n//  JSPatch\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015年 bang. All rights reserved.\n/"
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo/AppDelegate.m",
    "chars": 1119,
    "preview": "//\n//  AppDelegate.m\n//  JSPatch\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015年 bang. All rights reserved.\n/"
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo/JPViewController.h",
    "chars": 204,
    "preview": "//\n//  JPViewController.h\n//  JSPatch\n//\n//  Created by bang on 15/5/2.\n//  Copyright (c) 2015年 bang. All rights reserve"
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo/JPViewController.m",
    "chars": 671,
    "preview": "//\n//  JPViewController.m\n//  JSPatch\n//\n//  Created by bang on 15/5/2.\n//  Copyright (c) 2015年 bang. All rights reserve"
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo/Supporting Files/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1163,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo/Supporting Files/Info.plist",
    "chars": 1487,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo/Supporting Files/main.m",
    "chars": 323,
    "preview": "//\n//  main.m\n//  JSPatch\n//\n//  Created by bang on 15/4/30.\n//  Copyright (c) 2015年 bang. All rights reserved.\n//\n\n#imp"
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo/demo.js",
    "chars": 1697,
    "preview": "defineClass('JPViewController', {\n  handleBtn: function(sender) {\n    var tableViewCtrl = JPTableViewController.alloc()."
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo.xcodeproj/project.pbxproj",
    "chars": 31398,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Demo/tvOSDemo/JSPatchDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef"
  },
  {
    "path": "Extensions/JPBlock/JPBlock.h",
    "chars": 214,
    "preview": "//\n//  JPBlock.h\n//  JSPatch\n//\n//  Created by bang on 1/19/17.\n//  Copyright © 2017 bang. All rights reserved.\n//\n\n#imp"
  },
  {
    "path": "Extensions/JPBlock/JPBlock.m",
    "chars": 565,
    "preview": "//\n//  JPBlock.m\n//  JSPatch\n//\n//  Created by bang on 1/19/17.\n//  Copyright © 2017 bang. All rights reserved.\n//\n\n#imp"
  },
  {
    "path": "Extensions/JPBlock/JPBlockWrapper.h",
    "chars": 351,
    "preview": "//\n//  JPBlockWrapper.h\n//  JSPatch\n//\n//  Created by bang on 1/19/17.\n//  Copyright © 2017 bang. All rights reserved.\n/"
  },
  {
    "path": "Extensions/JPBlock/JPBlockWrapper.m",
    "chars": 7522,
    "preview": "//\n//  JPBlockWrapper.m\n//  JSPatch\n//\n//  Created by bang on 1/19/17.\n//  Copyright © 2017 bang. All rights reserved.\n/"
  },
  {
    "path": "Extensions/JPCFunction/JPCFunction.h",
    "chars": 185,
    "preview": "//\n//  JPCFunction.h\n//  JSPatch\n//\n//  Created by bang on 5/30/16.\n//  Copyright © 2016 bang. All rights reserved.\n//\n\n"
  },
  {
    "path": "Extensions/JPCFunction/JPCFunction.m",
    "chars": 8247,
    "preview": "//\n//  JPCFunction.m\n//  JSPatch\n//\n//  Created by bang on 5/30/16.\n//  Copyright © 2016 bang. All rights reserved.\n//\n\n"
  },
  {
    "path": "Extensions/JPCFunction/JPMemory.h",
    "chars": 190,
    "preview": "//\n//  JPMemory.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights reserv"
  },
  {
    "path": "Extensions/JPCFunction/JPMemory.m",
    "chars": 4957,
    "preview": "//\n//  JPMemory.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights reserv"
  },
  {
    "path": "Extensions/JPCFunction/JPStructPointer.h",
    "chars": 200,
    "preview": "//\n//  JPStructPointer.h\n//  JSPatchDemo\n//\n//  Created by bang on 15/8/13.\n//  Copyright (c) 2015年 bang. All rights res"
  },
  {
    "path": "Extensions/JPCFunction/JPStructPointer.m",
    "chars": 2813,
    "preview": "//\n//  JPStructPointer.m\n//  JSPatchDemo\n//\n//  Created by bang on 15/8/13.\n//  Copyright (c) 2015年 bang. All rights res"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGBitmapContext.h",
    "chars": 208,
    "preview": "//\n//  JPCGBitmapContext.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/3.\n//  Copyright (c) 2015年 bang. All righ"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGBitmapContext.m",
    "chars": 1823,
    "preview": "//\n//  JPCGBitmapContext.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/3.\n//  Copyright (c) 2015年 bang. All righ"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGColor.h",
    "chars": 192,
    "preview": "//\n//  JPCGColor.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/3.\n//  Copyright (c) 2015年 bang. All rights reser"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGColor.m",
    "chars": 3014,
    "preview": "//\n//  JPCGColor.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/3.\n//  Copyright (c) 2015年 bang. All rights reser"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGContext.h",
    "chars": 183,
    "preview": "//\n//  JPCGContext.h\n//  \n//\n//  Created by Albert438 on 15/7/2.\n//  Copyright © 2015年 bang. All rights reserved.\n//\n\n#i"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGContext.m",
    "chars": 12212,
    "preview": "//\n//  JPCGContext.m\n//\n//\n//  Created by Albert438 on 15/7/2.\n//  Copyright © 2015年 bang. All rights reserved.\n//\n\n#imp"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGGeometry.h",
    "chars": 683,
    "preview": "//\n//  JPCGGeometryHelper.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/2.\n//  Copyright © 2015年 bang. All right"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGGeometry.m",
    "chars": 5455,
    "preview": "//\n//  JPCGGeometryHelper.m\n//  JSPatchDemo\n//\n//  Created by Albert438  on 15/7/2.\n//  Copyright © 2015年 bang. All righ"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGImage.h",
    "chars": 192,
    "preview": "//\n//  JPCGImage.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/3.\n//  Copyright (c) 2015年 bang. All rights reser"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGImage.m",
    "chars": 3677,
    "preview": "//\n//  JPCGImage.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/3.\n//  Copyright (c) 2015年 bang. All rights reser"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGPath.h",
    "chars": 190,
    "preview": "//\n//  JPCGPath.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights reserv"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGPath.m",
    "chars": 5404,
    "preview": "//\n//  JPCGPath.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights reserv"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGTransform.h",
    "chars": 374,
    "preview": "//\n//  JPCGTransform.h\n//  JSPatchDemo\n//\n//  Created by bang on 15/6/30.\n//  Copyright (c) 2015 bang. All rights reserv"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCGTransform.m",
    "chars": 3467,
    "preview": "//\n//  JPCGTransform.m\n//  JSPatchDemo\n//\n//  Created by bang on 15/6/30.\n//  Copyright (c) 2015 bang. All rights reserv"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCoreGraphics.h",
    "chars": 200,
    "preview": "//\n//  JPCoreGraphics.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/3.\n//  Copyright © 2015年 bang. All rights re"
  },
  {
    "path": "Extensions/JPCFunctionBinder/CoreGraphics/JPCoreGraphics.m",
    "chars": 494,
    "preview": "//\n//  JPCoreGraphics.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/3.\n//  Copyright © 2015年 bang. All rights re"
  },
  {
    "path": "Extensions/JPCFunctionBinder/UIKit/JPUIGeometry.h",
    "chars": 198,
    "preview": "//\n//  JPUIGeometry.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights re"
  },
  {
    "path": "Extensions/JPCFunctionBinder/UIKit/JPUIGeometry.m",
    "chars": 1463,
    "preview": "//\n//  JPUIGeometry.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights re"
  },
  {
    "path": "Extensions/JPCFunctionBinder/UIKit/JPUIGraphics.h",
    "chars": 196,
    "preview": "//\n//  UIGraphics.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights rese"
  },
  {
    "path": "Extensions/JPCFunctionBinder/UIKit/JPUIGraphics.m",
    "chars": 1224,
    "preview": "//\n//  UIGraphics.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights rese"
  },
  {
    "path": "Extensions/JPCFunctionBinder/UIKit/JPUIImage.h",
    "chars": 192,
    "preview": "//\n//  JPUIImage.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights reser"
  },
  {
    "path": "Extensions/JPCFunctionBinder/UIKit/JPUIImage.m",
    "chars": 753,
    "preview": "//\n//  JPUIImage.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights reser"
  },
  {
    "path": "Extensions/JPCFunctionBinder/UIKit/JPUIKit.h",
    "chars": 188,
    "preview": "//\n//  JPUIKit.h\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights reserve"
  },
  {
    "path": "Extensions/JPCFunctionBinder/UIKit/JPUIKit.m",
    "chars": 342,
    "preview": "//\n//  JPUIKit.m\n//  JSPatchDemo\n//\n//  Created by Albert438 on 15/7/6.\n//  Copyright (c) 2015年 bang. All rights reserve"
  },
  {
    "path": "Extensions/JPCleaner.h",
    "chars": 244,
    "preview": "//\n//  JPReverter.h\n//  JSPatchDemo\n//\n//  Created by bang on 2/4/16.\n//  Copyright © 2016 bang. All rights reserved.\n//"
  },
  {
    "path": "Extensions/JPCleaner.m",
    "chars": 2149,
    "preview": "//\n//  JPReverter.m\n//  JSPatchDemo\n//\n//  Created by bang on 2/4/16.\n//  Copyright © 2016 bang. All rights reserved.\n//"
  },
  {
    "path": "Extensions/JPDispatch.h",
    "chars": 221,
    "preview": "//\n//  JPDispatch.h\n//  JSPatchDemo\n//\n//  Created by bang on 10/9/16.\n//  Copyright © 2016 bang. All rights reserved.\n/"
  },
  {
    "path": "Extensions/JPDispatch.m",
    "chars": 4159,
    "preview": "//\n//  JPDispatch.m\n//  JSPatchDemo\n//\n//  Created by bang on 10/9/16.\n//  Copyright © 2016 bang. All rights reserved.\n/"
  },
  {
    "path": "Extensions/JPLibffi/JPMethodSignature.h",
    "chars": 618,
    "preview": "//\n//  JPMethodSignature.h\n//  JSPatch\n//\n//  Created by bang on 1/19/17.\n//  Copyright © 2017 bang. All rights reserved"
  },
  {
    "path": "Extensions/JPLibffi/JPMethodSignature.m",
    "chars": 9047,
    "preview": "//\n//  JPMethodSignature.m\n//  JSPatch\n//\n//  Created by bang on 1/19/17.\n//  Copyright © 2017 bang. All rights reserved"
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffi.h",
    "chars": 196,
    "preview": "#ifdef __arm64__\n\n#include \"ffi_arm64.h\"\n\n\n#endif\n#ifdef __i386__\n\n#include \"ffi_i386.h\"\n\n\n#endif\n#ifdef __arm__\n\n#inclu"
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffi_arm.h",
    "chars": 12971,
    "preview": "/* -----------------------------------------------------------------*-C-*-\n   libffi 3.99999 - Copyright (c) 2011, 2014 "
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffi_arm64.h",
    "chars": 12979,
    "preview": "/* -----------------------------------------------------------------*-C-*-\n   libffi 3.99999 - Copyright (c) 2011, 2014 "
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffi_i386.h",
    "chars": 13372,
    "preview": "#ifdef __i386__\n\n/* -----------------------------------------------------------------*-C-*-\n   libffi 3.2.1 - Copyright "
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffi_x86_64.h",
    "chars": 12977,
    "preview": "/* -----------------------------------------------------------------*-C-*-\n   libffi 3.99999 - Copyright (c) 2011, 2014 "
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffitarget.h",
    "chars": 220,
    "preview": "#ifdef __arm64__\n\n#include \"ffitarget_arm64.h\"\n\n\n#endif\n#ifdef __i386__\n\n#include \"ffitarget_i386.h\"\n\n\n#endif\n#ifdef __a"
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffitarget_arm.h",
    "chars": 2581,
    "preview": "/* -----------------------------------------------------------------*-C-*-\n   ffitarget.h - Copyright (c) 2012  Anthony "
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffitarget_arm64.h",
    "chars": 2395,
    "preview": "/* Copyright (c) 2009, 2010, 2011, 2012 ARM Ltd.\n\nPermission is hereby granted, free of charge, to any person obtaining\n"
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffitarget_i386.h",
    "chars": 4218,
    "preview": "#ifdef __i386__\n\n/* -----------------------------------------------------------------*-C-*-\n   ffitarget.h - Copyright ("
  },
  {
    "path": "Extensions/JPLibffi/libffi/ffitarget_x86_64.h",
    "chars": 4122,
    "preview": "/* -----------------------------------------------------------------*-C-*-\n   ffitarget.h - Copyright (c) 2012, 2014  An"
  },
  {
    "path": "Extensions/JPLocker.h",
    "chars": 183,
    "preview": "//\n//  JPLocker.h\n//  JSPatchDemo\n//\n//  Created by bang on 3/22/16.\n//  Copyright © 2016 bang. All rights reserved.\n//\n"
  },
  {
    "path": "Extensions/JPLocker.m",
    "chars": 387,
    "preview": "//\n//  JPLocker.m\n//  JSPatchDemo\n//\n//  Created by bang on 3/22/16.\n//  Copyright © 2016 bang. All rights reserved.\n//\n"
  },
  {
    "path": "Extensions/JPNumber.h",
    "chars": 188,
    "preview": "//\n//  JPNumber.h\n//  JSPatchDemo\n//\n//  Created by pucheng on 16/7/5.\n//  Copyright © 2016年 pucheng. All rights reserve"
  },
  {
    "path": "Extensions/JPNumber.m",
    "chars": 3710,
    "preview": "//\n//  JPNumber.m\n//  JSPatchDemo\n//\n//  Created by pucheng on 16/7/5.\n//  Copyright © 2016年 pucheng. All rights reserve"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlayground.h",
    "chars": 337,
    "preview": "//\n//  JPPlayground.h\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. All r"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlayground.m",
    "chars": 6594,
    "preview": "//\n//  JPPlayground.m\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. All r"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundModule/JPKeyCommands.h",
    "chars": 673,
    "preview": "//\n//  JPKeyCommands.h\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. All "
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundModule/JPKeyCommands.m",
    "chars": 7365,
    "preview": "/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the B"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundModule/SGDirWatchdog.h",
    "chars": 448,
    "preview": "//\n//  SGDirObserver.h\n//  DirectoryObserver\n//\n//  Copyright (c) 2011 Simon Grätzer.\n//\n\n#import <Foundation/Foundation"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundModule/SGDirWatchdog.m",
    "chars": 4595,
    "preview": "//\n//  SGDirObserver.m\n//  DirectoryObserver\n//\n//  Copyright (c) 2011 Simon Grätzer.\n//\n\n#import \"SGDirWatchdog.h\"\n#imp"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundView/JPDevErrorView.h",
    "chars": 252,
    "preview": "//\n//  JPErrorView.h\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. All ri"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundView/JPDevErrorView.m",
    "chars": 827,
    "preview": "//\n//  JPErrorView.m\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. All ri"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundView/JPDevMenu.h",
    "chars": 571,
    "preview": "//\n//  JPPlaygroundMenu.h\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. A"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundView/JPDevMenu.m",
    "chars": 7897,
    "preview": "//\n//  JPPlaygroundMenu.m\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. A"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundView/JPDevTipView.h",
    "chars": 283,
    "preview": "//\n//  JPTipView.h\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. All righ"
  },
  {
    "path": "Extensions/JPPlaygroundTool/JPPlaygroundView/JPDevTipView.m",
    "chars": 1549,
    "preview": "//\n//  JPTipView.m\n//  JSPatchPlaygroundDemo\n//\n//  Created by Awhisper on 16/8/7.\n//  Copyright © 2016年 baidu. All righ"
  },
  {
    "path": "Extensions/JPPlaygroundTool/README.md",
    "chars": 3429,
    "preview": "# JSPatchPlaygroundTool\n\nJSPatch天然能实现playground黑科技一样的效果,什么样的黑科技呢?我们改的每一行代码,每一个语句,完全无需重新运行app,直接能立刻看到效果。\n\n并且bang哥已经给出了如何操"
  }
]

// ... and 28 more files (download for full content)

About this extraction

This page contains the full source code of the bang590/JSPatch GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 228 files (1.1 MB), approximately 327.2k tokens, and a symbol index with 202 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!