[
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2018 Linus Geffarth <hello@ogli.codes>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.3\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"SwiftyDraw\",\n    platforms: [\n        .iOS(.v9)\n    ],\n    products: [\n        .library(name: \"SwiftyDraw\", targets: [\"SwiftyDraw\"])\n    ],\n    targets: [\n        .target(name: \"SwiftyDraw\", path: \"Source\")\n    ]\n)\n"
  },
  {
    "path": "README.md",
    "content": "<h1 align=\"center\">SwiftyDraw</h1>\n\n<p align=\"center\">\n    <img src=\"https://img.shields.io/badge/platform-iOS%209%2B-blue.svg?style=flat\" alt=\"Platform: iOS 9.1+\"/>\n    <a href=\"https://developer.apple.com/swift\"><img src=\"https://img.shields.io/badge/language-swift%205-4BC51D.svg?style=flat\" alt=\"Language: Swift 5\" /></a>\n    <a href=\"https://cocoapods.org/pods/SwiftyDraw\"><img src=\"https://img.shields.io/cocoapods/v/SwiftyDraw.svg?style=flat\" alt=\"CocoaPods\" /></a>\n    <img src=\"http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat\" alt=\"License: MIT\" /> <br><br>\n</p>\n\n\n## Overview\n\nSwiftyDraw is a simple, light-weight drawing framework written in Swift. SwiftyDraw is built using Core Gaphics and is very easy to implement.\n\n## Requirements\n* iOS 9.1+\n* Swift 5.0\n\n## Installation\n\n### Cocoapods:\n\nSwiftyDraw is available through [CocoaPods](http://cocoapods.org). To install\nit, add the following line to your Podfile:\n\n```ruby\npod 'SwiftyDraw'\n```\n\n### Carthage\n\nSwiftyDraw is also available through [Carthage](https://github.com/Carthage/Carthage/blob/master/README.md). To install, add the following line to your Cartfile:\n\n```ruby\ngithub \"awalz/SwiftyDraw\" \"master\"\n```\n\n### Manual Installation:\n\nSimply copy the contents of the Source folder into your project.\n\n## Usage\n\nUsing SwiftyDraw is very simple:\n\n### Getting Started:\n\nCreate a SwiftyDrawView and add it to your ViewController:\n\n```swift\nlet drawView = SwiftyDrawView(frame: self.view.frame)\nself.view.addSubview(drawView)\n```\n\nBy default, the view will automatically respond to touch gestures and begin drawing. The default brush is `.default`, which has a **black** color.\n\nTo disable drawing, simply set the `isEnabled` property to `false`:\n\n```swift\ndrawView.isEnabled = false\n```\n\n## Brushes\n\nFor drawing, we use `Brush` to keep track of styles like `width`, `color`, etc.. We have multiple different default brushes, you can use as follows:\n\n```swift\ndrawView.brush = Brush.default\n```\n\nThe default brushed are:\n\n```swift\npublic static var `default`: Brush { get } // black, width 3\npublic static var thin     : Brush { get } // black, width 2\npublic static var medium   : Brush { get } // black, width 7\npublic static var thick    : Brush { get } // black, width 10\npublic static var marker   : Brush { get } // flat red-ish, width 10\npublic static var eraser   : Brush { get } // clear, width 8; uses CGBlendMode to erase things\n```\n\n### Adjusted Width Factor\n\n`SwiftyDrawView` supports drawing-angle-adjusted brushes. This effectively means, if the user (using an Pencil) draws with the tip of the pencil, the brush will reduce its width a little. If the user draws at a very low angle, with the side of the pencil, the brush will be a little thicker.\nYou can modify this behavior by setting `adjustedWidthFactor` of a brush. If you increase the number (to, say, `5`) the changes will increase. If you reduce the number to `0`, the width will not be adjusted at all.\nThe default value is `1` which causes a slight de-/increase in width.\n\nThis is an opt-in feature. That means, in `shouldBeginDrawingIn`, you need to call `drawingView.brush.adjustWidth(for: touch)`.\n\n## Further Customization:\n\nFor more customization, you can modify the different properties of a brush to fit your needs.\n\n### Line Color:\n\nThe color of a line stroke can be changed by adjusting the `color` property of a brush. SwiftyDraw accepts any `Color`:\n\n```swift\ndrawView.brush.color = Color(.red)\n```\n    \n<p align=\"center\">\n  or\n</p>\n\n```swift\ndrawView.brush.color = Color(UIColor(colorLiteralRed: 0.75, green: 0.50, blue: 0.88, alpha: 1.0))\n```\n\nWe have our own implementation of `UIColor` – `Color` – to be able to de-/encode it.\n\n### Line Width:\n\nThe width of a line stroke can be changed by adjusting the `width` property of a brush. SwiftyDraw accepts any positive `CGFloat`:\n\n```swift\ndrawView.brush.width = 5.0\n```\n\n### Line Opacity:\n\nThe opacity of a line stroke can be changed by adjusting the `lineOpacity` property. SwiftyDraw accepts any `CGFloat` between `0` and `1`:\n\n```swift\ndrawView.brush.opacity = 0.5\n```\n    \n## Editing\n\n### Clear All:\n\nIf you wish to clear the entire canvas, simply call the `clear` function:\n\n```swift\ndrawView.clear()\n``` \n\n### Drawing History:\n\n```swift\ndrawView.undo()\n``` \n\n...and redo:\n\n```swift\ndrawView.redo()\n``` \n\nTo en-/disable custom un- & redo buttons, you can use `.canUndo` and `.canRedo`.\n\n## Apple Pencil Integration\nApple Pencil can be used for drawing in a SwiftyDrawView, just like a finger.  \nSpecial features, however, regarding Apple Pencil 2 are only supported on iOS 12.1 and above versions.\n\n### Apple Pencil 2 Double Tap action\n#### Enable/ Disable pencil interaction\nApple Pencil interaction is enabled by default, but you can set `drawView.isPencilInteractive` to change that setting.\n#### Pencil Events\nWhen double tapping the pencil, SwiftyDraw will check the user preferences set in the system. If the preference is set to switch to eraser, SwiftyDraw will switch between normal and erasing mode; if set to last used tool, SwiftyDraw will switch between current and previous brush.\n\n## Delegate\n\nSwiftyDraw has delegate functions to notify you when a user is interacting with a SwiftDrawView. To access these delegate methods, have your View Controller conform to the `SwiftyDrawViewDelegate` protocol:\n\n```swift\nclass ViewController: UIViewController, SwiftyDrawViewDelegate\n```\n\n### Delegate methods\n\n```swift\nfunc swiftyDraw(shouldBeginDrawingIn drawingView: SwiftyDrawView, using touch: UITouch) -> Bool\n\nfunc swiftyDraw(didBeginDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)\n\nfunc swiftyDraw(isDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)\n    \nfunc swiftyDraw(didFinishDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)\n    \nfunc swiftyDraw(didCancelDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)\n```\n\n---\n \n## Contribution\n\nThis project was built by [Awalz](https://github.com/Awalz) and is mostly maintained & improved by [LinusGeffarth](https://github.com/LinusGeffarth).\n\nIf you'd like to propose any enhancements, bug fixes, etc., feel free to create a pull request or an issue respectively.\n\n### Contact\n\nIf you have any questions, or just want to say *Hi!*, you can reach me via [Twitter](https://twitter.com/linusgeffarth), or [email](mailto:linus@geffarth.com).\n\n### LICENSE\n\nSwiftyDraw is available under the MIT license. See the LICENSE file for more info.\n"
  },
  {
    "path": "Source/Brush.swift",
    "content": "//\n//  Brush.swift\n//  Sketch\n//\n//  Created by Linus Geffarth on 02.05.18.\n//  Copyright © 2018 Linus Geffarth. All rights reserved.\n//\n\nimport UIKit\n\npublic class Brush: Codable {\n    \n    public var color: Color\n    /// Original brush width set when initializing the brush. Not affected by updating the brush width. Used to determine adjusted width\n    private var _originalWidth: CGFloat\n    /// Original brush width set when initializing the brush. Not affected by updating the brush width. Used to determine adjusted width\n    public var originalWidth: CGFloat { return _originalWidth }\n    public var width: CGFloat\n    public var opacity: CGFloat\n    \n    public var adjustedWidthFactor: CGFloat = 1\n    \n    /// Allows for actually erasing content, by setting it to `.clear`. Default is `.normal`\n    public var blendMode: BlendMode = .normal\n    \n    public init(color: UIColor = .black, width: CGFloat = 3, opacity: CGFloat = 1, adjustedWidthFactor: CGFloat = 1, blendMode: BlendMode = .normal) {\n        self.color = Color(color)\n        self._originalWidth = width\n        self.width = width\n        self.opacity = opacity\n        self.adjustedWidthFactor = adjustedWidthFactor\n        self.blendMode = blendMode\n    }\n    \n    private func adjustedWidth(for touch: UITouch) -> CGFloat {\n        guard #available(iOS 9.1, *), touch.type == .pencil else { return originalWidth }\n        return (originalWidth*(1-adjustedWidthFactor/10*2)) + (adjustedWidthFactor/touch.altitudeAngle)\n    }\n    \n    public func adjustWidth(for touch: UITouch) {\n        width = adjustedWidth(for: touch)\n    }\n    \n    // MARK: - Static brushes\n    \n    public static var `default`: Brush {\n        return Brush(color: .black, width: 3, opacity: 1)\n    }\n    \n    public static var thin: Brush {\n        return Brush(color: .black, width: 2, opacity: 1)\n    }\n    \n    public static var medium: Brush {\n        return Brush(color: .black, width: 7, opacity: 1)\n    }\n    \n    public static var thick: Brush {\n        return Brush(color: .black, width: 12, opacity: 1)\n    }\n    \n    public static var marker: Brush {\n        return Brush(color: #colorLiteral(red: 0.920953393, green: 0.447560966, blue: 0.4741248488, alpha: 1), width: 10, opacity: 0.3)\n    }\n    \n    public static var eraser: Brush {\n        return Brush(adjustedWidthFactor: 5, blendMode: .clear)\n    }\n    \n    public static var selection: Brush {\n        return Brush(color: .clear, width: 1, opacity: 1)\n    }\n}\n\nextension Brush: Equatable, Comparable, CustomStringConvertible {\n    \n    public static func ==(lhs: Brush, rhs: Brush) -> Bool {\n        return (\n          lhs.color.uiColor == rhs.color.uiColor &&\n                lhs.originalWidth == rhs.originalWidth &&\n                lhs.opacity == rhs.opacity\n        )\n    }\n    \n    public static func <(lhs: Brush, rhs: Brush) -> Bool {\n        return (\n            lhs.width < rhs.width\n        )\n    }\n    \n    public var description: String {\n        return \"<Brush: color: \\(color), width: (original: \\(originalWidth), current: \\(width)), opacity: \\(opacity)>\"\n    }\n}\n"
  },
  {
    "path": "Source/Color.swift",
    "content": "//\n//  Color.swift\n//  SwiftyDrawExample\n//\n//  Created by Linus Geffarth on 17.04.19.\n//  Copyright © 2019 Walzy. All rights reserved.\n//\n\nimport UIKit\n\npublic struct Color : Codable {\n    private var red: CGFloat = 0.0\n    private var green: CGFloat = 0.0\n    private var blue: CGFloat = 0.0\n    private var alpha: CGFloat = 0.0\n\n    public var uiColor: UIColor {\n        UIColor(red: red, green: green, blue: blue, alpha: alpha)\n    }\n\n    public init(_ uiColor: UIColor) {\n        uiColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha)\n    }\n}\n\npublic enum BlendMode: String, Codable {\n    case normal = \"normal\"\n    case clear = \"clear\"\n    \n    var cgBlendMode: CGBlendMode {\n        switch self {\n        case .normal:\n            return .normal\n        case .clear:\n            return .clear\n        }\n    }\n}\n"
  },
  {
    "path": "Source/SwiftyDraw.swift",
    "content": "/*Copyright (c) 2016, Andrew Walz.\n \n Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met:\n \n 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n \n 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n \n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS\n BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\nimport UIKit\n\n// MARK: - Public Protocol Declarations\n\n/// SwiftyDrawView Delegate\n@objc public protocol SwiftyDrawViewDelegate: AnyObject {\n    \n    /**\n     SwiftyDrawViewDelegate called when a touch gesture should begin on the SwiftyDrawView using given touch type\n     \n     - Parameter view: SwiftyDrawView where touches occured.\n     - Parameter touchType: Type of touch occuring.\n     */\n    func swiftyDraw(shouldBeginDrawingIn drawingView: SwiftyDrawView, using touch: UITouch) -> Bool\n    /**\n     SwiftyDrawViewDelegate called when a touch gesture begins on the SwiftyDrawView.\n     \n     - Parameter view: SwiftyDrawView where touches occured.\n     */\n    func swiftyDraw(didBeginDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)\n    \n    /**\n     SwiftyDrawViewDelegate called when touch gestures continue on the SwiftyDrawView.\n     \n     - Parameter view: SwiftyDrawView where touches occured.\n     */\n    func swiftyDraw(isDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)\n    \n    /**\n     SwiftyDrawViewDelegate called when touches gestures finish on the SwiftyDrawView.\n     \n     - Parameter view: SwiftyDrawView where touches occured.\n     */\n    func swiftyDraw(didFinishDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)\n    \n    /**\n     SwiftyDrawViewDelegate called when there is an issue registering touch gestures on the  SwiftyDrawView.\n     \n     - Parameter view: SwiftyDrawView where touches occured.\n     */\n    func swiftyDraw(didCancelDrawingIn drawingView: SwiftyDrawView, using touch: UITouch)\n}\n\n/// UIView Subclass where touch gestures are translated into Core Graphics drawing\nopen class SwiftyDrawView: UIView {\n    \n    /// Current brush being used for drawing\n    public var brush: Brush = .default {\n        didSet {\n            previousBrush = oldValue\n        }\n    }\n    /// Determines whether touch gestures should be registered as drawing strokes on the current canvas\n    public var isEnabled = true\n\n    /// Determines how touch gestures are treated\n    /// draw - freehand draw\n    /// line - draws straight lines **WARNING:** experimental feature, may not work properly.\n    public enum DrawMode { case draw, line, ellipse, rect }\n    public var drawMode:DrawMode = .draw\n    \n    /// Determines whether paths being draw would be filled or stroked.\n    public var shouldFillPath = false\n\n    /// Determines whether responde to Apple Pencil interactions, like the Double tap for Apple Pencil 2 to switch tools.\n    public var isPencilInteractive : Bool = true {\n        didSet {\n            if #available(iOS 12.1, *) {\n                pencilInteraction.isEnabled  = isPencilInteractive\n            }\n        }\n    }\n    /// Public SwiftyDrawView delegate\n    @IBOutlet public weak var delegate: SwiftyDrawViewDelegate?\n    \n    @available(iOS 9.1, *)\n    public enum TouchType: Equatable, CaseIterable {\n        case finger, pencil\n        \n        var uiTouchTypes: [UITouch.TouchType] {\n            switch self {\n            case .finger:\n                return [.direct, .indirect]\n            case .pencil:\n                return [.pencil, .stylus  ]\n            }\n        }\n    }\n    /// Determines which touch types are allowed to draw; default: `[.finger, .pencil]` (all)\n    @available(iOS 9.1, *)\n    public lazy var allowedTouchTypes: [TouchType] = [.finger, .pencil]\n    \n    public  var drawItems: [DrawItem] = []\n    public  var drawingHistory: [DrawItem] = []\n    public  var firstPoint: CGPoint = .zero      // created this variable\n    public  var currentPoint: CGPoint = .zero     // made public\n    private var previousPoint: CGPoint = .zero\n    private var previousPreviousPoint: CGPoint = .zero\n    \n    // For pencil interactions\n    @available(iOS 12.1, *)\n    lazy private var pencilInteraction = UIPencilInteraction()\n    \n    /// Save the previous brush for Apple Pencil interaction Switch to previous tool\n    private var previousBrush: Brush = .default\n    \n    public enum ShapeType { case rectangle, roundedRectangle, ellipse }\n\n    public struct DrawItem {\n        public var path: CGMutablePath\n        public var brush: Brush\n        public var isFillPath: Bool\n        \n        public init(path: CGMutablePath, brush: Brush, isFillPath: Bool) {\n            self.path = path\n            self.brush = brush\n            self.isFillPath = isFillPath\n        }\n    }\n    \n    /// Public init(frame:) implementation\n    override public init(frame: CGRect) {\n        super.init(frame: frame)\n        self.backgroundColor = .clear\n        // receive pencil interaction if supported\n        if #available(iOS 12.1, *) {\n            pencilInteraction.delegate = self\n            self.addInteraction(pencilInteraction)\n        }\n    }\n    \n    /// Public init(coder:) implementation\n    required public init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        self.backgroundColor = .clear\n        //Receive pencil interaction if supported\n        if #available(iOS 12.1, *) {\n            pencilInteraction.delegate = self\n            self.addInteraction(pencilInteraction)\n        }\n    }\n    \n    /// Overriding draw(rect:) to stroke paths\n    override open func draw(_ rect: CGRect) {\n        guard let context: CGContext = UIGraphicsGetCurrentContext() else { return }\n        \n        for item in drawItems {\n            context.setLineCap(.round)\n            context.setLineJoin(.round)\n            context.setLineWidth(item.brush.width)\n            context.setBlendMode(item.brush.blendMode.cgBlendMode)\n            context.setAlpha(item.brush.opacity)\n            if (item.isFillPath)\n            {\n                context.setFillColor(item.brush.color.uiColor.cgColor)\n                context.addPath(item.path)\n                context.fillPath()\n            }\n            else {\n                context.setStrokeColor(item.brush.color.uiColor.cgColor)\n                context.addPath(item.path)\n                context.strokePath()\n            }\n        }\n    }\n    \n    /// touchesBegan implementation to capture strokes\n    override open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {\n        guard isEnabled, let touch = touches.first else { return }\n        if #available(iOS 9.1, *) {\n            guard allowedTouchTypes.flatMap({ $0.uiTouchTypes }).contains(touch.type) else { return }\n        }\n        guard delegate?.swiftyDraw(shouldBeginDrawingIn: self, using: touch) ?? true else { return }\n        delegate?.swiftyDraw(didBeginDrawingIn: self, using: touch)\n        \n        setTouchPoints(touch, view: self)\n        firstPoint = touch.location(in: self)\n        let newLine = DrawItem(path: CGMutablePath(),\n                           brush: Brush(color: brush.color.uiColor, width: brush.width, opacity: brush.opacity, blendMode: brush.blendMode), isFillPath: drawMode != .draw && drawMode != .line ? shouldFillPath : false)\n        addLine(newLine)\n    }\n    \n    /// touchesMoves implementation to capture strokes\n    override open func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {\n        guard isEnabled, let touch = touches.first else { return }\n        if #available(iOS 9.1, *) {\n            guard allowedTouchTypes.flatMap({ $0.uiTouchTypes }).contains(touch.type) else { return }\n        }\n        delegate?.swiftyDraw(isDrawingIn: self, using: touch)\n        \n        updateTouchPoints(for: touch, in: self)\n        \n        switch (drawMode) {\n        case .line:\n            drawItems.removeLast()\n            setNeedsDisplay()\n            let newLine = DrawItem(path: CGMutablePath(),\n                               brush: Brush(color: brush.color.uiColor, width: brush.width, opacity: brush.opacity, blendMode: brush.blendMode), isFillPath: false)\n            newLine.path.addPath(createNewStraightPath())\n            addLine(newLine)\n            break\n        case .draw:\n            let newPath = createNewPath()\n            if let currentPath = drawItems.last {\n                currentPath.path.addPath(newPath)\n            }\n            break\n        case .ellipse:\n            drawItems.removeLast()\n            setNeedsDisplay()\n            let newLine = DrawItem(path: CGMutablePath(),\n                               brush: Brush(color: brush.color.uiColor, width: brush.width, opacity: brush.opacity, blendMode: brush.blendMode), isFillPath: shouldFillPath)\n            newLine.path.addPath(createNewShape(type: .ellipse))\n            addLine(newLine)\n            break\n        case .rect:\n            drawItems.removeLast()\n            setNeedsDisplay()\n            let newLine = DrawItem(path: CGMutablePath(),\n                               brush: Brush(color: brush.color.uiColor, width: brush.width, opacity: brush.opacity, blendMode: brush.blendMode), isFillPath: shouldFillPath)\n            newLine.path.addPath(createNewShape(type: .rectangle))\n            addLine(newLine)\n            break\n        }\n    }\n    \n    func addLine(_ newLine: DrawItem) {\n        drawItems.append(newLine)\n        drawingHistory = drawItems // adding a new item should also update history\n    }\n    \n    /// touchedEnded implementation to capture strokes\n    override open func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {\n        guard isEnabled, let touch = touches.first else { return }\n        delegate?.swiftyDraw(didFinishDrawingIn: self, using: touch)\n    }\n    \n    /// touchedCancelled implementation\n    override open func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {\n        guard isEnabled, let touch = touches.first else { return }\n        delegate?.swiftyDraw(didCancelDrawingIn: self, using: touch)\n    }\n    \n    /// Displays paths passed by replacing all other contents with provided paths\n    public func display(drawItems: [DrawItem]) {\n        self.drawItems = drawItems\n        drawingHistory = drawItems\n        setNeedsDisplay()\n    }\n    \n    /// Determines whether a last change can be undone\n    public var canUndo: Bool {\n        return drawItems.count > 0\n    }\n    \n    /// Determines whether an undone change can be redone\n    public var canRedo: Bool {\n        return drawingHistory.count > drawItems.count\n    }\n    \n    /// Undo the last change\n    public func undo() {\n        guard canUndo else { return }\n        drawItems.removeLast()\n        setNeedsDisplay()\n    }\n    \n    /// Redo the last change\n    public func redo() {\n        guard canRedo, let line = drawingHistory[safe: drawItems.count] else { return }\n        drawItems.append(line)\n        setNeedsDisplay()\n    }\n    \n    /// Clear all stroked lines on canvas\n    public func clear() {\n        drawItems = []\n        setNeedsDisplay()\n    }\n    \n    /********************************** Private Functions **********************************/\n    \n    private func setTouchPoints(_ touch: UITouch,view: UIView) {\n        previousPoint = touch.previousLocation(in: view)\n        previousPreviousPoint = touch.previousLocation(in: view)\n        currentPoint = touch.location(in: view)\n    }\n    \n    private func updateTouchPoints(for touch: UITouch,in view: UIView) {\n        previousPreviousPoint = previousPoint\n        previousPoint = touch.previousLocation(in: view)\n        currentPoint = touch.location(in: view)\n    }\n    \n    private func createNewPath() -> CGMutablePath {\n        let midPoints = getMidPoints()\n        let subPath = createSubPath(midPoints.0, mid2: midPoints.1)\n        let newPath = addSubPathToPath(subPath)\n        return newPath\n    }\n    \n    private func createNewStraightPath() -> CGMutablePath {\n        let pt1 : CGPoint = firstPoint\n        let pt2 : CGPoint = currentPoint\n        let subPath = createStraightSubPath(pt1, mid2: pt2)\n        let newPath = addSubPathToPath(subPath)\n        return newPath\n    }\n    \n    private func createNewShape(type :ShapeType, corner:CGPoint = CGPoint(x: 1.0, y: 1.0)) -> CGMutablePath {\n        let pt1 : CGPoint = firstPoint\n        let pt2 : CGPoint = currentPoint\n        let width = abs(pt1.x - pt2.x)\n        let height = abs(pt1.y - pt2.y)\n        let newPath = CGMutablePath()\n        if width > 0, height > 0 {\n            let bounds = CGRect(x: min(pt1.x, pt2.x), y: min(pt1.y, pt2.y), width: width, height: height)\n            switch (type) {\n            case .ellipse:\n                newPath.addEllipse(in: bounds)\n                break\n            case .rectangle:\n                newPath.addRect(bounds)\n                break\n            case .roundedRectangle:\n                newPath.addRoundedRect(in: bounds, cornerWidth: corner.x, cornerHeight: corner.y)\n            }\n        }\n        return addSubPathToPath(newPath)\n    }\n    \n    private func calculateMidPoint(_ p1 : CGPoint, p2 : CGPoint) -> CGPoint {\n        return CGPoint(x: (p1.x + p2.x) * 0.5, y: (p1.y + p2.y) * 0.5);\n    }\n    \n    private func getMidPoints() -> (CGPoint,  CGPoint) {\n        let mid1 : CGPoint = calculateMidPoint(previousPoint, p2: previousPreviousPoint)\n        let mid2 : CGPoint = calculateMidPoint(currentPoint, p2: previousPoint)\n        return (mid1, mid2)\n    }\n    \n    private func createSubPath(_ mid1: CGPoint, mid2: CGPoint) -> CGMutablePath {\n        let subpath : CGMutablePath = CGMutablePath()\n        subpath.move(to: CGPoint(x: mid1.x, y: mid1.y))\n        subpath.addQuadCurve(to: CGPoint(x: mid2.x, y: mid2.y), control: CGPoint(x: previousPoint.x, y: previousPoint.y))\n        return subpath\n    }\n    \n    private func createStraightSubPath(_ mid1: CGPoint, mid2: CGPoint) -> CGMutablePath {\n        let subpath : CGMutablePath = CGMutablePath()\n        subpath.move(to: mid1)\n        subpath.addLine(to: mid2)\n        return subpath\n    }\n    \n    private func addSubPathToPath(_ subpath: CGMutablePath) -> CGMutablePath {\n        let bounds : CGRect = subpath.boundingBox\n        let drawBox : CGRect = bounds.insetBy(dx: -2.0 * brush.width, dy: -2.0 * brush.width)\n        self.setNeedsDisplay(drawBox)\n        return subpath\n    }\n}\n\n// MARK: - Extensions\n\nextension Collection {\n    /// Returns the element at the specified index if it is within bounds, otherwise nil.\n    subscript (safe index: Index) -> Element? {\n        return indices.contains(index) ? self[index] : nil\n    }\n}\n\n@available(iOS 12.1, *)\nextension SwiftyDrawView : UIPencilInteractionDelegate{\n    public func pencilInteractionDidTap(_ interaction: UIPencilInteraction) {\n        let preference = UIPencilInteraction.preferredTapAction\n        if preference == .switchEraser {\n            let currentBlend = self.brush.blendMode\n            if currentBlend != .clear {\n                self.brush.blendMode = .clear\n            } else {\n                self.brush.blendMode = .normal\n            }\n        } else if preference == .switchPrevious {\n            self.brush = self.previousBrush\n        }\n    }\n}\n\nextension SwiftyDrawView.DrawItem: Codable {\n    public init(from decoder: Decoder) throws {\n        let container = try decoder.container(keyedBy: CodingKeys.self)\n        \n        let pathData = try container.decode(Data.self, forKey: .path)\n        let uiBezierPath = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(pathData) as! UIBezierPath\n        path = uiBezierPath.cgPath as! CGMutablePath\n    \n        brush = try container.decode(Brush.self, forKey: .brush)\n        isFillPath = try container.decode(Bool.self, forKey: .isFillPath)\n    }\n    \n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        \n        let uiBezierPath = UIBezierPath(cgPath: path)\n        var pathData: Data?\n        if #available(iOS 11.0, *) {\n            pathData = try NSKeyedArchiver.archivedData(withRootObject: uiBezierPath, requiringSecureCoding: false)\n        } else {\n            pathData = NSKeyedArchiver.archivedData(withRootObject: uiBezierPath)\n        }\n        try container.encode(pathData!, forKey: .path)\n        \n        try container.encode(brush, forKey: .brush)\n        try container.encode(isFillPath, forKey: .isFillPath)\n    }\n    \n    enum CodingKeys: String, CodingKey {\n        case brush\n        case path\n        case isFillPath\n    }\n}\n"
  },
  {
    "path": "SwiftyDraw/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftyDraw/SwiftyDraw.h",
    "content": "//\n//  SwiftyDraw.h\n//  SwiftyDraw\n//\n//  Created by Shunzhe Ma on 2/6/19.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for SwiftyDraw.\nFOUNDATION_EXPORT double SwiftyDrawVersionNumber;\n\n//! Project version string for SwiftyDraw.\nFOUNDATION_EXPORT const unsigned char SwiftyDrawVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <SwiftyDraw/PublicHeader.h>\n\n\n"
  },
  {
    "path": "SwiftyDraw.podspec",
    "content": "\nPod::Spec.new do |s|\n  s.name             = 'SwiftyDraw'\n  s.version          = '2.4.1'\n  s.summary          = 'A simple, core graphics drawing framework written in Swift'\n\n  s.description      = <<-DESC\n  SwiftyDraw is a simple drawing framework written in Swift. SwiftyDraw is built using Core Gaphics and is very easy to implement\n                       DESC\n\n  s.homepage         = 'https://github.com/Awalz/SwiftyDraw'\n  s.license          = { :type => 'MIT', :file => 'LICENSE' }\n  s.author           = { 'Linus Geffarth' => 'hello@ogli.codes' }\n  s.source           = { :git => 'https://github.com/Awalz/SwiftyDraw.git', :tag => s.version }\n  s.social_media_url = ''\n\n  s.ios.deployment_target = '9.0'\n  s.swift_version = '5.0'\n\n  s.source_files = 'Source/**/*'\n\n  s.frameworks = 'UIKit'\n\nend\n"
  },
  {
    "path": "SwiftyDraw.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t6297C0F6240FBBE3008DBC24 /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6297C0F5240FBBE3008DBC24 /* Color.swift */; };\n\t\tDA81B079220BEA1B008184FF /* SwiftyDraw.h in Headers */ = {isa = PBXBuildFile; fileRef = DA81B077220BEA1B008184FF /* SwiftyDraw.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tDA81B07D220BEA28008184FF /* SwiftyDraw.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA81B06D220BE9C8008184FF /* SwiftyDraw.swift */; };\n\t\tDA81B07E220BEA28008184FF /* Brush.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA81B06E220BE9C8008184FF /* Brush.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t6297C0F5240FBBE3008DBC24 /* Color.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = \"<group>\"; };\n\t\tDA81B06D220BE9C8008184FF /* SwiftyDraw.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftyDraw.swift; sourceTree = \"<group>\"; };\n\t\tDA81B06E220BE9C8008184FF /* Brush.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Brush.swift; sourceTree = \"<group>\"; };\n\t\tDA81B074220BEA1B008184FF /* SwiftyDraw.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyDraw.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tDA81B077220BEA1B008184FF /* SwiftyDraw.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftyDraw.h; sourceTree = \"<group>\"; };\n\t\tDA81B078220BEA1B008184FF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tDA81B071220BEA1B008184FF /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tDA81B062220BE9A6008184FF = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA81B06C220BE9C8008184FF /* Source */,\n\t\t\t\tDA81B076220BEA1B008184FF /* SwiftyDraw */,\n\t\t\t\tDA81B075220BEA1B008184FF /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA81B06C220BE9C8008184FF /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA81B06D220BE9C8008184FF /* SwiftyDraw.swift */,\n\t\t\t\tDA81B06E220BE9C8008184FF /* Brush.swift */,\n\t\t\t\t6297C0F5240FBBE3008DBC24 /* Color.swift */,\n\t\t\t);\n\t\t\tpath = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA81B075220BEA1B008184FF /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA81B074220BEA1B008184FF /* SwiftyDraw.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tDA81B076220BEA1B008184FF /* SwiftyDraw */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDA81B077220BEA1B008184FF /* SwiftyDraw.h */,\n\t\t\t\tDA81B078220BEA1B008184FF /* Info.plist */,\n\t\t\t);\n\t\t\tpath = SwiftyDraw;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\tDA81B06F220BEA1B008184FF /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDA81B079220BEA1B008184FF /* SwiftyDraw.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\tDA81B073220BEA1B008184FF /* SwiftyDraw */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = DA81B07A220BEA1B008184FF /* Build configuration list for PBXNativeTarget \"SwiftyDraw\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDA81B06F220BEA1B008184FF /* Headers */,\n\t\t\t\tDA81B070220BEA1B008184FF /* Sources */,\n\t\t\t\tDA81B071220BEA1B008184FF /* Frameworks */,\n\t\t\t\tDA81B072220BEA1B008184FF /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SwiftyDraw;\n\t\t\tproductName = SwiftyDraw;\n\t\t\tproductReference = DA81B074220BEA1B008184FF /* SwiftyDraw.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tDA81B063220BE9A6008184FF /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1130;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tDA81B073220BEA1B008184FF = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 10.1;\n\t\t\t\t\t\tLastSwiftMigration = 1130;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = DA81B066220BE9A6008184FF /* Build configuration list for PBXProject \"SwiftyDraw\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = DA81B062220BE9A6008184FF;\n\t\t\tproductRefGroup = DA81B075220BEA1B008184FF /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tDA81B073220BEA1B008184FF /* SwiftyDraw */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tDA81B072220BEA1B008184FF /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tDA81B070220BEA1B008184FF /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tDA81B07D220BEA28008184FF /* SwiftyDraw.swift in Sources */,\n\t\t\t\tDA81B07E220BEA28008184FF /* Brush.swift in Sources */,\n\t\t\t\t6297C0F6240FBBE3008DBC24 /* Color.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\tDA81B067220BE9A6008184FF /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tDA81B068220BE9A6008184FF /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tDA81B07B220BEA1B008184FF /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tINFOPLIST_FILE = SwiftyDraw/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.SwiftyDraw;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tDA81B07C220BEA1B008184FF /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tINFOPLIST_FILE = SwiftyDraw/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t\t\"@loader_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.SwiftyDraw;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME:c99extidentifier)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tDA81B066220BE9A6008184FF /* Build configuration list for PBXProject \"SwiftyDraw\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDA81B067220BE9A6008184FF /* Debug */,\n\t\t\t\tDA81B068220BE9A6008184FF /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tDA81B07A220BEA1B008184FF /* Build configuration list for PBXNativeTarget \"SwiftyDraw\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tDA81B07B220BEA1B008184FF /* Debug */,\n\t\t\t\tDA81B07C220BEA1B008184FF /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = DA81B063220BE9A6008184FF /* Project object */;\n}\n"
  },
  {
    "path": "SwiftyDraw.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:SwiftyDraw.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "SwiftyDraw.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftyDraw.xcodeproj/xcshareddata/xcschemes/SwiftyDraw.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1130\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"DA81B073220BEA1B008184FF\"\n               BuildableName = \"SwiftyDraw.framework\"\n               BlueprintName = \"SwiftyDraw\"\n               ReferencedContainer = \"container:SwiftyDraw.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"DA81B073220BEA1B008184FF\"\n            BuildableName = \"SwiftyDraw.framework\"\n            BlueprintName = \"SwiftyDraw\"\n            ReferencedContainer = \"container:SwiftyDraw.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"DA81B073220BEA1B008184FF\"\n            BuildableName = \"SwiftyDraw.framework\"\n            BlueprintName = \"SwiftyDraw\"\n            ReferencedContainer = \"container:SwiftyDraw.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "SwiftyDraw.xcodeproj/xcuserdata/shunzhema.xcuserdatad/xcschemes/xcschememanagement.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>SchemeUserState</key>\n\t<dict>\n\t\t<key>SwiftyDraw.xcscheme_^#shared#^_</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>0</integer>\n\t\t</dict>\n\t</dict>\n\t<key>SuppressBuildableAutocreation</key>\n\t<dict>\n\t\t<key>DA81B073220BEA1B008184FF</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftyDrawExample/.gitignore",
    "content": "# OS X\n.DS_Store\n\n# Xcode\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata/\n*.xccheckout\nprofile\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n\n# Bundler\n.bundle\n\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control\n# \n# Note: if you ignore the Pods directory, make sure to uncomment\n# `pod install` in .travis.yml\n#\n# Pods/\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample/AppDelegate.swift",
    "content": "import UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n        return true\n    }\n\n    func applicationWillResignActive(_ application: UIApplication) {  }\n\n    func applicationDidEnterBackground(_ application: UIApplication) {  }\n\n    func applicationWillEnterForeground(_ application: UIApplication) {  }\n\n    func applicationDidBecomeActive(_ application: UIApplication) {  }\n\n    func applicationWillTerminate(_ application: UIApplication) {  }\n}\n\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"16096\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <device id=\"retina6_1\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"16086\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModule=\"SwiftyDrawExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"896\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" fixedFrame=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Jqo-l8-EIq\" customClass=\"SwiftyDrawView\" customModule=\"SwiftyDrawExample\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"1194\" height=\"834\"/>\n                                <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                <color key=\"backgroundColor\" red=\"0.96470588235294119\" green=\"0.96470588235294119\" blue=\"0.96470588235294119\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                            </view>\n                            <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" spacing=\"24\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"v0h-d1-099\">\n                                <rect key=\"frame\" x=\"160\" y=\"713\" width=\"200\" height=\"125\"/>\n                                <subviews>\n                                    <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"oat-aU-2H3\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"200\" height=\"50.5\"/>\n                                        <subviews>\n                                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"width\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JdT-E9-Ibb\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"200\" height=\"20.5\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                <color key=\"textColor\" white=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                <nil key=\"highlightedColor\"/>\n                                            </label>\n                                            <slider opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"7\" minValue=\"1\" maxValue=\"15\" continuous=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9OB-sb-WoZ\">\n                                                <rect key=\"frame\" x=\"-2\" y=\"20.5\" width=\"204\" height=\"31\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"width\" constant=\"200\" id=\"Pj1-58-7Jo\"/>\n                                                </constraints>\n                                                <connections>\n                                                    <action selector=\"changedWidth:\" destination=\"BYZ-38-t0r\" eventType=\"valueChanged\" id=\"xPO-TB-dJC\"/>\n                                                </connections>\n                                            </slider>\n                                        </subviews>\n                                    </stackView>\n                                    <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Kq7-uD-cxb\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"74.5\" width=\"200\" height=\"50.5\"/>\n                                        <subviews>\n                                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"opacity\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"mB1-cB-TNV\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"200\" height=\"20.5\"/>\n                                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                <color key=\"textColor\" white=\"0.33333333333333331\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                <nil key=\"highlightedColor\"/>\n                                            </label>\n                                            <slider opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"1\" minValue=\"0.01\" maxValue=\"1\" continuous=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"dE5-8m-7E2\">\n                                                <rect key=\"frame\" x=\"-2\" y=\"20.5\" width=\"204\" height=\"31\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"width\" constant=\"200\" id=\"kuA-uA-crU\"/>\n                                                </constraints>\n                                                <connections>\n                                                    <action selector=\"changedOpacity:\" destination=\"BYZ-38-t0r\" eventType=\"valueChanged\" id=\"Hcf-cw-ocP\"/>\n                                                </connections>\n                                            </slider>\n                                        </subviews>\n                                    </stackView>\n                                </subviews>\n                            </stackView>\n                            <stackView opaque=\"NO\" contentMode=\"scaleToFill\" spacing=\"12\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fna-t5-PmT\">\n                                <rect key=\"frame\" x=\"36\" y=\"694\" width=\"92\" height=\"144\"/>\n                                <subviews>\n                                    <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" spacing=\"12\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hRt-yt-d5d\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"40\" height=\"144\"/>\n                                        <subviews>\n                                            <button opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"zSG-cJ-TWT\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"40\" height=\"40\"/>\n                                                <color key=\"backgroundColor\" red=\"0.90196078430000004\" green=\"0.35686274509999999\" blue=\"0.50588235290000005\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"width\" constant=\"40\" id=\"Oqf-Bo-gGE\"/>\n                                                    <constraint firstAttribute=\"width\" secondItem=\"zSG-cJ-TWT\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"UQH-gf-QMV\"/>\n                                                </constraints>\n                                                <userDefinedRuntimeAttributes>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"borderWidth\">\n                                                        <real key=\"value\" value=\"0.0\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                                                        <real key=\"value\" value=\"20\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                </userDefinedRuntimeAttributes>\n                                                <connections>\n                                                    <action selector=\"selectedColor:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"vr5-Tt-CuX\"/>\n                                                </connections>\n                                            </button>\n                                            <button opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"X1J-Fj-lEu\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"52\" width=\"40\" height=\"40\"/>\n                                                <color key=\"backgroundColor\" red=\"0.97254901959999995\" green=\"0.54117647059999996\" blue=\"0.45098039220000002\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"width\" constant=\"40\" id=\"956-Xh-TNw\"/>\n                                                    <constraint firstAttribute=\"width\" secondItem=\"X1J-Fj-lEu\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"sb9-fL-2gJ\"/>\n                                                </constraints>\n                                                <userDefinedRuntimeAttributes>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"borderWidth\">\n                                                        <real key=\"value\" value=\"0.0\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                                                        <real key=\"value\" value=\"20\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                </userDefinedRuntimeAttributes>\n                                                <connections>\n                                                    <action selector=\"selectedColor:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"NLa-L8-wzP\"/>\n                                                </connections>\n                                            </button>\n                                            <button opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"G1l-BY-Ynm\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"104\" width=\"40\" height=\"40\"/>\n                                                <color key=\"backgroundColor\" red=\"0.74509803919999995\" green=\"0.61176470589999998\" blue=\"1\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"width\" constant=\"40\" id=\"BDw-GL-dBJ\"/>\n                                                    <constraint firstAttribute=\"width\" secondItem=\"G1l-BY-Ynm\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"Oqn-ZR-DQi\"/>\n                                                </constraints>\n                                                <userDefinedRuntimeAttributes>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"borderWidth\">\n                                                        <real key=\"value\" value=\"0.0\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                                                        <real key=\"value\" value=\"20\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                </userDefinedRuntimeAttributes>\n                                                <connections>\n                                                    <action selector=\"selectedColor:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"nub-KT-Oex\"/>\n                                                </connections>\n                                            </button>\n                                        </subviews>\n                                        <constraints>\n                                            <constraint firstItem=\"X1J-Fj-lEu\" firstAttribute=\"width\" secondItem=\"X1J-Fj-lEu\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"Ikr-el-LMo\"/>\n                                            <constraint firstItem=\"G1l-BY-Ynm\" firstAttribute=\"width\" secondItem=\"G1l-BY-Ynm\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"Kn9-xa-k8i\"/>\n                                        </constraints>\n                                    </stackView>\n                                    <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" spacing=\"12\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6AD-TY-yn1\">\n                                        <rect key=\"frame\" x=\"52\" y=\"0.0\" width=\"40\" height=\"144\"/>\n                                        <subviews>\n                                            <button opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"fBr-aI-bk5\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"40\" height=\"40\"/>\n                                                <color key=\"backgroundColor\" red=\"0.31372549020000001\" green=\"0.6588235294\" blue=\"0.99607843139999996\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"width\" secondItem=\"fBr-aI-bk5\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"HsM-4m-vmp\"/>\n                                                    <constraint firstAttribute=\"width\" constant=\"40\" id=\"wQ5-qO-vpK\"/>\n                                                </constraints>\n                                                <userDefinedRuntimeAttributes>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"borderWidth\">\n                                                        <real key=\"value\" value=\"0.0\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                                                        <real key=\"value\" value=\"20\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                </userDefinedRuntimeAttributes>\n                                                <connections>\n                                                    <action selector=\"selectedColor:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"ykK-i7-8OY\"/>\n                                                </connections>\n                                            </button>\n                                            <button opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3Ng-cV-nUR\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"52\" width=\"40\" height=\"40\"/>\n                                                <color key=\"backgroundColor\" red=\"0.6705882353\" green=\"0.6705882353\" blue=\"0.6705882353\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"width\" secondItem=\"3Ng-cV-nUR\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"MIU-PC-84h\"/>\n                                                    <constraint firstAttribute=\"width\" constant=\"40\" id=\"Ynq-SE-d4o\"/>\n                                                </constraints>\n                                                <userDefinedRuntimeAttributes>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"borderWidth\">\n                                                        <real key=\"value\" value=\"0.0\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                                                        <real key=\"value\" value=\"20\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                </userDefinedRuntimeAttributes>\n                                                <connections>\n                                                    <action selector=\"selectedColor:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"FtV-GM-B8q\"/>\n                                                </connections>\n                                            </button>\n                                            <button opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"lsJ-oW-AAP\">\n                                                <rect key=\"frame\" x=\"0.0\" y=\"104\" width=\"40\" height=\"40\"/>\n                                                <color key=\"backgroundColor\" white=\"0.14999999999999999\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                                <constraints>\n                                                    <constraint firstAttribute=\"width\" secondItem=\"lsJ-oW-AAP\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"2DO-Nd-HGF\"/>\n                                                    <constraint firstAttribute=\"width\" constant=\"40\" id=\"IeV-T5-q6L\"/>\n                                                </constraints>\n                                                <userDefinedRuntimeAttributes>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"borderWidth\">\n                                                        <real key=\"value\" value=\"0.0\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                                                        <real key=\"value\" value=\"20\"/>\n                                                    </userDefinedRuntimeAttribute>\n                                                </userDefinedRuntimeAttributes>\n                                                <connections>\n                                                    <action selector=\"selectedColor:\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"rXS-jt-cqJ\"/>\n                                                </connections>\n                                            </button>\n                                        </subviews>\n                                        <constraints>\n                                            <constraint firstItem=\"lsJ-oW-AAP\" firstAttribute=\"width\" secondItem=\"lsJ-oW-AAP\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"QNJ-cw-vKn\"/>\n                                            <constraint firstItem=\"3Ng-cV-nUR\" firstAttribute=\"width\" secondItem=\"3Ng-cV-nUR\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"ayt-WA-TBt\"/>\n                                        </constraints>\n                                    </stackView>\n                                </subviews>\n                            </stackView>\n                            <stackView opaque=\"NO\" contentMode=\"scaleToFill\" axis=\"vertical\" alignment=\"bottom\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"KOY-Z9-BOV\">\n                                <rect key=\"frame\" x=\"131\" y=\"68\" width=\"239\" height=\"221\"/>\n                                <subviews>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"HvD-af-j12\">\n                                        <rect key=\"frame\" x=\"176\" y=\"0.0\" width=\"63\" height=\"30\"/>\n                                        <state key=\"normal\" title=\"undo last\"/>\n                                        <connections>\n                                            <action selector=\"undo\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"lSE-z7-GXx\"/>\n                                        </connections>\n                                    </button>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5W0-QH-ugr\">\n                                        <rect key=\"frame\" x=\"179\" y=\"30\" width=\"60\" height=\"30\"/>\n                                        <state key=\"normal\" title=\"redo last\"/>\n                                        <connections>\n                                            <action selector=\"redo\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"zhT-4A-xVW\"/>\n                                        </connections>\n                                    </button>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4iX-SS-q0C\" userLabel=\"spacing view\">\n                                        <rect key=\"frame\" x=\"238\" y=\"60\" width=\"1\" height=\"20\"/>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"width\" constant=\"1\" id=\"nN9-zi-Xoc\"/>\n                                            <constraint firstAttribute=\"height\" constant=\"20\" id=\"wuh-nE-lHr\"/>\n                                        </constraints>\n                                    </view>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"p8A-ij-1ZV\">\n                                        <rect key=\"frame\" x=\"137\" y=\"80\" width=\"102\" height=\"30\"/>\n                                        <state key=\"normal\" title=\"activate eraser\"/>\n                                        <connections>\n                                            <action selector=\"toggleEraser\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"K1M-gE-mXI\"/>\n                                        </connections>\n                                    </button>\n                                    <segmentedControl opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"top\" segmentControlStyle=\"bordered\" selectedSegmentIndex=\"0\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Y2m-U0-61l\" userLabel=\"Draw Mode\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"110\" width=\"239\" height=\"32\"/>\n                                        <segments>\n                                            <segment title=\"draw\"/>\n                                            <segment title=\"line\"/>\n                                            <segment title=\"ellipse\"/>\n                                            <segment title=\"rect\"/>\n                                        </segments>\n                                        <color key=\"selectedSegmentTintColor\" white=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <userDefinedRuntimeAttributes>\n                                            <userDefinedRuntimeAttribute type=\"number\" keyPath=\"cornerRadius\">\n                                                <real key=\"value\" value=\"0.0\"/>\n                                            </userDefinedRuntimeAttribute>\n                                        </userDefinedRuntimeAttributes>\n                                        <connections>\n                                            <action selector=\"setDrawMode\" destination=\"BYZ-38-t0r\" eventType=\"valueChanged\" id=\"e65-uL-mSh\"/>\n                                        </connections>\n                                    </segmentedControl>\n                                    <button hidden=\"YES\" opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"daf-Np-eua\" userLabel=\"Fill Mode Button\">\n                                        <rect key=\"frame\" x=\"54\" y=\"141\" width=\"117\" height=\"0.0\"/>\n                                        <state key=\"normal\" title=\"activate fill mode\"/>\n                                        <connections>\n                                            <action selector=\"toggleStraightLine\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"voc-cU-tG9\"/>\n                                        </connections>\n                                    </button>\n                                    <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"K8j-Iq-kHk\" userLabel=\"spacing view\">\n                                        <rect key=\"frame\" x=\"170\" y=\"141\" width=\"1\" height=\"20\"/>\n                                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                                        <constraints>\n                                            <constraint firstAttribute=\"height\" constant=\"20\" id=\"BYC-lO-dZb\"/>\n                                            <constraint firstAttribute=\"width\" constant=\"1\" id=\"V7g-CM-sYq\"/>\n                                        </constraints>\n                                    </view>\n                                    <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"esB-7f-w8W\">\n                                        <rect key=\"frame\" x=\"85\" y=\"161\" width=\"86\" height=\"30\"/>\n                                        <state key=\"normal\" title=\"clear canvas\"/>\n                                        <connections>\n                                            <action selector=\"clearCanvas\" destination=\"BYZ-38-t0r\" eventType=\"touchUpInside\" id=\"U2m-A5-dvl\"/>\n                                        </connections>\n                                    </button>\n                                </subviews>\n                            </stackView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.96470588239999999\" green=\"0.96470588239999999\" blue=\"0.96470588239999999\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"wfy-db-euE\" firstAttribute=\"top\" secondItem=\"fna-t5-PmT\" secondAttribute=\"bottom\" constant=\"24\" id=\"MV5-Jq-Qvr\"/>\n                            <constraint firstItem=\"v0h-d1-099\" firstAttribute=\"leading\" secondItem=\"fna-t5-PmT\" secondAttribute=\"trailing\" constant=\"32\" id=\"Uus-cY-l5u\"/>\n                            <constraint firstItem=\"fna-t5-PmT\" firstAttribute=\"leading\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"leadingMargin\" constant=\"16\" id=\"WNC-le-dV8\"/>\n                            <constraint firstItem=\"v0h-d1-099\" firstAttribute=\"bottom\" secondItem=\"fna-t5-PmT\" secondAttribute=\"bottom\" id=\"q4a-Fc-rxc\"/>\n                            <constraint firstItem=\"KOY-Z9-BOV\" firstAttribute=\"top\" secondItem=\"8bC-Xf-vdC\" secondAttribute=\"topMargin\" constant=\"24\" id=\"x7t-Gy-dvV\"/>\n                            <constraint firstAttribute=\"trailingMargin\" secondItem=\"KOY-Z9-BOV\" secondAttribute=\"trailing\" constant=\"24\" id=\"zjh-x8-dlT\"/>\n                        </constraints>\n                    </view>\n                    <connections>\n                        <outlet property=\"drawModeSelector\" destination=\"Y2m-U0-61l\" id=\"9nI-Pd-gyo\"/>\n                        <outlet property=\"drawView\" destination=\"Jqo-l8-EIq\" id=\"1LA-Mx-mEv\"/>\n                        <outlet property=\"eraserButton\" destination=\"p8A-ij-1ZV\" id=\"kce-EN-Pni\"/>\n                        <outlet property=\"fillModeButton\" destination=\"daf-Np-eua\" id=\"Fri-2K-beu\"/>\n                        <outlet property=\"redoButton\" destination=\"5W0-QH-ugr\" id=\"3jP-IW-j34\"/>\n                        <outlet property=\"undoButton\" destination=\"HvD-af-j12\" id=\"aKG-Cp-TNQ\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"137.68844221105527\" y=\"133.81294964028777\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample/Extensions.swift",
    "content": "//\n//  Extensions.swift\n//  SwiftyDrawExample\n//\n//  Created by Linus Geffarth on 22.02.19.\n//  Copyright © 2019 Walzy. All rights reserved.\n//\n\nimport UIKit\n\n@IBDesignable\nextension UIView {\n    @IBInspectable var cornerRadius: CGFloat {\n        set { layer.cornerRadius = newValue }\n        get { return layer.cornerRadius }\n    }\n    \n    @IBInspectable var borderColor: UIColor {\n        set { layer.borderColor = newValue.cgColor }\n        get { return UIColor(cgColor: layer.borderColor!) }\n    }\n    \n    @IBInspectable var borderWidth: CGFloat {\n        set { layer.borderWidth = newValue }\n        get { return layer.borderWidth }\n    }\n}\n\nextension CGMutablePath {\n    func adding(path: CGPath) -> CGMutablePath {\n        addPath(path)\n        return self\n    }\n}\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UIRequiresFullScreen</key>\n\t<true/>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample/SwiftyDrawExample.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.network.client</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample/ViewController.swift",
    "content": "import UIKit\n\nextension ViewController: SwiftyDrawViewDelegate {\n    func swiftyDraw(shouldBeginDrawingIn drawingView: SwiftyDrawView, using touch: UITouch) -> Bool { return true }\n    func swiftyDraw(didBeginDrawingIn    drawingView: SwiftyDrawView, using touch: UITouch) { updateHistoryButtons() }\n    func swiftyDraw(isDrawingIn          drawingView: SwiftyDrawView, using touch: UITouch) {  }\n    func swiftyDraw(didFinishDrawingIn   drawingView: SwiftyDrawView, using touch: UITouch) {  }\n    func swiftyDraw(didCancelDrawingIn   drawingView: SwiftyDrawView, using touch: UITouch) {  }\n}\n\nclass ViewController: UIViewController {\n    \n    @IBOutlet weak var drawView: SwiftyDrawView!\n    @IBOutlet weak var eraserButton: UIButton!\n    @IBOutlet weak var fillModeButton: UIButton!\n    @IBOutlet weak var drawModeSelector: UISegmentedControl!\n    \n    @IBOutlet weak var undoButton: UIButton!\n    @IBOutlet weak var redoButton: UIButton!\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        updateHistoryButtons()\n        \n        drawView.delegate = self\n        drawView.brush.width = 7\n        \n        if #available(iOS 9.1, *) {\n            drawView.allowedTouchTypes = [.finger, .pencil]\n        }\n    }\n    \n    @IBAction func selectedColor(_ button: UIButton) {\n        guard let color = button.backgroundColor else { return }\n        drawView.brush.color = Color(color)\n        deactivateEraser()\n    }\n    \n    @IBAction func undo() {\n        drawView.undo()\n        updateHistoryButtons()\n    }\n    \n    @IBAction func redo() {\n        drawView.redo()\n        updateHistoryButtons()\n    }\n    \n    func updateHistoryButtons() {\n        undoButton.isEnabled = drawView.canUndo\n        redoButton.isEnabled = drawView.canRedo\n    }\n    \n    @IBAction func toggleEraser() {\n        if drawView.brush.blendMode == .normal {\n            //Switch to clear\n            activateEraser()\n        } else {\n            //Switch to normal\n            deactivateEraser()\n        }\n    }\n    \n    @IBAction func clearCanvas() {\n        drawView.clear()\n        deactivateEraser()\n    }\n    \n    @IBAction func setDrawMode() {\n        switch (drawModeSelector.selectedSegmentIndex) {\n        case 1:\n            drawView.drawMode = .line\n            fillModeButton.isHidden = true\n            break\n        case 2:\n            drawView.drawMode = .ellipse\n            fillModeButton.isHidden = false\n            break\n        case 3:\n            drawView.drawMode = .rect\n            fillModeButton.isHidden = false\n            break\n        default:\n            drawView.drawMode = .draw\n            fillModeButton.isHidden = true\n            break\n        }\n    }\n    \n    @IBAction func toggleStraightLine() {\n        drawView.shouldFillPath = !drawView.shouldFillPath\n        if (drawView.shouldFillPath) {\n            fillModeButton.tintColor = .red\n            fillModeButton.setTitle(\"activate stroke mode\", for: .normal)\n        } else {\n            fillModeButton.tintColor = self.view.tintColor\n            fillModeButton.setTitle(\"activate fill mode\", for: .normal)\n        }\n    }\n        \n    @IBAction func changedWidth(_ slider: UISlider) {\n        drawView.brush.width = CGFloat(slider.value)\n    }\n    \n    @IBAction func changedOpacity(_ slider: UISlider) {\n        drawView.brush.opacity = CGFloat(slider.value)\n        deactivateEraser()\n    }\n    \n    func activateEraser() {\n        drawView.brush.blendMode = .clear\n        eraserButton.tintColor = .red\n        eraserButton.setTitle(\"deactivate eraser\", for: .normal)\n    }\n    \n    func deactivateEraser() {\n        drawView.brush.blendMode = .normal\n        eraserButton.tintColor = self.view.tintColor\n        eraserButton.setTitle(\"activate eraser\", for: .normal)\n    }\n}\n\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1671B1561DE8CBA100ED5239 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1671B1551DE8CBA100ED5239 /* AppDelegate.swift */; };\n\t\t1671B1581DE8CBA100ED5239 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1671B1571DE8CBA100ED5239 /* ViewController.swift */; };\n\t\t1671B15B1DE8CBA100ED5239 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1671B1591DE8CBA100ED5239 /* Main.storyboard */; };\n\t\t1671B15D1DE8CBA100ED5239 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1671B15C1DE8CBA100ED5239 /* Assets.xcassets */; };\n\t\t1671B1601DE8CBA100ED5239 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1671B15E1DE8CBA100ED5239 /* LaunchScreen.storyboard */; };\n\t\t882DC28322202B8A00B03866 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882DC28222202B8A00B03866 /* Extensions.swift */; };\n\t\t88AF845922677ABC0070277F /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88AF845822677ABC0070277F /* Color.swift */; };\n\t\t94CEF9EF2168F8350036EF15 /* SwiftyDraw.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94CEF9ED2168F8350036EF15 /* SwiftyDraw.swift */; };\n\t\t94CEF9F02168F8350036EF15 /* Brush.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94CEF9EE2168F8350036EF15 /* Brush.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t1671B1521DE8CBA100ED5239 /* SwiftyDrawExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftyDrawExample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1671B1551DE8CBA100ED5239 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t1671B1571DE8CBA100ED5239 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\t1671B15A1DE8CBA100ED5239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t1671B15C1DE8CBA100ED5239 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t1671B15F1DE8CBA100ED5239 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t1671B1611DE8CBA100ED5239 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t882DC28222202B8A00B03866 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = \"<group>\"; };\n\t\t88AF845822677ABC0070277F /* Color.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = \"<group>\"; };\n\t\t94CEF9ED2168F8350036EF15 /* SwiftyDraw.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyDraw.swift; sourceTree = \"<group>\"; };\n\t\t94CEF9EE2168F8350036EF15 /* Brush.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Brush.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1671B14F1DE8CBA100ED5239 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t1671B1491DE8CBA100ED5239 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1671B1541DE8CBA100ED5239 /* SwiftyDrawExample */,\n\t\t\t\t94CEF9EC2168F8350036EF15 /* Source */,\n\t\t\t\t1671B1531DE8CBA100ED5239 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1671B1531DE8CBA100ED5239 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1671B1521DE8CBA100ED5239 /* SwiftyDrawExample.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1671B1541DE8CBA100ED5239 /* SwiftyDrawExample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1671B1551DE8CBA100ED5239 /* AppDelegate.swift */,\n\t\t\t\t1671B1571DE8CBA100ED5239 /* ViewController.swift */,\n\t\t\t\t882DC28222202B8A00B03866 /* Extensions.swift */,\n\t\t\t\t1671B1591DE8CBA100ED5239 /* Main.storyboard */,\n\t\t\t\t1671B15C1DE8CBA100ED5239 /* Assets.xcassets */,\n\t\t\t\t1671B15E1DE8CBA100ED5239 /* LaunchScreen.storyboard */,\n\t\t\t\t1671B1611DE8CBA100ED5239 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = SwiftyDrawExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t94CEF9EC2168F8350036EF15 /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t94CEF9ED2168F8350036EF15 /* SwiftyDraw.swift */,\n\t\t\t\t88AF845822677ABC0070277F /* Color.swift */,\n\t\t\t\t94CEF9EE2168F8350036EF15 /* Brush.swift */,\n\t\t\t);\n\t\t\tname = Source;\n\t\t\tpath = ../Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1671B1511DE8CBA100ED5239 /* SwiftyDrawExample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1671B1641DE8CBA100ED5239 /* Build configuration list for PBXNativeTarget \"SwiftyDrawExample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1671B14E1DE8CBA100ED5239 /* Sources */,\n\t\t\t\t1671B14F1DE8CBA100ED5239 /* Frameworks */,\n\t\t\t\t1671B1501DE8CBA100ED5239 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SwiftyDrawExample;\n\t\t\tproductName = SwiftyDrawExample;\n\t\t\tproductReference = 1671B1521DE8CBA100ED5239 /* SwiftyDrawExample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t1671B14A1DE8CBA100ED5239 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0810;\n\t\t\t\tLastUpgradeCheck = 1020;\n\t\t\t\tORGANIZATIONNAME = Walzy;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t1671B1511DE8CBA100ED5239 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.1;\n\t\t\t\t\t\tDevelopmentTeam = 578YR5HPG3;\n\t\t\t\t\t\tLastSwiftMigration = 1020;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 1671B14D1DE8CBA100ED5239 /* Build configuration list for PBXProject \"SwiftyDrawExample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 1671B1491DE8CBA100ED5239;\n\t\t\tproductRefGroup = 1671B1531DE8CBA100ED5239 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1671B1511DE8CBA100ED5239 /* SwiftyDrawExample */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1671B1501DE8CBA100ED5239 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1671B1601DE8CBA100ED5239 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t1671B15D1DE8CBA100ED5239 /* Assets.xcassets in Resources */,\n\t\t\t\t1671B15B1DE8CBA100ED5239 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1671B14E1DE8CBA100ED5239 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t94CEF9F02168F8350036EF15 /* Brush.swift in Sources */,\n\t\t\t\t882DC28322202B8A00B03866 /* Extensions.swift in Sources */,\n\t\t\t\t94CEF9EF2168F8350036EF15 /* SwiftyDraw.swift in Sources */,\n\t\t\t\t1671B1581DE8CBA100ED5239 /* ViewController.swift in Sources */,\n\t\t\t\t1671B1561DE8CBA100ED5239 /* AppDelegate.swift in Sources */,\n\t\t\t\t88AF845922677ABC0070277F /* Color.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t1671B1591DE8CBA100ED5239 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t1671B15A1DE8CBA100ED5239 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1671B15E1DE8CBA100ED5239 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t1671B15F1DE8CBA100ED5239 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1671B1621DE8CBA100ED5239 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVES = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.1;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1671B1631DE8CBA100ED5239 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVES = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.1;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1671B1651DE8CBA100ED5239 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = 578YR5HPG3;\n\t\t\t\tINFOPLIST_FILE = SwiftyDrawExample/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.linus-geffarth.SwiftyDrawExample\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1671B1661DE8CBA100ED5239 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = 578YR5HPG3;\n\t\t\t\tINFOPLIST_FILE = SwiftyDrawExample/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.linus-geffarth.SwiftyDrawExample\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1671B14D1DE8CBA100ED5239 /* Build configuration list for PBXProject \"SwiftyDrawExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1671B1621DE8CBA100ED5239 /* Debug */,\n\t\t\t\t1671B1631DE8CBA100ED5239 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1671B1641DE8CBA100ED5239 /* Build configuration list for PBXNativeTarget \"SwiftyDrawExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1671B1651DE8CBA100ED5239 /* Debug */,\n\t\t\t\t1671B1661DE8CBA100ED5239 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 1671B14A1DE8CBA100ED5239 /* Project object */;\n}\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:SwiftyDrawExample.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "SwiftyDrawExample/SwiftyDrawExample.xcodeproj/xcshareddata/xcschemes/SwiftyDrawExample.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"1671B1511DE8CBA100ED5239\"\n               BuildableName = \"SwiftyDrawExample.app\"\n               BlueprintName = \"SwiftyDrawExample\"\n               ReferencedContainer = \"container:SwiftyDrawExample.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1671B1511DE8CBA100ED5239\"\n            BuildableName = \"SwiftyDrawExample.app\"\n            BlueprintName = \"SwiftyDrawExample\"\n            ReferencedContainer = \"container:SwiftyDrawExample.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1671B1511DE8CBA100ED5239\"\n            BuildableName = \"SwiftyDrawExample.app\"\n            BlueprintName = \"SwiftyDrawExample\"\n            ReferencedContainer = \"container:SwiftyDrawExample.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n         <AdditionalOption\n            key = \"NSZombieEnabled\"\n            value = \"YES\"\n            isEnabled = \"YES\">\n         </AdditionalOption>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"1671B1511DE8CBA100ED5239\"\n            BuildableName = \"SwiftyDrawExample.app\"\n            BlueprintName = \"SwiftyDrawExample\"\n            ReferencedContainer = \"container:SwiftyDrawExample.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  }
]