[
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "\n## The following informations are requested in a bug report\n* A brief bug description.\n* Stack trace.\n* Integration method.`(manually/cocoapods/carthage)`\n* Full steps to reproduce.\n* Device modal and iOS version.  `e.g. iPhone 6s iOS9.1`\n* Xcode version.  `e.g. Xcode 8.1`\n* FSCalendar version. `e.g. FSCalenda 2.5.1`\n* Does this happen in the demo project? Which one? Or a link to another demo project.\n\n\n## 如果在使用过程中遇到问题，请提供以下信息以便于尽快将问题修复\n* 简单描述一下问题。\n* 控制台输出的堆栈跟踪（如果有的话）。\n* 安装方式. `如手动安装、cocoapods安装、或者通过carthage安装`。\n* 能够重现此问题的完整步骤。\n* 设备型号及版本。 `例如： iPhone6s iOS9.1`\n* 使用的Xcode版本。 `例如： Xcode8.1`\n* FSCalendar版本. `例如: FSCalendar 2.5.1`\n* 是否能在demo中重现，以及在哪个demo中重现？或者附加一个重现问题的demo链接。"
  },
  {
    "path": ".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*.idea\n.swiftpm/\n\n# Bundler\n.bundle\n\nPods/\nCarthage/Checkouts\nCarthage/Build\n\nfastlane/report.xml\nfastlane/screenshots\n\nIndex/\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: objective-c\nosx_image: xcode9\n\nscript:\n\n    - xcodebuild -project Example-Objc/FSCalendar.xcodeproj -sdk iphonesimulator -alltargets\n    - xcodebuild -project Example-Swift/FSCalendarSwiftExample.xcodeproj -sdk iphonesimulator -alltargets\n    - xcodebuild -project Example-TodayExtension/Example-TodayExtension.xcodeproj -sdk iphonesimulator -alltargets\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Change Log\n\n## [2.7.4](https://github.com/WenchaoD/FSCalendar/tree/2.7.4) (2017-03-15)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.7.3...2.7.4)\n\n**Closed issues:**\n\n- 自定义cell，快速滚动页面时候，可能出现崩溃 [\\#621](https://github.com/WenchaoD/FSCalendar/issues/621)\n- Incorrect NSDate returned [\\#613](https://github.com/WenchaoD/FSCalendar/issues/613)\n- Pan Gesture causing crashing [\\#612](https://github.com/WenchaoD/FSCalendar/issues/612)\n- 未检查代理是否实现了协议方法就调用，导致找不到方法 [\\#611](https://github.com/WenchaoD/FSCalendar/issues/611)\n- Is it possible to deselect the date in FScalendar other  than user's deselection? [\\#610](https://github.com/WenchaoD/FSCalendar/issues/610)\n- is it possible to select dates in the range in recent version of fscalender? [\\#609](https://github.com/WenchaoD/FSCalendar/issues/609)\n- CFBundleExecutable key [\\#607](https://github.com/WenchaoD/FSCalendar/issues/607)\n- FSCalendar crash most of the time when minimumDate & maximumDate is set Today and selectDate is also Today [\\#604](https://github.com/WenchaoD/FSCalendar/issues/604)\n- a [\\#603](https://github.com/WenchaoD/FSCalendar/issues/603)\n- Today date does not update after changing device date [\\#600](https://github.com/WenchaoD/FSCalendar/issues/600)\n- 外观修改 [\\#599](https://github.com/WenchaoD/FSCalendar/issues/599)\n- Reloading of calendar view crashing app. [\\#597](https://github.com/WenchaoD/FSCalendar/issues/597)\n\n## [2.7.3](https://github.com/WenchaoD/FSCalendar/tree/2.7.3) (2017-03-03)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.7.2...2.7.3)\n\n**Closed issues:**\n\n- is there a faster way if i want to go to a specific year [\\#591](https://github.com/WenchaoD/FSCalendar/issues/591)\n- Reload issue in FSCalendar [\\#587](https://github.com/WenchaoD/FSCalendar/issues/587)\n- Calendar crashes when minimumDate & maximumDate is set [\\#575](https://github.com/WenchaoD/FSCalendar/issues/575)\n- disable some date [\\#561](https://github.com/WenchaoD/FSCalendar/issues/561)\n- SwiftExample app: First row of days starts with the last week of the last month in some cases [\\#548](https://github.com/WenchaoD/FSCalendar/issues/548)\n- 预给了日期范围后，重值日期范围有问题 [\\#545](https://github.com/WenchaoD/FSCalendar/issues/545)\n- 您好大神，问您一下关于headerTitle的问题 [\\#536](https://github.com/WenchaoD/FSCalendar/issues/536)\n- Accessibility / VoiceOver reading order should be left to right \\(or numeric order\\), not top to bottom [\\#466](https://github.com/WenchaoD/FSCalendar/issues/466)\n\n**Merged pull requests:**\n\n- Make selectedDate nullable [\\#581](https://github.com/WenchaoD/FSCalendar/pull/581) ([roark31337](https://github.com/roark31337))\n\n## [2.7.2](https://github.com/WenchaoD/FSCalendar/tree/2.7.2) (2017-02-16)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.7.1...2.7.2)\n\n**Closed issues:**\n\n- App crashing when implement delegate methods [\\#590](https://github.com/WenchaoD/FSCalendar/issues/590)\n- Calendar only showing Sundays [\\#589](https://github.com/WenchaoD/FSCalendar/issues/589)\n- 你好,请问下如何自定义Header? [\\#588](https://github.com/WenchaoD/FSCalendar/issues/588)\n- Calendar not reloading min/max dates when calling reload data.  [\\#585](https://github.com/WenchaoD/FSCalendar/issues/585)\n- Incorrect date gets selected on using the default select method [\\#580](https://github.com/WenchaoD/FSCalendar/issues/580)\n- 日历底部线条怎么隐藏？ [\\#579](https://github.com/WenchaoD/FSCalendar/issues/579)\n- Weird crash [\\#574](https://github.com/WenchaoD/FSCalendar/issues/574)\n- Scroll direction changes from horizontal to vertical when changing from week view to month view using gestures [\\#573](https://github.com/WenchaoD/FSCalendar/issues/573)\n- Use of undeclared type 'FSCalendarMonthPosition'  [\\#568](https://github.com/WenchaoD/FSCalendar/issues/568)\n- 重用性  [\\#562](https://github.com/WenchaoD/FSCalendar/issues/562)\n- 你好！我怎么修改头部的日期显示的格式呢？另外我怎么修改底部线条的隐藏与否呢？ [\\#556](https://github.com/WenchaoD/FSCalendar/issues/556)\n- Version 2.7.0 is bugged [\\#549](https://github.com/WenchaoD/FSCalendar/issues/549)\n- Interface BuilderDesignables build failed [\\#543](https://github.com/WenchaoD/FSCalendar/issues/543)\n- error: IB Designables: Failed to update auto layout status: The agent crashed [\\#538](https://github.com/WenchaoD/FSCalendar/issues/538)\n- Any way to increase the size of event indicator? [\\#525](https://github.com/WenchaoD/FSCalendar/issues/525)\n- The week scope is not reset when returning to week view from a partial drag [\\#473](https://github.com/WenchaoD/FSCalendar/issues/473)\n\n## [2.7.1](https://github.com/WenchaoD/FSCalendar/tree/2.7.1) (2017-02-02)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.7.0...2.7.1)\n\n**Closed issues:**\n\n- Calendar showing previous month for current page, but current page in stack has the correct month. [\\#566](https://github.com/WenchaoD/FSCalendar/issues/566)\n- Storyboard not update interface when change Attributes Inspector [\\#564](https://github.com/WenchaoD/FSCalendar/issues/564)\n- hello , first thing  this project is awesome ,, but i have on issue . [\\#560](https://github.com/WenchaoD/FSCalendar/issues/560)\n- Vertical Line [\\#557](https://github.com/WenchaoD/FSCalendar/issues/557)\n- 你好 我想请问有没有办法把日期和星期显示强制设置成英文 [\\#552](https://github.com/WenchaoD/FSCalendar/issues/552)\n- h bomb [\\#550](https://github.com/WenchaoD/FSCalendar/issues/550)\n- 展示bug，31天的日期只展示到28号 [\\#547](https://github.com/WenchaoD/FSCalendar/issues/547)\n- SwiftExample app does not support multitasking [\\#546](https://github.com/WenchaoD/FSCalendar/issues/546)\n- Calendar disrupts on orientation change [\\#468](https://github.com/WenchaoD/FSCalendar/issues/468)\n\n**Merged pull requests:**\n\n- default values in reloadData method [\\#570](https://github.com/WenchaoD/FSCalendar/pull/570) ([mastohhh](https://github.com/mastohhh))\n\n## [2.7.0](https://github.com/WenchaoD/FSCalendar/tree/2.7.0) (2017-01-17)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.6.0...2.7.0)\n\n**Implemented enhancements:**\n\n- 使用指导 [\\#496](https://github.com/WenchaoD/FSCalendar/issues/496)\n\n**Closed issues:**\n\n- Pod version \\(2.6.0\\) crashes on handleScopeGesture [\\#540](https://github.com/WenchaoD/FSCalendar/issues/540)\n- 大神你好想请教下关于点击灰色区域日期的问题 [\\#535](https://github.com/WenchaoD/FSCalendar/issues/535)\n- 您好，我用您这个框架  用pod管理导入的库为什么和下的demo，版本不一样呢，用pod管理的版本是1.7.2，有好多属性是你的demo中有，但是我导入的里面就没有那些属性呢 [\\#534](https://github.com/WenchaoD/FSCalendar/issues/534)\n- 在 Xcode8.2 运行，用 xib 拖进去 view 设置类为FSCalendar看不到 [\\#533](https://github.com/WenchaoD/FSCalendar/issues/533)\n- Getting previous date in method didSelect date [\\#531](https://github.com/WenchaoD/FSCalendar/issues/531)\n- -minimumDateForCalendar: bug [\\#529](https://github.com/WenchaoD/FSCalendar/issues/529)\n- 使用问题 [\\#527](https://github.com/WenchaoD/FSCalendar/issues/527)\n- When I select a day the event indicator disappear, why? How to solve? [\\#526](https://github.com/WenchaoD/FSCalendar/issues/526)\n- Next and previous button on header title  [\\#523](https://github.com/WenchaoD/FSCalendar/issues/523)\n- Feature Request: event on consecutive days [\\#522](https://github.com/WenchaoD/FSCalendar/issues/522)\n- Delegate / DataSource || Race Condition ? [\\#518](https://github.com/WenchaoD/FSCalendar/issues/518)\n- Request: A way to add more than one subtitleFor [\\#517](https://github.com/WenchaoD/FSCalendar/issues/517)\n- Can't change calendar today date [\\#514](https://github.com/WenchaoD/FSCalendar/issues/514)\n- 如何获知是向左还是向右滑动？ [\\#513](https://github.com/WenchaoD/FSCalendar/issues/513)\n- centerForDate [\\#512](https://github.com/WenchaoD/FSCalendar/issues/512)\n- Interface builder - FSCalendar - Designables - Build Failed [\\#511](https://github.com/WenchaoD/FSCalendar/issues/511)\n- Different color for event dots [\\#509](https://github.com/WenchaoD/FSCalendar/issues/509)\n- How to get Current year, current month & number of days in a month ? [\\#508](https://github.com/WenchaoD/FSCalendar/issues/508)\n- How to change header background color? [\\#507](https://github.com/WenchaoD/FSCalendar/issues/507)\n- Is there a way to set color of disabled day [\\#504](https://github.com/WenchaoD/FSCalendar/issues/504)\n- How do you get the visible date range in calendar [\\#503](https://github.com/WenchaoD/FSCalendar/issues/503)\n- Change firstWeekday shows wrong day [\\#502](https://github.com/WenchaoD/FSCalendar/issues/502)\n- Custom cell can't be casted when using maximumDate [\\#497](https://github.com/WenchaoD/FSCalendar/issues/497)\n- minimumDateForCalendar not working [\\#495](https://github.com/WenchaoD/FSCalendar/issues/495)\n- 3D Touch Peek and Pop [\\#493](https://github.com/WenchaoD/FSCalendar/issues/493)\n- Date number height is shortened [\\#486](https://github.com/WenchaoD/FSCalendar/issues/486)\n- cell和cell之间会有一个间隔 [\\#483](https://github.com/WenchaoD/FSCalendar/issues/483)\n\n**Merged pull requests:**\n\n- Removing if-clause that makes impossible to change today date. [\\#515](https://github.com/WenchaoD/FSCalendar/pull/515) ([kallahir](https://github.com/kallahir))\n\n## [2.6.0](https://github.com/WenchaoD/FSCalendar/tree/2.6.0) (2016-11-29)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.5.1...2.6.0)\n\n**Closed issues:**\n\n- How to make Next and previous months Button visible ? [\\#500](https://github.com/WenchaoD/FSCalendar/issues/500)\n- How to hide the column and row separator in FSCalendar   [\\#499](https://github.com/WenchaoD/FSCalendar/issues/499)\n\n## [2.5.1](https://github.com/WenchaoD/FSCalendar/tree/2.5.1) (2016-11-23)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.5.0...2.5.1)\n\n**Implemented enhancements:**\n\n- Create A 3D Touch when date pressed in calender [\\#449](https://github.com/WenchaoD/FSCalendar/issues/449)\n- 期望新增手势拖拽进行选择时间段功能。。。 [\\#435](https://github.com/WenchaoD/FSCalendar/issues/435)\n\n**Closed issues:**\n\n- minimumDateForCalendar [\\#494](https://github.com/WenchaoD/FSCalendar/issues/494)\n- Monster warlord [\\#491](https://github.com/WenchaoD/FSCalendar/issues/491)\n- Monster warlord [\\#490](https://github.com/WenchaoD/FSCalendar/issues/490)\n- Monster warlord [\\#489](https://github.com/WenchaoD/FSCalendar/issues/489)\n- In week view some dates are missing [\\#488](https://github.com/WenchaoD/FSCalendar/issues/488)\n- Space between month tag and days, after touching the calendar the days move up to it's right place [\\#485](https://github.com/WenchaoD/FSCalendar/issues/485)\n- Custom cell can't be casted when using minimumDate/maximumDate [\\#484](https://github.com/WenchaoD/FSCalendar/issues/484)\n- Update library issue [\\#482](https://github.com/WenchaoD/FSCalendar/issues/482)\n- Set minimumDate and maximumDate dynamic [\\#481](https://github.com/WenchaoD/FSCalendar/issues/481)\n- Today is already selected.How to disable today showing selected. [\\#480](https://github.com/WenchaoD/FSCalendar/issues/480)\n- charthage build error: no shared framework schemes [\\#479](https://github.com/WenchaoD/FSCalendar/issues/479)\n- Set Week Days Label IN Upper Case [\\#478](https://github.com/WenchaoD/FSCalendar/issues/478)\n- Change Month causes select two dates at same view. [\\#477](https://github.com/WenchaoD/FSCalendar/issues/477)\n- Crashed on iphone 5 and ios 10 [\\#476](https://github.com/WenchaoD/FSCalendar/issues/476)\n- Calling `reloadData\\(\\)` in `didSelectDate\\(\\)` causes circle image to flicker. [\\#475](https://github.com/WenchaoD/FSCalendar/issues/475)\n- Is it possible to display 2 weeks instead of 1 week? [\\#470](https://github.com/WenchaoD/FSCalendar/issues/470)\n- Calendar orientation is not working properly in some projects [\\#464](https://github.com/WenchaoD/FSCalendar/issues/464)\n\n## [2.5.0](https://github.com/WenchaoD/FSCalendar/tree/2.5.0) (2016-11-09)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.4.0...2.5.0)\n\n**Implemented enhancements:**\n\n- text color of Sat and Sun  [\\#437](https://github.com/WenchaoD/FSCalendar/issues/437)\n- Is it possible create Calendar View like Activity app [\\#366](https://github.com/WenchaoD/FSCalendar/issues/366)\n- Disable placeholders selection backgoundColor in date range between months [\\#351](https://github.com/WenchaoD/FSCalendar/issues/351)\n- How to remove events of next month showing in current month calender [\\#328](https://github.com/WenchaoD/FSCalendar/issues/328)\n- Different font for selected and current date [\\#281](https://github.com/WenchaoD/FSCalendar/issues/281)\n- How to put line on row of week ? [\\#185](https://github.com/WenchaoD/FSCalendar/issues/185)\n\n**Closed issues:**\n\n- White Color Border Showing In Top and Bottom Of View In Which FSCalender Attached [\\#471](https://github.com/WenchaoD/FSCalendar/issues/471)\n- how to add image in multiple date when view load? [\\#469](https://github.com/WenchaoD/FSCalendar/issues/469)\n- seletectDate does not call didSelectDate [\\#467](https://github.com/WenchaoD/FSCalendar/issues/467)\n- minimumDateForCalendar crash @ 2.4.0 [\\#465](https://github.com/WenchaoD/FSCalendar/issues/465)\n- Two days can be selected after first or second Saturday is first selected [\\#463](https://github.com/WenchaoD/FSCalendar/issues/463)\n- Overlaping events [\\#462](https://github.com/WenchaoD/FSCalendar/issues/462)\n- Error in Selected date [\\#459](https://github.com/WenchaoD/FSCalendar/issues/459)\n- Calendar Date Range background Between today date and selected end date [\\#458](https://github.com/WenchaoD/FSCalendar/issues/458)\n- Month Scrolling [\\#457](https://github.com/WenchaoD/FSCalendar/issues/457)\n- Fatal Exception:  Crash on iPhone 5 c [\\#456](https://github.com/WenchaoD/FSCalendar/issues/456)\n- How to stop scrolling animation ? [\\#455](https://github.com/WenchaoD/FSCalendar/issues/455)\n- How to prevent calendar to switch from month view to week view? [\\#454](https://github.com/WenchaoD/FSCalendar/issues/454)\n- Appearance Delegate not called [\\#452](https://github.com/WenchaoD/FSCalendar/issues/452)\n- Have a migration project to swift3 plan? [\\#451](https://github.com/WenchaoD/FSCalendar/issues/451)\n- Fatal Exception: FSCalendar date out of bounds exception. [\\#450](https://github.com/WenchaoD/FSCalendar/issues/450)\n- Rename FSCalendarConstance to FSCalendarConstants [\\#448](https://github.com/WenchaoD/FSCalendar/issues/448)\n- Header disappearing when max month is reached [\\#447](https://github.com/WenchaoD/FSCalendar/issues/447)\n- Is \"Imageoffset\" property has some problem? [\\#445](https://github.com/WenchaoD/FSCalendar/issues/445)\n-  Property 'prefetchingEnabled' not found on object of type 'FSCalendarCollectionView \\*' [\\#444](https://github.com/WenchaoD/FSCalendar/issues/444)\n- Image offset ignored in week scope [\\#443](https://github.com/WenchaoD/FSCalendar/issues/443)\n- minimumDate iOS10 [\\#432](https://github.com/WenchaoD/FSCalendar/issues/432)\n- \"Invisible sticky header\" problem on calendar with vertical scrolling [\\#431](https://github.com/WenchaoD/FSCalendar/issues/431)\n- Delegate method calendar eventColorForDate not called. [\\#423](https://github.com/WenchaoD/FSCalendar/issues/423)\n- force reload calendar [\\#326](https://github.com/WenchaoD/FSCalendar/issues/326)\n\n## [2.4.0](https://github.com/WenchaoD/FSCalendar/tree/2.4.0) (2016-10-12)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.3.3...2.4.0)\n\n**Implemented enhancements:**\n\n- UI小建议 [\\#410](https://github.com/WenchaoD/FSCalendar/issues/410)\n- Cell selection style  [\\#370](https://github.com/WenchaoD/FSCalendar/issues/370)\n\n**Closed issues:**\n\n- Scope change animating from center [\\#446](https://github.com/WenchaoD/FSCalendar/issues/446)\n- How to have events with different color indicator on calendar? [\\#442](https://github.com/WenchaoD/FSCalendar/issues/442)\n- Can I have different background color for each selected date? [\\#441](https://github.com/WenchaoD/FSCalendar/issues/441)\n- How can i get current time with selected date? [\\#440](https://github.com/WenchaoD/FSCalendar/issues/440)\n- How to set day as \"selected\"? [\\#439](https://github.com/WenchaoD/FSCalendar/issues/439)\n- Todays date shows yesterday when selected. [\\#438](https://github.com/WenchaoD/FSCalendar/issues/438)\n- want to show date from first day of the month  [\\#433](https://github.com/WenchaoD/FSCalendar/issues/433)\n- headerTitleFont appearance doesn't seem to be working [\\#430](https://github.com/WenchaoD/FSCalendar/issues/430)\n- When view load set a anydate as selected [\\#429](https://github.com/WenchaoD/FSCalendar/issues/429)\n- Dynamic Today Extension Example ui issue in iOS 10 [\\#427](https://github.com/WenchaoD/FSCalendar/issues/427)\n- Show two months [\\#426](https://github.com/WenchaoD/FSCalendar/issues/426)\n- is it fully compatible with swift 3 ? [\\#425](https://github.com/WenchaoD/FSCalendar/issues/425)\n- Timezone support [\\#424](https://github.com/WenchaoD/FSCalendar/issues/424)\n- Hi, [\\#419](https://github.com/WenchaoD/FSCalendar/issues/419)\n- Today is always 1 day ahead [\\#417](https://github.com/WenchaoD/FSCalendar/issues/417)\n- timezone issue @ FSCalendar ~\\>2.3.1 [\\#416](https://github.com/WenchaoD/FSCalendar/issues/416)\n\n## [2.3.3](https://github.com/WenchaoD/FSCalendar/tree/2.3.3) (2016-09-10)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.3.2...2.3.3)\n\n**Closed issues:**\n\n- Any way to hide on vertical mode the same days at next month? [\\#415](https://github.com/WenchaoD/FSCalendar/issues/415)\n- Put UIImageView on particular date. [\\#414](https://github.com/WenchaoD/FSCalendar/issues/414)\n- 自定义日历高度 [\\#412](https://github.com/WenchaoD/FSCalendar/issues/412)\n- Rotat issue [\\#408](https://github.com/WenchaoD/FSCalendar/issues/408)\n- 在滑动的时候可能会出现 CGRectGetHeight\\(self.pendingAttributes.targetBounds\\) == CGRectGetHeight\\(self.pendingAttributes.sourceBounds\\) [\\#405](https://github.com/WenchaoD/FSCalendar/issues/405)\n- 在真机中,当展示的是周的时候. 两个手指重复向上滑动的时候会引起界面异常 [\\#403](https://github.com/WenchaoD/FSCalendar/issues/403)\n- Today in Swift [\\#402](https://github.com/WenchaoD/FSCalendar/issues/402)\n\n## [2.3.2](https://github.com/WenchaoD/FSCalendar/tree/2.3.2) (2016-09-10)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.3.1...2.3.2)\n\n**Closed issues:**\n\n- Missing data on iOS 9 [\\#413](https://github.com/WenchaoD/FSCalendar/issues/413)\n- delay 1 day [\\#411](https://github.com/WenchaoD/FSCalendar/issues/411)\n- TitleDefaultColorForDate Delegate Quickly called before web service Implementing and Want to Change colors for the dates from array?  [\\#409](https://github.com/WenchaoD/FSCalendar/issues/409)\n- Error with min version [\\#407](https://github.com/WenchaoD/FSCalendar/issues/407)\n- FSCalendarScope is a C11 feature [\\#406](https://github.com/WenchaoD/FSCalendar/issues/406)\n- How to determine current calendar height [\\#404](https://github.com/WenchaoD/FSCalendar/issues/404)\n- How to set the height of row? [\\#401](https://github.com/WenchaoD/FSCalendar/issues/401)\n- How i can repeat event? like every day, month, year? [\\#400](https://github.com/WenchaoD/FSCalendar/issues/400)\n- How I can select all sunday with \"selectDate\"? [\\#399](https://github.com/WenchaoD/FSCalendar/issues/399)\n- 当我选择7月1号. 然后收起日历.变成只显示周的时候. 月份会变成6月 [\\#398](https://github.com/WenchaoD/FSCalendar/issues/398)\n- Changing event color crash [\\#392](https://github.com/WenchaoD/FSCalendar/issues/392)\n- Can you pass consistent dates to the date parameters in the delegate methods? [\\#386](https://github.com/WenchaoD/FSCalendar/issues/386)\n- 三个自定义需求请问如何实现？ [\\#371](https://github.com/WenchaoD/FSCalendar/issues/371)\n\n## [2.3.1](https://github.com/WenchaoD/FSCalendar/tree/2.3.1) (2016-08-29)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.3.0...2.3.1)\n\n**Closed issues:**\n\n- Can we add dot with some text in Calendar view & how to reload calendar view ? [\\#397](https://github.com/WenchaoD/FSCalendar/issues/397)\n- 有没有出 Swift 版的计划 [\\#396](https://github.com/WenchaoD/FSCalendar/issues/396)\n- Height issue with XCode 8 iOS 10 Swift 2.x [\\#395](https://github.com/WenchaoD/FSCalendar/issues/395)\n- \\[bug\\] reloadData wil not reload header title  [\\#394](https://github.com/WenchaoD/FSCalendar/issues/394)\n- 日期选择的错误 [\\#390](https://github.com/WenchaoD/FSCalendar/issues/390)\n- Collapse the calander [\\#389](https://github.com/WenchaoD/FSCalendar/issues/389)\n-  \\[calendar reloadData\\]  后如何不回自动滚回当前日期? [\\#388](https://github.com/WenchaoD/FSCalendar/issues/388)\n- 如何做到,多选,只能选择第一个选择日期后的5天? [\\#387](https://github.com/WenchaoD/FSCalendar/issues/387)\n- Full day circle as event indicator [\\#383](https://github.com/WenchaoD/FSCalendar/issues/383)\n- 有支持农历吗 [\\#382](https://github.com/WenchaoD/FSCalendar/issues/382)\n- Calendar layout is broken [\\#375](https://github.com/WenchaoD/FSCalendar/issues/375)\n\n**Merged pull requests:**\n\n- Merge branch 'development' [\\#384](https://github.com/WenchaoD/FSCalendar/pull/384) ([maplestoryLWG](https://github.com/maplestoryLWG))\n\n## [2.3.0](https://github.com/WenchaoD/FSCalendar/tree/2.3.0) (2016-08-11)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.2.0...2.3.0)\n\n**Closed issues:**\n\n- didSelectDate should get called if i call selectDate\\(\\) [\\#381](https://github.com/WenchaoD/FSCalendar/issues/381)\n- day circle radius is small [\\#380](https://github.com/WenchaoD/FSCalendar/issues/380)\n- Error in future. [\\#379](https://github.com/WenchaoD/FSCalendar/issues/379)\n- Delegate call when scope changes [\\#378](https://github.com/WenchaoD/FSCalendar/issues/378)\n- 给日历添加事件后，如果通过点击下个的日期切换月份并且让日历变成按周显示的模式，点中的日期如果添加了事件，程序会出现崩溃的情况！ [\\#377](https://github.com/WenchaoD/FSCalendar/issues/377)\n- Enable gestures to change calendar scope. [\\#374](https://github.com/WenchaoD/FSCalendar/issues/374)\n- 不停的切换月和周 两种显示模式，上面显示的月份一直在减小 [\\#373](https://github.com/WenchaoD/FSCalendar/issues/373)\n- Is it possible to show only the days of the current month? [\\#372](https://github.com/WenchaoD/FSCalendar/issues/372)\n- Presenting the calendar in a modal view controller  [\\#369](https://github.com/WenchaoD/FSCalendar/issues/369)\n- Is it possible to get calendar cell size ? [\\#368](https://github.com/WenchaoD/FSCalendar/issues/368)\n- After updating to 2.2.0, I can't call the methods in the NSDate category anymore. Can you add them back? [\\#365](https://github.com/WenchaoD/FSCalendar/issues/365)\n- Change position of event dot [\\#364](https://github.com/WenchaoD/FSCalendar/issues/364)\n- There is something wrong with the interface shows when I reload calendar view. [\\#363](https://github.com/WenchaoD/FSCalendar/issues/363)\n- How can we remove Background color for specific dates? [\\#362](https://github.com/WenchaoD/FSCalendar/issues/362)\n- itouch 6黑屏无法进入主界面 [\\#361](https://github.com/WenchaoD/FSCalendar/issues/361)\n- I want to remove Next Month Event Color [\\#360](https://github.com/WenchaoD/FSCalendar/issues/360)\n- Is it possible to stop scroll in direction of future month? [\\#359](https://github.com/WenchaoD/FSCalendar/issues/359)\n- Border width size is different for some rows. [\\#358](https://github.com/WenchaoD/FSCalendar/issues/358)\n-  disable tap gesture on placeholder [\\#357](https://github.com/WenchaoD/FSCalendar/issues/357)\n- Can you make the size of the dot proportionate to the size of the collection view cell? [\\#356](https://github.com/WenchaoD/FSCalendar/issues/356)\n- Please See At My Requirement - Change Event Background Color [\\#355](https://github.com/WenchaoD/FSCalendar/issues/355)\n- Has Event For Date is not call - How can i recall this method [\\#354](https://github.com/WenchaoD/FSCalendar/issues/354)\n- Multiple Selection Colours? [\\#353](https://github.com/WenchaoD/FSCalendar/issues/353)\n- Layout is not working \\(Swift 2.2, Xcode 7.3\\) [\\#352](https://github.com/WenchaoD/FSCalendar/issues/352)\n- Adding event to a day [\\#350](https://github.com/WenchaoD/FSCalendar/issues/350)\n- 能否增加一个UI体验 [\\#349](https://github.com/WenchaoD/FSCalendar/issues/349)\n- Event indicator is sometimes not displayed. [\\#340](https://github.com/WenchaoD/FSCalendar/issues/340)\n- 关于日历maxdate的问题 [\\#339](https://github.com/WenchaoD/FSCalendar/issues/339)\n- Year is not shown on every month in the title. [\\#338](https://github.com/WenchaoD/FSCalendar/issues/338)\n- How to disable selectColor but not \"didSelectFunction\" [\\#336](https://github.com/WenchaoD/FSCalendar/issues/336)\n- User selection of placeholder dates should be optional [\\#334](https://github.com/WenchaoD/FSCalendar/issues/334)\n- Changing scope with an UISwipeGestureRecognizer causes currentPage bug [\\#333](https://github.com/WenchaoD/FSCalendar/issues/333)\n- Number of rows for current month fixed at 6 when showing placeholders [\\#331](https://github.com/WenchaoD/FSCalendar/issues/331)\n- How can I put events in day after my array/dictionary is populated. [\\#329](https://github.com/WenchaoD/FSCalendar/issues/329)\n- Selecting of day after the day user selected [\\#327](https://github.com/WenchaoD/FSCalendar/issues/327)\n- adding bridge header in swift [\\#325](https://github.com/WenchaoD/FSCalendar/issues/325)\n- Change Weekday Text Color [\\#324](https://github.com/WenchaoD/FSCalendar/issues/324)\n- Add an option to stick the weekDays to the top [\\#323](https://github.com/WenchaoD/FSCalendar/issues/323)\n- Hi, switch month and week, there will be gray background Flashing [\\#317](https://github.com/WenchaoD/FSCalendar/issues/317)\n- Change placeholder [\\#316](https://github.com/WenchaoD/FSCalendar/issues/316)\n- 请问可以实现日历跟随UITableView的滚动，实现scopeHandle滑动时切换月和周的效果吗？ [\\#315](https://github.com/WenchaoD/FSCalendar/issues/315)\n- 设置了字体以后出现了下面的情况 [\\#314](https://github.com/WenchaoD/FSCalendar/issues/314)\n- Default scope week. [\\#313](https://github.com/WenchaoD/FSCalendar/issues/313)\n- Is there a way of minimizing the distance between the event indicator and the day of the month? [\\#309](https://github.com/WenchaoD/FSCalendar/issues/309)\n- Disable previous dates in same month with today [\\#302](https://github.com/WenchaoD/FSCalendar/issues/302)\n- hides placeholder [\\#229](https://github.com/WenchaoD/FSCalendar/issues/229)\n- Post appearance image/itunes address here [\\#2](https://github.com/WenchaoD/FSCalendar/issues/2)\n\n## [2.2.0](https://github.com/WenchaoD/FSCalendar/tree/2.2.0) (2016-06-29)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.1.1...2.2.0)\n\n**Closed issues:**\n\n- Unable to display Date 1 as selected [\\#348](https://github.com/WenchaoD/FSCalendar/issues/348)\n- every month day is wrong [\\#347](https://github.com/WenchaoD/FSCalendar/issues/347)\n- 开启showsScopeHandle，会crash [\\#346](https://github.com/WenchaoD/FSCalendar/issues/346)\n- how to current calendar page month and year [\\#345](https://github.com/WenchaoD/FSCalendar/issues/345)\n- delegate method call in last [\\#344](https://github.com/WenchaoD/FSCalendar/issues/344)\n- How to scroll to the average date in selected range? [\\#343](https://github.com/WenchaoD/FSCalendar/issues/343)\n- 如何设置日期区间？ [\\#342](https://github.com/WenchaoD/FSCalendar/issues/342)\n- How to highlight dates with events? [\\#341](https://github.com/WenchaoD/FSCalendar/issues/341)\n- Included example project: animation problem when switching months [\\#335](https://github.com/WenchaoD/FSCalendar/issues/335)\n- How to put all date cells to have background color with border Lines? [\\#332](https://github.com/WenchaoD/FSCalendar/issues/332)\n- Using other way to change the select day [\\#322](https://github.com/WenchaoD/FSCalendar/issues/322)\n- Dates selection state issue. [\\#321](https://github.com/WenchaoD/FSCalendar/issues/321)\n- Set Color For Particular Day of Month [\\#320](https://github.com/WenchaoD/FSCalendar/issues/320)\n- Solved [\\#319](https://github.com/WenchaoD/FSCalendar/issues/319)\n- Item day background color [\\#318](https://github.com/WenchaoD/FSCalendar/issues/318)\n- pod 倒入的2.1.1版本和工程中最新版本不一样 [\\#312](https://github.com/WenchaoD/FSCalendar/issues/312)\n- Change next and previous month programatically. [\\#311](https://github.com/WenchaoD/FSCalendar/issues/311)\n- Scope handle starts with week mode [\\#310](https://github.com/WenchaoD/FSCalendar/issues/310)\n- 使用scope 设置完成之后，不停的滚动，人为调用 setScope 会造成日期混乱 [\\#308](https://github.com/WenchaoD/FSCalendar/issues/308)\n- 能不能默认就是week模式的 [\\#307](https://github.com/WenchaoD/FSCalendar/issues/307)\n- 默认启动scrop week [\\#305](https://github.com/WenchaoD/FSCalendar/issues/305)\n- 关于当前日期显示\"今天\"两个字的问题 [\\#304](https://github.com/WenchaoD/FSCalendar/issues/304)\n- Change the colour of dates dynamically. [\\#303](https://github.com/WenchaoD/FSCalendar/issues/303)\n- Event color indicator 'leaking' default color [\\#301](https://github.com/WenchaoD/FSCalendar/issues/301)\n- some FSCalendarDataSource methods not called [\\#299](https://github.com/WenchaoD/FSCalendar/issues/299)\n- Handling the scope manually with a finger slide [\\#298](https://github.com/WenchaoD/FSCalendar/issues/298)\n- Add Table Below Calandar [\\#297](https://github.com/WenchaoD/FSCalendar/issues/297)\n- Today should be nullable, to set it to nil in Swift [\\#296](https://github.com/WenchaoD/FSCalendar/issues/296)\n- 月与周切换多次，导致异常问题 [\\#295](https://github.com/WenchaoD/FSCalendar/issues/295)\n- 关于日历中当前日期标题文字的问题 [\\#294](https://github.com/WenchaoD/FSCalendar/issues/294)\n-  关于ScopeHandle新功能，月与周切换多次后，时间回到1980年的问题！ [\\#293](https://github.com/WenchaoD/FSCalendar/issues/293)\n- dot event remove after swiping the calendar [\\#292](https://github.com/WenchaoD/FSCalendar/issues/292)\n- 设置那个隐藏占位时间不能运行很好\\(demo也是如此\\) [\\#291](https://github.com/WenchaoD/FSCalendar/issues/291)\n- numberOfEventsForDate gets called multiple times.  [\\#290](https://github.com/WenchaoD/FSCalendar/issues/290)\n- In some examples layout needs to be updated after rotation [\\#289](https://github.com/WenchaoD/FSCalendar/issues/289)\n- Split View not supported [\\#288](https://github.com/WenchaoD/FSCalendar/issues/288)\n- fullScreen 设置Scope 问题 [\\#287](https://github.com/WenchaoD/FSCalendar/issues/287)\n- custom images for date are off-center after orientation change [\\#286](https://github.com/WenchaoD/FSCalendar/issues/286)\n- Implementing feature \"EveryDay\" when creating an event for a date.  [\\#285](https://github.com/WenchaoD/FSCalendar/issues/285)\n- Is it possible to toggle between FSCalendarScopeMonth and FSCalendarScopeWeek using finger? [\\#284](https://github.com/WenchaoD/FSCalendar/issues/284)\n- Delegate method calendar:didDeselectDate: not called [\\#283](https://github.com/WenchaoD/FSCalendar/issues/283)\n- Setting paging enabled in IB causes Xcode to freeze [\\#282](https://github.com/WenchaoD/FSCalendar/issues/282)\n- Selected date error [\\#280](https://github.com/WenchaoD/FSCalendar/issues/280)\n- Can i create combine Gregorian and Islamic\\(Hijri\\) calendar? [\\#279](https://github.com/WenchaoD/FSCalendar/issues/279)\n- Dot with count in the calendar view [\\#278](https://github.com/WenchaoD/FSCalendar/issues/278)\n- How to set delegateAppearance in swift? [\\#277](https://github.com/WenchaoD/FSCalendar/issues/277)\n- Change particular date colour & add events on particular dates . [\\#275](https://github.com/WenchaoD/FSCalendar/issues/275)\n- Can you set the background of a single day? [\\#270](https://github.com/WenchaoD/FSCalendar/issues/270)\n- selected date as Nullable [\\#264](https://github.com/WenchaoD/FSCalendar/issues/264)\n- calendar height increases when I change from week view to month view.  [\\#263](https://github.com/WenchaoD/FSCalendar/issues/263)\n- Problem with showsPlaceholder [\\#257](https://github.com/WenchaoD/FSCalendar/issues/257)\n- Weekscope: change month scrollView only when month changes [\\#187](https://github.com/WenchaoD/FSCalendar/issues/187)\n- Scrolling so fast does not trigger calendarCurrentPageDidChange [\\#113](https://github.com/WenchaoD/FSCalendar/issues/113)\n\n**Merged pull requests:**\n\n- Fixes local variable shadow warnings when warning -Wshadow is enabled. [\\#337](https://github.com/WenchaoD/FSCalendar/pull/337) ([schaechtele](https://github.com/schaechtele))\n- Removing unnecessary import [\\#306](https://github.com/WenchaoD/FSCalendar/pull/306) ([yas375](https://github.com/yas375))\n\n## [2.1.1](https://github.com/WenchaoD/FSCalendar/tree/2.1.1) (2016-04-26)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.1.0...2.1.1)\n\n**Closed issues:**\n\n- How to add event on an array of dates in swift [\\#276](https://github.com/WenchaoD/FSCalendar/issues/276)\n- Is there a way to change the color of the line underneath the month? [\\#274](https://github.com/WenchaoD/FSCalendar/issues/274)\n- Don't allow date in the future to be selected. [\\#273](https://github.com/WenchaoD/FSCalendar/issues/273)\n- Multiple months in the same view? [\\#272](https://github.com/WenchaoD/FSCalendar/issues/272)\n- 请问如何将calendar的6行改为5行以及仿ios原生日历增加cell的height？ [\\#271](https://github.com/WenchaoD/FSCalendar/issues/271)\n- Calendar goes down when i return with de back button of the navigation controller [\\#269](https://github.com/WenchaoD/FSCalendar/issues/269)\n- Calendar is too short in week scope [\\#268](https://github.com/WenchaoD/FSCalendar/issues/268)\n- Once I select a date, I want to add a dot to show that date has an event [\\#267](https://github.com/WenchaoD/FSCalendar/issues/267)\n- Unknown class FSCalendar in Interface Builder file. [\\#266](https://github.com/WenchaoD/FSCalendar/issues/266)\n- Disable feature date [\\#265](https://github.com/WenchaoD/FSCalendar/issues/265)\n- 当前时间的颜色 [\\#262](https://github.com/WenchaoD/FSCalendar/issues/262)\n- Hiding header [\\#255](https://github.com/WenchaoD/FSCalendar/issues/255)\n- Change fill color for Unselected dates. [\\#254](https://github.com/WenchaoD/FSCalendar/issues/254)\n- How to Add Prev / Next button for swap month in FSCalendar [\\#252](https://github.com/WenchaoD/FSCalendar/issues/252)\n- How to do range selection in this calendar? [\\#249](https://github.com/WenchaoD/FSCalendar/issues/249)\n- FSCalendarDelegateAppearance placeholder color [\\#180](https://github.com/WenchaoD/FSCalendar/issues/180)\n- How to use custom background for selection and change the frame of FSCalendar [\\#151](https://github.com/WenchaoD/FSCalendar/issues/151)\n\n## [2.1.0](https://github.com/WenchaoD/FSCalendar/tree/2.1.0) (2016-04-11)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.0.1...2.1.0)\n\n**Closed issues:**\n\n- How To change Header Title \\(Aug 2016\\) Font and Font Size [\\#260](https://github.com/WenchaoD/FSCalendar/issues/260)\n- Weekdays Background Color Change. [\\#259](https://github.com/WenchaoD/FSCalendar/issues/259)\n- Calendar showing event date on every date. [\\#256](https://github.com/WenchaoD/FSCalendar/issues/256)\n- Can it set placeholder hidden? [\\#253](https://github.com/WenchaoD/FSCalendar/issues/253)\n- how to disabled backs dates in this calendar? [\\#251](https://github.com/WenchaoD/FSCalendar/issues/251)\n- Possible to provide minimum and maximum date for calendar? [\\#250](https://github.com/WenchaoD/FSCalendar/issues/250)\n- How does one achieve this look that is in your README.  [\\#248](https://github.com/WenchaoD/FSCalendar/issues/248)\n- Need to change FSCalendarHeaderCell titlelabel text [\\#247](https://github.com/WenchaoD/FSCalendar/issues/247)\n- calendarCurrentPageDidChange not showing correct Date [\\#246](https://github.com/WenchaoD/FSCalendar/issues/246)\n- Access Current Month [\\#245](https://github.com/WenchaoD/FSCalendar/issues/245)\n- Is it possible to change FSCalendar scope by vertical swipe gesture? [\\#244](https://github.com/WenchaoD/FSCalendar/issues/244)\n- Is it possible to change FSCalendar scope by vertical swipe gesture? [\\#243](https://github.com/WenchaoD/FSCalendar/issues/243)\n- How to increase the font size of the dates? [\\#242](https://github.com/WenchaoD/FSCalendar/issues/242)\n- what about lower case for week days and month? [\\#241](https://github.com/WenchaoD/FSCalendar/issues/241)\n- is it possible to add another shape as rectangle with rounded corners? [\\#240](https://github.com/WenchaoD/FSCalendar/issues/240)\n- is there a way to indicate days, which can't be selected, with regular selector shape of different color? [\\#239](https://github.com/WenchaoD/FSCalendar/issues/239)\n- calendarCurrentMonthDidChange doesn't work [\\#238](https://github.com/WenchaoD/FSCalendar/issues/238)\n\n**Merged pull requests:**\n\n- Fix for fillColor when dateIsToday [\\#261](https://github.com/WenchaoD/FSCalendar/pull/261) ([sochalewski](https://github.com/sochalewski))\n- fillColor delegate method for unselected dates \\(cells\\) [\\#258](https://github.com/WenchaoD/FSCalendar/pull/258) ([sochalewski](https://github.com/sochalewski))\n\n## [2.0.1](https://github.com/WenchaoD/FSCalendar/tree/2.0.1) (2016-03-26)\n[Full Changelog](https://github.com/WenchaoD/FSCalendar/compare/2.0.0...2.0.1)\n\n**Closed issues:**\n\n- issue with calendar.setScope\\(.Month, animated: true\\) [\\#237](https://github.com/WenchaoD/FSCalendar/issues/237)\n- how to prevent array of days from being selected? [\\#236](https://github.com/WenchaoD/FSCalendar/issues/236)\n- hides placeholder [\\#235](https://github.com/WenchaoD/FSCalendar/issues/235)\n- Date marker colors [\\#233](https://github.com/WenchaoD/FSCalendar/issues/233)\n- How to change weekday background? [\\#232](https://github.com/WenchaoD/FSCalendar/issues/232)\n- Cocoapods version seems to be old [\\#231](https://github.com/WenchaoD/FSCalendar/issues/231)\n- force reload data [\\#230](https://github.com/WenchaoD/FSCalendar/issues/230)\n- Is it possible to make event indicators have different colors each? [\\#217](https://github.com/WenchaoD/FSCalendar/issues/217)\n- Lunar date issue when scroll page then go to previous page [\\#161](https://github.com/WenchaoD/FSCalendar/issues/161)\n\n\n\n\\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*"
  },
  {
    "path": "Example-Objc/AppDelegate.h",
    "content": "//\n//  FSAppDelegate.h\n//  FSCalendar\n//\n//  Created by CocoaPods on 02/13/2015.\n//  Copyright (c) 2014 =. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n@end\n"
  },
  {
    "path": "Example-Objc/AppDelegate.m",
    "content": "//\n//  FSAppDelegate.m\n//  FSCalendar\n//\n//  Created by CocoaPods on 02/13/2015.\n//  Copyright (c) 2014 =. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n    // Override point for customization after application launch.\n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application\n{\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application\n{\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. \n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application\n{\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application\n{\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application\n{\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/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=\"14313.18\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"x1V-gv-tFA\">\n    <device id=\"retina5_5\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14283.14\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Navigation Controller-->\n        <scene sceneID=\"hBW-Rp-I6M\">\n            <objects>\n                <navigationController id=\"x1V-gv-tFA\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"yhE-pm-rYs\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"414\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                        <color key=\"tintColor\" red=\"0.22352941179999999\" green=\"0.27450980390000002\" blue=\"0.34901960780000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"jWc-KU-wJn\" kind=\"relationship\" relationship=\"rootViewController\" id=\"Hc0-97-UQW\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"u4t-nO-9f4\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-736\" y=\"250\"/>\n        </scene>\n        <!--FSCalendar-->\n        <scene sceneID=\"UqQ-Li-csF\">\n            <objects>\n                <tableViewController id=\"jWc-KU-wJn\" customClass=\"FSTableViewController\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" showsHorizontalScrollIndicator=\"NO\" dataMode=\"static\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" id=\"lkh-E0-tT6\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"736\"/>\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                        <sections>\n                            <tableViewSection id=\"OKx-qF-6aM\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"BTI-ak-w5P\" detailTextLabel=\"EBv-iS-mwS\" style=\"IBUITableViewCellStyleValue1\" id=\"ilZ-x3-AkF\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"ilZ-x3-AkF\" id=\"5uP-Qt-G8A\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Range Picker Example\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"BTI-ak-w5P\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"12.999999999999998\" width=\"160.66666666666666\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Feature!\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"EBv-iS-mwS\">\n                                                    <rect key=\"frame\" x=\"334\" y=\"12.999999999999998\" width=\"60\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <accessibility key=\"accessibilityConfiguration\">\n                                            <bool key=\"isElement\" value=\"YES\"/>\n                                        </accessibility>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"VEn-eU-wEh\" detailTextLabel=\"fIW-N1-W8b\" style=\"IBUITableViewCellStyleValue1\" id=\"rGl-7H-4Ax\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"rGl-7H-4Ax\" id=\"fhO-jI-fTO\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"DIY Example\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"VEn-eU-wEh\">\n                                                    <rect key=\"frame\" x=\"19.999999999999993\" y=\"12.999999999999998\" width=\"91.333333333333329\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Feature!\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"fIW-N1-W8b\">\n                                                    <rect key=\"frame\" x=\"334\" y=\"12.999999999999998\" width=\"60\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.47843137250000001\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <accessibility key=\"accessibilityConfiguration\">\n                                            <bool key=\"isElement\" value=\"YES\"/>\n                                        </accessibility>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"knr-d7-eLT\" detailTextLabel=\"zgT-YF-Mw0\" style=\"IBUITableViewCellStyleValue1\" id=\"loD-Ps-7lv\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"88\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"loD-Ps-7lv\" id=\"665-2l-kyj\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Prev-Next Buttons\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"knr-d7-eLT\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"12.999999999999998\" width=\"134\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"zgT-YF-Mw0\">\n                                                    <rect key=\"frame\" x=\"352.33333333333331\" y=\"12.999999999999998\" width=\"41.666666666666664\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"1\" green=\"0.5\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <accessibility key=\"accessibilityConfiguration\">\n                                            <bool key=\"isElement\" value=\"YES\"/>\n                                        </accessibility>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"Vs7-Jd-cjq\" detailTextLabel=\"gff-XM-V55\" style=\"IBUITableViewCellStyleValue1\" id=\"qE0-lu-G1p\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"132\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"qE0-lu-G1p\" id=\"6O1-Np-Eux\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Hides Placeholder\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"Vs7-Jd-cjq\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"12.999999999999998\" width=\"131.66666666666666\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"gff-XM-V55\">\n                                                    <rect key=\"frame\" x=\"352.33333333333331\" y=\"12.999999999999998\" width=\"41.666666666666664\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"1\" green=\"0.5\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <accessibility key=\"accessibilityConfiguration\">\n                                            <bool key=\"isElement\" value=\"YES\"/>\n                                        </accessibility>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"1MA-EI-d9Y\" detailTextLabel=\"Fd2-ZY-i4q\" style=\"IBUITableViewCellStyleValue1\" id=\"20K-34-abb\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"176\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"20K-34-abb\" id=\"ok8-em-mqD\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Delegate Appearance\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"1MA-EI-d9Y\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"12.999999999999998\" width=\"156.66666666666666\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"Fd2-ZY-i4q\">\n                                                    <rect key=\"frame\" x=\"352.33333333333331\" y=\"12.999999999999998\" width=\"41.666666666666664\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"1\" green=\"0.5\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <accessibility key=\"accessibilityConfiguration\">\n                                            <bool key=\"isElement\" value=\"YES\"/>\n                                        </accessibility>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"LZ9-Fp-P5z\" detailTextLabel=\"59s-j4-9Zz\" style=\"IBUITableViewCellStyleValue1\" id=\"TLw-G1-xh8\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"220\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"TLw-G1-xh8\" id=\"Wkd-ao-XpQ\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Full Screen Example\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"LZ9-Fp-P5z\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"12.999999999999998\" width=\"146\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"59s-j4-9Zz\">\n                                                    <rect key=\"frame\" x=\"352.33333333333331\" y=\"12.999999999999998\" width=\"41.666666666666664\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.83339345455169678\" green=\"0.12959109246730804\" blue=\"0.18788796663284302\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <accessibility key=\"accessibilityConfiguration\">\n                                            <bool key=\"isElement\" value=\"YES\"/>\n                                        </accessibility>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"sRI-B1-vbS\" detailTextLabel=\"kD6-v0-evj\" style=\"IBUITableViewCellStyleValue1\" id=\"hX9-bB-aHp\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"264\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"hX9-bB-aHp\" id=\"Mhd-Y2-O2b\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"FSCalendarScope Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"sRI-B1-vbS\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"12.999999999999998\" width=\"195.33333333333334\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"kD6-v0-evj\">\n                                                    <rect key=\"frame\" x=\"352.33333333333331\" y=\"12.999999999999998\" width=\"41.666666666666664\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.55686274509803924\" green=\"0.55686274509803924\" blue=\"0.57647058823529407\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <accessibility key=\"accessibilityConfiguration\">\n                                            <bool key=\"isElement\" value=\"YES\"/>\n                                        </accessibility>\n                                        <connections>\n                                            <segue destination=\"To9-yq-KZP\" kind=\"show\" id=\"Evz-Bc-bgS\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"4Jp-Rp-ISm\" detailTextLabel=\"ywa-Qw-AQi\" style=\"IBUITableViewCellStyleValue1\" id=\"sma-BS-vZ4\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"308\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"sma-BS-vZ4\" id=\"Cyd-80-9BJ\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Storyboard Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"4Jp-Rp-ISm\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"12.999999999999998\" width=\"146.66666666666666\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"ywa-Qw-AQi\">\n                                                    <rect key=\"frame\" x=\"352.33333333333331\" y=\"12.999999999999998\" width=\"41.666666666666664\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.55686274509803924\" green=\"0.55686274509803924\" blue=\"0.57647058823529407\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <accessibility key=\"accessibilityConfiguration\">\n                                            <bool key=\"isElement\" value=\"YES\"/>\n                                        </accessibility>\n                                        <connections>\n                                            <segue destination=\"vXZ-lx-hvc\" kind=\"show\" id=\"3DX-18-9y4\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"A43-g1-NbJ\" detailTextLabel=\"kjt-xH-OKS\" style=\"IBUITableViewCellStyleValue1\" id=\"Q8e-18-OC0\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"352\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Q8e-18-OC0\" id=\"S9e-pq-bHQ\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"LoadView Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"A43-g1-NbJ\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"12.999999999999998\" width=\"136.33333333333334\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"kjt-xH-OKS\">\n                                                    <rect key=\"frame\" x=\"352.33333333333331\" y=\"12.999999999999998\" width=\"41.666666666666664\" height=\"19.333333333333332\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.55686274509803924\" green=\"0.55686274509803924\" blue=\"0.57647058823529407\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <accessibility key=\"accessibilityConfiguration\">\n                                            <bool key=\"isElement\" value=\"YES\"/>\n                                        </accessibility>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"jWc-KU-wJn\" id=\"KSH-1r-Bil\"/>\n                            <outlet property=\"delegate\" destination=\"jWc-KU-wJn\" id=\"uWL-9h-gc3\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"FSCalendar\" id=\"NyB-j8-nIl\"/>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"HD2-e9-ZT7\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"70\" y=\"251\"/>\n        </scene>\n        <!--Data Source-->\n        <scene sceneID=\"Me2-r0-ElZ\">\n            <objects>\n                <viewController title=\"FSCalendarScopeExample\" id=\"To9-yq-KZP\" customClass=\"FSCalendarScopeExampleViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"mb8-tO-gOh\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"OcX-8w-NJf\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"MiY-ip-WTw\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"736\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"7hZ-tJ-5NZ\" customClass=\"FSCalendar\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"414\" height=\"300\"/>\n                                <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"300\" id=\"cDz-g5-tqF\"/>\n                                </constraints>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"fakedSelectedDay\">\n                                        <integer key=\"value\" value=\"1\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"To9-yq-KZP\" id=\"YC8-We-eEn\"/>\n                                    <outlet property=\"delegate\" destination=\"To9-yq-KZP\" id=\"c6b-Yv-igC\"/>\n                                </connections>\n                            </view>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"10\" sectionFooterHeight=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"noP-KN-SwP\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"380\" width=\"414\" height=\"356\"/>\n                                <color key=\"backgroundColor\" red=\"0.93725490199999995\" green=\"0.93725490199999995\" blue=\"0.95686274510000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <view key=\"tableFooterView\" contentMode=\"scaleToFill\" id=\"5Js-5e-oo9\" userLabel=\"Footer\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"197.33333333333337\" width=\"414\" height=\"69\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <subviews>\n                                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"2pf-mw-cB2\">\n                                            <rect key=\"frame\" x=\"104\" y=\"19\" width=\"51\" height=\"31\"/>\n                                        </switch>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Animated\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"hcJ-ta-ZTH\">\n                                            <rect key=\"frame\" x=\"14\" y=\"9\" width=\"73\" height=\"51\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <constraints>\n                                        <constraint firstItem=\"2pf-mw-cB2\" firstAttribute=\"leading\" secondItem=\"hcJ-ta-ZTH\" secondAttribute=\"trailing\" constant=\"17\" id=\"0vO-Zc-UVh\"/>\n                                        <constraint firstItem=\"hcJ-ta-ZTH\" firstAttribute=\"top\" secondItem=\"5Js-5e-oo9\" secondAttribute=\"top\" constant=\"9\" id=\"RCk-ag-GIn\"/>\n                                        <constraint firstItem=\"2pf-mw-cB2\" firstAttribute=\"centerY\" secondItem=\"hcJ-ta-ZTH\" secondAttribute=\"centerY\" id=\"Z2c-O7-ajy\"/>\n                                        <constraint firstItem=\"hcJ-ta-ZTH\" firstAttribute=\"centerY\" secondItem=\"5Js-5e-oo9\" secondAttribute=\"centerY\" id=\"eTo-LY-tt3\"/>\n                                        <constraint firstItem=\"hcJ-ta-ZTH\" firstAttribute=\"leading\" secondItem=\"5Js-5e-oo9\" secondAttribute=\"leading\" constant=\"14\" id=\"j3F-7J-MF6\"/>\n                                    </constraints>\n                                </view>\n                                <prototypes>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell_month\" textLabel=\"qol-Mc-4nA\" style=\"IBUITableViewCellStyleDefault\" id=\"GpG-sh-Z79\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.333333333333343\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"GpG-sh-Z79\" id=\"ndN-kE-CsB\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"FSCalendarScopeMonth\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"qol-Mc-4nA\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"374\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell_week\" textLabel=\"IbE-ao-K9G\" style=\"IBUITableViewCellStyleDefault\" id=\"Hqm-gV-y6n\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.333333333333343\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Hqm-gV-y6n\" id=\"eX8-Cw-vtY\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"FSCalendarScopeWeek\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"IbE-ao-K9G\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"374\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"blue\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"mWw-Yo-w7e\" imageView=\"lHd-eg-ONH\" style=\"IBUITableViewCellStyleDefault\" id=\"d4I-Mu-gPK\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"143.33333333333334\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"d4I-Mu-gPK\" id=\"xt8-50-Tc2\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Lorem ipsum dolor sit er elit lamet\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"mWw-Yo-w7e\">\n                                                    <rect key=\"frame\" x=\"53\" y=\"0.0\" width=\"341\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" image=\"icon_cat\" id=\"lHd-eg-ONH\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"14\" width=\"18\" height=\"15\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                </imageView>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"To9-yq-KZP\" id=\"YWp-fK-vlc\"/>\n                                    <outlet property=\"delegate\" destination=\"To9-yq-KZP\" id=\"8Pl-kN-tb5\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.93725490199999995\" green=\"0.93725490199999995\" blue=\"0.95686274510000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"7hZ-tJ-5NZ\" secondAttribute=\"trailing\" id=\"5En-7U-m9P\"/>\n                            <constraint firstItem=\"noP-KN-SwP\" firstAttribute=\"trailing\" secondItem=\"7hZ-tJ-5NZ\" secondAttribute=\"trailing\" id=\"5sZ-zg-S2S\"/>\n                            <constraint firstItem=\"noP-KN-SwP\" firstAttribute=\"top\" secondItem=\"7hZ-tJ-5NZ\" secondAttribute=\"bottom\" constant=\"16\" id=\"6Oc-iC-2wg\"/>\n                            <constraint firstItem=\"noP-KN-SwP\" firstAttribute=\"leading\" secondItem=\"7hZ-tJ-5NZ\" secondAttribute=\"leading\" id=\"Eta-GV-MLi\"/>\n                            <constraint firstItem=\"OcX-8w-NJf\" firstAttribute=\"top\" secondItem=\"noP-KN-SwP\" secondAttribute=\"bottom\" id=\"Qm4-JL-n5E\"/>\n                            <constraint firstItem=\"7hZ-tJ-5NZ\" firstAttribute=\"leading\" secondItem=\"MiY-ip-WTw\" secondAttribute=\"leading\" id=\"eoP-Ms-ktd\"/>\n                            <constraint firstItem=\"7hZ-tJ-5NZ\" firstAttribute=\"top\" secondItem=\"mb8-tO-gOh\" secondAttribute=\"bottom\" id=\"qGS-mB-3eB\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"FSCalendar\" id=\"W8S-6B-A6Z\">\n                        <barButtonItem key=\"rightBarButtonItem\" title=\"Toggle\" id=\"Iel-ZK-vVP\">\n                            <connections>\n                                <action selector=\"toggleClicked:\" destination=\"To9-yq-KZP\" id=\"Ch2-Jy-Acp\"/>\n                            </connections>\n                        </barButtonItem>\n                    </navigationItem>\n                    <connections>\n                        <outlet property=\"animationSwitch\" destination=\"2pf-mw-cB2\" id=\"aWh-li-feG\"/>\n                        <outlet property=\"calendar\" destination=\"7hZ-tJ-5NZ\" id=\"RLE-MR-1Vb\"/>\n                        <outlet property=\"calendarHeightConstraint\" destination=\"cDz-g5-tqF\" id=\"g8z-qq-CsQ\"/>\n                        <outlet property=\"tableView\" destination=\"noP-KN-SwP\" id=\"HMk-2E-ieq\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"LB3-r6-zJ7\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"838\" y=\"-119\"/>\n        </scene>\n        <!--StoryboardExampleViewController-->\n        <scene sceneID=\"ufC-wZ-h7g\">\n            <objects>\n                <viewController title=\"StoryboardExampleViewController\" automaticallyAdjustsScrollViewInsets=\"NO\" id=\"vXZ-lx-hvc\" userLabel=\"StoryboardExampleViewController\" customClass=\"StoryboardExampleViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"jyV-Pf-zRb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"2fi-mo-0CV\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"kh9-bI-dsS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"736\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"i44-Ll-ELi\" customClass=\"FSCalendar\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"414\" height=\"300\"/>\n                                <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"300\" id=\"AsQ-eP-ia8\"/>\n                                </constraints>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"fakedSelectedDay\">\n                                        <integer key=\"value\" value=\"2\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"useVeryShortWeekdaySymbols\" value=\"NO\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"pagingEnabled\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"scrollEnabled\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"fakeSubtitles\" value=\"YES\"/>\n                                </userDefinedRuntimeAttributes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"vXZ-lx-hvc\" id=\"CT5-P9-sbn\"/>\n                                    <outlet property=\"delegate\" destination=\"vXZ-lx-hvc\" id=\"9NC-7Q-TmM\"/>\n                                </connections>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.90980392160000001\" green=\"0.91372549020000005\" blue=\"0.90980392160000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"i44-Ll-ELi\" firstAttribute=\"top\" secondItem=\"jyV-Pf-zRb\" secondAttribute=\"bottom\" id=\"1gL-Jb-oDc\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"i44-Ll-ELi\" secondAttribute=\"trailing\" id=\"4lx-i7-OBX\"/>\n                            <constraint firstItem=\"i44-Ll-ELi\" firstAttribute=\"leading\" secondItem=\"kh9-bI-dsS\" secondAttribute=\"leading\" id=\"7am-cV-9Ui\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"FSCalendar\" id=\"XvH-Gc-dEi\">\n                        <barButtonItem key=\"rightBarButtonItem\" image=\"icon_setting\" id=\"Syi-J8-9Kw\">\n                            <color key=\"tintColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                            <connections>\n                                <segue destination=\"5IA-Lj-ace\" kind=\"show\" identifier=\"Configuration\" id=\"lM9-4x-Te6\"/>\n                            </connections>\n                        </barButtonItem>\n                    </navigationItem>\n                    <connections>\n                        <outlet property=\"calendar\" destination=\"i44-Ll-ELi\" id=\"rjY-a3-mAd\"/>\n                        <outlet property=\"calendarHeightConstraint\" destination=\"AsQ-eP-ia8\" id=\"hLD-9b-Xyh\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"x5A-6p-PRh\" sceneMemberID=\"firstResponder\"/>\n                <exit id=\"5Oo-tL-GbD\" userLabel=\"Exit\" sceneMemberID=\"exit\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"838\" y=\"642\"/>\n        </scene>\n        <!--Configuration-->\n        <scene sceneID=\"nFi-cp-YQl\">\n            <objects>\n                <tableViewController id=\"5IA-Lj-ace\" customClass=\"CalendarConfigViewController\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"10\" sectionFooterHeight=\"10\" id=\"jT2-lU-gLR\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"736\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"0.93725490196078431\" green=\"0.93725490196078431\" blue=\"0.95686274509803926\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <sections>\n                            <tableViewSection headerTitle=\"Theme\" id=\"lLy-fn-2TE\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"checkmark\" indentationWidth=\"10\" textLabel=\"O62-83-teD\" style=\"IBUITableViewCellStyleDefault\" id=\"xjX-ie-i7F\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.333333333333343\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"xjX-ie-i7F\" id=\"7At-0T-T7R\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"370\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Theme1\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"O62-83-teD\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"350\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"h3n-ib-wIe\" style=\"IBUITableViewCellStyleDefault\" id=\"blV-7a-bgu\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.333333333333343\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"blV-7a-bgu\" id=\"Mer-0G-38X\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Theme2\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"h3n-ib-wIe\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"374\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"6sG-w2-epw\" style=\"IBUITableViewCellStyleDefault\" id=\"Sgh-je-y0P\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"143.33333333333334\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Sgh-je-y0P\" id=\"cgn-1P-xtc\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Theme3\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"6sG-w2-epw\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"374\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Subtitle\" id=\"Ixa-uS-SeY\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"checkmark\" indentationWidth=\"10\" textLabel=\"cll-gl-Oyc\" style=\"IBUITableViewCellStyleDefault\" id=\"ZA6-Ho-27f\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"235.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"ZA6-Ho-27f\" id=\"tfM-ed-fKZ\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"370\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Lunar\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"cll-gl-Oyc\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"350\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Scroll Direction\" id=\"kMU-Xw-8pq\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"checkmark\" indentationWidth=\"10\" textLabel=\"l29-05-Mps\" style=\"IBUITableViewCellStyleDefault\" id=\"wu7-0W-ztL\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"327.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"wu7-0W-ztL\" id=\"BN9-nu-Rd8\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"370\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Horizontal\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"l29-05-Mps\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"350\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"wSk-45-sYI\" style=\"IBUITableViewCellStyleDefault\" id=\"jrr-g8-vMH\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"371.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"jrr-g8-vMH\" id=\"u7e-hb-Fi8\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Vertical\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"wSk-45-sYI\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"374\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Select a date\" id=\"Mj9-w7-PxM\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" rowHeight=\"163\" id=\"Xr3-tL-cx6\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"463.33333333333337\" width=\"414\" height=\"163\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Xr3-tL-cx6\" id=\"IPe-2o-5Tt\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"162.66666666666666\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <datePicker contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" datePickerMode=\"date\" minuteInterval=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"9jN-O2-iw4\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"162.66666666666666\"/>\n                                                    <date key=\"date\" timeIntervalSinceReferenceDate=\"448248004.37374699\">\n                                                        <!--2015-03-17 01:20:04 +0000-->\n                                                    </date>\n                                                    <date key=\"minimumDate\" timeIntervalSinceReferenceDate=\"-978267600\">\n                                                        <!--1970-01-01 11:00:00 +0000-->\n                                                    </date>\n                                                    <date key=\"maximumDate\" timeIntervalSinceReferenceDate=\"3124090800\">\n                                                        <!--2099-12-31 11:00:00 +0000-->\n                                                    </date>\n                                                </datePicker>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"9jN-O2-iw4\" secondAttribute=\"bottom\" id=\"7bs-so-tMY\"/>\n                                                <constraint firstItem=\"9jN-O2-iw4\" firstAttribute=\"leading\" secondItem=\"IPe-2o-5Tt\" secondAttribute=\"leading\" id=\"TdV-lD-3Kk\"/>\n                                                <constraint firstItem=\"9jN-O2-iw4\" firstAttribute=\"top\" secondItem=\"IPe-2o-5Tt\" secondAttribute=\"top\" id=\"hLa-ew-7UJ\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"9jN-O2-iw4\" secondAttribute=\"trailing\" id=\"nYy-kg-X1b\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"bo0-pq-yfc\" style=\"IBUITableViewCellStyleDefault\" id=\"XkD-qX-hNP\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"626.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"XkD-qX-hNP\" id=\"V7X-2b-Dmn\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Click to select\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"bo0-pq-yfc\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"0.0\" width=\"374\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"First Weekday\" id=\"e6k-Nb-Rfs\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"checkmark\" indentationWidth=\"10\" textLabel=\"b1w-3T-SyL\" rowHeight=\"44\" style=\"IBUITableViewCellStyleDefault\" id=\"6hg-QL-bc8\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"718.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"6hg-QL-bc8\" id=\"tQG-o5-0kl\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"382\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Sunday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"b1w-3T-SyL\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"364\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"1mu-CL-5W8\" style=\"IBUITableViewCellStyleDefault\" id=\"7J8-y8-jhG\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"762.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"7J8-y8-jhG\" id=\"7w4-Dd-VtC\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Monday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"1mu-CL-5W8\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"384\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"1TT-Ea-cLc\" style=\"IBUITableViewCellStyleDefault\" id=\"a9F-Qo-P7t\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"806.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"a9F-Qo-P7t\" id=\"KVB-7S-jEN\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Tuesday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"1TT-Ea-cLc\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"384\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"8Rm-Lk-xrc\" style=\"IBUITableViewCellStyleDefault\" id=\"SSQ-E0-iHW\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"850.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"SSQ-E0-iHW\" id=\"Iv0-be-dni\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Wednesday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"8Rm-Lk-xrc\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"384\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"bfC-Bz-4vz\" style=\"IBUITableViewCellStyleDefault\" id=\"e4I-Uv-pGe\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"894.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"e4I-Uv-pGe\" id=\"p44-kC-dPa\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Thursday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"bfC-Bz-4vz\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"384\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"EaK-NQ-DfA\" style=\"IBUITableViewCellStyleDefault\" id=\"NEU-aY-ej6\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"938.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"NEU-aY-ej6\" id=\"iDc-nK-neA\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Friday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"EaK-NQ-DfA\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"384\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"jZz-sF-yrb\" style=\"IBUITableViewCellStyleDefault\" id=\"vUs-68-LZs\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"982.33333333333337\" width=\"414\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"vUs-68-LZs\" id=\"L3h-Na-rtq\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"414\" height=\"43.666666666666664\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Saturday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"jZz-sF-yrb\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"384\" height=\"43.666666666666664\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"5IA-Lj-ace\" id=\"olS-et-LJx\"/>\n                            <outlet property=\"delegate\" destination=\"5IA-Lj-ace\" id=\"duD-eq-1Ft\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Configuration\" id=\"h0j-eU-XkL\"/>\n                    <simulatedNavigationBarMetrics key=\"simulatedTopBarMetrics\" prompted=\"NO\"/>\n                    <connections>\n                        <outlet property=\"datePicker\" destination=\"9jN-O2-iw4\" id=\"bYp-k7-F9m\"/>\n                        <segue destination=\"5Oo-tL-GbD\" kind=\"unwind\" identifier=\"unwind2StoryboardExample\" unwindAction=\"unwind2StoryboardExample:\" id=\"YEW-Md-jvb\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"HRM-6a-tFh\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1720\" y=\"642\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"icon_cat\" width=\"18\" height=\"15\"/>\n        <image name=\"icon_setting\" width=\"24\" height=\"24\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example-Objc/ButtonsViewController.h",
    "content": "//\n//  ButtonsViewController.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 4/15/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface ButtonsViewController : UIViewController\n\n\n@end\n"
  },
  {
    "path": "Example-Objc/ButtonsViewController.m",
    "content": "//\n//  ButtonsViewController.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 4/15/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"ButtonsViewController.h\"\n#import \"FSCalendar.h\"\n\n@interface ButtonsViewController()<FSCalendarDataSource,FSCalendarDelegate>\n\n@property (weak, nonatomic) FSCalendar *calendar;\n@property (weak, nonatomic) UIButton *previousButton;\n@property (weak, nonatomic) UIButton *nextButton;\n\n@property (strong, nonatomic) NSCalendar *gregorian;\n\n- (void)previousClicked:(id)sender;\n- (void)nextClicked:(id)sender;\n\n@end\n\n@implementation ButtonsViewController\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.title = @\"FSCalendar\";\n        self.gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    }\n    return self;\n}\n\n- (void)loadView\n{\n    UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\n    view.backgroundColor = [UIColor groupTableViewBackgroundColor];\n    self.view = view;\n    \n    // 450 for iPad and 300 for iPhone\n    CGFloat height = [[UIDevice currentDevice].model hasPrefix:@\"iPad\"] ? 450 : 300;\n    FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, 64, view.frame.size.width, height)];\n    calendar.dataSource = self;\n    calendar.delegate = self;\n    calendar.backgroundColor = [UIColor whiteColor];\n    calendar.appearance.headerMinimumDissolvedAlpha = 0;\n    calendar.appearance.caseOptions = FSCalendarCaseOptionsHeaderUsesUpperCase;\n    [self.view addSubview:calendar];\n    self.calendar = calendar;\n    \n    UIButton *previousButton = [UIButton buttonWithType:UIButtonTypeCustom];\n    previousButton.frame = CGRectMake(0, 64+5, 95, 34);\n    previousButton.backgroundColor = [UIColor whiteColor];\n    previousButton.titleLabel.font = [UIFont systemFontOfSize:15];\n    [previousButton setImage:[UIImage imageNamed:@\"icon_prev\"] forState:UIControlStateNormal];\n    [previousButton addTarget:self action:@selector(previousClicked:) forControlEvents:UIControlEventTouchUpInside];\n    [self.view addSubview:previousButton];\n    self.previousButton = previousButton;\n    \n    UIButton *nextButton = [UIButton buttonWithType:UIButtonTypeCustom];\n    nextButton.frame = CGRectMake(CGRectGetWidth(self.view.frame)-95, 64+5, 95, 34);\n    nextButton.backgroundColor = [UIColor whiteColor];\n    nextButton.titleLabel.font = [UIFont systemFontOfSize:15];\n    [nextButton setImage:[UIImage imageNamed:@\"icon_next\"] forState:UIControlStateNormal];\n    [nextButton addTarget:self action:@selector(nextClicked:) forControlEvents:UIControlEventTouchUpInside];\n    [self.view addSubview:nextButton];\n    self.nextButton = nextButton;\n    \n}\n\n- (void)previousClicked:(id)sender\n{\n    NSDate *currentMonth = self.calendar.currentPage;\n    NSDate *previousMonth = [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:-1 toDate:currentMonth options:0];\n    [self.calendar setCurrentPage:previousMonth animated:YES];\n}\n\n- (void)nextClicked:(id)sender\n{\n    NSDate *currentMonth = self.calendar.currentPage;\n    NSDate *nextMonth = [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:1 toDate:currentMonth options:0];\n    [self.calendar setCurrentPage:nextMonth animated:YES];\n}\n\n\n@end\n"
  },
  {
    "path": "Example-Objc/CalendarConfigViewController.h",
    "content": "//\n//  CalendarConfigViewController.h\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 2/15/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"FSCalendar.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface CalendarConfigViewController : UITableViewController\n\n@property (assign, nonatomic) NSInteger      theme;\n@property (assign, nonatomic) BOOL           lunar;\n@property (assign, nonatomic) NSUInteger     firstWeekday;\n@property (assign, nonatomic) FSCalendarScrollDirection scrollDirection;\n@property (strong, nonatomic) NSDate         *selectedDate;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Example-Objc/CalendarConfigViewController.m",
    "content": "//\n//  CalendarConfigViewController.m\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 2/15/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import \"CalendarConfigViewController.h\"\n#import \"FScalendar.h\"\n\n@interface CalendarConfigViewController ()\n\n@property (weak, nonatomic) IBOutlet UIDatePicker *datePicker;\n\n@end\n\n@implementation CalendarConfigViewController\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];\n    switch (indexPath.section) {\n        case 0: {\n            cell.accessoryType = self.theme == indexPath.row ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n            break;\n        }\n        case 1: {\n            cell.accessoryType = self.lunar ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n            break;\n        }\n        case 2: {\n            cell.accessoryType = indexPath.row == 1 - self.scrollDirection ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n            break;\n        }\n        case 4: {\n            cell.accessoryType = indexPath.row == self.firstWeekday - 1 ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n            break;\n        }\n        default:\n            break;\n    }\n    return cell;\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    [tableView deselectRowAtIndexPath:indexPath animated:YES];\n    switch (indexPath.section) {\n        case 0: {\n            self.theme = indexPath.row;\n            break;\n        }\n        case 1: {\n            self.lunar = !self.lunar;\n            break;\n        }\n        case 2: {\n            self.scrollDirection = (FSCalendarScrollDirection)(1-indexPath.row);\n            break;\n        }\n        case 3: {\n            self.selectedDate = self.datePicker.date;\n            break;\n        }\n        case 4: {\n            self.firstWeekday = indexPath.row + 1;\n            break;\n        }\n        default:\n            break;\n    }\n    [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section]  withRowAnimation:UITableViewRowAnimationAutomatic];\n    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.05 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n        [self performSegueWithIdentifier:@\"unwind2StoryboardExample\" sender:self];\n    });\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/DIYCalendarCell.h",
    "content": "//\n//  DIYCalendarCell.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 02/11/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <FSCalendar/FSCalendar.h>\n\ntypedef NS_ENUM(NSUInteger, SelectionType) {\n    SelectionTypeNone,\n    SelectionTypeSingle,\n    SelectionTypeLeftBorder,\n    SelectionTypeMiddle,\n    SelectionTypeRightBorder\n};\n\n\n@interface DIYCalendarCell : FSCalendarCell\n\n@property (weak, nonatomic) UIImageView *circleImageView;\n\n@property (weak, nonatomic) CAShapeLayer *selectionLayer;\n\n@property (assign, nonatomic) SelectionType selectionType;\n\n@end\n"
  },
  {
    "path": "Example-Objc/DIYCalendarCell.m",
    "content": "//\n//  DIYCalendarCell.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 02/11/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"DIYCalendarCell.h\"\n#import \"FSCalendarExtensions.h\"\n\n@implementation DIYCalendarCell\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        UIImageView *circleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@\"circle\"]];\n        [self.contentView insertSubview:circleImageView atIndex:0];\n        self.circleImageView = circleImageView;\n        \n        CAShapeLayer *selectionLayer = [[CAShapeLayer alloc] init];\n        selectionLayer.fillColor = [UIColor blackColor].CGColor;\n        selectionLayer.actions = @{@\"hidden\":[NSNull null]}; \n        [self.contentView.layer insertSublayer:selectionLayer below:self.titleLabel.layer];\n        self.selectionLayer = selectionLayer;\n        \n        self.shapeLayer.hidden = YES;\n        self.backgroundView = [[UIView alloc] initWithFrame:self.bounds];\n        self.backgroundView.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.1];\n        \n    }\n    return self;\n}\n\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    \n    self.backgroundView.frame = CGRectInset(self.bounds, 1, 1);\n    self.circleImageView.frame = self.backgroundView.frame;\n    self.selectionLayer.frame = self.bounds;\n    \n    if (self.selectionType == SelectionTypeMiddle) {\n        \n        self.selectionLayer.path = [UIBezierPath bezierPathWithRect:self.selectionLayer.bounds].CGPath;\n        \n    } else if (self.selectionType == SelectionTypeLeftBorder) {\n        \n        self.selectionLayer.path = [UIBezierPath bezierPathWithRoundedRect:self.selectionLayer.bounds byRoundingCorners:UIRectCornerTopLeft|UIRectCornerBottomLeft cornerRadii:CGSizeMake(self.selectionLayer.fs_width/2, self.selectionLayer.fs_width/2)].CGPath;\n        \n    } else if (self.selectionType == SelectionTypeRightBorder) {\n        \n        self.selectionLayer.path = [UIBezierPath bezierPathWithRoundedRect:self.selectionLayer.bounds byRoundingCorners:UIRectCornerTopRight|UIRectCornerBottomRight cornerRadii:CGSizeMake(self.selectionLayer.fs_width/2, self.selectionLayer.fs_width/2)].CGPath;\n        \n    } else if (self.selectionType == SelectionTypeSingle) {\n        \n        CGFloat diameter = MIN(self.selectionLayer.fs_height, self.selectionLayer.fs_width);\n        self.selectionLayer.path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(self.contentView.fs_width/2-diameter/2, self.contentView.fs_height/2-diameter/2, diameter, diameter)].CGPath;\n        \n    }\n}\n\n- (void)configureAppearance\n{\n    [super configureAppearance];\n    // Override the build-in appearance configuration\n    if (self.isPlaceholder) {\n        self.titleLabel.textColor = [UIColor lightGrayColor];\n        self.eventIndicator.hidden = YES;\n    }\n}\n\n- (void)setSelectionType:(SelectionType)selectionType\n{\n    if (_selectionType != selectionType) {\n        _selectionType = selectionType;\n        [self setNeedsLayout];\n    }\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/DIYExampleViewController.h",
    "content": "//\n//  DIYExampleViewController.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 5/8/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface DIYExampleViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "Example-Objc/DIYExampleViewController.m",
    "content": "//\n//  DIYExampleViewController.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 5/8/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"DIYExampleViewController.h\"\n#import \"FSCalendar.h\"\n#import \"DIYCalendarCell.h\"\n#import \"FSCalendarExtensions.h\"\n\n@interface DIYExampleViewController () <FSCalendarDataSource,FSCalendarDelegate,FSCalendarDelegateAppearance>\n\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (weak, nonatomic) UILabel *eventLabel;\n@property (strong, nonatomic) NSCalendar *gregorian;\n@property (strong, nonatomic) NSDateFormatter *dateFormatter;\n\n- (void)configureCell:(FSCalendarCell *)cell forDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position;\n\n@end\n\n@implementation DIYExampleViewController\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.title = @\"FSCalendar\";\n    }\n    return self;\n}\n\n- (void)loadView\n{\n    UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\n    view.backgroundColor = [UIColor groupTableViewBackgroundColor];\n    self.view = view;\n    \n    CGFloat height = [[UIDevice currentDevice].model hasPrefix:@\"iPad\"] ? 450 : 300;\n    FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0,  CGRectGetMaxY(self.navigationController.navigationBar.frame), view.frame.size.width, height)];\n    calendar.dataSource = self;\n    calendar.delegate = self;\n    calendar.swipeToChooseGesture.enabled = YES;\n    calendar.allowsMultipleSelection = YES;\n    [view addSubview:calendar];\n    self.calendar = calendar;\n    \n    calendar.calendarHeaderView.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.1];\n    calendar.calendarWeekdayView.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.1];\n    calendar.appearance.eventSelectionColor = [UIColor whiteColor];\n    calendar.appearance.eventOffset = CGPointMake(0, -7);\n    calendar.today = nil; // Hide the today circle\n    [calendar registerClass:[DIYCalendarCell class] forCellReuseIdentifier:@\"cell\"];\n    \n    UIPanGestureRecognizer *scopeGesture = [[UIPanGestureRecognizer alloc] initWithTarget:calendar action:@selector(handleScopeGesture:)];\n    [calendar addGestureRecognizer:scopeGesture];\n    \n    \n    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(calendar.frame)+10, self.view.frame.size.width, 50)];\n    label.textAlignment = NSTextAlignmentCenter;\n    label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];\n    [self.view addSubview:label];\n    self.eventLabel = label;\n    \n    NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:@\"\"];\n    NSTextAttachment *attatchment = [[NSTextAttachment alloc] init];\n    attatchment.image = [UIImage imageNamed:@\"icon_cat\"];\n    attatchment.bounds = CGRectMake(0, -3, attatchment.image.size.width, attatchment.image.size.height);\n    [attributedText appendAttributedString:[NSAttributedString attributedStringWithAttachment:attatchment]];\n    [attributedText appendAttributedString:[[NSAttributedString alloc] initWithString:@\"  Hey Daily Event  \"]];\n    [attributedText appendAttributedString:[NSAttributedString attributedStringWithAttachment:attatchment]];\n    self.eventLabel.attributedText = attributedText.copy;\n    \n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    \n    self.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];\n    self.dateFormatter = [[NSDateFormatter alloc] init];\n    self.dateFormatter.dateFormat = @\"yyyy-MM-dd\";\n    \n    [self.calendar selectDate:[self.gregorian dateByAddingUnit:NSCalendarUnitDay value:-1 toDate:[NSDate date] options:0] scrollToDate:NO];\n    [self.calendar selectDate:[NSDate date] scrollToDate:NO];\n    [self.calendar selectDate:[self.gregorian dateByAddingUnit:NSCalendarUnitDay value:1 toDate:[NSDate date] options:0] scrollToDate:NO];\n    \n    // Uncomment this to perform an 'initial-week-scope'\n    // self.calendar.scope = FSCalendarScopeWeek;\n    \n    // For UITest\n    self.calendar.accessibilityIdentifier = @\"calendar\";\n}\n\n- (void)dealloc\n{\n    NSLog(@\"%s\",__FUNCTION__);\n}\n\n#pragma mark - FSCalendarDataSource\n\n- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.dateFormatter dateFromString:@\"2020-07-08\"];\n}\n\n- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:5 toDate:[NSDate date] options:0];\n}\n\n- (NSString *)calendar:(FSCalendar *)calendar titleForDate:(NSDate *)date\n{\n    if ([self.gregorian isDateInToday:date]) {\n        return @\"今\";\n    }\n    return nil;\n}\n\n- (FSCalendarCell *)calendar:(FSCalendar *)calendar cellForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    DIYCalendarCell *cell = [calendar dequeueReusableCellWithIdentifier:@\"cell\" forDate:date atMonthPosition:monthPosition];\n    return cell;\n}\n\n- (void)calendar:(FSCalendar *)calendar willDisplayCell:(FSCalendarCell *)cell forDate:(NSDate *)date atMonthPosition: (FSCalendarMonthPosition)monthPosition\n{\n    [self configureCell:cell forDate:date atMonthPosition:monthPosition];\n}\n\n- (NSInteger)calendar:(FSCalendar *)calendar numberOfEventsForDate:(NSDate *)date\n{\n    return 2;\n}\n\n#pragma mark - FSCalendarDelegate\n\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n    calendar.frame = (CGRect){calendar.frame.origin,bounds.size};\n    \n    self.eventLabel.frame = CGRectMake(0, CGRectGetMaxY(calendar.frame)+10, self.view.frame.size.width, 50);\n    \n}\n\n- (BOOL)calendar:(FSCalendar *)calendar shouldSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    return monthPosition == FSCalendarMonthPositionCurrent;\n}\n\n- (BOOL)calendar:(FSCalendar *)calendar shouldDeselectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    return monthPosition == FSCalendarMonthPositionCurrent;\n}\n\n- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    NSLog(@\"did select date %@\",[self.dateFormatter stringFromDate:date]);\n    [self configureVisibleCells];\n}\n\n- (void)calendar:(FSCalendar *)calendar didDeselectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    NSLog(@\"did deselect date %@\",[self.dateFormatter stringFromDate:date]);\n    [self configureVisibleCells];\n}\n\n- (NSArray<UIColor *> *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventDefaultColorsForDate:(NSDate *)date\n{\n    if ([self.gregorian isDateInToday:date]) {\n        return @[[UIColor orangeColor]];\n    }\n    return @[appearance.eventDefaultColor];\n}\n\n#pragma mark - Private methods\n\n- (void)configureVisibleCells\n{\n    [self.calendar.visibleCells enumerateObjectsUsingBlock:^(__kindof FSCalendarCell * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {\n        NSDate *date = [self.calendar dateForCell:obj];\n        FSCalendarMonthPosition position = [self.calendar monthPositionForCell:obj];\n        [self configureCell:obj forDate:date atMonthPosition:position];\n    }];\n}\n\n- (void)configureCell:(FSCalendarCell *)cell forDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    \n    DIYCalendarCell *diyCell = (DIYCalendarCell *)cell;\n    \n    // Custom today circle\n    diyCell.circleImageView.hidden = ![self.gregorian isDateInToday:date];\n    \n    // Configure selection layer\n    if (monthPosition == FSCalendarMonthPositionCurrent) {\n        \n        SelectionType selectionType = SelectionTypeNone;\n        if ([self.calendar.selectedDates containsObject:date]) {\n            NSDate *previousDate = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:-1 toDate:date options:0];\n            NSDate *nextDate = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:1 toDate:date options:0];\n            if ([self.calendar.selectedDates containsObject:date]) {\n                if ([self.calendar.selectedDates containsObject:previousDate] && [self.calendar.selectedDates containsObject:nextDate]) {\n                    selectionType = SelectionTypeMiddle;\n                } else if ([self.calendar.selectedDates containsObject:previousDate] && [self.calendar.selectedDates containsObject:date]) {\n                    selectionType = SelectionTypeRightBorder;\n                } else if ([self.calendar.selectedDates containsObject:nextDate]) {\n                    selectionType = SelectionTypeLeftBorder;\n                } else {\n                    selectionType = SelectionTypeSingle;\n                }\n            }\n        } else {\n            selectionType = SelectionTypeNone;\n        }\n        \n        if (selectionType == SelectionTypeNone) {\n            diyCell.selectionLayer.hidden = YES;\n            return;\n        }\n        \n        diyCell.selectionLayer.hidden = NO;\n        diyCell.selectionType = selectionType;\n        \n    } else {\n        \n        diyCell.circleImageView.hidden = YES;\n        diyCell.selectionLayer.hidden = YES;\n        \n    }\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/DelegateAppearanceViewController.h",
    "content": "//\n//  RollViewController.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 10/16/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"FSCalendar.h\"\n\n@interface DelegateAppearanceViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "Example-Objc/DelegateAppearanceViewController.m",
    "content": "//\n//  RollViewController.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 10/16/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import \"DelegateAppearanceViewController.h\"\n\n#define kViolet [UIColor colorWithRed:170/255.0 green:114/255.0 blue:219/255.0 alpha:1.0]\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface DelegateAppearanceViewController()<FSCalendarDataSource,FSCalendarDelegate,FSCalendarDelegateAppearance>\n\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (strong, nonatomic) NSCalendar *gregorian;\n@property (strong, nonatomic) NSDateFormatter *dateFormatter1;\n@property (strong, nonatomic) NSDateFormatter *dateFormatter2;\n\n@property (strong, nonatomic) NSDictionary *fillSelectionColors;\n@property (strong, nonatomic) NSDictionary *fillDefaultColors;\n@property (strong, nonatomic) NSDictionary *borderDefaultColors;\n@property (strong, nonatomic) NSDictionary *borderSelectionColors;\n\n@property (strong, nonatomic) NSArray *datesWithEvent;\n@property (strong, nonatomic) NSArray *datesWithMultipleEvents;\n\n@end\n\nNS_ASSUME_NONNULL_END\n\n@implementation DelegateAppearanceViewController\n\n#pragma mark - Life cycle\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.title = @\"FSCalendar\";\n        \n        self.fillDefaultColors = @{@\"2020/10/08\":[UIColor purpleColor],\n                                     @\"2020/10/06\":[UIColor greenColor],\n                                     @\"2020/10/18\":[UIColor cyanColor],\n                                     @\"2020/10/22\":[UIColor yellowColor],\n                                     @\"2020/11/08\":[UIColor purpleColor],\n                                     @\"2020/11/06\":[UIColor greenColor],\n                                     @\"2020/11/18\":[UIColor cyanColor],\n                                     @\"2020/11/22\":[UIColor yellowColor],\n                                     @\"2020/12/08\":[UIColor purpleColor],\n                                     @\"2020/12/06\":[UIColor greenColor],\n                                     @\"2020/12/18\":[UIColor cyanColor],\n                                     @\"2020/12/22\":[UIColor magentaColor]};\n        \n        self.fillSelectionColors = @{@\"2020/10/08\":[UIColor greenColor],\n                                 @\"2020/10/06\":[UIColor purpleColor],\n                                 @\"2020/10/17\":[UIColor grayColor],\n                                 @\"2020/10/21\":[UIColor cyanColor],\n                                 @\"2020/11/08\":[UIColor greenColor],\n                                 @\"2020/11/06\":[UIColor purpleColor],\n                                 @\"2020/11/17\":[UIColor grayColor],\n                                 @\"2020/11/21\":[UIColor cyanColor],\n                                 @\"2020/12/08\":[UIColor greenColor],\n                                 @\"2020/12/06\":[UIColor purpleColor],\n                                 @\"2020/12/17\":[UIColor grayColor],\n                                 @\"2020/12/21\":[UIColor cyanColor]};\n        \n        self.borderDefaultColors = @{@\"2020/10/08\":[UIColor brownColor],\n                                     @\"2020/10/17\":[UIColor magentaColor],\n                                     @\"2020/10/21\":FSCalendarStandardSelectionColor,\n                                     @\"2020/10/25\":[UIColor blackColor],\n                                     @\"2020/11/08\":[UIColor brownColor],\n                                     @\"2020/11/17\":[UIColor magentaColor],\n                                     @\"2020/11/21\":FSCalendarStandardSelectionColor,\n                                     @\"2020/11/25\":[UIColor blackColor],\n                                     @\"2020/12/08\":[UIColor brownColor],\n                                     @\"2020/12/17\":[UIColor magentaColor],\n                                     @\"2020/12/21\":FSCalendarStandardSelectionColor,\n                                     @\"2020/12/25\":[UIColor blackColor]};\n        \n        self.borderSelectionColors = @{@\"2020/10/08\":[UIColor redColor],\n                                       @\"2020/10/17\":[UIColor purpleColor],\n                                       @\"2020/10/21\":FSCalendarStandardSelectionColor,\n                                       @\"2020/10/25\":FSCalendarStandardTodayColor,\n                                       @\"2020/11/08\":[UIColor redColor],\n                                       @\"2020/11/17\":[UIColor purpleColor],\n                                       @\"2020/11/21\":FSCalendarStandardSelectionColor,\n                                       @\"2020/11/25\":FSCalendarStandardTodayColor,\n                                       @\"2020/12/08\":[UIColor redColor],\n                                       @\"2020/12/17\":[UIColor purpleColor],\n                                       @\"2020/12/21\":FSCalendarStandardSelectionColor,\n                                       @\"2020/12/25\":FSCalendarStandardTodayColor};\n        \n        \n        self.datesWithEvent = @[@\"2020-10-03\",\n                            @\"2020-10-06\",\n                            @\"2020-10-12\",\n                            @\"2020-10-25\"];\n        \n        self.datesWithMultipleEvents = @[@\"2020-10-08\",\n                                     @\"2020-10-16\",\n                                     @\"2020-10-20\",\n                                     @\"2020-10-28\"];\n        \n        \n        self.gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n        \n        self.dateFormatter1 = [[NSDateFormatter alloc] init];\n        self.dateFormatter1.dateFormat = @\"yyyy/MM/dd\";\n        \n        self.dateFormatter2 = [[NSDateFormatter alloc] init];\n        self.dateFormatter2.dateFormat = @\"yyyy-MM-dd\";\n    }\n    return self;\n}\n\n- (void)loadView\n{\n    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];\n    view.backgroundColor = [UIColor groupTableViewBackgroundColor];\n    self.view = view;\n    \n    CGFloat height = [[UIDevice currentDevice].model hasPrefix:@\"iPad\"] ? 450 : 300;\n    FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, 64, self.view.bounds.size.width, height)];\n    calendar.dataSource = self;\n    calendar.delegate = self;\n    calendar.allowsMultipleSelection = YES;\n    calendar.swipeToChooseGesture.enabled = YES;\n    calendar.backgroundColor = [UIColor whiteColor];\n    calendar.appearance.caseOptions = FSCalendarCaseOptionsHeaderUsesUpperCase|FSCalendarCaseOptionsWeekdayUsesSingleUpperCase;\n    [self.view addSubview:calendar];\n    self.calendar = calendar;\n    \n    [calendar setCurrentPage:[self.dateFormatter1 dateFromString:@\"2020/10/03\"] animated:NO];\n    \n    UIBarButtonItem *todayItem = [[UIBarButtonItem alloc] initWithTitle:@\"TODAY\" style:UIBarButtonItemStylePlain target:self action:@selector(todayItemClicked:)];\n    self.navigationItem.rightBarButtonItem = todayItem;\n    \n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    // For UITest\n    self.calendar.accessibilityIdentifier = @\"calendar\";\n}\n\n- (void)dealloc\n{\n    NSLog(@\"%s\",__FUNCTION__);\n}\n\n#pragma mark - Target actions\n\n- (void)todayItemClicked:(id)sender\n{\n    [_calendar setCurrentPage:[NSDate date] animated:NO];\n}\n\n#pragma mark - <FSCalendarDataSource>\n\n- (NSInteger)calendar:(FSCalendar *)calendar numberOfEventsForDate:(NSDate *)date\n{\n    NSString *dateString = [self.dateFormatter2 stringFromDate:date];\n    if ([_datesWithEvent containsObject:dateString]) {\n        return 1;\n    }\n    if ([_datesWithMultipleEvents containsObject:dateString]) {\n        return 3;\n    }\n    return 0;\n}\n\n#pragma mark - <FSCalendarDelegateAppearance>\n\n- (NSArray *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventDefaultColorsForDate:(NSDate *)date\n{\n    NSString *dateString = [self.dateFormatter2 stringFromDate:date];\n    if ([_datesWithMultipleEvents containsObject:dateString]) {\n        return @[[UIColor magentaColor],appearance.eventDefaultColor,[UIColor blackColor]];\n    }\n    return nil;\n}\n\n- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillSelectionColorForDate:(NSDate *)date\n{\n    NSString *key = [self.dateFormatter1 stringFromDate:date];\n    if ([_fillSelectionColors.allKeys containsObject:key]) {\n        return _fillSelectionColors[key];\n    }\n    return appearance.selectionColor;\n}\n\n- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillDefaultColorForDate:(NSDate *)date\n{\n    NSString *key = [self.dateFormatter1 stringFromDate:date];\n    if ([_fillDefaultColors.allKeys containsObject:key]) {\n        return _fillDefaultColors[key];\n    }\n    return nil;\n}\n\n- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderDefaultColorForDate:(NSDate *)date\n{\n    NSString *key = [self.dateFormatter1 stringFromDate:date];\n    if ([_borderDefaultColors.allKeys containsObject:key]) {\n        return _borderDefaultColors[key];\n    }\n    return appearance.borderDefaultColor;\n}\n\n- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderSelectionColorForDate:(NSDate *)date\n{\n    NSString *key = [self.dateFormatter1 stringFromDate:date];\n    if ([_borderSelectionColors.allKeys containsObject:key]) {\n        return _borderSelectionColors[key];\n    }\n    return appearance.borderSelectionColor;\n}\n\n- (CGFloat)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderRadiusForDate:(nonnull NSDate *)date\n{\n    if ([@[@8,@17,@21,@25] containsObject:@([self.gregorian component:NSCalendarUnitDay fromDate:date])]) {\n        return 0.0;\n    }\n    return 1.0;\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/FSCalendar.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\t30024F951BD1015300B1C04C /* DelegateAppearanceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 30024F941BD1015300B1C04C /* DelegateAppearanceViewController.m */; };\n\t\t30145EF11D6D754D00AA5F72 /* FSCalendarTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE638CF51B8A1F550006DD1A /* FSCalendarTests.m */; };\n\t\t301F79CB1DFD39E700D8631E /* FSCalendarDelegationProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 301F79C91DFD39E700D8631E /* FSCalendarDelegationProxy.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\t301F79CC1DFD39E700D8631E /* FSCalendarDelegationProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 301F79CA1DFD39E700D8631E /* FSCalendarDelegationProxy.m */; };\n\t\t301F79CD1DFD39E700D8631E /* FSCalendarDelegationProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 301F79CA1DFD39E700D8631E /* FSCalendarDelegationProxy.m */; };\n\t\t301F93451D8802D90028BEC8 /* FSCalendarExtensionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 301F93441D8802D90028BEC8 /* FSCalendarExtensionTest.m */; };\n\t\t302811471DCA296400F8CED2 /* DIYCalendarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 302811461DCA296400F8CED2 /* DIYCalendarCell.m */; };\n\t\t3031F3EF1CDEDFC500C174D7 /* DIYExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3031F3EE1CDEDFC500C174D7 /* DIYExampleViewController.m */; };\n\t\t3055B1C21DA9323A002AFA13 /* FSCalendarExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3055B1C01DA9323A002AFA13 /* FSCalendarExtensions.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\t3055B1C31DA9323A002AFA13 /* FSCalendarExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3055B1C11DA9323A002AFA13 /* FSCalendarExtensions.m */; };\n\t\t3055B1C41DA9323A002AFA13 /* FSCalendarExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3055B1C11DA9323A002AFA13 /* FSCalendarExtensions.m */; };\n\t\t3055B1C51DA9323A002AFA13 /* FSCalendarExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3055B1C11DA9323A002AFA13 /* FSCalendarExtensions.m */; };\n\t\t308B58D81CC08FFA004E812D /* ButtonsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 308B58D71CC08FFA004E812D /* ButtonsViewController.m */; };\n\t\t3092253A1B905C4300123031 /* FSCalendarConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 309225381B905C4300123031 /* FSCalendarConstants.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t3092253B1B905C4300123031 /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 309225391B905C4300123031 /* FSCalendarConstants.m */; };\n\t\t3092253C1B905C4300123031 /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 309225391B905C4300123031 /* FSCalendarConstants.m */; };\n\t\t3095398F1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 3095398D1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\t309539901C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3095398E1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m */; };\n\t\t309539911C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3095398E1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m */; };\n\t\t309A42011D992C4A004E86CB /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 309A42001D992C4A004E86CB /* Images.xcassets */; };\n\t\t30A495541DCAD9E6000B2F31 /* FSCalendarWeekdayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 30A495521DCAD9E6000B2F31 /* FSCalendarWeekdayView.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t30A495551DCAD9E6000B2F31 /* FSCalendarWeekdayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A495531DCAD9E6000B2F31 /* FSCalendarWeekdayView.m */; };\n\t\t30A495561DCAD9E6000B2F31 /* FSCalendarWeekdayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A495531DCAD9E6000B2F31 /* FSCalendarWeekdayView.m */; };\n\t\t30B0BA9B1B8D8BC9004B9476 /* FSCalendar.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EE638CE21B8A1F550006DD1A /* FSCalendar.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t30B0BAD01B8D8E23004B9476 /* FSCalendar.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B0BAC01B8D8E22004B9476 /* FSCalendar.m */; };\n\t\t30B0BAD11B8D8E23004B9476 /* FSCalendarAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B0BAC21B8D8E22004B9476 /* FSCalendarAppearance.m */; };\n\t\t30B0BAD21B8D8E23004B9476 /* FSCalendarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B0BAC41B8D8E22004B9476 /* FSCalendarCell.m */; };\n\t\t30B0BAD31B8D8E23004B9476 /* FSCalendarHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B0BAC71B8D8E22004B9476 /* FSCalendarHeaderView.m */; };\n\t\t30B0BAF61B8D9AC1004B9476 /* FSCalendarAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B0BAC21B8D8E22004B9476 /* FSCalendarAppearance.m */; };\n\t\t30B0BAF71B8D9AC1004B9476 /* FSCalendarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B0BAC41B8D8E22004B9476 /* FSCalendarCell.m */; };\n\t\t30B0BAF81B8D9AC1004B9476 /* FSCalendarHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B0BAC71B8D8E22004B9476 /* FSCalendarHeaderView.m */; };\n\t\t30B0BAFC1B8D9AD4004B9476 /* FSCalendar.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B0BABF1B8D8E22004B9476 /* FSCalendar.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t30B0BB011B8D9B6C004B9476 /* FSCalendarAppearance.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B0BAC11B8D8E22004B9476 /* FSCalendarAppearance.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t30B0BB021B8D9B6C004B9476 /* FSCalendarCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B0BAC31B8D8E22004B9476 /* FSCalendarCell.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t30B0BB031B8D9B6D004B9476 /* FSCalendarDynamicHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B0BAC51B8D8E22004B9476 /* FSCalendarDynamicHeader.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\t30B0BB041B8D9B6D004B9476 /* FSCalendarHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B0BAC61B8D8E22004B9476 /* FSCalendarHeaderView.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t30CEF9001C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 30CEF8FE1C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\t30CEF9011C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 30CEF8FF1C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.m */; };\n\t\t30CEF9021C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 30CEF8FF1C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.m */; };\n\t\t30D55B101C90240000BB43D5 /* HidePlaceholderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 30D55B0F1C90240000BB43D5 /* HidePlaceholderViewController.m */; };\n\t\t30DBE3C41DC641AD005A22B7 /* FSCalendarCalculator.h in Headers */ = {isa = PBXBuildFile; fileRef = 30DBE3C21DC641AD005A22B7 /* FSCalendarCalculator.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\t30DBE3C51DC641AD005A22B7 /* FSCalendarCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = 30DBE3C31DC641AD005A22B7 /* FSCalendarCalculator.m */; };\n\t\t30DBE3C61DC641AD005A22B7 /* FSCalendarCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = 30DBE3C31DC641AD005A22B7 /* FSCalendarCalculator.m */; };\n\t\t30F4C90F1E07C12B00D2EC4D /* FSCalendarDelegationFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 30F4C90D1E07C12B00D2EC4D /* FSCalendarDelegationFactory.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\t30F4C9101E07C12B00D2EC4D /* FSCalendarDelegationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C90E1E07C12B00D2EC4D /* FSCalendarDelegationFactory.m */; };\n\t\t30F4C9111E07C12B00D2EC4D /* FSCalendarDelegationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C90E1E07C12B00D2EC4D /* FSCalendarDelegationFactory.m */; };\n\t\t30F4C9121E07C12B00D2EC4D /* FSCalendarDelegationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C90E1E07C12B00D2EC4D /* FSCalendarDelegationFactory.m */; };\n\t\t30F5D8561B9FC33400C1C201 /* FSCalendar.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B0BAC01B8D8E22004B9476 /* FSCalendar.m */; };\n\t\t30FCB3961BAAD112002B87AD /* FSCalendarStickyHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 30FCB3941BAAD112002B87AD /* FSCalendarStickyHeader.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\t30FCB3971BAAD112002B87AD /* FSCalendarStickyHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 30FCB3951BAAD112002B87AD /* FSCalendarStickyHeader.m */; };\n\t\t30FCB3981BAAD112002B87AD /* FSCalendarStickyHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 30FCB3951BAAD112002B87AD /* FSCalendarStickyHeader.m */; };\n\t\t50F2ADE8216D954A00CC481F /* FSCalendarSeparatorDecorationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F2ADE6216D954A00CC481F /* FSCalendarSeparatorDecorationView.h */; };\n\t\t50F2ADE9216D954A00CC481F /* FSCalendarSeparatorDecorationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F2ADE7216D954A00CC481F /* FSCalendarSeparatorDecorationView.m */; };\n\t\t50F2ADEA216D954A00CC481F /* FSCalendarSeparatorDecorationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F2ADE7216D954A00CC481F /* FSCalendarSeparatorDecorationView.m */; };\n\t\tEE52AE181B91E68A00016662 /* FSCalendarScopeExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE52AE171B91E68A00016662 /* FSCalendarScopeExampleViewController.m */; };\n\t\tEE638CC31B89DB6E0006DD1A /* LoadViewExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE638CC21B89DB6E0006DD1A /* LoadViewExampleViewController.m */; };\n\t\tEE638CC91B89DB940006DD1A /* CalendarConfigViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE638CC81B89DB940006DD1A /* CalendarConfigViewController.m */; };\n\t\tEE638CCB1B89DBAC0006DD1A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EE638CCA1B89DBAC0006DD1A /* main.m */; };\n\t\tEE638CCE1B89DBD80006DD1A /* StoryboardExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE638CCD1B89DBD80006DD1A /* StoryboardExampleViewController.m */; };\n\t\tEE638CD31B89DBE90006DD1A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EE638CD01B89DBE90006DD1A /* AppDelegate.m */; };\n\t\tEE638CD41B89DBE90006DD1A /* FSTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE638CD21B89DBE90006DD1A /* FSTableViewController.m */; };\n\t\tEE638CDA1B89DC0A0006DD1A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EE638CD71B89DC090006DD1A /* Main.storyboard */; };\n\t\tEEC9C0391BDC9E7000383A07 /* FSCalendarCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC9C0371BDC9E7000383A07 /* FSCalendarCollectionView.h */; settings = {ATTRIBUTES = (Private, ); }; };\n\t\tEEC9C03A1BDC9E7000383A07 /* FSCalendarCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC9C0381BDC9E7000383A07 /* FSCalendarCollectionView.m */; };\n\t\tEEC9C03B1BDC9E7000383A07 /* FSCalendarCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC9C0381BDC9E7000383A07 /* FSCalendarCollectionView.m */; };\n\t\tEECA10F81BA9C0E400945B83 /* FullScreenExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EECA10F71BA9C0E400945B83 /* FullScreenExampleViewController.m */; };\n\t\tF9384A651E3ACEFB001601E0 /* FSCalendarExampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = F9384A641E3ACEFB001601E0 /* FSCalendarExampleUITests.m */; };\n\t\tF9564BF01E2DB8CA00FC9342 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = F9564BEF1E2DB8CA00FC9342 /* LaunchScreen.xib */; };\n\t\tF971A0C41F2651A7000369FD /* LunarFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = F971A0C31F2651A7000369FD /* LunarFormatter.m */; };\n\t\tF988B1C81EA6046700609E59 /* RangePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F988B1C71EA6046700609E59 /* RangePickerViewController.m */; };\n\t\tF988B1CB1EA6054400609E59 /* RangePickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F988B1CA1EA6054400609E59 /* RangePickerCell.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t30671DCC1D6D574C00BCFC4E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = EE0D7FBF1B89C5D3003C287B /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EE0D7FC61B89C5D3003C287B;\n\t\t\tremoteInfo = FSCalendarExample;\n\t\t};\n\t\t30B0BA961B8D8B02004B9476 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = EE0D7FBF1B89C5D3003C287B /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EE638CE11B8A1F550006DD1A;\n\t\t\tremoteInfo = FSCalendar;\n\t\t};\n\t\tF9384A671E3ACEFB001601E0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = EE0D7FBF1B89C5D3003C287B /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EE0D7FC61B89C5D3003C287B;\n\t\t\tremoteInfo = FSCalendarExample;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tEE638CFE1B8A1F550006DD1A /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t30B0BA9B1B8D8BC9004B9476 /* FSCalendar.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t30024F931BD1015300B1C04C /* DelegateAppearanceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DelegateAppearanceViewController.h; sourceTree = SOURCE_ROOT; };\n\t\t30024F941BD1015300B1C04C /* DelegateAppearanceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DelegateAppearanceViewController.m; sourceTree = SOURCE_ROOT; };\n\t\t301F79C91DFD39E700D8631E /* FSCalendarDelegationProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDelegationProxy.h; sourceTree = \"<group>\"; };\n\t\t301F79CA1DFD39E700D8631E /* FSCalendarDelegationProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarDelegationProxy.m; sourceTree = \"<group>\"; };\n\t\t301F93441D8802D90028BEC8 /* FSCalendarExtensionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensionTest.m; sourceTree = \"<group>\"; };\n\t\t302811451DCA296400F8CED2 /* DIYCalendarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = DIYCalendarCell.h; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };\n\t\t302811461DCA296400F8CED2 /* DIYCalendarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = DIYCalendarCell.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; };\n\t\t3031F3ED1CDEDFC500C174D7 /* DIYExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = DIYExampleViewController.h; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };\n\t\t3031F3EE1CDEDFC500C174D7 /* DIYExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = DIYExampleViewController.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; };\n\t\t3055B1C01DA9323A002AFA13 /* FSCalendarExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarExtensions.h; sourceTree = \"<group>\"; };\n\t\t3055B1C11DA9323A002AFA13 /* FSCalendarExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensions.m; sourceTree = \"<group>\"; };\n\t\t30671DC71D6D574C00BCFC4E /* FSCalendarTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FSCalendarTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t308B58D61CC08FFA004E812D /* ButtonsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ButtonsViewController.h; sourceTree = SOURCE_ROOT; };\n\t\t308B58D71CC08FFA004E812D /* ButtonsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ButtonsViewController.m; sourceTree = SOURCE_ROOT; };\n\t\t309225381B905C4300123031 /* FSCalendarConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarConstants.h; sourceTree = \"<group>\"; };\n\t\t309225391B905C4300123031 /* FSCalendarConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarConstants.m; sourceTree = \"<group>\"; };\n\t\t3095398D1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = \"<group>\"; };\n\t\t3095398E1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = \"<group>\"; };\n\t\t309A42001D992C4A004E86CB /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = SOURCE_ROOT; };\n\t\t30A495521DCAD9E6000B2F31 /* FSCalendarWeekdayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarWeekdayView.h; sourceTree = \"<group>\"; };\n\t\t30A495531DCAD9E6000B2F31 /* FSCalendarWeekdayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarWeekdayView.m; sourceTree = \"<group>\"; };\n\t\t30B0BABF1B8D8E22004B9476 /* FSCalendar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendar.h; sourceTree = \"<group>\"; };\n\t\t30B0BAC01B8D8E22004B9476 /* FSCalendar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = FSCalendar.m; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };\n\t\t30B0BAC11B8D8E22004B9476 /* FSCalendarAppearance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarAppearance.h; sourceTree = \"<group>\"; };\n\t\t30B0BAC21B8D8E22004B9476 /* FSCalendarAppearance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarAppearance.m; sourceTree = \"<group>\"; };\n\t\t30B0BAC31B8D8E22004B9476 /* FSCalendarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = FSCalendarCell.h; sourceTree = \"<group>\"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };\n\t\t30B0BAC41B8D8E22004B9476 /* FSCalendarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCell.m; sourceTree = \"<group>\"; };\n\t\t30B0BAC51B8D8E22004B9476 /* FSCalendarDynamicHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDynamicHeader.h; sourceTree = \"<group>\"; };\n\t\t30B0BAC61B8D8E22004B9476 /* FSCalendarHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarHeaderView.h; sourceTree = \"<group>\"; };\n\t\t30B0BAC71B8D8E22004B9476 /* FSCalendarHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarHeaderView.m; sourceTree = \"<group>\"; };\n\t\t30CEF8FE1C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarTransitionCoordinator.h; sourceTree = \"<group>\"; };\n\t\t30CEF8FF1C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarTransitionCoordinator.m; sourceTree = \"<group>\"; };\n\t\t30D55B0E1C90240000BB43D5 /* HidePlaceholderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HidePlaceholderViewController.h; sourceTree = SOURCE_ROOT; };\n\t\t30D55B0F1C90240000BB43D5 /* HidePlaceholderViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HidePlaceholderViewController.m; sourceTree = SOURCE_ROOT; };\n\t\t30DBE3C21DC641AD005A22B7 /* FSCalendarCalculator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCalculator.h; sourceTree = \"<group>\"; };\n\t\t30DBE3C31DC641AD005A22B7 /* FSCalendarCalculator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCalculator.m; sourceTree = \"<group>\"; };\n\t\t30F4C90D1E07C12B00D2EC4D /* FSCalendarDelegationFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDelegationFactory.h; sourceTree = \"<group>\"; };\n\t\t30F4C90E1E07C12B00D2EC4D /* FSCalendarDelegationFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarDelegationFactory.m; sourceTree = \"<group>\"; };\n\t\t30FCB3941BAAD112002B87AD /* FSCalendarStickyHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarStickyHeader.h; sourceTree = \"<group>\"; };\n\t\t30FCB3951BAAD112002B87AD /* FSCalendarStickyHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarStickyHeader.m; sourceTree = \"<group>\"; };\n\t\t50F2ADE6216D954A00CC481F /* FSCalendarSeparatorDecorationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FSCalendarSeparatorDecorationView.h; sourceTree = \"<group>\"; };\n\t\t50F2ADE7216D954A00CC481F /* FSCalendarSeparatorDecorationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FSCalendarSeparatorDecorationView.m; sourceTree = \"<group>\"; };\n\t\t9C88197F25F26B2F00E180CD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tEE0D7FC71B89C5D3003C287B /* FSCalendarExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FSCalendarExample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEE0D7FCB1B89C5D3003C287B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tEE52AE161B91E68A00016662 /* FSCalendarScopeExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarScopeExampleViewController.h; sourceTree = SOURCE_ROOT; };\n\t\tEE52AE171B91E68A00016662 /* FSCalendarScopeExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarScopeExampleViewController.m; sourceTree = SOURCE_ROOT; };\n\t\tEE638CC11B89DB6E0006DD1A /* LoadViewExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadViewExampleViewController.h; sourceTree = SOURCE_ROOT; };\n\t\tEE638CC21B89DB6E0006DD1A /* LoadViewExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoadViewExampleViewController.m; sourceTree = SOURCE_ROOT; };\n\t\tEE638CC71B89DB940006DD1A /* CalendarConfigViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalendarConfigViewController.h; sourceTree = SOURCE_ROOT; };\n\t\tEE638CC81B89DB940006DD1A /* CalendarConfigViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CalendarConfigViewController.m; sourceTree = SOURCE_ROOT; };\n\t\tEE638CCA1B89DBAC0006DD1A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; };\n\t\tEE638CCC1B89DBD80006DD1A /* StoryboardExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StoryboardExampleViewController.h; sourceTree = SOURCE_ROOT; };\n\t\tEE638CCD1B89DBD80006DD1A /* StoryboardExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StoryboardExampleViewController.m; sourceTree = SOURCE_ROOT; };\n\t\tEE638CCF1B89DBE90006DD1A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };\n\t\tEE638CD01B89DBE90006DD1A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };\n\t\tEE638CD11B89DBE90006DD1A /* FSTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSTableViewController.h; sourceTree = SOURCE_ROOT; };\n\t\tEE638CD21B89DBE90006DD1A /* FSTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = FSTableViewController.m; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objc; };\n\t\tEE638CD81B89DC0A0006DD1A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = SOURCE_ROOT; };\n\t\tEE638CE21B8A1F550006DD1A /* FSCalendar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FSCalendar.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEE638CF41B8A1F550006DD1A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tEE638CF51B8A1F550006DD1A /* FSCalendarTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FSCalendarTests.m; sourceTree = \"<group>\"; };\n\t\tEEC9C0371BDC9E7000383A07 /* FSCalendarCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionView.h; sourceTree = \"<group>\"; };\n\t\tEEC9C0381BDC9E7000383A07 /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = \"<group>\"; };\n\t\tEECA10F61BA9C0E400945B83 /* FullScreenExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FullScreenExampleViewController.h; sourceTree = SOURCE_ROOT; };\n\t\tEECA10F71BA9C0E400945B83 /* FullScreenExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FullScreenExampleViewController.m; sourceTree = SOURCE_ROOT; };\n\t\tF9384A621E3ACEFB001601E0 /* FSCalendarExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FSCalendarExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF9384A641E3ACEFB001601E0 /* FSCalendarExampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExampleUITests.m; sourceTree = \"<group>\"; };\n\t\tF9384A661E3ACEFB001601E0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tF9564BEF1E2DB8CA00FC9342 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = SOURCE_ROOT; };\n\t\tF971A0C21F2651A7000369FD /* LunarFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LunarFormatter.h; sourceTree = SOURCE_ROOT; };\n\t\tF971A0C31F2651A7000369FD /* LunarFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LunarFormatter.m; sourceTree = SOURCE_ROOT; };\n\t\tF988B1C61EA6046700609E59 /* RangePickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RangePickerViewController.h; sourceTree = SOURCE_ROOT; };\n\t\tF988B1C71EA6046700609E59 /* RangePickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RangePickerViewController.m; sourceTree = SOURCE_ROOT; };\n\t\tF988B1C91EA6054400609E59 /* RangePickerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RangePickerCell.h; sourceTree = SOURCE_ROOT; };\n\t\tF988B1CA1EA6054400609E59 /* RangePickerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RangePickerCell.m; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t30671DC41D6D574C00BCFC4E /* 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\t\tEE0D7FC41B89C5D3003C287B /* 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\t\tEE638CDE1B8A1F550006DD1A /* 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\t\tF9384A5F1E3ACEFB001601E0 /* 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\t30024F921BD1013D00B1C04C /* Delegate Appearance */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t30024F931BD1015300B1C04C /* DelegateAppearanceViewController.h */,\n\t\t\t\t30024F941BD1015300B1C04C /* DelegateAppearanceViewController.m */,\n\t\t\t);\n\t\t\tname = \"Delegate Appearance\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3031F3EC1CDEDFA700C174D7 /* DIY */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3031F3ED1CDEDFC500C174D7 /* DIYExampleViewController.h */,\n\t\t\t\t3031F3EE1CDEDFC500C174D7 /* DIYExampleViewController.m */,\n\t\t\t\t302811451DCA296400F8CED2 /* DIYCalendarCell.h */,\n\t\t\t\t302811461DCA296400F8CED2 /* DIYCalendarCell.m */,\n\t\t\t);\n\t\t\tname = DIY;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t308B58D51CC08FA4004E812D /* Prev-Next-Buttons */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t308B58D61CC08FFA004E812D /* ButtonsViewController.h */,\n\t\t\t\t308B58D71CC08FFA004E812D /* ButtonsViewController.m */,\n\t\t\t);\n\t\t\tname = \"Prev-Next-Buttons\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t30B0BABC1B8D8E22004B9476 /* FSCalendar */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9C88197F25F26B2F00E180CD /* Info.plist */,\n\t\t\t\t30B0BABF1B8D8E22004B9476 /* FSCalendar.h */,\n\t\t\t\t30B0BAC01B8D8E22004B9476 /* FSCalendar.m */,\n\t\t\t\t30B0BAC11B8D8E22004B9476 /* FSCalendarAppearance.h */,\n\t\t\t\t30B0BAC21B8D8E22004B9476 /* FSCalendarAppearance.m */,\n\t\t\t\t30DBE3C21DC641AD005A22B7 /* FSCalendarCalculator.h */,\n\t\t\t\t30DBE3C31DC641AD005A22B7 /* FSCalendarCalculator.m */,\n\t\t\t\t30B0BAC31B8D8E22004B9476 /* FSCalendarCell.h */,\n\t\t\t\t30B0BAC41B8D8E22004B9476 /* FSCalendarCell.m */,\n\t\t\t\tEEC9C0371BDC9E7000383A07 /* FSCalendarCollectionView.h */,\n\t\t\t\tEEC9C0381BDC9E7000383A07 /* FSCalendarCollectionView.m */,\n\t\t\t\t3095398D1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h */,\n\t\t\t\t3095398E1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m */,\n\t\t\t\t50F2ADE6216D954A00CC481F /* FSCalendarSeparatorDecorationView.h */,\n\t\t\t\t50F2ADE7216D954A00CC481F /* FSCalendarSeparatorDecorationView.m */,\n\t\t\t\t30B0BAC61B8D8E22004B9476 /* FSCalendarHeaderView.h */,\n\t\t\t\t30B0BAC71B8D8E22004B9476 /* FSCalendarHeaderView.m */,\n\t\t\t\t30A495521DCAD9E6000B2F31 /* FSCalendarWeekdayView.h */,\n\t\t\t\t30A495531DCAD9E6000B2F31 /* FSCalendarWeekdayView.m */,\n\t\t\t\t30FCB3941BAAD112002B87AD /* FSCalendarStickyHeader.h */,\n\t\t\t\t30FCB3951BAAD112002B87AD /* FSCalendarStickyHeader.m */,\n\t\t\t\t30CEF8FE1C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.h */,\n\t\t\t\t30CEF8FF1C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.m */,\n\t\t\t\t301F79C91DFD39E700D8631E /* FSCalendarDelegationProxy.h */,\n\t\t\t\t301F79CA1DFD39E700D8631E /* FSCalendarDelegationProxy.m */,\n\t\t\t\t30F4C90D1E07C12B00D2EC4D /* FSCalendarDelegationFactory.h */,\n\t\t\t\t30F4C90E1E07C12B00D2EC4D /* FSCalendarDelegationFactory.m */,\n\t\t\t\t3055B1C01DA9323A002AFA13 /* FSCalendarExtensions.h */,\n\t\t\t\t3055B1C11DA9323A002AFA13 /* FSCalendarExtensions.m */,\n\t\t\t\t309225381B905C4300123031 /* FSCalendarConstants.h */,\n\t\t\t\t309225391B905C4300123031 /* FSCalendarConstants.m */,\n\t\t\t\t30B0BAC51B8D8E22004B9476 /* FSCalendarDynamicHeader.h */,\n\t\t\t);\n\t\t\tname = FSCalendar;\n\t\t\tpath = ../FSCalendar;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t30D55B0D1C9023E400BB43D5 /* Hide Placeholders */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t30D55B0E1C90240000BB43D5 /* HidePlaceholderViewController.h */,\n\t\t\t\t30D55B0F1C90240000BB43D5 /* HidePlaceholderViewController.m */,\n\t\t\t);\n\t\t\tname = \"Hide Placeholders\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0D7FBE1B89C5D3003C287B = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t30B0BABC1B8D8E22004B9476 /* FSCalendar */,\n\t\t\t\tEE0D7FC91B89C5D3003C287B /* Example */,\n\t\t\t\tEE638CF21B8A1F550006DD1A /* FSCalendarTests */,\n\t\t\t\tF9384A631E3ACEFB001601E0 /* FSCalendarExampleUITests */,\n\t\t\t\tEE0D7FC81B89C5D3003C287B /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0D7FC81B89C5D3003C287B /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE0D7FC71B89C5D3003C287B /* FSCalendarExample.app */,\n\t\t\t\tEE638CE21B8A1F550006DD1A /* FSCalendar.framework */,\n\t\t\t\t30671DC71D6D574C00BCFC4E /* FSCalendarTests.xctest */,\n\t\t\t\tF9384A621E3ACEFB001601E0 /* FSCalendarExampleUITests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0D7FC91B89C5D3003C287B /* Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE638CD71B89DC090006DD1A /* Main.storyboard */,\n\t\t\t\tEE638CCF1B89DBE90006DD1A /* AppDelegate.h */,\n\t\t\t\tEE638CD01B89DBE90006DD1A /* AppDelegate.m */,\n\t\t\t\tEE638CD11B89DBE90006DD1A /* FSTableViewController.h */,\n\t\t\t\tEE638CD21B89DBE90006DD1A /* FSTableViewController.m */,\n\t\t\t\tF971A0C11F265166000369FD /* LunarFormatter */,\n\t\t\t\tF94A976E1EA6036E004F8F4D /* Range Picker */,\n\t\t\t\t3031F3EC1CDEDFA700C174D7 /* DIY */,\n\t\t\t\t308B58D51CC08FA4004E812D /* Prev-Next-Buttons */,\n\t\t\t\t30D55B0D1C9023E400BB43D5 /* Hide Placeholders */,\n\t\t\t\t30024F921BD1013D00B1C04C /* Delegate Appearance */,\n\t\t\t\tEECA10F51BA9BF9B00945B83 /* Fullscreen Example */,\n\t\t\t\tEE52AE151B91E65D00016662 /* FSCalendarScope Example */,\n\t\t\t\tEE0D80241B89C868003C287B /* Storyboard Example */,\n\t\t\t\tEE0D80231B89C853003C287B /* LoadView Example */,\n\t\t\t\tEE0D7FCA1B89C5D3003C287B /* Supporting Files */,\n\t\t\t);\n\t\t\tname = Example;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0D7FCA1B89C5D3003C287B /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9564BEF1E2DB8CA00FC9342 /* LaunchScreen.xib */,\n\t\t\t\t309A42001D992C4A004E86CB /* Images.xcassets */,\n\t\t\t\tEE0D7FCB1B89C5D3003C287B /* Info.plist */,\n\t\t\t\tEE638CCA1B89DBAC0006DD1A /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0D80231B89C853003C287B /* LoadView Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE638CC11B89DB6E0006DD1A /* LoadViewExampleViewController.h */,\n\t\t\t\tEE638CC21B89DB6E0006DD1A /* LoadViewExampleViewController.m */,\n\t\t\t);\n\t\t\tname = \"LoadView Example\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0D80241B89C868003C287B /* Storyboard Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE638CCC1B89DBD80006DD1A /* StoryboardExampleViewController.h */,\n\t\t\t\tEE638CCD1B89DBD80006DD1A /* StoryboardExampleViewController.m */,\n\t\t\t\tEE638CC71B89DB940006DD1A /* CalendarConfigViewController.h */,\n\t\t\t\tEE638CC81B89DB940006DD1A /* CalendarConfigViewController.m */,\n\t\t\t);\n\t\t\tname = \"Storyboard Example\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE52AE151B91E65D00016662 /* FSCalendarScope Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE52AE161B91E68A00016662 /* FSCalendarScopeExampleViewController.h */,\n\t\t\t\tEE52AE171B91E68A00016662 /* FSCalendarScopeExampleViewController.m */,\n\t\t\t);\n\t\t\tname = \"FSCalendarScope Example\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE638CF21B8A1F550006DD1A /* FSCalendarTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE638CF51B8A1F550006DD1A /* FSCalendarTests.m */,\n\t\t\t\t301F93441D8802D90028BEC8 /* FSCalendarExtensionTest.m */,\n\t\t\t\tEE638CF31B8A1F550006DD1A /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = FSCalendarTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE638CF31B8A1F550006DD1A /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE638CF41B8A1F550006DD1A /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEECA10F51BA9BF9B00945B83 /* Fullscreen Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEECA10F61BA9C0E400945B83 /* FullScreenExampleViewController.h */,\n\t\t\t\tEECA10F71BA9C0E400945B83 /* FullScreenExampleViewController.m */,\n\t\t\t);\n\t\t\tname = \"Fullscreen Example\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9384A631E3ACEFB001601E0 /* FSCalendarExampleUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9384A641E3ACEFB001601E0 /* FSCalendarExampleUITests.m */,\n\t\t\t\tF9384A661E3ACEFB001601E0 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = FSCalendarExampleUITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF94A976E1EA6036E004F8F4D /* Range Picker */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF988B1C61EA6046700609E59 /* RangePickerViewController.h */,\n\t\t\t\tF988B1C71EA6046700609E59 /* RangePickerViewController.m */,\n\t\t\t\tF988B1C91EA6054400609E59 /* RangePickerCell.h */,\n\t\t\t\tF988B1CA1EA6054400609E59 /* RangePickerCell.m */,\n\t\t\t);\n\t\t\tname = \"Range Picker\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF971A0C11F265166000369FD /* LunarFormatter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF971A0C21F2651A7000369FD /* LunarFormatter.h */,\n\t\t\t\tF971A0C31F2651A7000369FD /* LunarFormatter.m */,\n\t\t\t);\n\t\t\tname = LunarFormatter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\tEE638CDF1B8A1F550006DD1A /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t50F2ADE8216D954A00CC481F /* FSCalendarSeparatorDecorationView.h in Headers */,\n\t\t\t\t30B0BAFC1B8D9AD4004B9476 /* FSCalendar.h in Headers */,\n\t\t\t\t30B0BB011B8D9B6C004B9476 /* FSCalendarAppearance.h in Headers */,\n\t\t\t\t3092253A1B905C4300123031 /* FSCalendarConstants.h in Headers */,\n\t\t\t\t30B0BB021B8D9B6C004B9476 /* FSCalendarCell.h in Headers */,\n\t\t\t\t30B0BB041B8D9B6D004B9476 /* FSCalendarHeaderView.h in Headers */,\n\t\t\t\t30A495541DCAD9E6000B2F31 /* FSCalendarWeekdayView.h in Headers */,\n\t\t\t\tEEC9C0391BDC9E7000383A07 /* FSCalendarCollectionView.h in Headers */,\n\t\t\t\t30FCB3961BAAD112002B87AD /* FSCalendarStickyHeader.h in Headers */,\n\t\t\t\t3095398F1C38D66C00BD37AA /* FSCalendarCollectionViewLayout.h in Headers */,\n\t\t\t\t3055B1C21DA9323A002AFA13 /* FSCalendarExtensions.h in Headers */,\n\t\t\t\t301F79CB1DFD39E700D8631E /* FSCalendarDelegationProxy.h in Headers */,\n\t\t\t\t30F4C90F1E07C12B00D2EC4D /* FSCalendarDelegationFactory.h in Headers */,\n\t\t\t\t30DBE3C41DC641AD005A22B7 /* FSCalendarCalculator.h in Headers */,\n\t\t\t\t30CEF9001C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.h in Headers */,\n\t\t\t\t30B0BB031B8D9B6D004B9476 /* FSCalendarDynamicHeader.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\t30671DC61D6D574C00BCFC4E /* FSCalendarTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 30671DCE1D6D574C00BCFC4E /* Build configuration list for PBXNativeTarget \"FSCalendarTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t30671DC31D6D574C00BCFC4E /* Sources */,\n\t\t\t\t30671DC41D6D574C00BCFC4E /* Frameworks */,\n\t\t\t\t30671DC51D6D574C00BCFC4E /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t30671DCD1D6D574C00BCFC4E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = FSCalendarTests;\n\t\t\tproductName = FSCalendarTests;\n\t\t\tproductReference = 30671DC71D6D574C00BCFC4E /* FSCalendarTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tEE0D7FC61B89C5D3003C287B /* FSCalendarExample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = EE0D7FEA1B89C5D3003C287B /* Build configuration list for PBXNativeTarget \"FSCalendarExample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tEE0D7FC31B89C5D3003C287B /* Sources */,\n\t\t\t\tEE0D7FC41B89C5D3003C287B /* Frameworks */,\n\t\t\t\tEE0D7FC51B89C5D3003C287B /* Resources */,\n\t\t\t\tEE638CFE1B8A1F550006DD1A /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t30B0BA971B8D8B02004B9476 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = FSCalendarExample;\n\t\t\tproductName = FSCalendar;\n\t\t\tproductReference = EE0D7FC71B89C5D3003C287B /* FSCalendarExample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tEE638CE11B8A1F550006DD1A /* FSCalendar */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = EE638CFB1B8A1F550006DD1A /* Build configuration list for PBXNativeTarget \"FSCalendar\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tEE638CDD1B8A1F550006DD1A /* Sources */,\n\t\t\t\tEE638CDE1B8A1F550006DD1A /* Frameworks */,\n\t\t\t\tEE638CDF1B8A1F550006DD1A /* Headers */,\n\t\t\t\tEE638CE01B8A1F550006DD1A /* 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 = FSCalendar;\n\t\t\tproductName = FSCalendar;\n\t\t\tproductReference = EE638CE21B8A1F550006DD1A /* FSCalendar.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tF9384A611E3ACEFB001601E0 /* FSCalendarExampleUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F9384A6B1E3ACEFB001601E0 /* Build configuration list for PBXNativeTarget \"FSCalendarExampleUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF9384A5E1E3ACEFB001601E0 /* Sources */,\n\t\t\t\tF9384A5F1E3ACEFB001601E0 /* Frameworks */,\n\t\t\t\tF9384A601E3ACEFB001601E0 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tF9384A681E3ACEFB001601E0 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = FSCalendarExampleUITests;\n\t\t\tproductName = FSCalendarExampleUITests;\n\t\t\tproductReference = F9384A621E3ACEFB001601E0 /* FSCalendarExampleUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tEE0D7FBF1B89C5D3003C287B /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0930;\n\t\t\t\tORGANIZATIONNAME = wenchaoios;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t30671DC61D6D574C00BCFC4E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tTestTargetID = EE0D7FC61B89C5D3003C287B;\n\t\t\t\t\t};\n\t\t\t\t\tEE0D7FC61B89C5D3003C287B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.4;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t};\n\t\t\t\t\tEE638CE11B8A1F550006DD1A = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.4;\n\t\t\t\t\t};\n\t\t\t\t\tF9384A611E3ACEFB001601E0 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = EE0D7FC61B89C5D3003C287B;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = EE0D7FC21B89C5D3003C287B /* Build configuration list for PBXProject \"FSCalendar\" */;\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\tja,\n\t\t\t\t\"zh-Hans\",\n\t\t\t\t\"zh-Hant\",\n\t\t\t);\n\t\t\tmainGroup = EE0D7FBE1B89C5D3003C287B;\n\t\t\tproductRefGroup = EE0D7FC81B89C5D3003C287B /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tEE0D7FC61B89C5D3003C287B /* FSCalendarExample */,\n\t\t\t\tEE638CE11B8A1F550006DD1A /* FSCalendar */,\n\t\t\t\t30671DC61D6D574C00BCFC4E /* FSCalendarTests */,\n\t\t\t\tF9384A611E3ACEFB001601E0 /* FSCalendarExampleUITests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t30671DC51D6D574C00BCFC4E /* 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\t\tEE0D7FC51B89C5D3003C287B /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9564BF01E2DB8CA00FC9342 /* LaunchScreen.xib in Resources */,\n\t\t\t\tEE638CDA1B89DC0A0006DD1A /* Main.storyboard in Resources */,\n\t\t\t\t309A42011D992C4A004E86CB /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEE638CE01B8A1F550006DD1A /* 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\t\tF9384A601E3ACEFB001601E0 /* 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\t30671DC31D6D574C00BCFC4E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3055B1C51DA9323A002AFA13 /* FSCalendarExtensions.m in Sources */,\n\t\t\t\t301F93451D8802D90028BEC8 /* FSCalendarExtensionTest.m in Sources */,\n\t\t\t\t30145EF11D6D754D00AA5F72 /* FSCalendarTests.m in Sources */,\n\t\t\t\t30F4C9121E07C12B00D2EC4D /* FSCalendarDelegationFactory.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEE0D7FC31B89C5D3003C287B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEE638CCB1B89DBAC0006DD1A /* main.m in Sources */,\n\t\t\t\tF971A0C41F2651A7000369FD /* LunarFormatter.m in Sources */,\n\t\t\t\tEE638CCE1B89DBD80006DD1A /* StoryboardExampleViewController.m in Sources */,\n\t\t\t\tEECA10F81BA9C0E400945B83 /* FullScreenExampleViewController.m in Sources */,\n\t\t\t\t30DBE3C51DC641AD005A22B7 /* FSCalendarCalculator.m in Sources */,\n\t\t\t\tEE638CC91B89DB940006DD1A /* CalendarConfigViewController.m in Sources */,\n\t\t\t\t30B0BAD01B8D8E23004B9476 /* FSCalendar.m in Sources */,\n\t\t\t\tEE638CD31B89DBE90006DD1A /* AppDelegate.m in Sources */,\n\t\t\t\t30A495551DCAD9E6000B2F31 /* FSCalendarWeekdayView.m in Sources */,\n\t\t\t\t3092253B1B905C4300123031 /* FSCalendarConstants.m in Sources */,\n\t\t\t\t50F2ADE9216D954A00CC481F /* FSCalendarSeparatorDecorationView.m in Sources */,\n\t\t\t\t30F4C9101E07C12B00D2EC4D /* FSCalendarDelegationFactory.m in Sources */,\n\t\t\t\t309539901C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m in Sources */,\n\t\t\t\t30FCB3971BAAD112002B87AD /* FSCalendarStickyHeader.m in Sources */,\n\t\t\t\t30B0BAD21B8D8E23004B9476 /* FSCalendarCell.m in Sources */,\n\t\t\t\tEE638CD41B89DBE90006DD1A /* FSTableViewController.m in Sources */,\n\t\t\t\t302811471DCA296400F8CED2 /* DIYCalendarCell.m in Sources */,\n\t\t\t\t308B58D81CC08FFA004E812D /* ButtonsViewController.m in Sources */,\n\t\t\t\t30B0BAD11B8D8E23004B9476 /* FSCalendarAppearance.m in Sources */,\n\t\t\t\t30CEF9011C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.m in Sources */,\n\t\t\t\tEEC9C03A1BDC9E7000383A07 /* FSCalendarCollectionView.m in Sources */,\n\t\t\t\t301F79CC1DFD39E700D8631E /* FSCalendarDelegationProxy.m in Sources */,\n\t\t\t\tF988B1C81EA6046700609E59 /* RangePickerViewController.m in Sources */,\n\t\t\t\t30D55B101C90240000BB43D5 /* HidePlaceholderViewController.m in Sources */,\n\t\t\t\t3055B1C31DA9323A002AFA13 /* FSCalendarExtensions.m in Sources */,\n\t\t\t\t3031F3EF1CDEDFC500C174D7 /* DIYExampleViewController.m in Sources */,\n\t\t\t\tEE52AE181B91E68A00016662 /* FSCalendarScopeExampleViewController.m in Sources */,\n\t\t\t\t30024F951BD1015300B1C04C /* DelegateAppearanceViewController.m in Sources */,\n\t\t\t\tEE638CC31B89DB6E0006DD1A /* LoadViewExampleViewController.m in Sources */,\n\t\t\t\t30B0BAD31B8D8E23004B9476 /* FSCalendarHeaderView.m in Sources */,\n\t\t\t\tF988B1CB1EA6054400609E59 /* RangePickerCell.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEE638CDD1B8A1F550006DD1A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t301F79CD1DFD39E700D8631E /* FSCalendarDelegationProxy.m in Sources */,\n\t\t\t\t30F5D8561B9FC33400C1C201 /* FSCalendar.m in Sources */,\n\t\t\t\t30B0BAF61B8D9AC1004B9476 /* FSCalendarAppearance.m in Sources */,\n\t\t\t\tEEC9C03B1BDC9E7000383A07 /* FSCalendarCollectionView.m in Sources */,\n\t\t\t\t30B0BAF71B8D9AC1004B9476 /* FSCalendarCell.m in Sources */,\n\t\t\t\t30DBE3C61DC641AD005A22B7 /* FSCalendarCalculator.m in Sources */,\n\t\t\t\t50F2ADEA216D954A00CC481F /* FSCalendarSeparatorDecorationView.m in Sources */,\n\t\t\t\t30A495561DCAD9E6000B2F31 /* FSCalendarWeekdayView.m in Sources */,\n\t\t\t\t30B0BAF81B8D9AC1004B9476 /* FSCalendarHeaderView.m in Sources */,\n\t\t\t\t3092253C1B905C4300123031 /* FSCalendarConstants.m in Sources */,\n\t\t\t\t3055B1C41DA9323A002AFA13 /* FSCalendarExtensions.m in Sources */,\n\t\t\t\t309539911C38D66C00BD37AA /* FSCalendarCollectionViewLayout.m in Sources */,\n\t\t\t\t30CEF9021C950C1F008EAFB1 /* FSCalendarTransitionCoordinator.m in Sources */,\n\t\t\t\t30FCB3981BAAD112002B87AD /* FSCalendarStickyHeader.m in Sources */,\n\t\t\t\t30F4C9111E07C12B00D2EC4D /* FSCalendarDelegationFactory.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF9384A5E1E3ACEFB001601E0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9384A651E3ACEFB001601E0 /* FSCalendarExampleUITests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t30671DCD1D6D574C00BCFC4E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = EE0D7FC61B89C5D3003C287B /* FSCalendarExample */;\n\t\t\ttargetProxy = 30671DCC1D6D574C00BCFC4E /* PBXContainerItemProxy */;\n\t\t};\n\t\t30B0BA971B8D8B02004B9476 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = EE638CE11B8A1F550006DD1A /* FSCalendar */;\n\t\t\ttargetProxy = 30B0BA961B8D8B02004B9476 /* PBXContainerItemProxy */;\n\t\t};\n\t\tF9384A681E3ACEFB001601E0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = EE0D7FC61B89C5D3003C287B /* FSCalendarExample */;\n\t\t\ttargetProxy = F9384A671E3ACEFB001601E0 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tEE638CD71B89DC090006DD1A /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tEE638CD81B89DC0A0006DD1A /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t30671DCF1D6D574C00BCFC4E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tINFOPLIST_FILE = FSCalendarTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.3;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchao.FSCalendarTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/FSCalendarExample.app/FSCalendarExample\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t30671DD01D6D574C00BCFC4E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tINFOPLIST_FILE = FSCalendarTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.3;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchao.FSCalendarTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/FSCalendarExample.app/FSCalendarExample\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEE0D7FE81B89C5D3003C287B /* 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_LOCALIZABILITY_NONLOCALIZED = 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_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_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_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_SYMBOLS_PRIVATE_EXTERN = NO;\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 = 8.0;\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};\n\t\t\tname = Debug;\n\t\t};\n\t\tEE0D7FE91B89C5D3003C287B /* 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_LOCALIZABILITY_NONLOCALIZED = 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_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_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 = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEE0D7FEB1B89C5D3003C287B /* 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 = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/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.wenchaod.FSCalendarExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEE0D7FEC1B89C5D3003C287B /* 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 = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/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.wenchaod.FSCalendarExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEE638CFC1B8A1F550006DD1A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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\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\tINFOPLIST_FILE = \"$(SRCROOT)/../FSCalendar/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMARKETING_VERSION = 2.8.4;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSCalendar;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\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\tEE638CFD1B8A1F550006DD1A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\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\tINFOPLIST_FILE = \"$(SRCROOT)/../FSCalendar/Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMARKETING_VERSION = 2.8.4;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSCalendar;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\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 = Release;\n\t\t};\n\t\tF9384A691E3ACEFB001601E0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\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\tINFOPLIST_FILE = FSCalendarExampleUITests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSCalendarExampleUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = FSCalendarExample;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF9384A6A1E3ACEFB001601E0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = FSCalendarExampleUITests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSCalendarExampleUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = FSCalendarExample;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t30671DCE1D6D574C00BCFC4E /* Build configuration list for PBXNativeTarget \"FSCalendarTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t30671DCF1D6D574C00BCFC4E /* Debug */,\n\t\t\t\t30671DD01D6D574C00BCFC4E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tEE0D7FC21B89C5D3003C287B /* Build configuration list for PBXProject \"FSCalendar\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEE0D7FE81B89C5D3003C287B /* Debug */,\n\t\t\t\tEE0D7FE91B89C5D3003C287B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tEE0D7FEA1B89C5D3003C287B /* Build configuration list for PBXNativeTarget \"FSCalendarExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEE0D7FEB1B89C5D3003C287B /* Debug */,\n\t\t\t\tEE0D7FEC1B89C5D3003C287B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tEE638CFB1B8A1F550006DD1A /* Build configuration list for PBXNativeTarget \"FSCalendar\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEE638CFC1B8A1F550006DD1A /* Debug */,\n\t\t\t\tEE638CFD1B8A1F550006DD1A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF9384A6B1E3ACEFB001601E0 /* Build configuration list for PBXNativeTarget \"FSCalendarExampleUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF9384A691E3ACEFB001601E0 /* Debug */,\n\t\t\t\tF9384A6A1E3ACEFB001601E0 /* 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 = EE0D7FBF1B89C5D3003C287B /* Project object */;\n}\n"
  },
  {
    "path": "Example-Objc/FSCalendar.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:FSCalendar.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example-Objc/FSCalendar.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": "Example-Objc/FSCalendar.xcodeproj/xcshareddata/xcbaselines/30671DC61D6D574C00BCFC4E.xcbaseline/3003B86B-B981-4064-9C85-E799A3B13220.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>classNames</key>\n\t<dict>\n\t\t<key>FSCalendarTests</key>\n\t\t<dict>\n\t\t\t<key>testDateForIndexPathPerformance</key>\n\t\t\t<dict>\n\t\t\t\t<key>com.apple.XCTPerformanceMetric_WallClockTime</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>baselineAverage</key>\n\t\t\t\t\t<real>0.001</real>\n\t\t\t\t\t<key>baselineIntegrationDisplayName</key>\n\t\t\t\t\t<string>Local Baseline</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>testIndexPathForDatePerformance</key>\n\t\t\t<dict>\n\t\t\t\t<key>com.apple.XCTPerformanceMetric_WallClockTime</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>baselineAverage</key>\n\t\t\t\t\t<real>0.001</real>\n\t\t\t\t\t<key>baselineIntegrationDisplayName</key>\n\t\t\t\t\t<string>Local Baseline</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-Objc/FSCalendar.xcodeproj/xcshareddata/xcbaselines/30671DC61D6D574C00BCFC4E.xcbaseline/621090AF-4CF3-4245-99AD-46AD956ACA82.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>classNames</key>\n\t<dict>\n\t\t<key>FSCalendarTests</key>\n\t\t<dict>\n\t\t\t<key>testIndexPathForDatePerformance</key>\n\t\t\t<dict>\n\t\t\t\t<key>com.apple.XCTPerformanceMetric_WallClockTime</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>baselineAverage</key>\n\t\t\t\t\t<real>0</real>\n\t\t\t\t\t<key>baselineIntegrationDisplayName</key>\n\t\t\t\t\t<string>Local Baseline</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-Objc/FSCalendar.xcodeproj/xcshareddata/xcbaselines/30671DC61D6D574C00BCFC4E.xcbaseline/A165CA85-3EFC-487B-954E-5AD1DC2EB21D.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>classNames</key>\n\t<dict>\n\t\t<key>FSCalendarTests</key>\n\t\t<dict>\n\t\t\t<key>testIndexPathForDatePerformance</key>\n\t\t\t<dict>\n\t\t\t\t<key>com.apple.XCTPerformanceMetric_WallClockTime</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>baselineAverage</key>\n\t\t\t\t\t<real>0</real>\n\t\t\t\t\t<key>baselineIntegrationDisplayName</key>\n\t\t\t\t\t<string>Local Baseline</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>testNSCacheReading</key>\n\t\t\t<dict>\n\t\t\t\t<key>com.apple.XCTPerformanceMetric_WallClockTime</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>baselineAverage</key>\n\t\t\t\t\t<real>1.1193e-06</real>\n\t\t\t\t\t<key>baselineIntegrationDisplayName</key>\n\t\t\t\t\t<string>Local Baseline</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t\t<key>testPerformanceExample</key>\n\t\t\t<dict>\n\t\t\t\t<key>com.apple.XCTPerformanceMetric_WallClockTime</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>baselineAverage</key>\n\t\t\t\t\t<real>8.0435e-05</real>\n\t\t\t\t\t<key>baselineIntegrationDisplayName</key>\n\t\t\t\t\t<string>Local Baseline</string>\n\t\t\t\t</dict>\n\t\t\t</dict>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-Objc/FSCalendar.xcodeproj/xcshareddata/xcbaselines/30671DC61D6D574C00BCFC4E.xcbaseline/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>runDestinationsByUUID</key>\n\t<dict>\n\t\t<key>3003B86B-B981-4064-9C85-E799A3B13220</key>\n\t\t<dict>\n\t\t\t<key>localComputer</key>\n\t\t\t<dict>\n\t\t\t\t<key>busSpeedInMHz</key>\n\t\t\t\t<integer>100</integer>\n\t\t\t\t<key>cpuCount</key>\n\t\t\t\t<integer>1</integer>\n\t\t\t\t<key>cpuKind</key>\n\t\t\t\t<string>Intel Core i5</string>\n\t\t\t\t<key>cpuSpeedInMHz</key>\n\t\t\t\t<integer>2900</integer>\n\t\t\t\t<key>logicalCPUCoresPerPackage</key>\n\t\t\t\t<integer>4</integer>\n\t\t\t\t<key>modelCode</key>\n\t\t\t\t<string>MacBookPro12,1</string>\n\t\t\t\t<key>physicalCPUCoresPerPackage</key>\n\t\t\t\t<integer>2</integer>\n\t\t\t\t<key>platformIdentifier</key>\n\t\t\t\t<string>com.apple.platform.macosx</string>\n\t\t\t</dict>\n\t\t\t<key>targetArchitecture</key>\n\t\t\t<string>x86_64</string>\n\t\t\t<key>targetDevice</key>\n\t\t\t<dict>\n\t\t\t\t<key>modelCode</key>\n\t\t\t\t<string>iPhone7,2</string>\n\t\t\t\t<key>platformIdentifier</key>\n\t\t\t\t<string>com.apple.platform.iphonesimulator</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>621090AF-4CF3-4245-99AD-46AD956ACA82</key>\n\t\t<dict>\n\t\t\t<key>targetArchitecture</key>\n\t\t\t<string>arm64</string>\n\t\t\t<key>targetDevice</key>\n\t\t\t<dict>\n\t\t\t\t<key>modelCode</key>\n\t\t\t\t<string>iPhone8,4</string>\n\t\t\t\t<key>platformIdentifier</key>\n\t\t\t\t<string>com.apple.platform.iphoneos</string>\n\t\t\t</dict>\n\t\t</dict>\n\t\t<key>A165CA85-3EFC-487B-954E-5AD1DC2EB21D</key>\n\t\t<dict>\n\t\t\t<key>localComputer</key>\n\t\t\t<dict>\n\t\t\t\t<key>busSpeedInMHz</key>\n\t\t\t\t<integer>100</integer>\n\t\t\t\t<key>cpuCount</key>\n\t\t\t\t<integer>1</integer>\n\t\t\t\t<key>cpuKind</key>\n\t\t\t\t<string>Intel Core i7</string>\n\t\t\t\t<key>cpuSpeedInMHz</key>\n\t\t\t\t<integer>2500</integer>\n\t\t\t\t<key>logicalCPUCoresPerPackage</key>\n\t\t\t\t<integer>8</integer>\n\t\t\t\t<key>modelCode</key>\n\t\t\t\t<string>MacBookPro11,5</string>\n\t\t\t\t<key>physicalCPUCoresPerPackage</key>\n\t\t\t\t<integer>4</integer>\n\t\t\t\t<key>platformIdentifier</key>\n\t\t\t\t<string>com.apple.platform.macosx</string>\n\t\t\t</dict>\n\t\t\t<key>targetArchitecture</key>\n\t\t\t<string>x86_64</string>\n\t\t\t<key>targetDevice</key>\n\t\t\t<dict>\n\t\t\t\t<key>modelCode</key>\n\t\t\t\t<string>iPhone7,2</string>\n\t\t\t\t<key>platformIdentifier</key>\n\t\t\t\t<string>com.apple.platform.iphonesimulator</string>\n\t\t\t</dict>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-Objc/FSCalendar.xcodeproj/xcshareddata/xcschemes/FSCalendar.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0930\"\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 = \"EE638CE11B8A1F550006DD1A\"\n               BuildableName = \"FSCalendar.framework\"\n               BlueprintName = \"FSCalendar\"\n               ReferencedContainer = \"container:FSCalendar.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      <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      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"EE638CE11B8A1F550006DD1A\"\n            BuildableName = \"FSCalendar.framework\"\n            BlueprintName = \"FSCalendar\"\n            ReferencedContainer = \"container:FSCalendar.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\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 = \"EE638CE11B8A1F550006DD1A\"\n            BuildableName = \"FSCalendar.framework\"\n            BlueprintName = \"FSCalendar\"\n            ReferencedContainer = \"container:FSCalendar.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": "Example-Objc/FSCalendar.xcodeproj/xcshareddata/xcschemes/FSCalendarExample.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1140\"\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 = \"EE0D7FC61B89C5D3003C287B\"\n               BuildableName = \"FSCalendarExample.app\"\n               BlueprintName = \"FSCalendarExample\"\n               ReferencedContainer = \"container:FSCalendar.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         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"30671DC61D6D574C00BCFC4E\"\n               BuildableName = \"FSCalendarTests.xctest\"\n               BlueprintName = \"FSCalendarTests\"\n               ReferencedContainer = \"container:FSCalendar.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"F9384A611E3ACEFB001601E0\"\n               BuildableName = \"FSCalendarExampleUITests.xctest\"\n               BlueprintName = \"FSCalendarExampleUITests\"\n               ReferencedContainer = \"container:FSCalendar.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\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      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"EE0D7FC61B89C5D3003C287B\"\n            BuildableName = \"FSCalendarExample.app\"\n            BlueprintName = \"FSCalendarExample\"\n            ReferencedContainer = \"container:FSCalendar.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\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 = \"EE0D7FC61B89C5D3003C287B\"\n            BuildableName = \"FSCalendarExample.app\"\n            BlueprintName = \"FSCalendarExample\"\n            ReferencedContainer = \"container:FSCalendar.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"
  },
  {
    "path": "Example-Objc/FSCalendarExampleUITests/FSCalendarExampleUITests.m",
    "content": "//\n//  FSCalendarExampleUITests.m\n//  FSCalendarExampleUITests\n//\n//  Created by Wenchao Ding on 27/01/2017.\n//  Copyright © 2017 wenchao. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n#import \"FSCalendar.h\"\n\n@interface FSCalendarExampleUITests : XCTestCase\n\n@property (strong, nonatomic) XCUIApplication *application;\n\n@end\n\n@implementation FSCalendarExampleUITests\n\n- (void)setUp\n{\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n    // In UI tests it is usually best to stop immediately when a failure occurs.\n    self.continueAfterFailure = NO;\n    // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.\n    [[[XCUIApplication alloc] init] launch];\n    \n    // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.\n    \n}\n\n- (void)tearDown\n{\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n    \n}\n\n- (void)testDIY\n{\n    XCUIApplication *application = [[XCUIApplication alloc] init];\n    [[application.tables elementBoundByIndex:0].cells[@\"DIY Example, Feature!\"] tap];\n    XCUIElement *calendar = application.otherElements[@\"calendar\"];\n    \n    XCUICoordinate *swipeStart = [calendar coordinateWithNormalizedOffset:CGVectorMake(0.8/7.0, 0.5)];\n    XCUICoordinate *swipeEnd = [calendar coordinateWithNormalizedOffset:CGVectorMake(6.5/7.0, 0.5)];\n    [swipeStart pressForDuration:0.8 thenDragToCoordinate:swipeEnd];\n    \n    [calendar swipeUp];\n    [calendar swipeLeft];\n    \n    swipeStart = [calendar coordinateWithNormalizedOffset:CGVectorMake(0.8/7.0, 0.75)];\n    swipeEnd = [calendar coordinateWithNormalizedOffset:CGVectorMake(6.5/7.0, 0.75)];\n    [swipeStart pressForDuration:0.8 thenDragToCoordinate:swipeEnd];\n    [calendar swipeDown];\n    \n    // Exit\n    [NSThread sleepForTimeInterval:1];\n    [[application.buttons elementBoundByIndex:0] tap]; // Pop\n}\n\n- (void)testPrevNextButtons\n{\n    XCUIApplication *application = [[XCUIApplication alloc] init];\n    [[application.tables elementBoundByIndex:0].cells[@\"Prev-Next Buttons\"] tap];\n    XCUIElement *prevButton = [application.buttons elementBoundByIndex:1];\n    XCUIElement *nextButton = [application.buttons elementBoundByIndex:2];\n    NSInteger count = 3;\n    for (int i = 0; i < count; i++) {\n        [prevButton tap];\n    }\n    for (int i = 0; i < count; i++) {\n        [nextButton tap];\n    }\n    // Exit\n    [NSThread sleepForTimeInterval:1];\n    [[application.buttons elementBoundByIndex:0] tap]; // Pop\n}\n\n- (void)testHidePlaceholders\n{\n    XCUIApplication *application = [[XCUIApplication alloc] init];\n    [[application.tables elementBoundByIndex:0].cells[@\"Hides Placeholder\"] tap];\n    XCUIElement *calendar = application.otherElements[@\"calendar\"];\n    NSInteger count = 3;\n    for (int i = 0; i < count; i++) {\n        [calendar swipeDown];\n    }\n    for (int i = 0; i < count; i++) {\n        [calendar swipeUp];\n    }\n    // Exit\n    [NSThread sleepForTimeInterval:1];\n    [[application.buttons elementBoundByIndex:0] tap];\n}\n\n- (void)testDelegateAppearance\n{\n    XCUIApplication *application = [[XCUIApplication alloc] init];\n    [[application.tables elementBoundByIndex:0].cells[@\"Delegate Appearance\"] tap];\n    XCUIElement *calendar = application.otherElements[@\"calendar\"];\n    \n    CGFloat calendarHeight = [[UIDevice currentDevice].model hasPrefix:@\"iPad\"] ? 400 : 300;\n    CGFloat cellStart = (FSCalendarStandardHeaderHeight+FSCalendarStandardWeekdayHeight)/calendarHeight;\n    CGFloat rowHeight = (1.0-cellStart)/6.0;\n    CGFloat columnWidth = 1.0/7;\n    \n    CGVector vectors[10] = {\n        CGVectorMake(6.5*columnWidth, cellStart+rowHeight*0.5),\n        CGVectorMake(2.5*columnWidth, cellStart+rowHeight*1.5),\n        CGVectorMake(4.5*columnWidth, cellStart+rowHeight*1.5),\n        CGVectorMake(5.5*columnWidth, cellStart+rowHeight*2.5),\n        CGVectorMake(6.5*columnWidth, cellStart+rowHeight*2.5),\n        CGVectorMake(0.5*columnWidth, cellStart+rowHeight*3.5),\n        CGVectorMake(3.5*columnWidth, cellStart+rowHeight*3.5),\n        CGVectorMake(4.5*columnWidth, cellStart+rowHeight*3.5),\n        CGVectorMake(0.5*columnWidth, cellStart+rowHeight*4.5),\n        CGVectorMake(5.5*columnWidth, cellStart+rowHeight*5.5),\n    };\n    for (NSInteger i = 0; i < 10; i++) {\n        [[calendar coordinateWithNormalizedOffset:vectors[i]] tap];\n    }\n    for (NSInteger i = 9; i >= 0; i--) {\n        [[calendar coordinateWithNormalizedOffset:vectors[i]] tap];\n    }\n    [NSThread sleepForTimeInterval:1.0];\n    [application.buttons[@\"TODAY\"] tap];\n    \n    // Exit\n    [NSThread sleepForTimeInterval:1.0];\n    [[application.buttons elementBoundByIndex:0] tap];\n}\n\n- (void)testFullScreen\n{\n    XCUIApplication *application = [[XCUIApplication alloc] init];\n    [[application.tables elementBoundByIndex:0].cells[@\"Full Screen Example\"] tap];\n    XCUIElement *calendar = application.otherElements[@\"calendar\"];\n    [calendar swipeUp];\n    [application.buttons[@\"Lunar\"] tap];\n    [calendar swipeUp];\n    [application.buttons[@\"Lunar\"] tap];\n    [NSThread sleepForTimeInterval:1.0];\n    [application.buttons[@\"Today\"] tap];\n    \n    // Exit\n    [NSThread sleepForTimeInterval:1];\n    [[application.buttons elementBoundByIndex:0] tap];\n}\n\n- (void)testScope\n{\n    XCUIApplication *application = [[XCUIApplication alloc] init];\n    [[application.tables elementBoundByIndex:0].cells[@\"FSCalendarScope Example\"] tap];\n    XCUIElement *tableView = [application.tables elementBoundByIndex:0];\n    XCUIElement *toggleButton = application.buttons[@\"Toggle\"];\n    [tableView swipeDown];\n    [tableView swipeUp];\n    [tableView swipeUp];\n    [toggleButton tap];\n    [toggleButton tap];\n    [tableView swipeDown];\n    [tableView swipeDown];\n    \n    // Orientation Test\n    [NSThread sleepForTimeInterval:0.5];\n    [XCUIDevice sharedDevice].orientation = UIDeviceOrientationLandscapeLeft;\n    [NSThread sleepForTimeInterval:1.5];\n    [XCUIDevice sharedDevice].orientation = UIDeviceOrientationPortrait;\n    [NSThread sleepForTimeInterval:1.5];\n    [XCUIDevice sharedDevice].orientation = UIDeviceOrientationLandscapeRight;\n    [NSThread sleepForTimeInterval:1.5];\n    [XCUIDevice sharedDevice].orientation = UIDeviceOrientationPortrait;\n    [NSThread sleepForTimeInterval:1];\n    \n    // Exit\n    [NSThread sleepForTimeInterval:1];\n    [[application.buttons elementBoundByIndex:0] tap];\n}\n\n- (void)testStoryboard\n{\n    XCUIApplication *application = [[XCUIApplication alloc] init];\n    [[application.tables elementBoundByIndex:0].cells[@\"Storyboard Example\"] tap];\n    XCUIElement *calendar = application.otherElements[@\"calendar\"];\n    CGFloat calendarHeight = [[UIDevice currentDevice].model hasPrefix:@\"iPad\"] ? 400 : 300;\n    CGFloat cellStart = (FSCalendarStandardHeaderHeight+FSCalendarStandardWeekdayHeight)/calendarHeight;\n    CGFloat rowHeight = (1.0-cellStart)/6.0;\n    CGFloat columnWidth = 1.0/7;\n    \n    CGVector nextVector = CGVectorMake(columnWidth * 5.5, cellStart + rowHeight * 5.5);\n    CGVector prevVector = CGVectorMake(columnWidth * 1.5, cellStart + rowHeight * 0.5);\n    [[calendar coordinateWithNormalizedOffset:nextVector] tap];\n    [[calendar coordinateWithNormalizedOffset:nextVector] tap];\n    [[calendar coordinateWithNormalizedOffset:prevVector] tap];\n    [[calendar coordinateWithNormalizedOffset:prevVector] tap];\n    \n    CGVector vector1 = CGVectorMake(columnWidth * 3.5, cellStart + rowHeight * 2.5);\n    CGVector vector2 = CGVectorMake(columnWidth * 4.5, cellStart + rowHeight * 2.5);\n    \n    XCUIElement *configureButton = [application.buttons elementBoundByIndex:1];\n    \n    [NSThread sleepForTimeInterval:0.5];\n    [configureButton tap];\n    [application.tables.staticTexts[@\"Theme2\"] tap];\n    [[calendar coordinateWithNormalizedOffset:vector1] tap];\n    [[calendar coordinateWithNormalizedOffset:vector2] tap];\n    [calendar swipeLeft];\n    [calendar swipeRight];\n    \n    [NSThread sleepForTimeInterval:0.5];\n    [configureButton tap];\n    [application.tables.staticTexts[@\"Theme3\"] tap];\n    [[calendar coordinateWithNormalizedOffset:vector1] tap];\n    [[calendar coordinateWithNormalizedOffset:vector2] tap];\n    [calendar swipeRight];\n    [calendar swipeLeft];\n    \n    [NSThread sleepForTimeInterval:0.5];\n    [configureButton tap];\n    [application.tables.staticTexts[@\"Theme1\"] tap];\n    [[calendar coordinateWithNormalizedOffset:vector1] tap];\n    [[calendar coordinateWithNormalizedOffset:vector2] tap];\n    [calendar swipeLeft];\n    [calendar swipeRight];\n    \n    [NSThread sleepForTimeInterval:0.5];\n    [configureButton tap];\n    [application.tables.staticTexts[@\"Lunar\"] tap];\n    [[calendar coordinateWithNormalizedOffset:vector1] tap];\n    [[calendar coordinateWithNormalizedOffset:vector2] tap];\n    \n    [NSThread sleepForTimeInterval:0.5];\n    [configureButton tap];\n    [application.tables.staticTexts[@\"Vertical\"] tap];\n    [calendar swipeUp];\n    [calendar swipeUp];\n    [calendar swipeUp];\n    [calendar swipeDown];\n    [calendar swipeDown];\n    [calendar swipeDown];\n    \n    \n    XCUIElement *table = [application.tables elementBoundByIndex:0];\n    [NSThread sleepForTimeInterval:0.5];\n    [configureButton tap];\n    XCUIElement *monday = application.tables.staticTexts[@\"Monday\"];\n    [self swipeUpTable:table toElement:monday];\n    [monday tap];\n    [calendar swipeUp];\n    [calendar swipeDown];\n    [NSThread sleepForTimeInterval:1];\n    \n    [NSThread sleepForTimeInterval:0.5];\n    [configureButton tap];\n    XCUIElement *tuesday = application.tables.staticTexts[@\"Tuesday\"];\n    [self swipeUpTable:table toElement:monday];\n    [tuesday tap];\n    [calendar swipeDown];\n    [calendar swipeUp];\n    \n    [NSThread sleepForTimeInterval:0.5];\n    [configureButton tap];\n    XCUIElement *sunday = application.tables.staticTexts[@\"Sunday\"];\n    [self swipeUpTable:table toElement:monday];\n    [sunday tap];\n    [calendar swipeUp];\n    [calendar swipeDown];\n    [NSThread sleepForTimeInterval:1];\n    \n    [XCUIDevice sharedDevice].orientation = UIDeviceOrientationLandscapeLeft;\n    [NSThread sleepForTimeInterval:1.5];\n    [XCUIDevice sharedDevice].orientation = UIDeviceOrientationPortrait;\n    [NSThread sleepForTimeInterval:1.5];\n    [XCUIDevice sharedDevice].orientation = UIDeviceOrientationLandscapeRight;\n    [NSThread sleepForTimeInterval:1.5];\n    [XCUIDevice sharedDevice].orientation = UIDeviceOrientationPortrait;\n    [NSThread sleepForTimeInterval:1];\n    \n    // Exit\n    [NSThread sleepForTimeInterval:1];\n    [[application.buttons elementBoundByIndex:0] tap];\n}\n\n- (void)swipeUpTable:(XCUIElement *)table toElement:(XCUIElement *)row\n{\n    NSInteger maxSwipe = 5;\n    NSInteger currentSwipe = 0;\n    while (currentSwipe < maxSwipe && !row.exists) {\n        currentSwipe++;\n        [table swipeUp];\n    }\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/FSCalendarExampleUITests/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>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-Objc/FSCalendarScopeExampleViewController.h",
    "content": "//\n//  FSCalendarScopeExampleViewController.h\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 8/29/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"FSCalendar.h\"\n\n@interface FSCalendarScopeExampleViewController : UIViewController\n\n@end\n\n"
  },
  {
    "path": "Example-Objc/FSCalendarScopeExampleViewController.m",
    "content": "//\n//  FSCalendarScopeExampleViewController.m\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 8/29/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendarScopeExampleViewController.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface FSCalendarScopeExampleViewController()<UITableViewDataSource,UITableViewDelegate,FSCalendarDataSource,FSCalendarDelegate,UIGestureRecognizerDelegate>\n{\n    void * _KVOContext;\n}\n@property (weak, nonatomic) IBOutlet FSCalendar *calendar;\n@property (weak, nonatomic) IBOutlet UITableView *tableView;\n@property (weak, nonatomic) IBOutlet UISwitch *animationSwitch;\n@property (weak, nonatomic) IBOutlet NSLayoutConstraint *calendarHeightConstraint;\n\n@property (strong, nonatomic) NSDateFormatter *dateFormatter;\n@property (strong, nonatomic) UIPanGestureRecognizer *scopeGesture;\n\n- (IBAction)toggleClicked:(id)sender;\n\n@end\n\nNS_ASSUME_NONNULL_END\n\n@implementation FSCalendarScopeExampleViewController\n\n#pragma mark - Life cycle\n\n- (instancetype)initWithCoder:(NSCoder *)coder\n{\n    self = [super initWithCoder:coder];\n    if (self) {\n        self.dateFormatter = [[NSDateFormatter alloc] init];\n        self.dateFormatter.dateFormat = @\"yyyy/MM/dd\";\n    }\n    return self;\n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    \n    if ([[UIDevice currentDevice].model hasPrefix:@\"iPad\"]) {\n        self.calendarHeightConstraint.constant = 400;\n    }\n    \n    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self.calendar action:@selector(handleScopeGesture:)];\n    panGesture.delegate = self;\n    panGesture.minimumNumberOfTouches = 1;\n    panGesture.maximumNumberOfTouches = 2;\n    [self.view addGestureRecognizer:panGesture];\n    self.scopeGesture = panGesture;\n    \n    // While the scope gesture begin, the pan gesture of tableView should cancel.\n    [self.tableView.panGestureRecognizer requireGestureRecognizerToFail:panGesture];\n    \n    [self.calendar addObserver:self forKeyPath:@\"scope\" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:_KVOContext];\n    self.calendar.placeholderType = FSCalendarPlaceholderTypeNone;\n    self.calendar.scope = FSCalendarScopeWeek;\n    \n    [self.calendar selectDate:[NSDate date] scrollToDate:YES];\n    \n    // For UITest\n    self.calendar.accessibilityIdentifier = @\"calendar\";\n    \n}\n\n- (void)dealloc\n{\n    [self.calendar removeObserver:self forKeyPath:@\"scope\" context:_KVOContext];\n    NSLog(@\"%s\",__FUNCTION__);\n}\n\n#pragma mark - KVO\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context\n{\n    if (context == _KVOContext) {\n        FSCalendarScope oldScope = [change[NSKeyValueChangeOldKey] unsignedIntegerValue];\n        FSCalendarScope newScope = [change[NSKeyValueChangeNewKey] unsignedIntegerValue];\n        NSLog(@\"From %@ to %@\",(oldScope==FSCalendarScopeWeek?@\"week\":@\"month\"),(newScope==FSCalendarScopeWeek?@\"week\":@\"month\"));\n    } else {\n        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];\n    }\n}\n\n#pragma mark - <UIGestureRecognizerDelegate>\n\n// Whether scope gesture should begin\n- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer\n{\n    BOOL shouldBegin = self.tableView.contentOffset.y <= -self.tableView.contentInset.top;\n    if (shouldBegin) {\n        CGPoint velocity = [self.scopeGesture velocityInView:self.view];\n        switch (self.calendar.scope) {\n            case FSCalendarScopeMonth:\n                return velocity.y < 0;\n            case FSCalendarScopeWeek:\n                return velocity.y > 0;\n        }\n    }\n    return shouldBegin;\n}\n\n#pragma mark - <FSCalendarDelegate>\n\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n//    NSLog(@\"%@\",(calendar.scope==FSCalendarScopeWeek?@\"week\":@\"month\"));\n    _calendarHeightConstraint.constant = CGRectGetHeight(bounds);\n    [self.view layoutIfNeeded];\n}\n\n- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    NSLog(@\"did select date %@\",[self.dateFormatter stringFromDate:date]);\n    \n    NSMutableArray *selectedDates = [NSMutableArray arrayWithCapacity:calendar.selectedDates.count];\n    [calendar.selectedDates enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n        [selectedDates addObject:[self.dateFormatter stringFromDate:obj]];\n    }];\n    NSLog(@\"selected dates is %@\",selectedDates);\n    if (monthPosition == FSCalendarMonthPositionNext || monthPosition == FSCalendarMonthPositionPrevious) {\n        [calendar setCurrentPage:date animated:YES];\n    }\n}\n\n- (void)calendarCurrentPageDidChange:(FSCalendar *)calendar\n{\n    NSLog(@\"%s %@\", __FUNCTION__, [self.dateFormatter stringFromDate:calendar.currentPage]);\n}\n\n#pragma mark - <UITableViewDataSource>\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView\n{\n    return 2;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section\n{\n    NSInteger numbers[2] = {2,20};\n    return numbers[section];\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    if (indexPath.section == 0) {\n        NSString *identifier = @[@\"cell_month\",@\"cell_week\"][indexPath.row];\n        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];\n        return cell;\n    } else {\n        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"cell\"];\n        return cell;\n    }\n}\n\n#pragma mark - <UITableViewDelegate>\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    [tableView deselectRowAtIndexPath:indexPath animated:YES];\n    if (indexPath.section == 0) {\n        FSCalendarScope selectedScope = indexPath.row == 0 ? FSCalendarScopeMonth : FSCalendarScopeWeek;\n        [self.calendar setScope:selectedScope animated:self.animationSwitch.on];\n    }\n    \n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section\n{\n    return 20;\n}\n\n#pragma mark - Target actions\n\n- (IBAction)toggleClicked:(id)sender\n{\n    if (self.calendar.scope == FSCalendarScopeMonth) {\n        [self.calendar setScope:FSCalendarScopeWeek animated:_animationSwitch.on];\n    } else {\n        [self.calendar setScope:FSCalendarScopeMonth animated:_animationSwitch.on];\n    }\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/FSCalendarTests/FSCalendarExtensionTest.m",
    "content": "//\n//  FSExtensionTest.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 9/13/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n#import \"FSCalendarExtensions.h\"\n\n@interface FSCalendarExtensionTest : XCTestCase\n\n@end\n\n@implementation FSCalendarExtensionTest\n\n- (void)setUp\n{\n    [super setUp];\n}\n\n- (void)tearDown\n{\n    [super tearDown];\n}\n\n- (void)testNSObjectExtension\n{\n    NSString *string = @\"hello\";\n    NSString *newString = [string fs_performSelector:@selector(stringByAppendingString:) withObjects:@\" world.\", nil];\n    XCTAssertEqualObjects(newString, @\"hello world.\");\n    \n    NSArray *array = @[@0];\n    NSArray *newArray = [array fs_performSelector:@selector(arrayByAddingObject:) withObjects:@1, nil];\n    XCTAssertEqualObjects(newArray, (@[@0,@1]));\n    \n    UITableView *t = [UITableView new];\n    NSValue *insets = [t fs_performSelector:@selector(contentInset) withObjects:nil, nil];\n    XCTAssertEqualObjects(insets, ([NSValue valueWithUIEdgeInsets:t.contentInset]));\n    \n    NSNumber *rowHeight = [t fs_performSelector:@selector(rowHeight) withObjects:nil, nil];\n    XCTAssertEqualObjects(rowHeight, @(t.rowHeight));\n    \n    UIColor *color = [UIColor alloc];\n    UIColor *color1 = [color initWithRed:1 green:1 blue:1 alpha:1];\n    UIColor *color2 = [color fs_performSelector:@selector(initWithRed:green:blue:alpha:) withObjects:@1,@1,@1,@1,nil];\n    XCTAssertEqualObjects(color1, color2);\n\n    NSValue *value1 = [NSValue valueWithCGSize:CGSizeMake(10, 10)];\n    NSValue *value2 = [NSValue fs_performSelector:@selector(valueWithCGSize:) withObjects:[NSValue valueWithCGSize:CGSizeMake(10, 10)],nil];\n    XCTAssertEqualObjects(value1, value2);\n    \n}\n\n\n@end\n"
  },
  {
    "path": "Example-Objc/FSCalendarTests/FSCalendarTests.m",
    "content": "//\n//  FSCalendarTests.m\n//  FSCalendarTests\n//\n//  Created by dingwenchao on 8/24/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n#import \"FSCalendar.h\"\n#import \"FSCalendarDynamicHeader.h\"\n#import \"FSCalendarExtensions.h\"\n\n@interface FSCalendarTests : XCTestCase <FSCalendarDataSource,FSCalendarDelegate>\n\n@property (strong, nonatomic) FSCalendar *calendar;\n@property (strong, nonatomic) NSDate *date;\n@property (strong, nonatomic) NSIndexPath *indexPath;\n@property (strong, nonatomic) NSMutableArray<NSIndexPath *> *indexPaths;\n@property (strong, nonatomic) NSDateFormatter *formatter;\n\n@end\n\n@implementation FSCalendarTests\n\n- (void)setUp\n{\n    [super setUp];\n    self.calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, 0, 320, 300)];\n    [self.calendar.calculator reloadSections];\n    self.indexPath = [NSIndexPath indexPathForItem:25 inSection:0];\n    \n    self.indexPaths = [NSMutableArray array];\n    for (int i = 0; i < 42; i++) {\n        [self.indexPaths addObject:[NSIndexPath indexPathForItem:i inSection:0]];\n    }\n    self.formatter = [[NSDateFormatter alloc] init];\n    self.formatter.dateFormat = @\"yyyy-MM-dd\";\n    self.date = [self.formatter dateFromString:@\"1900-11-11\"];\n    \n}\n\n- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.formatter dateFromString:@\"1900-01-01\"];\n}\n\n- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.formatter dateFromString:@\"2300-01-01\"];\n}\n\n- (void)tearDown\n{\n    [super tearDown];\n    self.calendar = nil;\n    self.indexPath = nil;\n    self.date = nil;\n}\n\n- (void)testOutOfBoundsException\n{\n    XCTAssertThrows([self.calendar selectDate:[self.formatter dateFromString:@\"1900-01-01\"]]);\n    XCTAssertThrows([self.calendar selectDate:[self.formatter dateFromString:@\"2300-01-01\"]]);\n}\n\n- (void)testIndexPathForDatePerformance {\n    [self measureBlock:^{\n        [self.calendar.calculator indexPathForDate:self.date scope:FSCalendarScopeMonth];\n    }];\n}\n\n- (void)testDateForIndexPathPerformance {\n    [self measureBlock:^{\n        [self.indexPaths enumerateObjectsUsingBlock:^(NSIndexPath * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {\n            [self.calendar.calculator dateForIndexPath:obj];\n        }];\n    }];\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/FSCalendarTests/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>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-Objc/FSTableViewController.h",
    "content": "//\n//  FSTableViewController.h\n//  FSCalendar\n//\n//  Created by DingWenchao on 6/25/15.\n//  Copyright (c) 2015 =. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface FSTableViewController : UITableViewController\n\n@property (strong, nonatomic) NSArray *viewControllers;\n\n@end\n"
  },
  {
    "path": "Example-Objc/FSTableViewController.m",
    "content": "//\n//  FSTableViewController.m\n//  FSCalendar\n//\n//  Created by DingWenchao on 6/25/15.\n//  Copyright (c) 2015 =. All rights reserved.\n//\n\n#import \"FSTableViewController.h\"\n#import \"LoadViewExampleViewController.h\"\n#import \"FullScreenExampleViewController.h\"\n#import \"DelegateAppearanceViewController.h\"\n#import \"HidePlaceholderViewController.h\"\n#import \"ButtonsViewController.h\"\n#import \"DIYExampleViewController.h\"\n#import \"RangePickerViewController.h\"\n\n@implementation FSTableViewController\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n        \n    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@\"\" style:UIBarButtonItemStylePlain target:nil action:nil];\n    \n    self.viewControllers = @[\n                             [RangePickerViewController class],\n                             [DIYExampleViewController class],\n                             [ButtonsViewController class],\n                             [HidePlaceholderViewController class],\n                             [DelegateAppearanceViewController class],\n                             [FullScreenExampleViewController class],\n                             [NSObject class],\n                             [NSObject class],\n                             [LoadViewExampleViewController class]\n                            ];\n    \n    self.tableView.rowHeight = [[UIDevice currentDevice].model hasSuffix:@\"iPad\"] ? 60.0 : 44.0;\n}\n\n- (void)viewWillAppear:(BOOL)animated\n{\n    [super viewWillAppear:animated];\n    if (self.tableView.indexPathForSelectedRow) {\n        [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:animated];\n    }\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    id viewControllerClass = self.viewControllers[indexPath.row];\n    if ([viewControllerClass isSubclassOfClass:[UIViewController class]]) {\n        [self.navigationController pushViewController:[[viewControllerClass alloc] init] animated:YES];\n    }\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/FullScreenExampleViewController.h",
    "content": "//\n//  FullScreenExample.h\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 9/16/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface FullScreenExampleViewController : UIViewController\n\n\n@end\n"
  },
  {
    "path": "Example-Objc/FullScreenExampleViewController.m",
    "content": "//\n//  FullScreenExample.m\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 9/16/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import \"FullScreenExampleViewController.h\"\n#import <EventKit/EventKit.h>\n#import \"LunarFormatter.h\"\n\n#import \"FSCalendar.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface FullScreenExampleViewController()<FSCalendarDataSource,FSCalendarDelegate,FSCalendarDelegateAppearance>\n\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (assign, nonatomic) BOOL showsLunar;\n@property (assign, nonatomic) BOOL showsEvents;\n\n@property (strong, nonatomic) NSCache *cache;\n\n- (void)todayItemClicked:(id)sender;\n- (void)lunarItemClicked:(id)sender;\n- (void)eventItemClicked:(id)sender;\n\n@property (strong, nonatomic) NSCalendar *gregorian;\n@property (strong, nonatomic) NSDateFormatter *dateFormatter;\n\n@property (strong, nonatomic) NSDate *minimumDate;\n@property (strong, nonatomic) NSDate *maximumDate;\n\n@property (strong, nonatomic) LunarFormatter *lunarFormatter;\n@property (strong, nonatomic) NSArray<EKEvent *> *events;\n\n- (void)loadCalendarEvents;\n- (nullable NSArray<EKEvent *> *)eventsForDate:(NSDate *)date;\n\n@end\n\nNS_ASSUME_NONNULL_END\n\n@implementation FullScreenExampleViewController\n\n#pragma mark - Life cycle\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.title = @\"FSCalendar\";\n        _lunarFormatter = [[LunarFormatter alloc] init];\n    }\n    return self;\n}\n\n- (void)loadView\n{\n    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];\n    view.backgroundColor = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:1.0];\n    self.view = view;\n    \n#define FULL_SCREEN 1\n    \n#if FULL_SCREEN\n    \n    FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, self.navigationController.navigationBar.frame.size.height, self.view.bounds.size.width, self.view.bounds.size.height-self.navigationController.navigationBar.frame.size.height)];\n    calendar.backgroundColor = [UIColor whiteColor];\n    calendar.dataSource = self;\n    calendar.delegate = self;\n    calendar.pagingEnabled = NO; // important\n    calendar.allowsMultipleSelection = YES;\n    calendar.firstWeekday = 2;\n    calendar.placeholderType = FSCalendarPlaceholderTypeFillHeadTail;\n    calendar.appearance.caseOptions = FSCalendarCaseOptionsWeekdayUsesSingleUpperCase|FSCalendarCaseOptionsHeaderUsesUpperCase;\n    [self.view addSubview:calendar];\n    self.calendar = calendar;\n    \n#else\n\n    FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, self.navigationController.navigationBar.frame.size.height, self.view.bounds.size.width, 300)];\n    calendar.backgroundColor = [UIColor whiteColor];\n    calendar.dataSource = self;\n    calendar.delegate = self;\n    calendar.allowsMultipleSelection = YES;\n    calendar.firstWeekday = 2;\n    calendar.appearance.caseOptions = FSCalendarCaseOptionsWeekdayUsesSingleUpperCase|FSCalendarCaseOptionsHeaderUsesUpperCase;\n    [self.view addSubview:calendar];\n    self.calendar = calendar;\n    \n#endif\n    \n    UIBarButtonItem *todayItem = [[UIBarButtonItem alloc] initWithTitle:@\"Today\" style:UIBarButtonItemStylePlain target:self action:@selector(todayItemClicked:)];\n    \n    UIBarButtonItem *lunarItem = [[UIBarButtonItem alloc] initWithTitle:@\"Lunar\" style:UIBarButtonItemStylePlain target:self action:@selector(lunarItemClicked:)];\n    [lunarItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor magentaColor]} forState:UIControlStateNormal];\n    \n    UIBarButtonItem *eventItem = [[UIBarButtonItem alloc] initWithTitle:@\"Event\" style:UIBarButtonItemStylePlain target:self action:@selector(eventItemClicked:)];\n    [eventItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor purpleColor]} forState:UIControlStateNormal];\n    \n    self.navigationItem.rightBarButtonItems = @[eventItem ,lunarItem, todayItem];\n\n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    \n    self.gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    \n    self.dateFormatter = [[NSDateFormatter alloc] init];\n    self.dateFormatter.dateFormat = @\"yyyy-MM-dd\";\n    \n    self.minimumDate = [self.dateFormatter dateFromString:@\"2020-02-03\"];\n    self.maximumDate = [self.dateFormatter dateFromString:@\"2023-04-10\"];\n\n    self.calendar.accessibilityIdentifier = @\"calendar\";\n    \n    [self loadCalendarEvents];\n    \n}\n\n- (void)didReceiveMemoryWarning\n{\n    [super didReceiveMemoryWarning];\n    [self.cache removeAllObjects];\n}\n\n- (void)viewWillLayoutSubviews\n{\n    [super viewWillLayoutSubviews];\n    \n#if FULL_SCREEN\n    self.calendar.frame = CGRectMake(0, CGRectGetMaxY(self.navigationController.navigationBar.frame), self.view.bounds.size.width, self.view.bounds.size.height-CGRectGetMaxY(self.navigationController.navigationBar.frame));\n#else\n    self.calendar.frame = CGRectMake(0, CGRectGetMaxY(self.navigationController.navigationBar.frame), self.view.bounds.size.width, 300);\n#endif\n}\n\n- (void)dealloc\n{\n    NSLog(@\"%s\",__FUNCTION__);\n}\n\n#pragma mark - Target actions\n\n- (void)todayItemClicked:(id)sender\n{\n    [self.calendar setCurrentPage:[NSDate date] animated:YES];\n}\n\n- (void)lunarItemClicked:(UIBarButtonItem *)item\n{\n    self.showsLunar = !self.showsLunar;\n    [self.calendar reloadData];\n}\n\n- (void)eventItemClicked:(id)sender\n{\n    self.showsEvents = !self.showsEvents;\n    [self.calendar reloadData];\n}\n\n#pragma mark - FSCalendarDataSource\n\n- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar\n{\n    return self.minimumDate;\n}\n\n- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar\n{\n    return self.maximumDate;\n}\n\n- (NSString *)calendar:(FSCalendar *)calendar subtitleForDate:(NSDate *)date\n{\n    if (self.showsEvents) {\n        EKEvent *event = [self eventsForDate:date].firstObject;\n        if (event) {\n            return event.title;\n        }\n    }\n    if (self.showsLunar) {\n        return [self.lunarFormatter stringFromDate:date];\n    }\n    return nil;\n}\n\n#pragma mark - FSCalendarDelegate\n\n- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    NSLog(@\"did select %@\",[self.dateFormatter stringFromDate:date]);\n}\n\n- (void)calendarCurrentPageDidChange:(FSCalendar *)calendar\n{\n    NSLog(@\"did change page %@\",[self.dateFormatter stringFromDate:calendar.currentPage]);\n}\n\n- (NSInteger)calendar:(FSCalendar *)calendar numberOfEventsForDate:(NSDate *)date\n{\n    if (!self.showsEvents) return 0;\n    if (!self.events) return 0;\n    NSArray<EKEvent *> *events = [self eventsForDate:date];\n    return events.count;\n}\n\n- (NSArray<UIColor *> *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventDefaultColorsForDate:(NSDate *)date\n{\n    if (!self.showsEvents) return nil;\n    if (!self.events) return nil;\n    NSArray<EKEvent *> *events = [self eventsForDate:date];\n    NSMutableArray<UIColor *> *colors = [NSMutableArray arrayWithCapacity:events.count];\n    [events enumerateObjectsUsingBlock:^(EKEvent * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {\n        [colors addObject:[UIColor colorWithCGColor:obj.calendar.CGColor]];\n    }];\n    return colors.copy;\n}\n\n#pragma mark - Private methods\n\n- (void)loadCalendarEvents\n{\n    __weak typeof(self) weakSelf = self;\n    EKEventStore *store = [[EKEventStore alloc] init];\n    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {\n        \n        if(granted) {\n            NSDate *startDate = self.minimumDate;\n            NSDate *endDate = self.maximumDate;\n            NSPredicate *fetchCalendarEvents = [store predicateForEventsWithStartDate:startDate endDate:endDate calendars:nil];\n            NSArray<EKEvent *> *eventList = [store eventsMatchingPredicate:fetchCalendarEvents];\n            NSArray<EKEvent *> *events = [eventList filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(EKEvent * _Nullable event, NSDictionary<NSString *,id> * _Nullable bindings) {\n                return event.calendar.subscribed;\n            }]];\n            \n            dispatch_async(dispatch_get_main_queue(), ^{\n                if (!weakSelf) return;\n                weakSelf.events = events;\n                [weakSelf.calendar reloadData];\n            });\n            \n        } else {\n            \n            // Alert\n            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@\"Permission Error\" message:@\"Permission of calendar is required for fetching events.\" preferredStyle:UIAlertControllerStyleAlert];\n            [alertController addAction:[UIAlertAction actionWithTitle:@\"OK\" style:UIAlertActionStyleCancel handler:nil]];\n            [self presentViewController:alertController animated:YES completion:nil];\n        }\n    }];\n    \n}\n\n- (NSArray<EKEvent *> *)eventsForDate:(NSDate *)date\n{\n    NSArray<EKEvent *> *events = [self.cache objectForKey:date];\n    if ([events isKindOfClass:[NSNull class]]) {\n        return nil;\n    }\n    NSArray<EKEvent *> *filteredEvents = [self.events filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(EKEvent * _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {\n        return [evaluatedObject.occurrenceDate isEqualToDate:date];\n    }]];\n    if (filteredEvents.count) {\n        [self.cache setObject:filteredEvents forKey:date];\n    } else {\n        [self.cache setObject:[NSNull null] forKey:date];\n    }\n    return filteredEvents;\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/HidePlaceholderViewController.h",
    "content": "//\n//  HidePlaceholderViewController.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 3/9/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface HidePlaceholderViewController : UIViewController\n\n\n@end\n"
  },
  {
    "path": "Example-Objc/HidePlaceholderViewController.m",
    "content": "//\n//  HidePlaceholderViewController.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 3/9/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"HidePlaceholderViewController.h\"\n#import \"FSCalendar.h\"\n\n#define kContainerFrame (CGRectMake(0, CGRectGetMaxY(calendar.frame), CGRectGetWidth(self.view.frame), 50))\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface HidePlaceholderViewController()<FSCalendarDataSource,FSCalendarDelegate,FSCalendarDelegateAppearance>\n\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (weak, nonatomic) UIView *bottomContainer;\n@property (weak, nonatomic) UILabel *eventLabel;\n@property (weak, nonatomic) UIButton *nextButton;\n@property (weak, nonatomic) UIButton *prevButton;\n\n@property (strong, nonatomic) NSCalendar *gregorian;\n@property (strong, nonatomic) NSDateFormatter *dateFormatter;\n\n- (void)nextClicked:(id)sender;\n- (void)prevClicked:(id)sender;\n\n@end\n\nNS_ASSUME_NONNULL_END\n\n@implementation HidePlaceholderViewController\n\n#pragma mark - Life cycle\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.title = @\"FSCalendar\";\n        self.dateFormatter = [[NSDateFormatter alloc] init];\n        self.dateFormatter.dateFormat = @\"yyyy-MM-dd\";\n    }\n    return self;\n}\n\n- (void)loadView\n{\n    UIView *view;\n    UIButton *button;\n    \n    view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];\n    view.backgroundColor = [UIColor groupTableViewBackgroundColor];\n    self.view = view;\n    \n    // 400 for iPad and 300 for iPhone\n    CGFloat height = [[UIDevice currentDevice].model hasPrefix:@\"iPad\"] ? 400 : 300;\n    FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.navigationController.navigationBar.frame), CGRectGetWidth(self.view.frame), height)];\n    calendar.backgroundColor = [UIColor whiteColor];\n    calendar.dataSource = self;\n    calendar.delegate = self;\n    calendar.placeholderType = FSCalendarPlaceholderTypeNone;\n    calendar.adjustsBoundingRectWhenChangingMonths = YES;\n    calendar.currentPage = [self.dateFormatter dateFromString:@\"2020-06-01\"];\n    calendar.firstWeekday = 2;\n    calendar.scrollDirection = FSCalendarScrollDirectionVertical;\n    [self.view addSubview:calendar];\n    self.calendar = calendar;\n    \n    view = [[UIView alloc] initWithFrame:kContainerFrame];\n    [self.view addSubview:view];\n    self.bottomContainer = view;\n    \n    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, 170, 50)];\n    label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];\n    [self.bottomContainer addSubview:label];\n    self.eventLabel = label;\n    \n    button = [UIButton buttonWithType:UIButtonTypeSystem];\n    button.frame = CGRectMake(CGRectGetMaxX(self.eventLabel.frame)+5, 10, 60, 30);\n    [button setTitle:@\"PREV\" forState:UIControlStateNormal];\n    [button addTarget:self action:@selector(prevClicked:) forControlEvents:UIControlEventTouchUpInside];\n    button.layer.borderWidth = 1;\n    button.layer.borderColor = button.tintColor.CGColor;\n    button.layer.cornerRadius = 6;\n    [self.bottomContainer addSubview:button];\n    self.prevButton = button;\n    \n    button = [UIButton buttonWithType:UIButtonTypeSystem];\n    button.frame = CGRectMake(CGRectGetMaxX(self.prevButton.frame)+5, 10, 60, 30);\n    [button setTitle:@\"NEXT\" forState:UIControlStateNormal];\n    [button addTarget:self action:@selector(nextClicked:) forControlEvents:UIControlEventTouchUpInside];\n    button.layer.borderWidth = 1;\n    button.layer.borderColor = button.tintColor.CGColor;\n    button.layer.cornerRadius = 6;\n    [self.bottomContainer addSubview:button];\n    self.nextButton = button;\n    \n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    \n    NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:@\"\"];\n    NSTextAttachment *attatchment = [[NSTextAttachment alloc] init];\n    attatchment.image = [UIImage imageNamed:@\"icon_cat\"];\n    attatchment.bounds = CGRectMake(0, -3, attatchment.image.size.width, attatchment.image.size.height);\n    [attributedText appendAttributedString:[NSAttributedString attributedStringWithAttachment:attatchment]];\n    [attributedText appendAttributedString:[[NSAttributedString alloc] initWithString:@\"  Hey Daily Event  \"]];\n    [attributedText appendAttributedString:[NSAttributedString attributedStringWithAttachment:attatchment]];\n    self.eventLabel.attributedText = attributedText.copy;\n    \n    self.gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    \n    self.calendar.appearance.separators = FSCalendarSeparatorInterRows;\n    self.calendar.swipeToChooseGesture.enabled = YES;\n    \n    // For UITest\n    self.calendar.accessibilityIdentifier = @\"calendar\";\n    \n}\n\n- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.dateFormatter dateFromString:@\"2020-01-08\"];\n}\n\n- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.dateFormatter dateFromString:@\"2023-10-08\"];\n}\n\n- (void)dealloc\n{\n    NSLog(@\"%s\",__FUNCTION__);\n}\n\n#pragma mark - <FSCalendarDelegate>\n\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n    calendar.frame = (CGRect){calendar.frame.origin,bounds.size};\n    self.bottomContainer.frame = kContainerFrame;\n}\n\n#pragma mark - Target action\n\n- (void)nextClicked:(id)sender\n{\n    NSDate *nextMonth = [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:1 toDate:self.calendar.currentPage options:0];\n    [self.calendar setCurrentPage:nextMonth animated:YES];\n}\n\n- (void)prevClicked:(id)sender\n{\n    NSDate *prevMonth = [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:-1 toDate:self.calendar.currentPage options:0];\n    [self.calendar setCurrentPage:prevMonth animated:YES];\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-57x57@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-57x57@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\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": "Example-Objc/Images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Objc/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"736h\",\n      \"filename\" : \"LaunchImage-2208.png\",\n      \"minimum-system-version\" : \"8.0\",\n      \"orientation\" : \"portrait\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"667h\",\n      \"filename\" : \"LaunchImage-1334.png\",\n      \"minimum-system-version\" : \"8.0\",\n      \"orientation\" : \"portrait\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"LaunchImage-960.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"retina4\",\n      \"filename\" : \"LaunchImage.png\",\n      \"minimum-system-version\" : \"7.0\",\n      \"orientation\" : \"portrait\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"LaunchImage-1024.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"LaunchImage-768.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"LaunchImage-2048.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"LaunchImage-1536.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Objc/Images.xcassets/circle.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"circle@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Objc/Images.xcassets/fire.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Objc/Images.xcassets/icon_cat.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"filename\" : \"icon_cat@2x.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Objc/Images.xcassets/icon_footprint.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"filename\" : \"icon_footprint@2x.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Objc/Images.xcassets/icon_next.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon_next@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon_next@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Objc/Images.xcassets/icon_prev.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon_prev@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon_prev@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Objc/Images.xcassets/icon_setting.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"filename\" : \"icon_setting@2x.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Objc/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>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSCalendarsUsageDescription</key>\n\t<string>Events</string>\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<false/>\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\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-Objc/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"11762\" systemVersion=\"16C67\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11757\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"  Copyright (c) 2016 wenchao. All rights reserved.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"FSCalendar\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n                    <rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\"/>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example-Objc/LoadViewExampleViewController.h",
    "content": "//\n//  LoadViewExampleViewController.h\n//  FSCalendar\n//\n//  Created by DingWenchao on 6/25/15.\n//  Copyright (c) 2017 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface LoadViewExampleViewController : UIViewController\n\n@end\n\n"
  },
  {
    "path": "Example-Objc/LoadViewExampleViewController.m",
    "content": "//\n//  LoadViewExampleViewController.m\n//  FSCalendar\n//\n//  Created by DingWenchao on 6/25/15.\n//  Copyright (c) 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"LoadViewExampleViewController.h\"\n#import \"FSCalendar.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface LoadViewExampleViewController()<FSCalendarDataSource,FSCalendarDelegate>\n\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (strong, nonatomic) NSDateFormatter *dateFormatter;\n@property (strong, nonatomic) NSDictionary<NSString *, UIImage *> *images;\n\n@end\n\nNS_ASSUME_NONNULL_END\n\n@implementation LoadViewExampleViewController\n\n#pragma mark - Life cycle\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.title = @\"FSCalendar\";\n        self.images = @{@\"2020/11/01\":[UIImage imageNamed:@\"icon_cat\"],\n                        @\"2020/11/05\":[UIImage imageNamed:@\"icon_footprint\"],\n                        @\"2020/11/20\":[UIImage imageNamed:@\"icon_cat\"],\n                        @\"2020/11/07\":[UIImage imageNamed:@\"icon_footprint\"]};\n    }\n    return self;\n}\n\n- (void)loadView\n{\n    UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\n    view.backgroundColor = [UIColor groupTableViewBackgroundColor];\n    self.view = view;\n    \n    // 450 for iPad and 300 for iPhone\n    CGFloat height = [[UIDevice currentDevice].model hasPrefix:@\"iPad\"] ? 450 : 300;\n    FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.navigationController.navigationBar.frame), view.frame.size.width, height)];\n    calendar.dataSource = self;\n    calendar.delegate = self;\n    calendar.scrollDirection = FSCalendarScrollDirectionVertical;\n    calendar.backgroundColor = [UIColor whiteColor];\n    \n    [view addSubview:calendar];\n    self.calendar = calendar;\n    \n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    self.dateFormatter = [[NSDateFormatter alloc] init];\n    self.dateFormatter.dateFormat = @\"yyyy/MM/dd\";\n    \n    \n    // [self.calendar selectDate:[self.dateFormatter dateFromString:@\"2020/02/03\"]];\n\n    /*\n    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n        [self.calendar setScope:FSCalendarScopeWeek animated:YES];\n        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n            [self.calendar setScope:FSCalendarScopeMonth animated:YES];\n        });\n    });\n     */\n    \n    \n}\n\n- (void)dealloc\n{\n    NSLog(@\"%s\", __FUNCTION__);\n}\n\n#pragma mark - <FSCalendarDelegate>\n\n- (BOOL)calendar:(FSCalendar *)calendar shouldSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    NSLog(@\"should select date %@\",[self.dateFormatter stringFromDate:date]);\n    return YES;\n}\n\n- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    NSLog(@\"did select date %@\",[self.dateFormatter stringFromDate:date]);\n    if (monthPosition == FSCalendarMonthPositionNext || monthPosition == FSCalendarMonthPositionPrevious) {\n        [calendar setCurrentPage:date animated:YES];\n    }\n}\n\n- (void)calendarCurrentPageDidChange:(FSCalendar *)calendar\n{\n    NSLog(@\"did change to page %@\",[self.dateFormatter stringFromDate:calendar.currentPage]);\n}\n\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n    calendar.frame = (CGRect){calendar.frame.origin,bounds.size};\n}\n\n#pragma mark - <FSCalendarDataSource>\n\n\n- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.dateFormatter dateFromString:@\"2020/10/01\"];\n}\n\n- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.dateFormatter dateFromString:@\"2023/10/10\"];\n}\n\n\n- (UIImage *)calendar:(FSCalendar *)calendar imageForDate:(NSDate *)date\n{\n    NSString *dateString = [self.dateFormatter stringFromDate:date];\n    return self.images[dateString];\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/LunarFormatter.h",
    "content": "//\n//  LunarFormatter.h\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 25/07/2017.\n//  Copyright © 2017 wenchaoios. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface LunarFormatter : NSObject\n\n- (NSString *)stringFromDate:(NSDate *)date;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Example-Objc/LunarFormatter.m",
    "content": "//\n//  LunarFormatter.m\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 25/07/2017.\n//  Copyright © 2017 wenchaoios. All rights reserved.\n//\n\n#import \"LunarFormatter.h\"\n\n@interface LunarFormatter ()\n\n@property (strong, nonatomic) NSCalendar *chineseCalendar;\n@property (strong, nonatomic) NSDateFormatter *formatter;\n@property (strong, nonatomic) NSArray<NSString *> *lunarDays;\n@property (strong, nonatomic) NSArray<NSString *> *lunarMonths;\n\n@end\n\n@implementation LunarFormatter\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.chineseCalendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierChinese];\n        self.formatter = [[NSDateFormatter alloc] init];\n        self.formatter.calendar = self.chineseCalendar;\n        self.formatter.dateFormat = @\"M\";\n        self.lunarDays = @[@\"初二\",@\"初三\",@\"初四\",@\"初五\",@\"初六\",@\"初七\",@\"初八\",@\"初九\",@\"初十\",@\"十一\",@\"十二\",@\"十三\",@\"十四\",@\"十五\",@\"十六\",@\"十七\",@\"十八\",@\"十九\",@\"二十\",@\"二一\",@\"二二\",@\"二三\",@\"二四\",@\"二五\",@\"二六\",@\"二七\",@\"二八\",@\"二九\",@\"三十\"];\n        self.lunarMonths = @[@\"正月\",@\"二月\",@\"三月\",@\"四月\",@\"五月\",@\"六月\",@\"七月\",@\"八月\",@\"九月\",@\"十月\",@\"冬月\",@\"腊月\"];\n    }\n    return self;\n}\n\n- (NSString *)stringFromDate:(NSDate *)date\n{\n    NSInteger day = [self.chineseCalendar component:NSCalendarUnitDay fromDate:date];\n    if (day != 1) {\n        return self.lunarDays[day-2];\n    }\n    // First day of month\n    NSString *monthString = [self.formatter stringFromDate:date];\n    if ([self.chineseCalendar.veryShortMonthSymbols containsObject:monthString]) {\n        return self.lunarMonths[monthString.integerValue-1];\n    }\n    // Leap month\n    NSInteger month = [self.chineseCalendar component:NSCalendarUnitMonth fromDate:date];\n    monthString = [NSString stringWithFormat:@\"闰%@\", self.lunarMonths[month-1]];\n    return monthString;\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/RangePickerCell.h",
    "content": "//\n//  RangePickerCell.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 02/11/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <FSCalendar/FSCalendar.h>\n\n@interface RangePickerCell : FSCalendarCell\n\n// The start/end of the range\n@property (weak, nonatomic) CALayer *selectionLayer;\n\n// The middle of the range\n@property (weak, nonatomic) CALayer *middleLayer;\n\n@end\n"
  },
  {
    "path": "Example-Objc/RangePickerCell.m",
    "content": "//\n//  RangePickerCell.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 02/11/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"RangePickerCell.h\"\n#import \"FSCalendarExtensions.h\"\n\n@implementation RangePickerCell\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        \n        CALayer *selectionLayer = [[CALayer alloc] init];\n        selectionLayer.backgroundColor = [UIColor orangeColor].CGColor;\n        selectionLayer.actions = @{@\"hidden\":[NSNull null]}; // Remove hiding animation\n        [self.contentView.layer insertSublayer:selectionLayer below:self.titleLabel.layer];\n        self.selectionLayer = selectionLayer;\n        \n        CALayer *middleLayer = [[CALayer alloc] init];\n        middleLayer.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.3].CGColor;\n        middleLayer.actions = @{@\"hidden\":[NSNull null]}; // Remove hiding animation\n        [self.contentView.layer insertSublayer:middleLayer below:self.titleLabel.layer];\n        self.middleLayer = middleLayer;\n        \n        // Hide the default selection layer\n        self.shapeLayer.hidden = YES;\n        \n    }\n    return self;\n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    self.titleLabel.frame = self.contentView.bounds;\n}\n\n- (void)layoutSublayersOfLayer:(CALayer *)layer\n{\n    [super layoutSublayersOfLayer:layer];\n    self.selectionLayer.frame = self.contentView.bounds;\n    self.middleLayer.frame = self.contentView.bounds;\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/RangePickerViewController.h",
    "content": "//\n//  RangePickerViewController.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 5/8/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface RangePickerViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "Example-Objc/RangePickerViewController.m",
    "content": "//\n//  RangePickerViewController.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 5/8/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"RangePickerViewController.h\"\n#import \"FSCalendar.h\"\n#import \"RangePickerCell.h\"\n#import \"FSCalendarExtensions.h\"\n\n@interface RangePickerViewController () <FSCalendarDataSource,FSCalendarDelegate,FSCalendarDelegateAppearance>\n\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (weak, nonatomic) UILabel *eventLabel;\n@property (strong, nonatomic) NSCalendar *gregorian;\n@property (strong, nonatomic) NSDateFormatter *dateFormatter;\n\n// The start date of the range\n@property (strong, nonatomic) NSDate *date1;\n// The end date of the range\n@property (strong, nonatomic) NSDate *date2;\n\n- (void)configureCell:(__kindof FSCalendarCell *)cell forDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position;\n\n@end\n\n@implementation RangePickerViewController\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.title = @\"FSCalendar\";\n    }\n    return self;\n}\n\n- (void)loadView\n{\n    UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\n    view.backgroundColor = [UIColor whiteColor];\n    self.view = view;\n    \n    FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.navigationController.navigationBar.frame), view.frame.size.width, view.frame.size.height - CGRectGetMaxY(self.navigationController.navigationBar.frame))];\n    calendar.dataSource = self;\n    calendar.delegate = self;\n    calendar.pagingEnabled = NO;\n    calendar.allowsMultipleSelection = YES;\n    calendar.rowHeight = 60;\n    calendar.placeholderType = FSCalendarPlaceholderTypeNone;\n    [view addSubview:calendar];\n    self.calendar = calendar;\n    \n    calendar.appearance.titleDefaultColor = [UIColor blackColor];\n    calendar.appearance.headerTitleColor = [UIColor blackColor];\n    calendar.appearance.titleFont = [UIFont systemFontOfSize:16];\n    calendar.weekdayHeight = 0;\n    \n    calendar.swipeToChooseGesture.enabled = YES;\n    \n    calendar.today = nil; // Hide the today circle\n    [calendar registerClass:[RangePickerCell class] forCellReuseIdentifier:@\"cell\"];\n    \n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    \n    self.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];\n    self.dateFormatter = [[NSDateFormatter alloc] init];\n    self.dateFormatter.dateFormat = @\"yyyy-MM-dd\";\n    \n    // Uncomment this to perform an 'initial-week-scope'\n    // self.calendar.scope = FSCalendarScopeWeek;\n    \n    // For UITest\n    self.calendar.accessibilityIdentifier = @\"calendar\";\n}\n\n- (void)dealloc\n{\n    NSLog(@\"%s\",__FUNCTION__);\n}\n\n#pragma mark - FSCalendarDataSource\n\n- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.dateFormatter dateFromString:@\"2020-07-08\"];\n}\n\n- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:10 toDate:[NSDate date] options:0];\n}\n\n- (NSString *)calendar:(FSCalendar *)calendar titleForDate:(NSDate *)date\n{\n    if ([self.gregorian isDateInToday:date]) {\n        return @\"今\";\n    }\n    return nil;\n}\n\n- (FSCalendarCell *)calendar:(FSCalendar *)calendar cellForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    RangePickerCell *cell = [calendar dequeueReusableCellWithIdentifier:@\"cell\" forDate:date atMonthPosition:monthPosition];\n    return cell;\n}\n\n- (void)calendar:(FSCalendar *)calendar willDisplayCell:(FSCalendarCell *)cell forDate:(NSDate *)date atMonthPosition: (FSCalendarMonthPosition)monthPosition\n{\n    [self configureCell:cell forDate:date atMonthPosition:monthPosition];\n}\n\n#pragma mark - FSCalendarDelegate\n\n- (BOOL)calendar:(FSCalendar *)calendar shouldSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    return monthPosition == FSCalendarMonthPositionCurrent;\n}\n\n- (BOOL)calendar:(FSCalendar *)calendar shouldDeselectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    return NO;\n}\n\n- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    \n    if (calendar.swipeToChooseGesture.state == UIGestureRecognizerStateChanged) {\n        // If the selection is caused by swipe gestures\n        if (!self.date1) {\n            self.date1 = date;\n        } else {\n            if (self.date2) {\n                [calendar deselectDate:self.date2];\n            }\n            self.date2 = date;\n        }\n    } else {\n        if (self.date2) {\n            [calendar deselectDate:self.date1];\n            [calendar deselectDate:self.date2];\n            self.date1 = date;\n            self.date2 = nil;\n        } else if (!self.date1) {\n            self.date1 = date;\n        } else {\n            self.date2 = date;\n        }\n    }\n    \n    [self configureVisibleCells];\n}\n\n- (void)calendar:(FSCalendar *)calendar didDeselectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    NSLog(@\"did deselect date %@\",[self.dateFormatter stringFromDate:date]);\n    [self configureVisibleCells];\n}\n\n- (NSArray<UIColor *> *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventDefaultColorsForDate:(NSDate *)date\n{\n    if ([self.gregorian isDateInToday:date]) {\n        return @[[UIColor orangeColor]];\n    }\n    return @[appearance.eventDefaultColor];\n}\n\n#pragma mark - Private methods\n\n- (void)configureVisibleCells\n{\n    [self.calendar.visibleCells enumerateObjectsUsingBlock:^(__kindof FSCalendarCell * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {\n        NSDate *date = [self.calendar dateForCell:obj];\n        FSCalendarMonthPosition position = [self.calendar monthPositionForCell:obj];\n        [self configureCell:obj forDate:date atMonthPosition:position];\n    }];\n}\n\n- (void)configureCell:(__kindof FSCalendarCell *)cell forDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position\n{\n    RangePickerCell *rangeCell = cell;\n    if (position != FSCalendarMonthPositionCurrent) {\n        rangeCell.middleLayer.hidden = YES;\n        rangeCell.selectionLayer.hidden = YES;\n        return;\n    }\n    if (self.date1 && self.date2) {\n        // The date is in the middle of the range\n        BOOL isMiddle = [date compare:self.date1] != [date compare:self.date2];\n        rangeCell.middleLayer.hidden = !isMiddle;\n    } else {\n        rangeCell.middleLayer.hidden = YES;\n    }\n    BOOL isSelected = NO;\n    isSelected |= self.date1 && [self.gregorian isDate:date inSameDayAsDate:self.date1];\n    isSelected |= self.date2 && [self.gregorian isDate:date inSameDayAsDate:self.date2];\n    rangeCell.selectionLayer.hidden = !isSelected;\n}\n\n@end\n"
  },
  {
    "path": "Example-Objc/StoryboardExampleViewController.h",
    "content": "//\n//  FSViewController.h\n//  Chinese-Lunar-Calendar\n//\n//  Created by Wenchao Ding on 01/29/2015.\n//  Copyright (c) 2017 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"FSCalendar.h\"\n\n@interface StoryboardExampleViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "Example-Objc/StoryboardExampleViewController.m",
    "content": "//\n//  StoryboardExampleViewController.m\n//  Chinese-Lunar-Calendar\n//\n//  Created by Wenchao Ding on 01/29/2015.\n//  Copyright (c) 2014 Wenchao Ding. All rights reserved.\n//\n\n#import \"StoryboardExampleViewController.h\"\n#import \"LunarFormatter.h\"\n#import \"CalendarConfigViewController.h\"\n\n@interface StoryboardExampleViewController()<FSCalendarDataSource,FSCalendarDelegate,FSCalendarDelegateAppearance>\n\n@property (weak  , nonatomic) IBOutlet FSCalendar *calendar;\n@property (weak  , nonatomic) IBOutlet NSLayoutConstraint *calendarHeightConstraint;\n\n@property (assign, nonatomic) NSInteger      theme;\n@property (assign, nonatomic) BOOL           lunar;\n\n@property (strong, nonatomic) NSArray<NSString *> *datesShouldNotBeSelected;\n@property (strong, nonatomic) NSArray<NSString *> *datesWithEvent;\n\n@property (strong, nonatomic) NSCalendar *gregorianCalendar;\n\n@property (strong, nonatomic) NSDateFormatter *dateFormatter1;\n@property (strong, nonatomic) NSDateFormatter *dateFormatter2;\n@property (strong, nonatomic) LunarFormatter *lunarFormatter;\n\n- (IBAction)unwind2StoryboardExample:(UIStoryboardSegue *)segue;\n\n@end\n\n@implementation StoryboardExampleViewController\n\n#pragma mark - Life Cycle\n\n- (instancetype)initWithCoder:(NSCoder *)coder\n{\n    self = [super initWithCoder:coder];\n    if (self) {\n        \n        self.gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n        \n        NSLocale *chinese = [NSLocale localeWithLocaleIdentifier:@\"zh-CN\"];\n        \n        self.dateFormatter1 = [[NSDateFormatter alloc] init];\n        self.dateFormatter1.locale = chinese;\n        self.dateFormatter1.dateFormat = @\"yyyy/MM/dd\";\n        \n        self.dateFormatter2 = [[NSDateFormatter alloc] init];\n        self.dateFormatter2.locale = chinese;\n        self.dateFormatter2.dateFormat = @\"yyyy-MM-dd\";\n        \n        self.calendar.appearance.caseOptions = FSCalendarCaseOptionsHeaderUsesUpperCase|FSCalendarCaseOptionsWeekdayUsesUpperCase;\n        \n        self.datesShouldNotBeSelected = @[@\"2020/08/07\",\n                                          @\"2020/09/07\",\n                                          @\"2020/10/07\",\n                                          @\"2020/11/07\",\n                                          @\"2020/12/07\",\n                                          @\"2020/01/07\",\n                                          @\"2020/02/07\"];\n        \n        self.datesWithEvent = @[@\"2020-12-03\",\n                                @\"2020-12-07\",\n                                @\"2020-12-15\",\n                                @\"2020-12-25\"];\n        \n        self.lunarFormatter = [[LunarFormatter alloc] init];\n    }\n    return self;\n}\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    \n    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@\"\" style:UIBarButtonItemStylePlain target:nil action:nil];\n    \n    if ([[UIDevice currentDevice].model hasPrefix:@\"iPad\"]) {\n        self.calendarHeightConstraint.constant = 400;\n    }\n    self.calendar.today = [self.dateFormatter1 dateFromString:@\"2020/11/19\"];\n//    [self.calendar selectDate:[self.dateFormatter1 dateFromString:@\"2020/11/09\"] scrollToDate:YES];\n    \n    self.calendar.accessibilityIdentifier = @\"calendar\";\n    \n}\n\n- (void)dealloc\n{\n    NSLog(@\"%s\",__FUNCTION__);\n}\n\n#pragma mark - FSCalendarDataSource\n\n- (NSString *)calendar:(FSCalendar *)calendar titleForDate:(NSDate *)date\n{\n    return [self.gregorianCalendar isDateInToday:date] ? @\"今天\" : nil;\n}\n\n- (NSString *)calendar:(FSCalendar *)calendar subtitleForDate:(NSDate *)date\n{\n    if (!_lunar) {\n        return nil;\n    }\n    return [self.lunarFormatter stringFromDate:date];\n}\n\n- (NSInteger)calendar:(FSCalendar *)calendar numberOfEventsForDate:(NSDate *)date\n{\n    if ([self.datesWithEvent containsObject:[self.dateFormatter2 stringFromDate:date]]) {\n        return 1;\n    }\n    return 0;\n}\n\n- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.dateFormatter1 dateFromString:@\"2020/10/01\"];\n}\n\n- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar\n{\n    return [self.dateFormatter1 dateFromString:@\"2023/05/31\"];\n}\n\n#pragma mark - FSCalendarDelegate\n\n- (BOOL)calendar:(FSCalendar *)calendar shouldSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    BOOL shouldSelect = ![_datesShouldNotBeSelected containsObject:[self.dateFormatter1 stringFromDate:date]];\n    if (!shouldSelect) {\n        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@\"FSCalendar\" message:[NSString stringWithFormat:@\"FSCalendar delegate forbid %@  to be selected\",[self.dateFormatter1 stringFromDate:date]] preferredStyle:UIAlertControllerStyleAlert];\n        [alertController addAction:[UIAlertAction actionWithTitle:@\"OK\" style:UIAlertActionStyleDefault handler:nil]];\n        [self presentViewController:alertController animated:YES completion:nil];\n    } else {\n        NSLog(@\"Should select date %@\",[self.dateFormatter1 stringFromDate:date]);\n    }\n    return shouldSelect;\n}\n\n- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    NSLog(@\"did select date %@\",[self.dateFormatter1 stringFromDate:date]);\n    if (monthPosition == FSCalendarMonthPositionNext || monthPosition == FSCalendarMonthPositionPrevious) {\n        [calendar setCurrentPage:date animated:YES];\n    }\n}\n\n- (void)calendarCurrentPageDidChange:(FSCalendar *)calendar\n{\n    NSLog(@\"did change to page %@\",[self.dateFormatter1 stringFromDate:calendar.currentPage]);\n}\n\n- (CGPoint)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance titleOffsetForDate:(NSDate *)date\n{\n    if ([self calendar:calendar subtitleForDate:date]) {\n        return CGPointZero;\n    }\n    if ([_datesWithEvent containsObject:[self.dateFormatter2 stringFromDate:date]]) {\n        return CGPointMake(0, -2);\n    }\n    return CGPointZero;\n}\n\n- (CGPoint)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventOffsetForDate:(NSDate *)date\n{\n    if ([self calendar:calendar subtitleForDate:date]) {\n        return CGPointZero;\n    }\n    if ([_datesWithEvent containsObject:[self.dateFormatter2 stringFromDate:date]]) {\n        return CGPointMake(0, -10);\n    }\n    return CGPointZero;\n}\n\n- (NSArray<UIColor *> *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventSelectionColorsForDate:(nonnull NSDate *)date\n{\n    if ([self calendar:calendar subtitleForDate:date]) {\n        return @[appearance.eventDefaultColor];\n    }\n    if ([_datesWithEvent containsObject:[self.dateFormatter2 stringFromDate:date]]) {\n        return @[[UIColor whiteColor]];\n    }\n    return nil;\n}\n\n#pragma mark - Navigation\n\n- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender\n{\n    CalendarConfigViewController *config = segue.destinationViewController;\n    config.lunar = self.lunar;\n    config.theme = self.theme;\n    config.selectedDate = self.calendar.selectedDate;\n    config.firstWeekday = self.calendar.firstWeekday;\n    config.scrollDirection = self.calendar.scrollDirection;\n}\n\n- (void)unwind2StoryboardExample:(UIStoryboardSegue *)segue\n{\n    CalendarConfigViewController *config = segue.sourceViewController;\n    self.lunar = config.lunar;\n    self.theme = config.theme;\n    [self.calendar selectDate:config.selectedDate scrollToDate:NO];\n    \n    if (self.calendar.firstWeekday != config.firstWeekday) {\n        self.calendar.firstWeekday = config.firstWeekday;\n    }\n    if (self.calendar.scrollDirection != config.scrollDirection) {\n        self.calendar.scrollDirection = config.scrollDirection;\n    }\n}\n\n\n#pragma mark - Private properties\n\n- (void)setTheme:(NSInteger)theme\n{\n    if (_theme != theme) {\n        _theme = theme;\n        switch (theme) {\n            case 0: {\n                _calendar.appearance.weekdayTextColor = FSCalendarStandardTitleTextColor;\n                _calendar.appearance.headerTitleColor = FSCalendarStandardTitleTextColor;\n                _calendar.appearance.eventDefaultColor = FSCalendarStandardEventDotColor;\n                _calendar.appearance.selectionColor = FSCalendarStandardSelectionColor;\n                _calendar.appearance.headerDateFormat = @\"MMMM yyyy\";\n                _calendar.appearance.todayColor = FSCalendarStandardTodayColor;\n                _calendar.appearance.borderRadius = 1.0;\n                _calendar.appearance.headerMinimumDissolvedAlpha = 0.2;\n                break;\n            }\n            case 1: {\n                _calendar.appearance.weekdayTextColor = [UIColor redColor];\n                _calendar.appearance.headerTitleColor = [UIColor darkGrayColor];\n                _calendar.appearance.eventDefaultColor = [UIColor greenColor];\n                _calendar.appearance.selectionColor = [UIColor blueColor];\n                _calendar.appearance.headerDateFormat = @\"yyyy-MM\";\n                _calendar.appearance.todayColor = [UIColor redColor];\n                _calendar.appearance.borderRadius = 1.0;\n                _calendar.appearance.headerMinimumDissolvedAlpha = 0.0;\n                \n                break;\n            }\n            case 2: {\n                _calendar.appearance.weekdayTextColor = [UIColor redColor];\n                _calendar.appearance.headerTitleColor = [UIColor redColor];\n                _calendar.appearance.eventDefaultColor = [UIColor greenColor];\n                _calendar.appearance.selectionColor = [UIColor blueColor];\n                _calendar.appearance.headerDateFormat = @\"yyyy/MM\";\n                _calendar.appearance.todayColor = [UIColor orangeColor];\n                _calendar.appearance.borderRadius = 0;\n                _calendar.appearance.headerMinimumDissolvedAlpha = 1.0;\n                break;\n            }\n            default:\n                break;\n        }\n        \n    }\n}\n\n- (void)setLunar:(BOOL)lunar\n{\n    if (_lunar != lunar) {\n        _lunar = lunar;\n        [_calendar reloadData];\n    }\n}\n\n@end\n\n"
  },
  {
    "path": "Example-Objc/main.m",
    "content": "//\n//  main.m\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 8/23/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  FSCalendarSwiftExample\n//\n//  Created by Wenchao Ding on 9/3/15.\n//  Copyright (c) 2015 wenchao. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\n        return true\n    }\n\n    func applicationWillResignActive(_ application: UIApplication) {\n        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n    }\n\n    func applicationDidEnterBackground(_ application: UIApplication) {\n        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n    }\n\n    func applicationWillEnterForeground(_ application: UIApplication) {\n        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n    }\n\n    func applicationDidBecomeActive(_ application: UIApplication) {\n        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    }\n\n    func applicationWillTerminate(_ application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n\n\n}\n\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/Base.lproj/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"11762\" systemVersion=\"16C67\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11757\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"  Copyright (c) 2016 wenchao. All rights reserved.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"FSCalendar\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n                    <rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\"/>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <constraints>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/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=\"14313.18\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"PJf-VN-VRQ\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14283.14\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Navigation Controller-->\n        <scene sceneID=\"V5z-A0-Eql\">\n            <objects>\n                <navigationController id=\"PJf-VN-VRQ\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"pvp-yR-NZx\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"pql-xQ-kyz\" kind=\"relationship\" relationship=\"rootViewController\" id=\"HYV-uQ-UNV\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"r7p-cV-Hof\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-769\" y=\"269\"/>\n        </scene>\n        <!--FSCalendar-->\n        <scene sceneID=\"mQI-RU-AqZ\">\n            <objects>\n                <tableViewController id=\"pql-xQ-kyz\" customClass=\"TableViewController\" customModule=\"FSCalendarSwiftExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"Fzs-qM-cOu\">\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\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <sections>\n                            <tableViewSection id=\"rF9-Ar-n8y\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"n68-61-0ik\" style=\"IBUITableViewCellStyleDefault\" id=\"b1S-LK-611\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"b1S-LK-611\" id=\"8xw-Gx-ELf\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"DIY\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"n68-61-0ik\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"peh-VK-Rnj\" style=\"IBUITableViewCellStyleDefault\" id=\"9eN-ZG-Rjh\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"9eN-ZG-Rjh\" id=\"o2q-sp-AF7\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"FSCalendarScope\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"peh-VK-Rnj\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"E9E-eQ-Fo2\" kind=\"show\" id=\"bmm-U7-Cd9\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"HGo-Ib-Mde\" style=\"IBUITableViewCellStyleDefault\" id=\"vCP-zK-mHb\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"88\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"vCP-zK-mHb\" id=\"0kv-Nh-89Z\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Delegate Appearance\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"HGo-Ib-Mde\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"Drg-hX-Wf1\" style=\"IBUITableViewCellStyleDefault\" id=\"Kfj-Va-Wua\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"132\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Kfj-Va-Wua\" id=\"Ovg-vw-USW\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Interface Builder\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"Drg-hX-Wf1\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"lty-fT-aMK\" kind=\"show\" id=\"W0j-tq-YZy\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"cWM-iX-3Vc\" style=\"IBUITableViewCellStyleDefault\" id=\"Im4-UX-rci\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"176\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Im4-UX-rci\" id=\"82T-qr-tzv\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"LoadView\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"cWM-iX-3Vc\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"pql-xQ-kyz\" id=\"MoL-de-DZU\"/>\n                            <outlet property=\"delegate\" destination=\"pql-xQ-kyz\" id=\"3Nz-sh-QZl\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"FSCalendar\" id=\"hFo-dn-0Df\"/>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"bb2-XA-uJM\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"52\" y=\"269\"/>\n        </scene>\n        <!--Data Source-->\n        <scene sceneID=\"fuI-jA-1gc\">\n            <objects>\n                <viewController id=\"lty-fT-aMK\" customClass=\"InterfaceBuilderViewController\" customModule=\"FSCalendarSwiftExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Euq-Om-XUc\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"SlA-5t-TA6\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"kBR-oK-N7Y\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wPJ-CL-JyG\" customClass=\"FSCalendar\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"300\"/>\n                                <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"300\" id=\"WIA-b7-boT\"/>\n                                </constraints>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"lty-fT-aMK\" id=\"uaL-Rc-pxm\"/>\n                                    <outlet property=\"delegate\" destination=\"lty-fT-aMK\" id=\"cmv-xD-9oe\"/>\n                                </connections>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.94117647058823528\" green=\"0.94117647058823528\" blue=\"0.94117647058823528\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"wPJ-CL-JyG\" secondAttribute=\"trailing\" id=\"002-Gr-M9c\"/>\n                            <constraint firstItem=\"wPJ-CL-JyG\" firstAttribute=\"top\" secondItem=\"Euq-Om-XUc\" secondAttribute=\"bottom\" id=\"MGn-0L-7MJ\"/>\n                            <constraint firstItem=\"wPJ-CL-JyG\" firstAttribute=\"leading\" secondItem=\"kBR-oK-N7Y\" secondAttribute=\"leading\" id=\"bXw-iC-Mq6\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"FSCalendar\" id=\"UvR-7d-hqN\">\n                        <barButtonItem key=\"rightBarButtonItem\" image=\"icon_setting\" id=\"zhP-0d-UKw\">\n                            <color key=\"tintColor\" white=\"0.0\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                            <connections>\n                                <segue destination=\"1Bg-mu-sAL\" kind=\"show\" identifier=\"Config\" id=\"ef6-wq-G0p\"/>\n                            </connections>\n                        </barButtonItem>\n                    </navigationItem>\n                    <connections>\n                        <outlet property=\"calendar\" destination=\"wPJ-CL-JyG\" id=\"LTL-tj-4um\"/>\n                        <outlet property=\"calendarHeightConstraint\" destination=\"WIA-b7-boT\" id=\"WRf-hY-0GO\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"o4Q-iq-LTl\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n                <exit id=\"y0B-mq-OOK\" userLabel=\"Exit\" sceneMemberID=\"exit\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"844\" y=\"475\"/>\n        </scene>\n        <!--Data Source-->\n        <scene sceneID=\"7uW-s2-Nf4\">\n            <objects>\n                <viewController title=\"FSCalendarScopeExample\" id=\"E9E-eQ-Fo2\" customClass=\"FSCalendarScopeExampleViewController\" customModule=\"FSCalendarSwiftExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"BVW-jf-lbD\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"pBf-CJ-hyj\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"7Kr-Sg-43n\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"su8-WM-shD\" customClass=\"FSCalendar\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"300\"/>\n                                <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"300\" id=\"Z6p-MX-DMQ\"/>\n                                </constraints>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"fakedSelectedDay\">\n                                        <integer key=\"value\" value=\"1\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"E9E-eQ-Fo2\" id=\"Vf2-J6-YKs\"/>\n                                    <outlet property=\"delegate\" destination=\"E9E-eQ-Fo2\" id=\"cVm-Sm-sXf\"/>\n                                </connections>\n                            </view>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"10\" sectionFooterHeight=\"10\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"JDR-5L-1w9\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"380\" width=\"375\" height=\"287\"/>\n                                <color key=\"backgroundColor\" red=\"0.93725490199999995\" green=\"0.93725490199999995\" blue=\"0.95686274510000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <view key=\"tableFooterView\" contentMode=\"scaleToFill\" id=\"k7m-d1-m3S\" userLabel=\"Footer\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"197.5\" width=\"375\" height=\"69\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                    <subviews>\n                                        <switch opaque=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"750\" verticalHuggingPriority=\"750\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" on=\"YES\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"KCl-gx-WJH\">\n                                            <rect key=\"frame\" x=\"104\" y=\"19\" width=\"51\" height=\"31\"/>\n                                        </switch>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Animated\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"W77-hR-aB2\">\n                                            <rect key=\"frame\" x=\"14\" y=\"9\" width=\"73\" height=\"51\"/>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                    </subviews>\n                                    <constraints>\n                                        <constraint firstItem=\"W77-hR-aB2\" firstAttribute=\"top\" secondItem=\"k7m-d1-m3S\" secondAttribute=\"top\" constant=\"9\" id=\"Fve-3h-yGu\"/>\n                                        <constraint firstItem=\"KCl-gx-WJH\" firstAttribute=\"centerY\" secondItem=\"W77-hR-aB2\" secondAttribute=\"centerY\" id=\"TVe-fC-hav\"/>\n                                        <constraint firstItem=\"W77-hR-aB2\" firstAttribute=\"centerY\" secondItem=\"k7m-d1-m3S\" secondAttribute=\"centerY\" id=\"a59-oz-IIx\"/>\n                                        <constraint firstItem=\"KCl-gx-WJH\" firstAttribute=\"leading\" secondItem=\"W77-hR-aB2\" secondAttribute=\"trailing\" constant=\"17\" id=\"fF5-ig-iRP\"/>\n                                        <constraint firstItem=\"W77-hR-aB2\" firstAttribute=\"leading\" secondItem=\"k7m-d1-m3S\" secondAttribute=\"leading\" constant=\"14\" id=\"gFO-nm-ESn\"/>\n                                    </constraints>\n                                </view>\n                                <prototypes>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell_month\" textLabel=\"sSz-fc-Tw7\" style=\"IBUITableViewCellStyleDefault\" id=\"54X-7u-9Ob\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"54X-7u-9Ob\" id=\"1AF-BW-ZzA\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"FSCalendarScopeMonth\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"sSz-fc-Tw7\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell_week\" textLabel=\"18w-un-bm9\" style=\"IBUITableViewCellStyleDefault\" id=\"Jak-cA-MLi\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Jak-cA-MLi\" id=\"NYL-I9-UHC\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"FSCalendarScopeWeek\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"18w-un-bm9\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"blue\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"fGJ-HR-nLa\" imageView=\"aHn-NP-iqx\" style=\"IBUITableViewCellStyleDefault\" id=\"mEc-Yq-s56\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"143.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"mEc-Yq-s56\" id=\"Sz2-Op-ikR\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Lorem ipsum dolor sit er elit lamet\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"fGJ-HR-nLa\">\n                                                    <rect key=\"frame\" x=\"48\" y=\"0.0\" width=\"312\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                                <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" image=\"icon_cat\" id=\"aHn-NP-iqx\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"14\" width=\"18\" height=\"15\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                </imageView>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"E9E-eQ-Fo2\" id=\"U76-Sy-x7x\"/>\n                                    <outlet property=\"delegate\" destination=\"E9E-eQ-Fo2\" id=\"NsD-lC-L5v\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"0.93725490199999995\" green=\"0.93725490199999995\" blue=\"0.95686274510000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"pBf-CJ-hyj\" firstAttribute=\"top\" secondItem=\"JDR-5L-1w9\" secondAttribute=\"bottom\" id=\"7aO-bd-VfC\"/>\n                            <constraint firstItem=\"JDR-5L-1w9\" firstAttribute=\"leading\" secondItem=\"su8-WM-shD\" secondAttribute=\"leading\" id=\"MC6-BG-phG\"/>\n                            <constraint firstItem=\"JDR-5L-1w9\" firstAttribute=\"top\" secondItem=\"su8-WM-shD\" secondAttribute=\"bottom\" constant=\"16\" id=\"TEe-Ru-0ON\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"su8-WM-shD\" secondAttribute=\"trailing\" id=\"Uqp-wh-gP5\"/>\n                            <constraint firstItem=\"su8-WM-shD\" firstAttribute=\"leading\" secondItem=\"7Kr-Sg-43n\" secondAttribute=\"leading\" id=\"nCq-PM-Fwv\"/>\n                            <constraint firstItem=\"JDR-5L-1w9\" firstAttribute=\"trailing\" secondItem=\"su8-WM-shD\" secondAttribute=\"trailing\" id=\"xNd-pl-Jjg\"/>\n                            <constraint firstItem=\"su8-WM-shD\" firstAttribute=\"top\" secondItem=\"BVW-jf-lbD\" secondAttribute=\"bottom\" id=\"xcF-2p-45L\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"FSCalendar\" id=\"nWQ-Jo-hAf\">\n                        <barButtonItem key=\"rightBarButtonItem\" title=\"Toggle\" id=\"n9X-b6-bOm\">\n                            <connections>\n                                <action selector=\"toggleClickedWithSender:\" destination=\"E9E-eQ-Fo2\" id=\"Ib5-w9-wms\"/>\n                            </connections>\n                        </barButtonItem>\n                    </navigationItem>\n                    <connections>\n                        <outlet property=\"animationSwitch\" destination=\"KCl-gx-WJH\" id=\"Lu9-Zd-DHZ\"/>\n                        <outlet property=\"calendar\" destination=\"su8-WM-shD\" id=\"LH5-zR-zpl\"/>\n                        <outlet property=\"calendarHeightConstraint\" destination=\"Z6p-MX-DMQ\" id=\"B5d-EW-256\"/>\n                        <outlet property=\"tableView\" destination=\"JDR-5L-1w9\" id=\"fr7-Q6-Q5E\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"ref-0a-lFG\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"844\" y=\"-225\"/>\n        </scene>\n        <!--Configuration-->\n        <scene sceneID=\"EaG-2r-dag\">\n            <objects>\n                <tableViewController id=\"1Bg-mu-sAL\" customClass=\"CalendarConfigViewController\" customModule=\"FSCalendarSwiftExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"10\" sectionFooterHeight=\"10\" id=\"rgB-5F-UdS\">\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=\"0.93725490199999995\" green=\"0.93725490199999995\" blue=\"0.95686274510000002\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <sections>\n                            <tableViewSection headerTitle=\"Theme\" id=\"V2S-xV-p2V\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"checkmark\" indentationWidth=\"10\" textLabel=\"VgO-zh-iGo\" style=\"IBUITableViewCellStyleDefault\" id=\"smn-mO-BlH\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"smn-mO-BlH\" id=\"fTj-n6-Adf\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"335\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Theme1\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"VgO-zh-iGo\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"319\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"QAh-BL-VdG\" style=\"IBUITableViewCellStyleDefault\" id=\"fT6-bQ-Pgr\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"fT6-bQ-Pgr\" id=\"LCo-XT-87S\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Theme2\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"QAh-BL-VdG\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"MJU-hn-5Ed\" style=\"IBUITableViewCellStyleDefault\" id=\"BYU-Oc-eB6\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"143.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"BYU-Oc-eB6\" id=\"Uz8-BI-cJ5\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Theme3\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"MJU-hn-5Ed\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Subtitle\" id=\"Jfv-XR-aU1\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"checkmark\" indentationWidth=\"10\" textLabel=\"cch-GY-gQu\" style=\"IBUITableViewCellStyleDefault\" id=\"d3c-i6-FiX\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"235.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"d3c-i6-FiX\" id=\"bNK-1W-rcO\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"335\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Lunar\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"cch-GY-gQu\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"319\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Scroll Direction\" id=\"RBc-gS-znd\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"checkmark\" indentationWidth=\"10\" textLabel=\"9Xh-hT-pme\" style=\"IBUITableViewCellStyleDefault\" id=\"yar-JC-ODd\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"327.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"yar-JC-ODd\" id=\"rvl-ac-Df0\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"335\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Horizontal\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"9Xh-hT-pme\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"319\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"vMe-9o-hCa\" style=\"IBUITableViewCellStyleDefault\" id=\"G5e-HT-FQR\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"371.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"G5e-HT-FQR\" id=\"Qdk-JC-KcZ\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Vertical\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"vMe-9o-hCa\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"Select a date\" id=\"Ztc-z9-pXD\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"none\" indentationWidth=\"10\" rowHeight=\"163\" id=\"fC2-DC-0Ac\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"463.5\" width=\"375\" height=\"163\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"fC2-DC-0Ac\" id=\"zpf-8h-7gT\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"162.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <datePicker contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" datePickerMode=\"date\" minuteInterval=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"wne-Jm-6dT\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"162.5\"/>\n                                                    <date key=\"date\" timeIntervalSinceReferenceDate=\"448248004.37374699\">\n                                                        <!--2015-03-17 01:20:04 +0000-->\n                                                    </date>\n                                                    <date key=\"minimumDate\" timeIntervalSinceReferenceDate=\"-978267600\">\n                                                        <!--1970-01-01 11:00:00 +0000-->\n                                                    </date>\n                                                    <date key=\"maximumDate\" timeIntervalSinceReferenceDate=\"3124090800\">\n                                                        <!--2099-12-31 11:00:00 +0000-->\n                                                    </date>\n                                                </datePicker>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstAttribute=\"bottom\" secondItem=\"wne-Jm-6dT\" secondAttribute=\"bottom\" id=\"6c2-e4-7ly\"/>\n                                                <constraint firstItem=\"wne-Jm-6dT\" firstAttribute=\"leading\" secondItem=\"zpf-8h-7gT\" secondAttribute=\"leading\" id=\"Ixd-t5-vCH\"/>\n                                                <constraint firstAttribute=\"trailing\" secondItem=\"wne-Jm-6dT\" secondAttribute=\"trailing\" id=\"hpf-b7-9Io\"/>\n                                                <constraint firstItem=\"wne-Jm-6dT\" firstAttribute=\"top\" secondItem=\"zpf-8h-7gT\" secondAttribute=\"top\" id=\"jl2-PJ-o4N\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"Soy-1d-VzB\" style=\"IBUITableViewCellStyleDefault\" id=\"MZm-dU-HD3\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"626.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"MZm-dU-HD3\" id=\"J3R-2r-vm6\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Click to select\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"Soy-1d-VzB\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                            <tableViewSection headerTitle=\"First Weekday\" id=\"sij-tO-seR\">\n                                <cells>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" accessoryType=\"checkmark\" indentationWidth=\"10\" textLabel=\"feC-ju-7Gh\" rowHeight=\"44\" style=\"IBUITableViewCellStyleDefault\" id=\"n5R-ti-udr\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"718.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"n5R-ti-udr\" id=\"nc5-ec-h67\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"343\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Sunday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"feC-ju-7Gh\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"325\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"ai5-pg-18L\" style=\"IBUITableViewCellStyleDefault\" id=\"Oyf-lJ-ZtN\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"762.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Oyf-lJ-ZtN\" id=\"ZBR-eW-qNL\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Monday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"ai5-pg-18L\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"5y7-xl-JWm\" style=\"IBUITableViewCellStyleDefault\" id=\"2LX-JO-ns5\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"806.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"2LX-JO-ns5\" id=\"Gti-yQ-ST6\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Tuesday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"5y7-xl-JWm\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"nRu-ci-kfC\" style=\"IBUITableViewCellStyleDefault\" id=\"SI1-Ox-dft\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"850.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"SI1-Ox-dft\" id=\"U2u-nC-C4C\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Wednesday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"nRu-ci-kfC\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"Xz9-UT-3Ld\" style=\"IBUITableViewCellStyleDefault\" id=\"WOd-6m-Ckm\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"894.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"WOd-6m-Ckm\" id=\"Zlz-2c-wiy\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Thursday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"Xz9-UT-3Ld\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"TKv-X2-sEt\" style=\"IBUITableViewCellStyleDefault\" id=\"Hcd-tD-3ft\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"938.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Hcd-tD-3ft\" id=\"1cN-cI-Zag\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Friday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"TKv-X2-sEt\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"xwQ-4Y-Rhs\" style=\"IBUITableViewCellStyleDefault\" id=\"FnN-dF-QIi\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"982.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"FnN-dF-QIi\" id=\"Hl0-Ix-Yqh\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Saturday\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"xwQ-4Y-Rhs\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"16\"/>\n                                                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"1Bg-mu-sAL\" id=\"Xl8-7j-3oQ\"/>\n                            <outlet property=\"delegate\" destination=\"1Bg-mu-sAL\" id=\"6mg-bL-AuR\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Configuration\" id=\"Swa-3z-uR1\"/>\n                    <simulatedNavigationBarMetrics key=\"simulatedTopBarMetrics\" prompted=\"NO\"/>\n                    <connections>\n                        <outlet property=\"datePicker\" destination=\"wne-Jm-6dT\" id=\"g6Y-HO-37v\"/>\n                        <segue destination=\"y0B-mq-OOK\" kind=\"unwind\" identifier=\"unwind2InterfaceBuilder\" unwindAction=\"unwind2InterfaceBuilderWithSegue:\" id=\"30W-OU-s2p\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"xyg-MQ-rep\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1622\" y=\"475\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"icon_cat\" width=\"18\" height=\"15\"/>\n        <image name=\"icon_setting\" width=\"24\" height=\"24\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/CalendarConfigViewController.swift",
    "content": "//\n//  CalendarConfigViewController.swift\n//  FSCalendarSwiftExample\n//\n//  Created by Wenchao Ding on 28/01/2017.\n//  Copyright © 2017 wenchao. All rights reserved.\n//\n\nimport UIKit\n\nclass CalendarConfigViewController: UITableViewController {\n\n    var theme: Int = 0\n    var lunar: Bool = false\n    var firstWeekday: UInt = 1\n    var scrollDirection: FSCalendarScrollDirection = .horizontal\n    var selectedDate: Date?\n    \n    @IBOutlet\n    weak var datePicker: UIDatePicker!\n    \n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = super.tableView(tableView, cellForRowAt: indexPath)\n        switch indexPath.section {\n        case 0:\n            cell.accessoryType = self.theme == indexPath.row ? .checkmark : .none;\n        case 1:\n            cell.accessoryType = self.lunar ? .checkmark : .none;\n        case 2:\n            cell.accessoryType = indexPath.row == 1 - Int(self.scrollDirection.rawValue) ? .checkmark : .none;\n        case 4:\n            cell.accessoryType = indexPath.row == Int(self.firstWeekday-1) ? .checkmark : .none;\n        default:\n            break\n        }\n        return cell\n    }\n    \n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: true)\n        switch indexPath.section {\n        case 0:\n            self.theme = indexPath.row\n        case 1:\n            self.lunar = !self.lunar\n        case 2:\n            self.scrollDirection = FSCalendarScrollDirection(rawValue: UInt(1-indexPath.row))!\n        case 3:\n            self.selectedDate = self.datePicker.date;\n        case 4:\n            self.firstWeekday = UInt(indexPath.row + 1)\n        default:\n            break\n        }\n        tableView.reloadSections([indexPath.section] as IndexSet, with: .none)\n        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+0.2) {\n            self.performSegue(withIdentifier: \"unwind2InterfaceBuilder\", sender: self)\n        }\n        \n    }\n\n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/DIYCalendarCell.swift",
    "content": "//\n//  DIYCalendarCell.swift\n//  FSCalendarSwiftExample\n//\n//  Created by dingwenchao on 06/11/2016.\n//  Copyright © 2016 wenchao. All rights reserved.\n//\n\nimport Foundation\n\nimport UIKit\n\nenum SelectionType : Int {\n    case none\n    case single\n    case leftBorder\n    case middle\n    case rightBorder\n}\n\n\nclass DIYCalendarCell: FSCalendarCell {\n    \n    weak var circleImageView: UIImageView!\n    weak var selectionLayer: CAShapeLayer!\n    \n    var selectionType: SelectionType = .none {\n        didSet {\n            setNeedsLayout()\n        }\n    }\n    \n    required init!(coder aDecoder: NSCoder!) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        \n        let circleImageView = UIImageView(image: UIImage(named: \"circle\")!)\n        self.contentView.insertSubview(circleImageView, at: 0)\n        self.circleImageView = circleImageView\n        \n        let selectionLayer = CAShapeLayer()\n        selectionLayer.fillColor = UIColor.black.cgColor\n        selectionLayer.actions = [\"hidden\": NSNull()]\n        self.contentView.layer.insertSublayer(selectionLayer, below: self.titleLabel!.layer)\n        self.selectionLayer = selectionLayer\n        \n        self.shapeLayer.isHidden = true\n        \n        let view = UIView(frame: self.bounds)\n        view.backgroundColor = UIColor.lightGray.withAlphaComponent(0.12)\n        self.backgroundView = view;\n        \n    }\n    \n    override func layoutSubviews() {\n        super.layoutSubviews()\n        self.circleImageView.frame = self.contentView.bounds\n        self.backgroundView?.frame = self.bounds.insetBy(dx: 1, dy: 1)\n        self.selectionLayer.frame = self.contentView.bounds\n        \n        if selectionType == .middle {\n            self.selectionLayer.path = UIBezierPath(rect: self.selectionLayer.bounds).cgPath\n        }\n        else if selectionType == .leftBorder {\n            self.selectionLayer.path = UIBezierPath(roundedRect: self.selectionLayer.bounds, byRoundingCorners: [.topLeft, .bottomLeft], cornerRadii: CGSize(width: self.selectionLayer.frame.width / 2, height: self.selectionLayer.frame.width / 2)).cgPath\n        }\n        else if selectionType == .rightBorder {\n            self.selectionLayer.path = UIBezierPath(roundedRect: self.selectionLayer.bounds, byRoundingCorners: [.topRight, .bottomRight], cornerRadii: CGSize(width: self.selectionLayer.frame.width / 2, height: self.selectionLayer.frame.width / 2)).cgPath\n        }\n        else if selectionType == .single {\n            let diameter: CGFloat = min(self.selectionLayer.frame.height, self.selectionLayer.frame.width)\n            self.selectionLayer.path = UIBezierPath(ovalIn: CGRect(x: self.contentView.frame.width / 2 - diameter / 2, y: self.contentView.frame.height / 2 - diameter / 2, width: diameter, height: diameter)).cgPath\n        }\n    }\n    \n    override func configureAppearance() {\n        super.configureAppearance()\n        // Override the build-in appearance configuration\n        if self.isPlaceholder {\n            self.eventIndicator.isHidden = true\n            self.titleLabel.textColor = UIColor.lightGray\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/DIYExampleViewController.swift",
    "content": "//\n//  DIYViewController.swift\n//  FSCalendarSwiftExample\n//\n//  Created by dingwenchao on 06/11/2016.\n//  Copyright © 2016 wenchao. All rights reserved.\n//\n\nimport Foundation\n\nclass DIYExampleViewController: UIViewController, FSCalendarDataSource, FSCalendarDelegate, FSCalendarDelegateAppearance {\n    \n    fileprivate let gregorian = Calendar(identifier: .gregorian)\n    fileprivate let formatter: DateFormatter = {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy-MM-dd\"\n        return formatter\n    }()\n    \n    fileprivate weak var calendar: FSCalendar!\n    fileprivate weak var eventLabel: UILabel!\n    \n    // MARK:- Life cycle\n    \n    override func loadView() {\n        \n        let view = UIView(frame: UIScreen.main.bounds)\n        view.backgroundColor = UIColor.groupTableViewBackground\n        self.view = view\n        \n        let height: CGFloat = UIDevice.current.model.hasPrefix(\"iPad\") ? 400 : 300\n        let calendar = FSCalendar(frame: CGRect(x: 0, y: self.navigationController!.navigationBar.frame.maxY, width: view.frame.size.width, height: height))\n        calendar.dataSource = self\n        calendar.delegate = self\n        calendar.allowsMultipleSelection = true\n        view.addSubview(calendar)\n        self.calendar = calendar\n        \n        calendar.calendarHeaderView.backgroundColor = UIColor.lightGray.withAlphaComponent(0.1)\n        calendar.calendarWeekdayView.backgroundColor = UIColor.lightGray.withAlphaComponent(0.1)\n        calendar.appearance.eventSelectionColor = UIColor.white\n        calendar.appearance.eventOffset = CGPoint(x: 0, y: -7)\n        calendar.today = nil // Hide the today circle\n        calendar.register(DIYCalendarCell.self, forCellReuseIdentifier: \"cell\")\n//        calendar.clipsToBounds = true // Remove top/bottom line\n        \n        calendar.swipeToChooseGesture.isEnabled = true // Swipe-To-Choose\n        \n        let scopeGesture = UIPanGestureRecognizer(target: calendar, action: #selector(calendar.handleScopeGesture(_:)));\n        calendar.addGestureRecognizer(scopeGesture)\n        \n        \n        let label = UILabel(frame: CGRect(x: 0, y: calendar.frame.maxY + 10, width: self.view.frame.size.width, height: 50))\n        label.textAlignment = .center\n        label.font = UIFont.preferredFont(forTextStyle: .subheadline)\n        self.view.addSubview(label)\n        self.eventLabel = label\n        \n        let attributedText = NSMutableAttributedString(string: \"\")\n        let attatchment = NSTextAttachment()\n        attatchment.image = UIImage(named: \"icon_cat\")!\n        attatchment.bounds = CGRect(x: 0, y: -3, width: attatchment.image!.size.width, height: attatchment.image!.size.height)\n        attributedText.append(NSAttributedString(attachment: attatchment))\n        attributedText.append(NSAttributedString(string: \"  Hey Daily Event  \"))\n        attributedText.append(NSAttributedString(attachment: attatchment))\n        self.eventLabel.attributedText = attributedText\n        \n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        self.title = \"FSCalendar\"\n        // Uncomment this to perform an 'initial-week-scope'\n        // self.calendar.scope = FSCalendarScopeWeek;\n        \n        let dates = [\n            self.gregorian.date(byAdding: .day, value: -1, to: Date()),\n            Date(),\n            self.gregorian.date(byAdding: .day, value: 1, to: Date())\n        ]\n        dates.forEach { (date) in\n            self.calendar.select(date, scrollToDate: false)\n        }\n        // For UITest\n        self.calendar.accessibilityIdentifier = \"calendar\"\n        \n    }\n    \n    // MARK:- FSCalendarDataSource\n    \n    func calendar(_ calendar: FSCalendar, cellFor date: Date, at position: FSCalendarMonthPosition) -> FSCalendarCell {\n        let cell = calendar.dequeueReusableCell(withIdentifier: \"cell\", for: date, at: position)\n        return cell\n    }\n    \n    func calendar(_ calendar: FSCalendar, willDisplay cell: FSCalendarCell, for date: Date, at position: FSCalendarMonthPosition) {\n        self.configure(cell: cell, for: date, at: position)\n    }\n    \n    func calendar(_ calendar: FSCalendar, titleFor date: Date) -> String? {\n        if self.gregorian.isDateInToday(date) {\n            return \"今\"\n        }\n        return nil\n    }\n    \n    func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {\n        return 2\n    }\n    \n    // MARK:- FSCalendarDelegate\n    \n    func calendar(_ calendar: FSCalendar, boundingRectWillChange bounds: CGRect, animated: Bool) {\n        self.calendar.frame.size.height = bounds.height\n        self.eventLabel.frame.origin.y = calendar.frame.maxY + 10\n    }\n    \n    func calendar(_ calendar: FSCalendar, shouldSelect date: Date, at monthPosition: FSCalendarMonthPosition)   -> Bool {\n        return monthPosition == .current\n    }\n    \n    func calendar(_ calendar: FSCalendar, shouldDeselect date: Date, at monthPosition: FSCalendarMonthPosition) -> Bool {\n        return monthPosition == .current\n    }\n    \n    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {\n        print(\"did select date \\(self.formatter.string(from: date))\")\n        self.configureVisibleCells()\n    }\n    \n    func calendar(_ calendar: FSCalendar, didDeselect date: Date) {\n        print(\"did deselect date \\(self.formatter.string(from: date))\")\n        self.configureVisibleCells()\n    }\n    \n    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventDefaultColorsFor date: Date) -> [UIColor]? {\n        if self.gregorian.isDateInToday(date) {\n            return [UIColor.orange]\n        }\n        return [appearance.eventDefaultColor]\n    }\n    \n    // MARK: - Private functions\n    \n    private func configureVisibleCells() {\n        calendar.visibleCells().forEach { (cell) in\n            let date = calendar.date(for: cell)\n            let position = calendar.monthPosition(for: cell)\n            self.configure(cell: cell, for: date!, at: position)\n        }\n    }\n    \n    private func configure(cell: FSCalendarCell, for date: Date, at position: FSCalendarMonthPosition) {\n        \n        let diyCell = (cell as! DIYCalendarCell)\n        // Custom today circle\n        diyCell.circleImageView.isHidden = !self.gregorian.isDateInToday(date)\n        // Configure selection layer\n        if position == .current {\n            \n            var selectionType = SelectionType.none\n            \n            if calendar.selectedDates.contains(date) {\n                let previousDate = self.gregorian.date(byAdding: .day, value: -1, to: date)!\n                let nextDate = self.gregorian.date(byAdding: .day, value: 1, to: date)!\n                if calendar.selectedDates.contains(date) {\n                    if calendar.selectedDates.contains(previousDate) && calendar.selectedDates.contains(nextDate) {\n                        selectionType = .middle\n                    }\n                    else if calendar.selectedDates.contains(previousDate) && calendar.selectedDates.contains(date) {\n                        selectionType = .rightBorder\n                    }\n                    else if calendar.selectedDates.contains(nextDate) {\n                        selectionType = .leftBorder\n                    }\n                    else {\n                        selectionType = .single\n                    }\n                }\n            }\n            else {\n                selectionType = .none\n            }\n            if selectionType == .none {\n                diyCell.selectionLayer.isHidden = true\n                return\n            }\n            diyCell.selectionLayer.isHidden = false\n            diyCell.selectionType = selectionType\n            \n        } else {\n            diyCell.circleImageView.isHidden = true\n            diyCell.selectionLayer.isHidden = true\n        }\n    }\n    \n}\n\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/DelegateAppearanceViewController.swift",
    "content": "//\n//  DelegateAppearanceViewController.swift\n//  FSCalendarSwiftExample\n//\n//  Created by dingwenchao on 30/12/2016.\n//  Copyright © 2016 wenchao. All rights reserved.\n//\n\nimport UIKit\n\nclass DelegateAppearanceViewController: UIViewController, FSCalendarDataSource, FSCalendarDelegate, FSCalendarDelegateAppearance {\n    \n    fileprivate weak var calendar: FSCalendar!\n    \n    fileprivate let gregorian: Calendar = Calendar(identifier: .gregorian)\n    fileprivate lazy var dateFormatter1: DateFormatter = {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy/MM/dd\"\n        return formatter\n    }()\n    fileprivate lazy var dateFormatter2: DateFormatter = {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy-MM-dd\"\n        return formatter\n    }()\n    \n    let fillSelectionColors = [\"2015/10/08\": UIColor.green, \"2015/10/06\": UIColor.purple, \"2015/10/17\": UIColor.gray, \"2015/10/21\": UIColor.cyan, \"2015/11/08\": UIColor.green, \"2015/11/06\": UIColor.purple, \"2015/11/17\": UIColor.gray, \"2015/11/21\": UIColor.cyan, \"2015/12/08\": UIColor.green, \"2015/12/06\": UIColor.purple, \"2015/12/17\": UIColor.gray, \"2015/12/21\": UIColor.cyan]\n\n    \n    let fillDefaultColors = [\"2015/10/08\": UIColor.purple, \"2015/10/06\": UIColor.green, \"2015/10/18\": UIColor.cyan, \"2015/10/22\": UIColor.yellow, \"2015/11/08\": UIColor.purple, \"2015/11/06\": UIColor.green, \"2015/11/18\": UIColor.cyan, \"2015/11/22\": UIColor.yellow, \"2015/12/08\": UIColor.purple, \"2015/12/06\": UIColor.green, \"2015/12/18\": UIColor.cyan, \"2015/12/22\": UIColor.magenta]\n    \n    let borderDefaultColors = [\"2015/10/08\": UIColor.brown, \"2015/10/17\": UIColor.magenta, \"2015/10/21\": UIColor.cyan, \"2015/10/25\": UIColor.black, \"2015/11/08\": UIColor.brown, \"2015/11/17\": UIColor.magenta, \"2015/11/21\": UIColor.cyan, \"2015/11/25\": UIColor.black, \"2015/12/08\": UIColor.brown, \"2015/12/17\": UIColor.magenta, \"2015/12/21\": UIColor.purple, \"2015/12/25\": UIColor.black]\n\n    let borderSelectionColors = [\"2015/10/08\": UIColor.red, \"2015/10/17\": UIColor.purple, \"2015/10/21\": UIColor.cyan, \"2015/10/25\": UIColor.magenta, \"2015/11/08\": UIColor.red, \"2015/11/17\": UIColor.purple, \"2015/11/21\": UIColor.cyan, \"2015/11/25\": UIColor.purple, \"2015/12/08\": UIColor.red, \"2015/12/17\": UIColor.purple, \"2015/12/21\": UIColor.cyan, \"2015/12/25\": UIColor.magenta]\n    \n    var datesWithEvent = [\"2015-10-03\", \"2015-10-06\", \"2015-10-12\", \"2015-10-25\"]\n    var datesWithMultipleEvents = [\"2015-10-08\", \"2015-10-16\", \"2015-10-20\", \"2015-10-28\"]\n    \n    \n    override func loadView() {\n        let view = UIView(frame: UIScreen.main.bounds)\n        view.backgroundColor = UIColor.groupTableViewBackground\n        self.view = view\n        \n        let height: CGFloat = UIDevice.current.model.hasPrefix(\"iPad\") ? 450 : 300\n        let calendar = FSCalendar(frame: CGRect(x:0, y:64, width:self.view.bounds.size.width, height:height))\n        calendar.dataSource = self\n        calendar.delegate = self\n        calendar.allowsMultipleSelection = true\n        calendar.swipeToChooseGesture.isEnabled = true\n        calendar.backgroundColor = UIColor.white\n        calendar.appearance.caseOptions = [.headerUsesUpperCase,.weekdayUsesSingleUpperCase]\n        self.view.addSubview(calendar)\n        self.calendar = calendar\n        calendar.select(self.dateFormatter1.date(from: \"2015/10/03\"))\n        let todayItem = UIBarButtonItem(title: \"TODAY\", style: .plain, target: self, action: #selector(self.todayItemClicked(sender:)))\n        self.navigationItem.rightBarButtonItem = todayItem\n        \n        // For UITest\n        self.calendar.accessibilityIdentifier = \"calendar\"\n    }\n    \n    deinit {\n        print(\"\\(#function)\")\n    }\n    \n    @objc\n    func todayItemClicked(sender: AnyObject) {\n        self.calendar.setCurrentPage(Date(), animated: false)\n    }\n    \n    func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {\n        let dateString = self.dateFormatter2.string(from: date)\n        if self.datesWithEvent.contains(dateString) {\n            return 1\n        }\n        if self.datesWithMultipleEvents.contains(dateString) {\n            return 3\n        }\n        return 0\n    }\n    \n    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, eventDefaultColorsFor date: Date) -> [UIColor]? {\n        let key = self.dateFormatter2.string(from: date)\n        if self.datesWithMultipleEvents.contains(key) {\n            return [UIColor.magenta, appearance.eventDefaultColor, UIColor.black]\n        }\n        return nil\n    }\n    \n    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, fillSelectionColorFor date: Date) -> UIColor? {\n        let key = self.dateFormatter1.string(from: date)\n        if let color = self.fillSelectionColors[key] {\n            return color\n        }\n        return appearance.selectionColor\n    }\n    \n    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, fillDefaultColorFor date: Date) -> UIColor? {\n        let key = self.dateFormatter1.string(from: date)\n        if let color = self.fillDefaultColors[key] {\n            return color\n        }\n        return nil\n    }\n    \n    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, borderDefaultColorFor date: Date) -> UIColor? {\n        let key = self.dateFormatter1.string(from: date)\n        if let color = self.borderDefaultColors[key] {\n            return color\n        }\n        return appearance.borderDefaultColor\n    }\n    \n    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, borderSelectionColorFor date: Date) -> UIColor? {\n        let key = self.dateFormatter1.string(from: date)\n        if let color = self.borderSelectionColors[key] {\n            return color\n        }\n        return appearance.borderSelectionColor\n    }\n    \n    func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, borderRadiusFor date: Date) -> CGFloat {\n        if [8, 17, 21, 25].contains((self.gregorian.component(.day, from: date))) {\n            return 0.0\n        }\n        return 1.0\n    }\n    \n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/FSCalendarScopeViewController.swift",
    "content": "//\n//  FSCalendarScopeViewController.swift\n//  FSCalendarSwiftExample\n//\n//  Created by dingwenchao on 30/12/2016.\n//  Copyright © 2016 wenchao. All rights reserved.\n//\n\nimport UIKit\n\nclass FSCalendarScopeExampleViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, FSCalendarDataSource, FSCalendarDelegate, UIGestureRecognizerDelegate {\n    \n    @IBOutlet weak var tableView: UITableView!\n    @IBOutlet weak var calendar: FSCalendar!\n    @IBOutlet weak var animationSwitch: UISwitch!\n    \n    @IBOutlet weak var calendarHeightConstraint: NSLayoutConstraint!\n    \n    fileprivate lazy var dateFormatter: DateFormatter = {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy/MM/dd\"\n        return formatter\n    }()\n    fileprivate lazy var scopeGesture: UIPanGestureRecognizer = {\n        [unowned self] in\n        let panGesture = UIPanGestureRecognizer(target: self.calendar, action: #selector(self.calendar.handleScopeGesture(_:)))\n        panGesture.delegate = self\n        panGesture.minimumNumberOfTouches = 1\n        panGesture.maximumNumberOfTouches = 2\n        return panGesture\n    }()\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        if UIDevice.current.model.hasPrefix(\"iPad\") {\n            self.calendarHeightConstraint.constant = 400\n        }\n        \n        self.calendar.select(Date())\n        \n        self.view.addGestureRecognizer(self.scopeGesture)\n        self.tableView.panGestureRecognizer.require(toFail: self.scopeGesture)\n        self.calendar.scope = .week\n        \n        // For UITest\n        self.calendar.accessibilityIdentifier = \"calendar\"\n        \n    }\n    \n    deinit {\n        print(\"\\(#function)\")\n    }\n    \n    // MARK:- UIGestureRecognizerDelegate\n    \n    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {\n        let shouldBegin = self.tableView.contentOffset.y <= -self.tableView.contentInset.top\n        if shouldBegin {\n            let velocity = self.scopeGesture.velocity(in: self.view)\n            switch self.calendar.scope {\n            case .month:\n                return velocity.y < 0\n            case .week:\n                return velocity.y > 0\n            }\n        }\n        return shouldBegin\n    }\n    \n    func calendar(_ calendar: FSCalendar, boundingRectWillChange bounds: CGRect, animated: Bool) {\n        self.calendarHeightConstraint.constant = bounds.height\n        self.view.layoutIfNeeded()\n    }\n    \n    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {\n        print(\"did select date \\(self.dateFormatter.string(from: date))\")\n        let selectedDates = calendar.selectedDates.map({self.dateFormatter.string(from: $0)})\n        print(\"selected dates is \\(selectedDates)\")\n        if monthPosition == .next || monthPosition == .previous {\n            calendar.setCurrentPage(date, animated: true)\n        }\n    }\n\n    func calendarCurrentPageDidChange(_ calendar: FSCalendar) {\n        print(\"\\(self.dateFormatter.string(from: calendar.currentPage))\")\n    }\n    \n    // MARK:- UITableViewDataSource\n    \n    func numberOfSections(in tableView: UITableView) -> Int {\n        return 2\n    }\n    \n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return [2,20][section]\n    }\n    \n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        if indexPath.section == 0 {\n            let identifier = [\"cell_month\", \"cell_week\"][indexPath.row]\n            let cell = tableView.dequeueReusableCell(withIdentifier: identifier)!\n            return cell\n        } else {\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"cell\")!\n            return cell\n        }\n    }\n    \n    \n    // MARK:- UITableViewDelegate\n    \n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: true)\n        if indexPath.section == 0 {\n            let scope: FSCalendarScope = (indexPath.row == 0) ? .month : .week\n            self.calendar.setScope(scope, animated: self.animationSwitch.isOn)\n        }\n    }\n    \n    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return 10\n    }\n    \n    // MARK:- Target actions\n    \n    @IBAction func toggleClicked(sender: AnyObject) {\n        if self.calendar.scope == .month {\n            self.calendar.setScope(.week, animated: self.animationSwitch.isOn)\n        } else {\n            self.calendar.setScope(.month, animated: self.animationSwitch.isOn)\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-57x57@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-57x57@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\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": "Example-Swift/FSCalendarSwiftExample/Images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"736h\",\n      \"filename\" : \"LaunchImage-2208.png\",\n      \"minimum-system-version\" : \"8.0\",\n      \"orientation\" : \"portrait\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"667h\",\n      \"filename\" : \"LaunchImage-1334.png\",\n      \"minimum-system-version\" : \"8.0\",\n      \"orientation\" : \"portrait\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"LaunchImage-960.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"retina4\",\n      \"filename\" : \"LaunchImage.png\",\n      \"minimum-system-version\" : \"7.0\",\n      \"orientation\" : \"portrait\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"LaunchImage-1024.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"LaunchImage-768.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"LaunchImage-2048.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"LaunchImage-1536.png\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/Images.xcassets/circle.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"circle@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/Images.xcassets/icon_cat.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon_cat@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/Images.xcassets/icon_setting.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon_setting@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/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>CFBundleSignature</key>\n\t<string>????</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<false/>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/InterfaceBuilderViewController.swift",
    "content": "//\n//  ViewController.swift\n//  FSCalendarSwiftExample\n//\n//  Created by Wenchao Ding on 9/3/15.\n//  Copyright (c) 2015 wenchao. All rights reserved.\n//\n\nimport UIKit\n\nclass InterfaceBuilderViewController: UIViewController, FSCalendarDataSource, FSCalendarDelegate {\n    \n    @IBOutlet\n    weak var calendar: FSCalendar!\n    \n    @IBOutlet\n    weak var calendarHeightConstraint: NSLayoutConstraint!\n    \n    fileprivate var lunar: Bool = false {\n        didSet {\n            self.calendar.reloadData()\n        }\n    }\n    fileprivate let lunarFormatter = LunarFormatter()\n    fileprivate var theme: Int = 0 {\n        didSet {\n            switch (theme) {\n            case 0:\n                self.calendar.appearance.weekdayTextColor = UIColor(red: 14/255.0, green: 69/255.0, blue: 221/255.0, alpha: 1.0)\n                self.calendar.appearance.headerTitleColor = UIColor(red: 14/255.0, green: 69/255.0, blue: 221/255.0, alpha: 1.0)\n                self.calendar.appearance.eventDefaultColor = UIColor(red: 31/255.0, green: 119/255.0, blue: 219/255.0, alpha: 1.0)\n                self.calendar.appearance.selectionColor = UIColor(red: 31/255.0, green: 119/255.0, blue: 219/255.0, alpha: 1.0)\n                self.calendar.appearance.headerDateFormat = \"MMMM yyyy\"\n                self.calendar.appearance.todayColor = UIColor(red: 198/255.0, green: 51/255.0, blue: 42/255.0, alpha: 1.0)\n                self.calendar.appearance.borderRadius = 1.0\n                self.calendar.appearance.headerMinimumDissolvedAlpha = 0.2\n            case 1:\n                self.calendar.appearance.weekdayTextColor = UIColor.red\n                self.calendar.appearance.headerTitleColor = UIColor.darkGray\n                self.calendar.appearance.eventDefaultColor = UIColor.green\n                self.calendar.appearance.selectionColor = UIColor.blue\n                self.calendar.appearance.headerDateFormat = \"yyyy-MM\";\n                self.calendar.appearance.todayColor = UIColor.red\n                self.calendar.appearance.borderRadius = 1.0\n                self.calendar.appearance.headerMinimumDissolvedAlpha = 0.0\n            case 2:\n                self.calendar.appearance.weekdayTextColor = UIColor.red\n                self.calendar.appearance.headerTitleColor = UIColor.red\n                self.calendar.appearance.eventDefaultColor = UIColor.green\n                self.calendar.appearance.selectionColor = UIColor.blue\n                self.calendar.appearance.headerDateFormat = \"yyyy/MM\"\n                self.calendar.appearance.todayColor = UIColor.orange\n                self.calendar.appearance.borderRadius = 0\n                self.calendar.appearance.headerMinimumDissolvedAlpha = 1.0\n            default:\n                break;\n            }\n        }\n    }\n    \n    fileprivate let formatter: DateFormatter = {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy/MM/dd\"\n        return formatter\n    }()\n    \n    fileprivate let gregorian: NSCalendar! = NSCalendar(calendarIdentifier:NSCalendar.Identifier.gregorian)\n    \n    fileprivate let datesWithCat = [\"2015/05/05\",\"2015/06/05\",\"2015/07/05\",\"2015/08/05\",\"2015/09/05\",\"2015/10/05\",\"2015/11/05\",\"2015/12/05\",\"2016/01/06\",\n    \"2016/02/06\",\"2016/03/06\",\"2016/04/06\",\"2016/05/06\",\"2016/06/06\",\"2016/07/06\"]\n    \n    \n    // MARK:- Life cycle\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        if UIDevice.current.model.hasPrefix(\"iPad\") {\n            self.calendarHeightConstraint.constant = 400\n        }\n        \n        self.calendar.appearance.caseOptions = [.headerUsesUpperCase,.weekdayUsesUpperCase]\n        self.calendar.select(self.formatter.date(from: \"2017/08/10\")!)\n        \n        let scopeGesture = UIPanGestureRecognizer(target: self.calendar, action: #selector(self.calendar.handleScopeGesture(_:)))\n        self.calendar.addGestureRecognizer(scopeGesture)\n        \n        // For UITest\n        self.calendar.accessibilityIdentifier = \"calendar\"\n\n    }\n    \n    // MARK:- FSCalendarDataSource\n    \n    func calendar(_ calendar: FSCalendar, titleFor date: Date) -> String? {\n        return self.gregorian.isDateInToday(date) ? \"今天\" : nil\n    }\n    \n    func calendar(_ calendar: FSCalendar, subtitleFor date: Date) -> String? {\n        guard self.lunar else {\n            return nil\n        }\n        return self.lunarFormatter.string(from: date)\n    }\n    \n    func maximumDate(for calendar: FSCalendar) -> Date {\n        return self.formatter.date(from: \"2017/10/30\")!\n    }\n    \n    func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int {\n        let day: Int! = self.gregorian.component(.day, from: date)\n        return day % 5 == 0 ? day/5 : 0;\n    }\n    \n    func calendar(_ calendar: FSCalendar, imageFor date: Date) -> UIImage? {\n        let day: Int! = self.gregorian.component(.day, from: date)\n        return [13,24].contains(day) ? UIImage(named: \"icon_cat\") : nil\n    }\n    \n    // MARK:- FSCalendarDelegate\n\n    func calendarCurrentPageDidChange(_ calendar: FSCalendar) {\n        print(\"change page to \\(self.formatter.string(from: calendar.currentPage))\")\n    }\n    \n    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {\n        print(\"calendar did select date \\(self.formatter.string(from: date))\")\n        if monthPosition == .previous || monthPosition == .next {\n            calendar.setCurrentPage(date, animated: true)\n        }\n    }\n    \n    func calendar(_ calendar: FSCalendar, boundingRectWillChange bounds: CGRect, animated: Bool) {\n        self.calendarHeightConstraint.constant = bounds.height\n        self.view.layoutIfNeeded()\n    }\n    \n    // MARK:- Navigation\n    \n    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {\n        if let config = segue.destination as? CalendarConfigViewController {\n            config.lunar = self.lunar\n            config.theme = self.theme\n            config.selectedDate = self.calendar.selectedDate\n            config.firstWeekday = self.calendar.firstWeekday\n            config.scrollDirection = self.calendar.scrollDirection\n        }\n    }\n    \n    @IBAction\n    func unwind2InterfaceBuilder(segue: UIStoryboardSegue) {\n        if let config = segue.source as? CalendarConfigViewController {\n            self.lunar = config.lunar\n            self.theme = config.theme\n            self.calendar.select(config.selectedDate, scrollToDate: false)\n            if self.calendar.firstWeekday != config.firstWeekday {\n                self.calendar.firstWeekday = config.firstWeekday\n            }\n            if self.calendar.scrollDirection != config.scrollDirection {\n                self.calendar.scrollDirection = config.scrollDirection\n            }\n        }\n    }\n    \n    \n}\n\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/LoadViewExampleViewController.swift",
    "content": "//\n//  LoadViewExampleViewController.swift\n//  FSCalendarSwiftExample\n//\n//  Created by dingwenchao on 10/17/16.\n//  Copyright © 2016 wenchao. All rights reserved.\n//\n\nimport UIKit\n\nclass LoadViewExampleViewController: UIViewController, FSCalendarDataSource, FSCalendarDelegate {\n\n    private weak var calendar: FSCalendar!\n    \n    override func loadView() {\n        \n        let view = UIView(frame: UIScreen.main.bounds)\n        view.backgroundColor = UIColor.groupTableViewBackground\n        self.view = view\n        \n        let height: CGFloat = UIDevice.current.model.hasPrefix(\"iPad\") ? 400 : 300\n        let calendar = FSCalendar(frame: CGRect(x: 0, y: self.navigationController!.navigationBar.frame.maxY, width: self.view.bounds.width, height: height))\n        calendar.dataSource = self\n        calendar.delegate = self\n        calendar.backgroundColor = UIColor.white\n        self.view.addSubview(calendar)\n        self.calendar = calendar\n        \n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        self.title = \"FSCalendar\"\n    }\n    \n    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {\n        if monthPosition == .previous || monthPosition == .next {\n            calendar.setCurrentPage(date, animated: true)\n        }\n    }\n\n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/LunarFormatter.swift",
    "content": "//\n//  LunarFormatter.swift\n//  FSCalendarSwiftExample\n//\n//  Created by Wenchao Ding on 25/07/2017.\n//  Copyright © 2017 wenchao. All rights reserved.\n//\n\nimport UIKit\n\nopen class LunarFormatter: NSObject {\n    \n    fileprivate let chineseCalendar = Calendar(identifier: .chinese)\n    fileprivate let formatter = DateFormatter()\n    fileprivate let lunarDays = [\"初二\",\"初三\",\"初四\",\"初五\",\"初六\",\"初七\",\"初八\",\"初九\",\"初十\",\"十一\",\"十二\",\"十三\",\"十四\",\"十五\",\"十六\",\"十七\",\"十八\",\"十九\",\"二十\",\"二一\",\"二二\",\"二三\",\"二四\",\"二五\",\"二六\",\"二七\",\"二八\",\"二九\",\"三十\"]\n    fileprivate let lunarMonths = [\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"冬月\",\"腊月\"]\n    \n    \n    override init() {\n        self.formatter.calendar = self.chineseCalendar\n        self.formatter.dateFormat = \"M\"\n    }\n    \n    open func string(from date: Date) -> String {\n        let day = self.chineseCalendar.component(.day, from: date)\n        if day != 1 {\n            return self.lunarDays[day-2]\n        }\n        // First day of month\n        let monthString = self.formatter.string(from: date)\n        if self.chineseCalendar.veryShortMonthSymbols.contains(monthString) {\n            if let month = Int(monthString) {\n                return self.lunarMonths[month-1]\n            }\n            return \"\"\n        }\n        // Leap month\n        let month = self.chineseCalendar.component(.month, from: date)\n        return \"闰\" + self.lunarMonths[month-1]\n    }\n    \n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/Objc-Bridge-Header.h",
    "content": "//\n//  Objc-Bridge-Header.h\n//  FSCalendarSwiftExample\n//\n//  Created by Wenchao Ding on 9/3/15.\n//  Copyright (c) 2015 wenchao. All rights reserved.\n//\n\n#ifndef FSCalendarSwiftExample_Objc_Bridge_Header_h\n#define FSCalendarSwiftExample_Objc_Bridge_Header_h\n\n#import \"FSCalendar.h\"\n\n#endif\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample/TableViewController.swift",
    "content": "//\n//  TableViewController.swift\n//  FSCalendarSwiftExample\n//\n//  Created by dingwenchao on 10/17/16.\n//  Copyright © 2016 wenchao. All rights reserved.\n//\n\nimport UIKit\n\nclass TableViewController: UITableViewController {\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        let objects = [DIYExampleViewController.self, NSObject.self,DelegateAppearanceViewController.self, NSObject.self, LoadViewExampleViewController.self]\n        if let ViewControllerClass = objects[indexPath.row] as? UIViewController.Type {\n            self.navigationController?.pushViewController(ViewControllerClass.init(), animated: true)\n        }\n    }\n\n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample.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\t30031AA81DCEA82200FC34FE /* DIYExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30031AA71DCEA82200FC34FE /* DIYExampleViewController.swift */; };\n\t\t30031AAA1DCEA83200FC34FE /* DIYCalendarCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30031AA91DCEA83200FC34FE /* DIYCalendarCell.swift */; };\n\t\t3024AF171E164F8C008B6001 /* DelegateAppearanceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3024AF161E164F8C008B6001 /* DelegateAppearanceViewController.swift */; };\n\t\t303478391DB520C8007BBD2E /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303478381DB520C8007BBD2E /* TableViewController.swift */; };\n\t\t305282C91E1608A100CC2877 /* FSCalendarScopeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 305282C81E1608A100CC2877 /* FSCalendarScopeViewController.swift */; };\n\t\t30D458E91DB4E2DB00B163C7 /* LoadViewExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D458E81DB4E2DB00B163C7 /* LoadViewExampleViewController.swift */; };\n\t\t30F4C93A1E07C3AD00D2EC4D /* FSCalendar.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C91A1E07C3AD00D2EC4D /* FSCalendar.m */; };\n\t\t30F4C93C1E07C3AD00D2EC4D /* FSCalendarAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C91E1E07C3AD00D2EC4D /* FSCalendarAppearance.m */; };\n\t\t30F4C93D1E07C3AD00D2EC4D /* FSCalendarCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9201E07C3AD00D2EC4D /* FSCalendarCalculator.m */; };\n\t\t30F4C93E1E07C3AD00D2EC4D /* FSCalendarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9221E07C3AD00D2EC4D /* FSCalendarCell.m */; };\n\t\t30F4C93F1E07C3AD00D2EC4D /* FSCalendarCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9241E07C3AD00D2EC4D /* FSCalendarCollectionView.m */; };\n\t\t30F4C9401E07C3AD00D2EC4D /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9261E07C3AD00D2EC4D /* FSCalendarCollectionViewLayout.m */; };\n\t\t30F4C9411E07C3AD00D2EC4D /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9281E07C3AD00D2EC4D /* FSCalendarConstants.m */; };\n\t\t30F4C9421E07C3AD00D2EC4D /* FSCalendarDelegationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C92A1E07C3AD00D2EC4D /* FSCalendarDelegationFactory.m */; };\n\t\t30F4C9431E07C3AD00D2EC4D /* FSCalendarDelegationProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C92C1E07C3AD00D2EC4D /* FSCalendarDelegationProxy.m */; };\n\t\t30F4C9441E07C3AD00D2EC4D /* FSCalendarExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C92F1E07C3AD00D2EC4D /* FSCalendarExtensions.m */; };\n\t\t30F4C9451E07C3AD00D2EC4D /* FSCalendarHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9311E07C3AD00D2EC4D /* FSCalendarHeaderView.m */; };\n\t\t30F4C9471E07C3AD00D2EC4D /* FSCalendarStickyHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9351E07C3AD00D2EC4D /* FSCalendarStickyHeader.m */; };\n\t\t30F4C9481E07C3AD00D2EC4D /* FSCalendarWeekdayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9371E07C3AD00D2EC4D /* FSCalendarWeekdayView.m */; };\n\t\t50F2ADFA216DA21000CC481F /* FSCalendarSeparatorDecorationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F2ADF8216DA20F00CC481F /* FSCalendarSeparatorDecorationView.m */; };\n\t\tEE0954AD1B97DDE0007F6964 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0954AC1B97DDE0007F6964 /* AppDelegate.swift */; };\n\t\tEE0954AF1B97DDE0007F6964 /* InterfaceBuilderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0954AE1B97DDE0007F6964 /* InterfaceBuilderViewController.swift */; };\n\t\tEE0954B21B97DDE0007F6964 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EE0954B01B97DDE0007F6964 /* Main.storyboard */; };\n\t\tEE0954B41B97DDE0007F6964 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EE0954B31B97DDE0007F6964 /* Images.xcassets */; };\n\t\tEE0954B71B97DDE0007F6964 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = EE0954B51B97DDE0007F6964 /* LaunchScreen.xib */; };\n\t\tF916F3911E1E57DD00F01811 /* FSCalendarTransitionCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = F916F3901E1E57DD00F01811 /* FSCalendarTransitionCoordinator.m */; };\n\t\tF953947A1F26BF07005B83E5 /* LunarFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F95394791F26BF07005B83E5 /* LunarFormatter.swift */; };\n\t\tF9CB48401E406A9200C92065 /* FSCalendarSwiftExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9CB483F1E406A9200C92065 /* FSCalendarSwiftExampleUITests.swift */; };\n\t\tF9CB48481E406B7300C92065 /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9281E07C3AD00D2EC4D /* FSCalendarConstants.m */; };\n\t\tF9DE053B1E3CCAE800902F7D /* CalendarConfigViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9DE053A1E3CCAE800902F7D /* CalendarConfigViewController.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tF9CB48421E406A9200C92065 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = EE09549F1B97DDE0007F6964 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = EE0954A61B97DDE0007F6964;\n\t\t\tremoteInfo = FSCalendarSwiftExample;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t30031AA71DCEA82200FC34FE /* DIYExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DIYExampleViewController.swift; sourceTree = \"<group>\"; };\n\t\t30031AA91DCEA83200FC34FE /* DIYCalendarCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DIYCalendarCell.swift; sourceTree = \"<group>\"; };\n\t\t3024AF161E164F8C008B6001 /* DelegateAppearanceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DelegateAppearanceViewController.swift; sourceTree = \"<group>\"; };\n\t\t303478381DB520C8007BBD2E /* TableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = \"<group>\"; };\n\t\t305282C81E1608A100CC2877 /* FSCalendarScopeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSCalendarScopeViewController.swift; sourceTree = \"<group>\"; };\n\t\t30D458E81DB4E2DB00B163C7 /* LoadViewExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadViewExampleViewController.swift; sourceTree = \"<group>\"; };\n\t\t30F4C9191E07C3AD00D2EC4D /* FSCalendar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendar.h; sourceTree = \"<group>\"; };\n\t\t30F4C91A1E07C3AD00D2EC4D /* FSCalendar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendar.m; sourceTree = \"<group>\"; };\n\t\t30F4C91D1E07C3AD00D2EC4D /* FSCalendarAppearance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarAppearance.h; sourceTree = \"<group>\"; };\n\t\t30F4C91E1E07C3AD00D2EC4D /* FSCalendarAppearance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarAppearance.m; sourceTree = \"<group>\"; };\n\t\t30F4C91F1E07C3AD00D2EC4D /* FSCalendarCalculator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCalculator.h; sourceTree = \"<group>\"; };\n\t\t30F4C9201E07C3AD00D2EC4D /* FSCalendarCalculator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCalculator.m; sourceTree = \"<group>\"; };\n\t\t30F4C9211E07C3AD00D2EC4D /* FSCalendarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCell.h; sourceTree = \"<group>\"; };\n\t\t30F4C9221E07C3AD00D2EC4D /* FSCalendarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCell.m; sourceTree = \"<group>\"; };\n\t\t30F4C9231E07C3AD00D2EC4D /* FSCalendarCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionView.h; sourceTree = \"<group>\"; };\n\t\t30F4C9241E07C3AD00D2EC4D /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = \"<group>\"; };\n\t\t30F4C9251E07C3AD00D2EC4D /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = \"<group>\"; };\n\t\t30F4C9261E07C3AD00D2EC4D /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = \"<group>\"; };\n\t\t30F4C9271E07C3AD00D2EC4D /* FSCalendarConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarConstants.h; sourceTree = \"<group>\"; };\n\t\t30F4C9281E07C3AD00D2EC4D /* FSCalendarConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarConstants.m; sourceTree = \"<group>\"; };\n\t\t30F4C9291E07C3AD00D2EC4D /* FSCalendarDelegationFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDelegationFactory.h; sourceTree = \"<group>\"; };\n\t\t30F4C92A1E07C3AD00D2EC4D /* FSCalendarDelegationFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarDelegationFactory.m; sourceTree = \"<group>\"; };\n\t\t30F4C92B1E07C3AD00D2EC4D /* FSCalendarDelegationProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDelegationProxy.h; sourceTree = \"<group>\"; };\n\t\t30F4C92C1E07C3AD00D2EC4D /* FSCalendarDelegationProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarDelegationProxy.m; sourceTree = \"<group>\"; };\n\t\t30F4C92D1E07C3AD00D2EC4D /* FSCalendarDynamicHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDynamicHeader.h; sourceTree = \"<group>\"; };\n\t\t30F4C92E1E07C3AD00D2EC4D /* FSCalendarExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarExtensions.h; sourceTree = \"<group>\"; };\n\t\t30F4C92F1E07C3AD00D2EC4D /* FSCalendarExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensions.m; sourceTree = \"<group>\"; };\n\t\t30F4C9301E07C3AD00D2EC4D /* FSCalendarHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarHeaderView.h; sourceTree = \"<group>\"; };\n\t\t30F4C9311E07C3AD00D2EC4D /* FSCalendarHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarHeaderView.m; sourceTree = \"<group>\"; };\n\t\t30F4C9341E07C3AD00D2EC4D /* FSCalendarStickyHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarStickyHeader.h; sourceTree = \"<group>\"; };\n\t\t30F4C9351E07C3AD00D2EC4D /* FSCalendarStickyHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarStickyHeader.m; sourceTree = \"<group>\"; };\n\t\t30F4C9361E07C3AD00D2EC4D /* FSCalendarWeekdayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarWeekdayView.h; sourceTree = \"<group>\"; };\n\t\t30F4C9371E07C3AD00D2EC4D /* FSCalendarWeekdayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarWeekdayView.m; sourceTree = \"<group>\"; };\n\t\t30F4C9381E07C3AD00D2EC4D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t50F2ADF8216DA20F00CC481F /* FSCalendarSeparatorDecorationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarSeparatorDecorationView.m; sourceTree = \"<group>\"; };\n\t\t50F2ADF9216DA21000CC481F /* FSCalendarSeparatorDecorationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarSeparatorDecorationView.h; sourceTree = \"<group>\"; };\n\t\tEE0954A71B97DDE0007F6964 /* FSCalendarSwiftExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FSCalendarSwiftExample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEE0954AB1B97DDE0007F6964 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tEE0954AC1B97DDE0007F6964 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tEE0954AE1B97DDE0007F6964 /* InterfaceBuilderViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceBuilderViewController.swift; sourceTree = \"<group>\"; };\n\t\tEE0954B11B97DDE0007F6964 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tEE0954B31B97DDE0007F6964 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\tEE0954B61B97DDE0007F6964 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = \"<group>\"; };\n\t\tEE0954EE1B97DE08007F6964 /* Objc-Bridge-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Objc-Bridge-Header.h\"; sourceTree = \"<group>\"; };\n\t\tF916F38F1E1E57DD00F01811 /* FSCalendarTransitionCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarTransitionCoordinator.h; sourceTree = \"<group>\"; };\n\t\tF916F3901E1E57DD00F01811 /* FSCalendarTransitionCoordinator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarTransitionCoordinator.m; sourceTree = \"<group>\"; };\n\t\tF95394791F26BF07005B83E5 /* LunarFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LunarFormatter.swift; sourceTree = \"<group>\"; };\n\t\tF9CB483D1E406A9200C92065 /* FSCalendarSwiftExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FSCalendarSwiftExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF9CB483F1E406A9200C92065 /* FSCalendarSwiftExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSCalendarSwiftExampleUITests.swift; sourceTree = \"<group>\"; };\n\t\tF9CB48411E406A9200C92065 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tF9CB48471E406AB700C92065 /* Objc-Bridge-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"Objc-Bridge-Header.h\"; sourceTree = \"<group>\"; };\n\t\tF9DE053A1E3CCAE800902F7D /* CalendarConfigViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalendarConfigViewController.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tEE0954A41B97DDE0007F6964 /* 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\t\tF9CB483A1E406A9200C92065 /* 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\t30F4C9171E07C3AD00D2EC4D /* FSCalendar */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t30F4C9191E07C3AD00D2EC4D /* FSCalendar.h */,\n\t\t\t\t30F4C91A1E07C3AD00D2EC4D /* FSCalendar.m */,\n\t\t\t\t30F4C91D1E07C3AD00D2EC4D /* FSCalendarAppearance.h */,\n\t\t\t\t30F4C91E1E07C3AD00D2EC4D /* FSCalendarAppearance.m */,\n\t\t\t\t30F4C9211E07C3AD00D2EC4D /* FSCalendarCell.h */,\n\t\t\t\t30F4C9221E07C3AD00D2EC4D /* FSCalendarCell.m */,\n\t\t\t\t30F4C9231E07C3AD00D2EC4D /* FSCalendarCollectionView.h */,\n\t\t\t\t30F4C9241E07C3AD00D2EC4D /* FSCalendarCollectionView.m */,\n\t\t\t\t30F4C9251E07C3AD00D2EC4D /* FSCalendarCollectionViewLayout.h */,\n\t\t\t\t30F4C9261E07C3AD00D2EC4D /* FSCalendarCollectionViewLayout.m */,\n\t\t\t\t50F2ADF9216DA21000CC481F /* FSCalendarSeparatorDecorationView.h */,\n\t\t\t\t50F2ADF8216DA20F00CC481F /* FSCalendarSeparatorDecorationView.m */,\n\t\t\t\t30F4C9301E07C3AD00D2EC4D /* FSCalendarHeaderView.h */,\n\t\t\t\t30F4C9311E07C3AD00D2EC4D /* FSCalendarHeaderView.m */,\n\t\t\t\t30F4C9341E07C3AD00D2EC4D /* FSCalendarStickyHeader.h */,\n\t\t\t\t30F4C9351E07C3AD00D2EC4D /* FSCalendarStickyHeader.m */,\n\t\t\t\t30F4C9361E07C3AD00D2EC4D /* FSCalendarWeekdayView.h */,\n\t\t\t\t30F4C9371E07C3AD00D2EC4D /* FSCalendarWeekdayView.m */,\n\t\t\t\tF916F38F1E1E57DD00F01811 /* FSCalendarTransitionCoordinator.h */,\n\t\t\t\tF916F3901E1E57DD00F01811 /* FSCalendarTransitionCoordinator.m */,\n\t\t\t\t30F4C91F1E07C3AD00D2EC4D /* FSCalendarCalculator.h */,\n\t\t\t\t30F4C9201E07C3AD00D2EC4D /* FSCalendarCalculator.m */,\n\t\t\t\t30F4C9271E07C3AD00D2EC4D /* FSCalendarConstants.h */,\n\t\t\t\t30F4C9281E07C3AD00D2EC4D /* FSCalendarConstants.m */,\n\t\t\t\t30F4C9291E07C3AD00D2EC4D /* FSCalendarDelegationFactory.h */,\n\t\t\t\t30F4C92A1E07C3AD00D2EC4D /* FSCalendarDelegationFactory.m */,\n\t\t\t\t30F4C92B1E07C3AD00D2EC4D /* FSCalendarDelegationProxy.h */,\n\t\t\t\t30F4C92C1E07C3AD00D2EC4D /* FSCalendarDelegationProxy.m */,\n\t\t\t\t30F4C92D1E07C3AD00D2EC4D /* FSCalendarDynamicHeader.h */,\n\t\t\t\t30F4C92E1E07C3AD00D2EC4D /* FSCalendarExtensions.h */,\n\t\t\t\t30F4C92F1E07C3AD00D2EC4D /* FSCalendarExtensions.m */,\n\t\t\t\t30F4C9381E07C3AD00D2EC4D /* Info.plist */,\n\t\t\t);\n\t\t\tname = FSCalendar;\n\t\t\tpath = ../FSCalendar;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE09549E1B97DDE0007F6964 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t30F4C9171E07C3AD00D2EC4D /* FSCalendar */,\n\t\t\t\tEE0954A91B97DDE0007F6964 /* FSCalendarSwiftExample */,\n\t\t\t\tF9CB483E1E406A9200C92065 /* FSCalendarSwiftExampleUITests */,\n\t\t\t\tEE0954A81B97DDE0007F6964 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0954A81B97DDE0007F6964 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE0954A71B97DDE0007F6964 /* FSCalendarSwiftExample.app */,\n\t\t\t\tF9CB483D1E406A9200C92065 /* FSCalendarSwiftExampleUITests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0954A91B97DDE0007F6964 /* FSCalendarSwiftExample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE0954AC1B97DDE0007F6964 /* AppDelegate.swift */,\n\t\t\t\t303478381DB520C8007BBD2E /* TableViewController.swift */,\n\t\t\t\tF95394791F26BF07005B83E5 /* LunarFormatter.swift */,\n\t\t\t\t30031AA71DCEA82200FC34FE /* DIYExampleViewController.swift */,\n\t\t\t\t30031AA91DCEA83200FC34FE /* DIYCalendarCell.swift */,\n\t\t\t\t3024AF161E164F8C008B6001 /* DelegateAppearanceViewController.swift */,\n\t\t\t\t305282C81E1608A100CC2877 /* FSCalendarScopeViewController.swift */,\n\t\t\t\tEE0954AE1B97DDE0007F6964 /* InterfaceBuilderViewController.swift */,\n\t\t\t\tF9DE053A1E3CCAE800902F7D /* CalendarConfigViewController.swift */,\n\t\t\t\t30D458E81DB4E2DB00B163C7 /* LoadViewExampleViewController.swift */,\n\t\t\t\tEE0954B01B97DDE0007F6964 /* Main.storyboard */,\n\t\t\t\tEE0954B31B97DDE0007F6964 /* Images.xcassets */,\n\t\t\t\tEE0954B51B97DDE0007F6964 /* LaunchScreen.xib */,\n\t\t\t\tEE0954AA1B97DDE0007F6964 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = FSCalendarSwiftExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0954AA1B97DDE0007F6964 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEE0954AB1B97DDE0007F6964 /* Info.plist */,\n\t\t\t\tEE0954EE1B97DE08007F6964 /* Objc-Bridge-Header.h */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9CB483E1E406A9200C92065 /* FSCalendarSwiftExampleUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9CB483F1E406A9200C92065 /* FSCalendarSwiftExampleUITests.swift */,\n\t\t\t\tF9CB48471E406AB700C92065 /* Objc-Bridge-Header.h */,\n\t\t\t\tF9CB48411E406A9200C92065 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = FSCalendarSwiftExampleUITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tEE0954A61B97DDE0007F6964 /* FSCalendarSwiftExample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = EE0954C61B97DDE0007F6964 /* Build configuration list for PBXNativeTarget \"FSCalendarSwiftExample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tEE0954A31B97DDE0007F6964 /* Sources */,\n\t\t\t\tEE0954A41B97DDE0007F6964 /* Frameworks */,\n\t\t\t\tEE0954A51B97DDE0007F6964 /* 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 = FSCalendarSwiftExample;\n\t\t\tproductName = SwiftExample;\n\t\t\tproductReference = EE0954A71B97DDE0007F6964 /* FSCalendarSwiftExample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tF9CB483C1E406A9200C92065 /* FSCalendarSwiftExampleUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F9CB48441E406A9200C92065 /* Build configuration list for PBXNativeTarget \"FSCalendarSwiftExampleUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF9CB48391E406A9200C92065 /* Sources */,\n\t\t\t\tF9CB483A1E406A9200C92065 /* Frameworks */,\n\t\t\t\tF9CB483B1E406A9200C92065 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tF9CB48431E406A9200C92065 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = FSCalendarSwiftExampleUITests;\n\t\t\tproductName = FSCalendarSwiftExampleUITests;\n\t\t\tproductReference = F9CB483D1E406A9200C92065 /* FSCalendarSwiftExampleUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tEE09549F1B97DDE0007F6964 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0820;\n\t\t\t\tLastUpgradeCheck = 0900;\n\t\t\t\tORGANIZATIONNAME = wenchao;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tEE0954A61B97DDE0007F6964 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.4;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t};\n\t\t\t\t\tF9CB483C1E406A9200C92065 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = EE0954A61B97DDE0007F6964;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = EE0954A21B97DDE0007F6964 /* Build configuration list for PBXProject \"FSCalendarSwiftExample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = EE09549E1B97DDE0007F6964;\n\t\t\tproductRefGroup = EE0954A81B97DDE0007F6964 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tEE0954A61B97DDE0007F6964 /* FSCalendarSwiftExample */,\n\t\t\t\tF9CB483C1E406A9200C92065 /* FSCalendarSwiftExampleUITests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tEE0954A51B97DDE0007F6964 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEE0954B21B97DDE0007F6964 /* Main.storyboard in Resources */,\n\t\t\t\tEE0954B71B97DDE0007F6964 /* LaunchScreen.xib in Resources */,\n\t\t\t\tEE0954B41B97DDE0007F6964 /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF9CB483B1E406A9200C92065 /* 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\tEE0954A31B97DDE0007F6964 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9DE053B1E3CCAE800902F7D /* CalendarConfigViewController.swift in Sources */,\n\t\t\t\t30F4C9441E07C3AD00D2EC4D /* FSCalendarExtensions.m in Sources */,\n\t\t\t\t30F4C93D1E07C3AD00D2EC4D /* FSCalendarCalculator.m in Sources */,\n\t\t\t\t30F4C9411E07C3AD00D2EC4D /* FSCalendarConstants.m in Sources */,\n\t\t\t\t30F4C9401E07C3AD00D2EC4D /* FSCalendarCollectionViewLayout.m in Sources */,\n\t\t\t\t30031AA81DCEA82200FC34FE /* DIYExampleViewController.swift in Sources */,\n\t\t\t\t30F4C93F1E07C3AD00D2EC4D /* FSCalendarCollectionView.m in Sources */,\n\t\t\t\tF953947A1F26BF07005B83E5 /* LunarFormatter.swift in Sources */,\n\t\t\t\t30F4C9471E07C3AD00D2EC4D /* FSCalendarStickyHeader.m in Sources */,\n\t\t\t\t30F4C9451E07C3AD00D2EC4D /* FSCalendarHeaderView.m in Sources */,\n\t\t\t\t303478391DB520C8007BBD2E /* TableViewController.swift in Sources */,\n\t\t\t\tF916F3911E1E57DD00F01811 /* FSCalendarTransitionCoordinator.m in Sources */,\n\t\t\t\t3024AF171E164F8C008B6001 /* DelegateAppearanceViewController.swift in Sources */,\n\t\t\t\t30F4C93A1E07C3AD00D2EC4D /* FSCalendar.m in Sources */,\n\t\t\t\t305282C91E1608A100CC2877 /* FSCalendarScopeViewController.swift in Sources */,\n\t\t\t\t30F4C9431E07C3AD00D2EC4D /* FSCalendarDelegationProxy.m in Sources */,\n\t\t\t\t50F2ADFA216DA21000CC481F /* FSCalendarSeparatorDecorationView.m in Sources */,\n\t\t\t\t30F4C93C1E07C3AD00D2EC4D /* FSCalendarAppearance.m in Sources */,\n\t\t\t\t30F4C9481E07C3AD00D2EC4D /* FSCalendarWeekdayView.m in Sources */,\n\t\t\t\t30F4C93E1E07C3AD00D2EC4D /* FSCalendarCell.m in Sources */,\n\t\t\t\t30D458E91DB4E2DB00B163C7 /* LoadViewExampleViewController.swift in Sources */,\n\t\t\t\t30031AAA1DCEA83200FC34FE /* DIYCalendarCell.swift in Sources */,\n\t\t\t\tEE0954AD1B97DDE0007F6964 /* AppDelegate.swift in Sources */,\n\t\t\t\tEE0954AF1B97DDE0007F6964 /* InterfaceBuilderViewController.swift in Sources */,\n\t\t\t\t30F4C9421E07C3AD00D2EC4D /* FSCalendarDelegationFactory.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF9CB48391E406A9200C92065 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9CB48481E406B7300C92065 /* FSCalendarConstants.m in Sources */,\n\t\t\t\tF9CB48401E406A9200C92065 /* FSCalendarSwiftExampleUITests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tF9CB48431E406A9200C92065 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = EE0954A61B97DDE0007F6964 /* FSCalendarSwiftExample */;\n\t\t\ttargetProxy = F9CB48421E406A9200C92065 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tEE0954B01B97DDE0007F6964 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tEE0954B11B97DDE0007F6964 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEE0954B51B97DDE0007F6964 /* LaunchScreen.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tEE0954B61B97DDE0007F6964 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tEE0954C41B97DDE0007F6964 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\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_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\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_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_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_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_SYMBOLS_PRIVATE_EXTERN = NO;\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 = 8.0;\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_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEE0954C51B97DDE0007F6964 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\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_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\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_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_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 = 8.0;\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\tEE0954C71B97DDE0007F6964 /* 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 = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/FSCalendarSwiftExample/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSCalendarSwiftExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"FSCalendarSwiftExample/Objc-Bridge-Header.h\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEE0954C81B97DDE0007F6964 /* 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 = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/FSCalendarSwiftExample/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSCalendarSwiftExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"FSCalendarSwiftExample/Objc-Bridge-Header.h\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tF9CB48451E406A9200C92065 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = FSCalendarSwiftExampleUITests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSCalendarSwiftExampleUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"FSCalendarSwiftExampleUITests/Objc-Bridge-Header.h\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTEST_TARGET_NAME = FSCalendarSwiftExample;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF9CB48461E406A9200C92065 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = FSCalendarSwiftExampleUITests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSCalendarSwiftExampleUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"FSCalendarSwiftExampleUITests/Objc-Bridge-Header.h\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTEST_TARGET_NAME = FSCalendarSwiftExample;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tEE0954A21B97DDE0007F6964 /* Build configuration list for PBXProject \"FSCalendarSwiftExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEE0954C41B97DDE0007F6964 /* Debug */,\n\t\t\t\tEE0954C51B97DDE0007F6964 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tEE0954C61B97DDE0007F6964 /* Build configuration list for PBXNativeTarget \"FSCalendarSwiftExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEE0954C71B97DDE0007F6964 /* Debug */,\n\t\t\t\tEE0954C81B97DDE0007F6964 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF9CB48441E406A9200C92065 /* Build configuration list for PBXNativeTarget \"FSCalendarSwiftExampleUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF9CB48451E406A9200C92065 /* Debug */,\n\t\t\t\tF9CB48461E406A9200C92065 /* 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 = EE09549F1B97DDE0007F6964 /* Project object */;\n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:/Users/wenchaoding/Developer/Xcode/FSCalendar/Example-Swift/FSCalendarSwiftExample.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExample.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": "Example-Swift/FSCalendarSwiftExampleUITests/FSCalendarSwiftExampleUITests.swift",
    "content": "//\n//  FSCalendarSwiftExampleUITests.swift\n//  FSCalendarSwiftExampleUITests\n//\n//  Created by Wenchao Ding on 29/01/2017.\n//  Copyright © 2017 wenchao. All rights reserved.\n//\n\nimport XCTest\n\nclass FSCalendarSwiftExampleUITests: XCTestCase {\n    \n    // MARK: - Setup / Tear Down\n    \n    override func setUp() {\n        super.setUp()\n        \n        continueAfterFailure = false\n        XCUIApplication().launch()\n    }\n    \n    override func tearDown() {\n        super.tearDown()\n    }\n    \n    \n    // MARK: - Tests\n    \n    func testDIY() {\n        let application = XCUIApplication()\n        application.tables.element(boundBy: 0).staticTexts[\"DIY\"].tap()\n        let calendar: XCUIElement = application.otherElements[\"calendar\"]\n        var swipeStart: XCUICoordinate = calendar.coordinate(withNormalizedOffset: CGVector(dx: 0.5/7.0, dy: 0.5))\n        var swipeEnd: XCUICoordinate = calendar.coordinate(withNormalizedOffset: CGVector(dx: 6.5/7.0, dy: 0.5))\n        swipeStart.press(forDuration: 0.8, thenDragTo: swipeEnd)\n        calendar.swipeUp()\n        calendar.swipeLeft()\n        swipeStart = calendar.coordinate(withNormalizedOffset: CGVector(dx: 0.5/7.0, dy: 0.75))\n        swipeEnd = calendar.coordinate(withNormalizedOffset: CGVector(dx: 6.5/7.0, dy: 0.75))\n        swipeStart.press(forDuration: 0.8, thenDragTo: swipeEnd)\n        calendar.swipeDown()\n        // Exit\n        Thread.sleep(forTimeInterval: 1)\n        application.buttons.element(boundBy: 0).tap()\n    }\n    \n    func testDelegateAppearance() {\n        let application = XCUIApplication()\n        application.tables.element(boundBy: 0).staticTexts[\"Delegate Appearance\"].tap()\n        \n        let calendar: XCUIElement = application.otherElements[\"calendar\"]\n        let calendarHeight: CGFloat = UIDevice.current.model.hasPrefix(\"iPad\") ? 400 : 300\n        let cellStart: CGFloat = (FSCalendarStandardHeaderHeight+FSCalendarStandardWeekdayHeight)/calendarHeight\n        let rowHeight: CGFloat = (1.0-cellStart)/6.0\n        let columnWidth: CGFloat = 1.0/7\n        \n        let vectors = [\n            CGVector(dx:6.5*columnWidth, dy:cellStart+rowHeight*0.5),\n            CGVector(dx:2.5*columnWidth, dy:cellStart+rowHeight*1.5),\n            CGVector(dx:4.5*columnWidth, dy:cellStart+rowHeight*1.5),\n            CGVector(dx:5.5*columnWidth, dy:cellStart+rowHeight*2.5),\n            CGVector(dx:6.5*columnWidth, dy:cellStart+rowHeight*2.5),\n            CGVector(dx:0.5*columnWidth, dy:cellStart+rowHeight*3.5),\n            CGVector(dx:3.5*columnWidth, dy:cellStart+rowHeight*3.5),\n            CGVector(dx:4.5*columnWidth, dy:cellStart+rowHeight*3.5),\n            CGVector(dx:0.5*columnWidth, dy:cellStart+rowHeight*4.5),\n            CGVector(dx:5.5*columnWidth, dy:cellStart+rowHeight*5.5),\n            ]\n        vectors.forEach { (vector) in\n            calendar.coordinate(withNormalizedOffset: vector).tap()\n        }\n        vectors.reversed().forEach { (vector) in\n            calendar.coordinate(withNormalizedOffset: vector).tap()\n        }\n        Thread.sleep(forTimeInterval: 1.0)\n        application.buttons[\"TODAY\"].tap()\n        // Exit\n        Thread.sleep(forTimeInterval: 1.0)\n        application.buttons.element(boundBy: 0).tap()\n    }\n    \n    func testScope() {\n        let application = XCUIApplication()\n        application.tables.element(boundBy: 0).staticTexts[\"FSCalendarScope\"].tap()\n        let tableView: XCUIElement = application.tables.element(boundBy: 0)\n        let toggleButton: XCUIElement = application.buttons[\"Toggle\"]\n        tableView.swipeDown()\n        tableView.swipeUp()\n        tableView.swipeUp()\n        toggleButton.tap()\n        toggleButton.tap()\n        tableView.swipeDown()\n        tableView.swipeDown()\n        // Orientation Test\n        Thread.sleep(forTimeInterval: 0.5)\n        XCUIDevice.shared.orientation = .landscapeLeft\n        Thread.sleep(forTimeInterval: 1.5)\n        XCUIDevice.shared.orientation = .portrait\n        Thread.sleep(forTimeInterval: 1.5)\n        XCUIDevice.shared.orientation = .landscapeRight\n        Thread.sleep(forTimeInterval: 1.5)\n        XCUIDevice.shared.orientation = .portrait\n        // Exit\n        Thread.sleep(forTimeInterval: 1.5)\n        application.buttons.element(boundBy: 0).tap()\n    }\n    \n    func testInterfaceBuilder() {\n        let application = XCUIApplication()\n        application.tables.element(boundBy: 0).staticTexts[\"Interface Builder\"].tap()\n        let calendar = application.otherElements[\"calendar\"]\n        let calendarHeight: CGFloat = UIDevice.current.model.hasPrefix(\"iPad\") ? 400 : 300\n        let cellStart: CGFloat = (FSCalendarStandardHeaderHeight+FSCalendarStandardWeekdayHeight)/calendarHeight\n        let rowHeight: CGFloat = (1.0-cellStart)/6.0\n        let columnWidth: CGFloat = 1.0/7\n        \n        let nextVector = CGVector(dx: columnWidth*5.5, dy: cellStart+rowHeight*5.5)\n        let prevVector = CGVector(dx: columnWidth*1.5, dy: cellStart+rowHeight*0.5)\n        calendar.coordinate(withNormalizedOffset: nextVector).tap()\n        calendar.coordinate(withNormalizedOffset: nextVector).tap()\n        calendar.coordinate(withNormalizedOffset: prevVector).tap()\n        calendar.coordinate(withNormalizedOffset: prevVector).tap()\n        Thread.sleep(forTimeInterval: 1.0)\n        \n        let vector1 = CGVector(dx: columnWidth*3.5, dy: cellStart+rowHeight*2.5)\n        let vector2 = CGVector(dx: columnWidth*4.5, dy: cellStart+rowHeight*2.5)\n        let configButton = application.buttons.element(boundBy: 1)\n        \n        configButton.tap()\n        application.staticTexts[\"Theme2\"].tap()\n        calendar.coordinate(withNormalizedOffset: vector1).tap()\n        calendar.coordinate(withNormalizedOffset: vector2).tap()\n        calendar.swipeLeft()\n        calendar.swipeRight()\n        Thread.sleep(forTimeInterval: 0.5)\n        \n        configButton.tap()\n        application.staticTexts[\"Theme3\"].tap()\n        calendar.coordinate(withNormalizedOffset: vector1).tap()\n        calendar.coordinate(withNormalizedOffset: vector2).tap()\n        calendar.swipeRight()\n        calendar.swipeLeft()\n        Thread.sleep(forTimeInterval: 0.5)\n        \n        configButton.tap()\n        application.staticTexts[\"Theme1\"].tap()\n        calendar.coordinate(withNormalizedOffset: vector1).tap()\n        calendar.coordinate(withNormalizedOffset: vector2).tap()\n        calendar.swipeLeft()\n        calendar.swipeRight()\n        Thread.sleep(forTimeInterval: 0.5)\n        \n        configButton.tap()\n        application.tables.staticTexts[\"Lunar\"].tap()\n        calendar.coordinate(withNormalizedOffset: vector1).tap()\n        calendar.coordinate(withNormalizedOffset: vector2).tap()\n        Thread.sleep(forTimeInterval: 0.5)\n        \n        configButton.tap()\n        application.tables.staticTexts[\"Vertical\"].tap()\n        calendar.swipeUp()\n        calendar.swipeUp()\n        calendar.swipeUp()\n        calendar.swipeDown()\n        calendar.swipeDown()\n        calendar.swipeDown()\n        Thread.sleep(forTimeInterval: 0.5)\n        \n        configButton.tap()\n        let table = application.tables.element(boundBy: 0)\n        let monday = application.tables.staticTexts[\"Monday\"]\n        swipeUpUntilElementIsVisible(table: table, element: monday)\n        monday.tap()\n        \n        calendar.swipeUp()\n        calendar.swipeDown()\n        Thread.sleep(forTimeInterval: 0.5)\n        \n        configButton.tap()\n        let tuesday = application.tables.staticTexts[\"Tuesday\"]\n        swipeUpUntilElementIsVisible(table: table, element: tuesday)\n        tuesday.tap()\n        \n        calendar.swipeUp()\n        calendar.swipeDown()\n        Thread.sleep(forTimeInterval: 0.5)\n        \n        configButton.tap()\n        let sunday = application.tables.staticTexts[\"Sunday\"]\n        swipeUpUntilElementIsVisible(table: table, element: sunday)\n        sunday.tap()\n        \n        calendar.swipeUp()\n        calendar.swipeDown()\n        Thread.sleep(forTimeInterval: 1.5)\n        \n        // Orientation Test\n        XCUIDevice.shared.orientation = .landscapeLeft\n        Thread.sleep(forTimeInterval: 1.5)\n        XCUIDevice.shared.orientation = .portrait\n        Thread.sleep(forTimeInterval: 1.5)\n        XCUIDevice.shared.orientation = .landscapeRight\n        Thread.sleep(forTimeInterval: 1.5)\n        XCUIDevice.shared.orientation = .portrait\n        \n        // Exit\n        Thread.sleep(forTimeInterval: 1.0)\n        application.buttons.element(boundBy: 0).tap()\n    }\n    \n    \n    // MARK: - Helper Methods\n    \n    private let maxSwipes = 5\n    \n    private func swipeUpUntilElementIsVisible(table: XCUIElement, element: XCUIElement) {\n        var swipes = 0\n        while !element.exists && swipes < maxSwipes {\n            table.swipeUp()\n            swipes += 1\n        }\n    }\n}\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExampleUITests/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>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-Swift/FSCalendarSwiftExampleUITests/Objc-Bridge-Header.h",
    "content": "//\n//  Objc-Bridge-Header.h\n//  FSCalendarSwiftExampleUITests\n//\n//  Created by Wenchao Ding on 29/01/2017.\n//  Copyright © 2017 wenchao. All rights reserved.\n//\n\n\n#ifndef FSCalendarSwiftExampleUITests_Objc_Bridge_Header_h\n#define FSCalendarSwiftExampleUITests_Objc_Bridge_Header_h\n\n#import \"FSCalendar.h\"\n\n#endif\n"
  },
  {
    "path": "Example-TodayExtension/Example-TodayExtension.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\t300036EF1D9252CB00C795DE /* FSCalendar.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036D11D9252CB00C795DE /* FSCalendar.m */; };\n\t\t300036F11D9252CB00C795DE /* FSCalendarAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036D51D9252CB00C795DE /* FSCalendarAppearance.m */; };\n\t\t300036F21D9252CB00C795DE /* FSCalendarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036D71D9252CB00C795DE /* FSCalendarCell.m */; };\n\t\t300036F31D9252CB00C795DE /* FSCalendarCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036D91D9252CB00C795DE /* FSCalendarCollectionView.m */; };\n\t\t300036F91D9252CB00C795DE /* FSCalendarStickyHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 300036E61D9252CB00C795DE /* FSCalendarStickyHeader.m */; };\n\t\t3055B1CE1DA933D0002AFA13 /* FSCalendarExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3055B1CD1DA933D0002AFA13 /* FSCalendarExtensions.m */; };\n\t\t30623F6D1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 30623F6C1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m */; };\n\t\t3091756F1D7EBD4100BBEB79 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3091756E1D7EBD4100BBEB79 /* main.m */; };\n\t\t309175721D7EBD4100BBEB79 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 309175711D7EBD4100BBEB79 /* AppDelegate.m */; };\n\t\t309175751D7EBD4100BBEB79 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 309175741D7EBD4100BBEB79 /* ViewController.m */; };\n\t\t309175781D7EBD4100BBEB79 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 309175761D7EBD4100BBEB79 /* Main.storyboard */; };\n\t\t3091757A1D7EBD4100BBEB79 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 309175791D7EBD4100BBEB79 /* Assets.xcassets */; };\n\t\t3091757D1D7EBD4100BBEB79 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3091757B1D7EBD4100BBEB79 /* LaunchScreen.storyboard */; };\n\t\t309175A71D7EBD6100BBEB79 /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 309175A61D7EBD6100BBEB79 /* NotificationCenter.framework */; };\n\t\t309175AB1D7EBD6100BBEB79 /* TodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 309175AA1D7EBD6100BBEB79 /* TodayViewController.m */; };\n\t\t309175AE1D7EBD6100BBEB79 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 309175AC1D7EBD6100BBEB79 /* MainInterface.storyboard */; };\n\t\t309175B21D7EBD6100BBEB79 /* TodayExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 309175A41D7EBD6100BBEB79 /* TodayExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t30948A8D1DC78AE200DA02C9 /* FSCalendarCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = 30948A8C1DC78AE200DA02C9 /* FSCalendarCalculator.m */; };\n\t\t30A07C071DCAF7FD0071F025 /* FSCalendarHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A07C061DCAF7FD0071F025 /* FSCalendarHeaderView.m */; };\n\t\t30A33A0E1DB1CA8D0039BEA3 /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A33A0D1DB1CA8D0039BEA3 /* FSCalendarConstants.m */; };\n\t\t30EDD2961D98C93B009D6CA3 /* Image.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 30EDD2951D98C93B009D6CA3 /* Image.xcassets */; };\n\t\t30F10DCF1DCAECF5008B41E3 /* FSCalendarWeekdayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F10DCE1DCAECF5008B41E3 /* FSCalendarWeekdayView.m */; };\n\t\t30F4C94E1E07C3DF00D2EC4D /* FSCalendarDelegationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C94B1E07C3DF00D2EC4D /* FSCalendarDelegationFactory.m */; };\n\t\t30F4C94F1E07C3DF00D2EC4D /* FSCalendarDelegationProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C94D1E07C3DF00D2EC4D /* FSCalendarDelegationProxy.m */; };\n\t\t50F2ADEE216DA03300CC481F /* FSCalendarSeparatorDecorationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 50F2ADEB216DA03300CC481F /* FSCalendarSeparatorDecorationView.m */; };\n\t\tF916F3941E1E583900F01811 /* FSCalendarTransitionCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = F916F3931E1E583900F01811 /* FSCalendarTransitionCoordinator.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t309175B01D7EBD6100BBEB79 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 309175621D7EBD4100BBEB79 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 309175A31D7EBD6100BBEB79;\n\t\t\tremoteInfo = TodayExtension;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t309175B61D7EBD6100BBEB79 /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\t309175B21D7EBD6100BBEB79 /* TodayExtension.appex in Embed App Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t300036D01D9252CB00C795DE /* FSCalendar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendar.h; sourceTree = \"<group>\"; };\n\t\t300036D11D9252CB00C795DE /* FSCalendar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendar.m; sourceTree = \"<group>\"; };\n\t\t300036D41D9252CB00C795DE /* FSCalendarAppearance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarAppearance.h; sourceTree = \"<group>\"; };\n\t\t300036D51D9252CB00C795DE /* FSCalendarAppearance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarAppearance.m; sourceTree = \"<group>\"; };\n\t\t300036D61D9252CB00C795DE /* FSCalendarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCell.h; sourceTree = \"<group>\"; };\n\t\t300036D71D9252CB00C795DE /* FSCalendarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCell.m; sourceTree = \"<group>\"; };\n\t\t300036D81D9252CB00C795DE /* FSCalendarCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionView.h; sourceTree = \"<group>\"; };\n\t\t300036D91D9252CB00C795DE /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = \"<group>\"; };\n\t\t300036DC1D9252CB00C795DE /* FSCalendarDynamicHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDynamicHeader.h; sourceTree = \"<group>\"; };\n\t\t300036E51D9252CB00C795DE /* FSCalendarStickyHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarStickyHeader.h; sourceTree = \"<group>\"; };\n\t\t300036E61D9252CB00C795DE /* FSCalendarStickyHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarStickyHeader.m; sourceTree = \"<group>\"; };\n\t\t300036E71D9252CB00C795DE /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t3055B1CC1DA933D0002AFA13 /* FSCalendarExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarExtensions.h; sourceTree = \"<group>\"; };\n\t\t3055B1CD1DA933D0002AFA13 /* FSCalendarExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensions.m; sourceTree = \"<group>\"; };\n\t\t30623F6B1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = \"<group>\"; };\n\t\t30623F6C1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = \"<group>\"; };\n\t\t3091756A1D7EBD4100BBEB79 /* Example-TodayExtension.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"Example-TodayExtension.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3091756E1D7EBD4100BBEB79 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t309175701D7EBD4100BBEB79 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t309175711D7EBD4100BBEB79 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t309175731D7EBD4100BBEB79 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\t309175741D7EBD4100BBEB79 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\t309175771D7EBD4100BBEB79 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t309175791D7EBD4100BBEB79 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t3091757C1D7EBD4100BBEB79 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t3091757E1D7EBD4100BBEB79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t309175A41D7EBD6100BBEB79 /* TodayExtension.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = TodayExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t309175A61D7EBD6100BBEB79 /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; };\n\t\t309175A91D7EBD6100BBEB79 /* TodayViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TodayViewController.h; sourceTree = \"<group>\"; };\n\t\t309175AA1D7EBD6100BBEB79 /* TodayViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TodayViewController.m; sourceTree = \"<group>\"; };\n\t\t309175AD1D7EBD6100BBEB79 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = \"<group>\"; };\n\t\t309175AF1D7EBD6100BBEB79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t30948A8B1DC78AE200DA02C9 /* FSCalendarCalculator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCalculator.h; sourceTree = \"<group>\"; };\n\t\t30948A8C1DC78AE200DA02C9 /* FSCalendarCalculator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCalculator.m; sourceTree = \"<group>\"; };\n\t\t30A07C051DCAF7FD0071F025 /* FSCalendarHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarHeaderView.h; sourceTree = \"<group>\"; };\n\t\t30A07C061DCAF7FD0071F025 /* FSCalendarHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarHeaderView.m; sourceTree = \"<group>\"; };\n\t\t30A33A0C1DB1CA8D0039BEA3 /* FSCalendarConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarConstants.h; sourceTree = \"<group>\"; };\n\t\t30A33A0D1DB1CA8D0039BEA3 /* FSCalendarConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarConstants.m; sourceTree = \"<group>\"; };\n\t\t30EDD2951D98C93B009D6CA3 /* Image.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Image.xcassets; sourceTree = \"<group>\"; };\n\t\t30F10DCD1DCAECF5008B41E3 /* FSCalendarWeekdayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarWeekdayView.h; sourceTree = \"<group>\"; };\n\t\t30F10DCE1DCAECF5008B41E3 /* FSCalendarWeekdayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarWeekdayView.m; sourceTree = \"<group>\"; };\n\t\t30F4C94A1E07C3DF00D2EC4D /* FSCalendarDelegationFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDelegationFactory.h; sourceTree = \"<group>\"; };\n\t\t30F4C94B1E07C3DF00D2EC4D /* FSCalendarDelegationFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarDelegationFactory.m; sourceTree = \"<group>\"; };\n\t\t30F4C94C1E07C3DF00D2EC4D /* FSCalendarDelegationProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDelegationProxy.h; sourceTree = \"<group>\"; };\n\t\t30F4C94D1E07C3DF00D2EC4D /* FSCalendarDelegationProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarDelegationProxy.m; sourceTree = \"<group>\"; };\n\t\t50F2ADEB216DA03300CC481F /* FSCalendarSeparatorDecorationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarSeparatorDecorationView.m; sourceTree = \"<group>\"; };\n\t\t50F2ADEC216DA03300CC481F /* FSCalendarSeparatorDecorationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarSeparatorDecorationView.h; sourceTree = \"<group>\"; };\n\t\tF916F3921E1E583900F01811 /* FSCalendarTransitionCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarTransitionCoordinator.h; sourceTree = \"<group>\"; };\n\t\tF916F3931E1E583900F01811 /* FSCalendarTransitionCoordinator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarTransitionCoordinator.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t309175671D7EBD4100BBEB79 /* 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\t\t309175A11D7EBD6100BBEB79 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t309175A71D7EBD6100BBEB79 /* NotificationCenter.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t300036CA1D9252CB00C795DE /* FSCalendar */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t300036D01D9252CB00C795DE /* FSCalendar.h */,\n\t\t\t\t300036D11D9252CB00C795DE /* FSCalendar.m */,\n\t\t\t\t300036D41D9252CB00C795DE /* FSCalendarAppearance.h */,\n\t\t\t\t300036D51D9252CB00C795DE /* FSCalendarAppearance.m */,\n\t\t\t\t300036D61D9252CB00C795DE /* FSCalendarCell.h */,\n\t\t\t\t300036D71D9252CB00C795DE /* FSCalendarCell.m */,\n\t\t\t\t300036D81D9252CB00C795DE /* FSCalendarCollectionView.h */,\n\t\t\t\t300036D91D9252CB00C795DE /* FSCalendarCollectionView.m */,\n\t\t\t\t300036DC1D9252CB00C795DE /* FSCalendarDynamicHeader.h */,\n\t\t\t\t30623F6B1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.h */,\n\t\t\t\t30623F6C1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m */,\n\t\t\t\t50F2ADEC216DA03300CC481F /* FSCalendarSeparatorDecorationView.h */,\n\t\t\t\t50F2ADEB216DA03300CC481F /* FSCalendarSeparatorDecorationView.m */,\n\t\t\t\t30A07C051DCAF7FD0071F025 /* FSCalendarHeaderView.h */,\n\t\t\t\t30A07C061DCAF7FD0071F025 /* FSCalendarHeaderView.m */,\n\t\t\t\t30F10DCD1DCAECF5008B41E3 /* FSCalendarWeekdayView.h */,\n\t\t\t\t30F10DCE1DCAECF5008B41E3 /* FSCalendarWeekdayView.m */,\n\t\t\t\t300036E51D9252CB00C795DE /* FSCalendarStickyHeader.h */,\n\t\t\t\t300036E61D9252CB00C795DE /* FSCalendarStickyHeader.m */,\n\t\t\t\t30F4C94A1E07C3DF00D2EC4D /* FSCalendarDelegationFactory.h */,\n\t\t\t\t30F4C94B1E07C3DF00D2EC4D /* FSCalendarDelegationFactory.m */,\n\t\t\t\t30F4C94C1E07C3DF00D2EC4D /* FSCalendarDelegationProxy.h */,\n\t\t\t\t30F4C94D1E07C3DF00D2EC4D /* FSCalendarDelegationProxy.m */,\n\t\t\t\tF916F3921E1E583900F01811 /* FSCalendarTransitionCoordinator.h */,\n\t\t\t\tF916F3931E1E583900F01811 /* FSCalendarTransitionCoordinator.m */,\n\t\t\t\t30948A8B1DC78AE200DA02C9 /* FSCalendarCalculator.h */,\n\t\t\t\t30948A8C1DC78AE200DA02C9 /* FSCalendarCalculator.m */,\n\t\t\t\t30A33A0C1DB1CA8D0039BEA3 /* FSCalendarConstants.h */,\n\t\t\t\t30A33A0D1DB1CA8D0039BEA3 /* FSCalendarConstants.m */,\n\t\t\t\t3055B1CC1DA933D0002AFA13 /* FSCalendarExtensions.h */,\n\t\t\t\t3055B1CD1DA933D0002AFA13 /* FSCalendarExtensions.m */,\n\t\t\t\t300036E71D9252CB00C795DE /* Info.plist */,\n\t\t\t);\n\t\t\tname = FSCalendar;\n\t\t\tpath = ../../FSCalendar;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t309175611D7EBD4100BBEB79 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3091756C1D7EBD4100BBEB79 /* Example-TodayExtension */,\n\t\t\t\t309175A81D7EBD6100BBEB79 /* TodayExtension */,\n\t\t\t\t309175A51D7EBD6100BBEB79 /* Frameworks */,\n\t\t\t\t3091756B1D7EBD4100BBEB79 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3091756B1D7EBD4100BBEB79 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3091756A1D7EBD4100BBEB79 /* Example-TodayExtension.app */,\n\t\t\t\t309175A41D7EBD6100BBEB79 /* TodayExtension.appex */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3091756C1D7EBD4100BBEB79 /* Example-TodayExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t309175701D7EBD4100BBEB79 /* AppDelegate.h */,\n\t\t\t\t309175711D7EBD4100BBEB79 /* AppDelegate.m */,\n\t\t\t\t309175731D7EBD4100BBEB79 /* ViewController.h */,\n\t\t\t\t309175741D7EBD4100BBEB79 /* ViewController.m */,\n\t\t\t\t309175761D7EBD4100BBEB79 /* Main.storyboard */,\n\t\t\t\t309175791D7EBD4100BBEB79 /* Assets.xcassets */,\n\t\t\t\t3091757B1D7EBD4100BBEB79 /* LaunchScreen.storyboard */,\n\t\t\t\t3091757E1D7EBD4100BBEB79 /* Info.plist */,\n\t\t\t\t3091756D1D7EBD4100BBEB79 /* Supporting Files */,\n\t\t\t);\n\t\t\tname = \"Example-TodayExtension\";\n\t\t\tpath = TodayExtensionExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3091756D1D7EBD4100BBEB79 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3091756E1D7EBD4100BBEB79 /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t309175A51D7EBD6100BBEB79 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t309175A61D7EBD6100BBEB79 /* NotificationCenter.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t309175A81D7EBD6100BBEB79 /* TodayExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t300036CA1D9252CB00C795DE /* FSCalendar */,\n\t\t\t\t309175A91D7EBD6100BBEB79 /* TodayViewController.h */,\n\t\t\t\t309175AA1D7EBD6100BBEB79 /* TodayViewController.m */,\n\t\t\t\t30EDD2951D98C93B009D6CA3 /* Image.xcassets */,\n\t\t\t\t309175AC1D7EBD6100BBEB79 /* MainInterface.storyboard */,\n\t\t\t\t309175AF1D7EBD6100BBEB79 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = TodayExtension;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t309175691D7EBD4100BBEB79 /* Example-TodayExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 309175971D7EBD4100BBEB79 /* Build configuration list for PBXNativeTarget \"Example-TodayExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t309175661D7EBD4100BBEB79 /* Sources */,\n\t\t\t\t309175671D7EBD4100BBEB79 /* Frameworks */,\n\t\t\t\t309175681D7EBD4100BBEB79 /* Resources */,\n\t\t\t\t309175B61D7EBD6100BBEB79 /* Embed App Extensions */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t309175B11D7EBD6100BBEB79 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Example-TodayExtension\";\n\t\t\tproductName = TodayExtensionExample;\n\t\t\tproductReference = 3091756A1D7EBD4100BBEB79 /* Example-TodayExtension.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t309175A31D7EBD6100BBEB79 /* TodayExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 309175B31D7EBD6100BBEB79 /* Build configuration list for PBXNativeTarget \"TodayExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t309175A01D7EBD6100BBEB79 /* Sources */,\n\t\t\t\t309175A11D7EBD6100BBEB79 /* Frameworks */,\n\t\t\t\t309175A21D7EBD6100BBEB79 /* 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 = TodayExtension;\n\t\t\tproductName = TodayExtension;\n\t\t\tproductReference = 309175A41D7EBD6100BBEB79 /* TodayExtension.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t309175621D7EBD4100BBEB79 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1000;\n\t\t\t\tORGANIZATIONNAME = dingwenchao;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t309175691D7EBD4100BBEB79 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t};\n\t\t\t\t\t309175A31D7EBD6100BBEB79 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 309175651D7EBD4100BBEB79 /* Build configuration list for PBXProject \"Example-TodayExtension\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\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 = 309175611D7EBD4100BBEB79;\n\t\t\tproductRefGroup = 3091756B1D7EBD4100BBEB79 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t309175691D7EBD4100BBEB79 /* Example-TodayExtension */,\n\t\t\t\t309175A31D7EBD6100BBEB79 /* TodayExtension */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t309175681D7EBD4100BBEB79 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3091757D1D7EBD4100BBEB79 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t3091757A1D7EBD4100BBEB79 /* Assets.xcassets in Resources */,\n\t\t\t\t309175781D7EBD4100BBEB79 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t309175A21D7EBD6100BBEB79 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t30EDD2961D98C93B009D6CA3 /* Image.xcassets in Resources */,\n\t\t\t\t309175AE1D7EBD6100BBEB79 /* MainInterface.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\t309175661D7EBD4100BBEB79 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t309175751D7EBD4100BBEB79 /* ViewController.m in Sources */,\n\t\t\t\t309175721D7EBD4100BBEB79 /* AppDelegate.m in Sources */,\n\t\t\t\t3091756F1D7EBD4100BBEB79 /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t309175A01D7EBD6100BBEB79 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t300036F91D9252CB00C795DE /* FSCalendarStickyHeader.m in Sources */,\n\t\t\t\t30A33A0E1DB1CA8D0039BEA3 /* FSCalendarConstants.m in Sources */,\n\t\t\t\t30623F6D1DC1F45600FA31B3 /* FSCalendarCollectionViewLayout.m in Sources */,\n\t\t\t\tF916F3941E1E583900F01811 /* FSCalendarTransitionCoordinator.m in Sources */,\n\t\t\t\t300036F31D9252CB00C795DE /* FSCalendarCollectionView.m in Sources */,\n\t\t\t\t3055B1CE1DA933D0002AFA13 /* FSCalendarExtensions.m in Sources */,\n\t\t\t\t30F10DCF1DCAECF5008B41E3 /* FSCalendarWeekdayView.m in Sources */,\n\t\t\t\t309175AB1D7EBD6100BBEB79 /* TodayViewController.m in Sources */,\n\t\t\t\t30948A8D1DC78AE200DA02C9 /* FSCalendarCalculator.m in Sources */,\n\t\t\t\t300036EF1D9252CB00C795DE /* FSCalendar.m in Sources */,\n\t\t\t\t300036F21D9252CB00C795DE /* FSCalendarCell.m in Sources */,\n\t\t\t\t30A07C071DCAF7FD0071F025 /* FSCalendarHeaderView.m in Sources */,\n\t\t\t\t30F4C94F1E07C3DF00D2EC4D /* FSCalendarDelegationProxy.m in Sources */,\n\t\t\t\t50F2ADEE216DA03300CC481F /* FSCalendarSeparatorDecorationView.m in Sources */,\n\t\t\t\t30F4C94E1E07C3DF00D2EC4D /* FSCalendarDelegationFactory.m in Sources */,\n\t\t\t\t300036F11D9252CB00C795DE /* FSCalendarAppearance.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t309175B11D7EBD6100BBEB79 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 309175A31D7EBD6100BBEB79 /* TodayExtension */;\n\t\t\ttargetProxy = 309175B01D7EBD6100BBEB79 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t309175761D7EBD4100BBEB79 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t309175771D7EBD4100BBEB79 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3091757B1D7EBD4100BBEB79 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t3091757C1D7EBD4100BBEB79 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t309175AC1D7EBD6100BBEB79 /* MainInterface.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t309175AD1D7EBD6100BBEB79 /* Base */,\n\t\t\t);\n\t\t\tname = MainInterface.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t309175951D7EBD4100BBEB79 /* 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_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_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 = 8.0;\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\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t309175961D7EBD4100BBEB79 /* 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_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_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 = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t309175981D7EBD4100BBEB79 /* 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 = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = TodayExtensionExample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.TodayExtensionExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t309175991D7EBD4100BBEB79 /* 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 = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = TodayExtensionExample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.TodayExtensionExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t309175B41D7EBD6100BBEB79 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = TodayExtension/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.TodayExtensionExample.TodayExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t309175B51D7EBD6100BBEB79 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = TodayExtension/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.TodayExtensionExample.TodayExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t309175651D7EBD4100BBEB79 /* Build configuration list for PBXProject \"Example-TodayExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t309175951D7EBD4100BBEB79 /* Debug */,\n\t\t\t\t309175961D7EBD4100BBEB79 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t309175971D7EBD4100BBEB79 /* Build configuration list for PBXNativeTarget \"Example-TodayExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t309175981D7EBD4100BBEB79 /* Debug */,\n\t\t\t\t309175991D7EBD4100BBEB79 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t309175B31D7EBD6100BBEB79 /* Build configuration list for PBXNativeTarget \"TodayExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t309175B41D7EBD6100BBEB79 /* Debug */,\n\t\t\t\t309175B51D7EBD6100BBEB79 /* 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 = 309175621D7EBD4100BBEB79 /* Project object */;\n}\n"
  },
  {
    "path": "Example-TodayExtension/Example-TodayExtension.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:/Users/dingwenchao/Developer/Xcode/github/FSCalendar/Example-TodayExtension1/Example-TodayExtension.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtension/Base.lproj/MainInterface.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"14313.18\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" colorMatched=\"YES\" initialViewController=\"M4Y-Lb-cyx\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14283.14\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Data Source-->\n        <scene sceneID=\"cwh-vc-ff4\">\n            <objects>\n                <viewController id=\"M4Y-Lb-cyx\" customClass=\"TodayViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ft6-oW-KC0\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"FKl-LY-JtV\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" simulatedAppContext=\"notificationCenter\" id=\"S3S-Oj-5AN\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"300\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8cI-R5-ARn\" customClass=\"FSCalendar\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"300\"/>\n                                <color key=\"backgroundColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"0.0\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"300\" id=\"vdS-18-fsM\"/>\n                                </constraints>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"borderRadius\">\n                                        <real key=\"value\" value=\"0.14999999999999999\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"titleDefaultColor\">\n                                        <color key=\"value\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"headerTitleColor\">\n                                        <color key=\"value\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"weekdayTextColor\">\n                                        <color key=\"value\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"titleWeekendColor\">\n                                        <color key=\"value\" red=\"0.90196078431372551\" green=\"0.86274509803921573\" blue=\"0.56862745098039214\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"fakeSubtitles\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"subtitleDefaultColor\">\n                                        <color key=\"value\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"color\" keyPath=\"subtitleWeekendColor\">\n                                        <color key=\"value\" red=\"0.90196078430000004\" green=\"0.86274509799999999\" blue=\"0.56862745100000001\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                                    </userDefinedRuntimeAttribute>\n                                    <userDefinedRuntimeAttribute type=\"number\" keyPath=\"fakedSelectedDay\">\n                                        <integer key=\"value\" value=\"2\"/>\n                                    </userDefinedRuntimeAttribute>\n                                </userDefinedRuntimeAttributes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"M4Y-Lb-cyx\" id=\"NBU-8C-hY8\"/>\n                                    <outlet property=\"delegate\" destination=\"M4Y-Lb-cyx\" id=\"fbj-GS-VOb\"/>\n                                </connections>\n                            </view>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cQJ-NX-RmL\">\n                                <rect key=\"frame\" x=\"28\" y=\"8\" width=\"30\" height=\"30\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"30\" id=\"qMi-C1-Iy1\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"30\" id=\"tPJ-LN-m43\"/>\n                                </constraints>\n                                <inset key=\"contentEdgeInsets\" minX=\"2\" minY=\"2\" maxX=\"2\" maxY=\"2\"/>\n                                <state key=\"normal\" image=\"circle_prev\"/>\n                                <connections>\n                                    <action selector=\"prevClicked:\" destination=\"M4Y-Lb-cyx\" eventType=\"touchUpInside\" id=\"vFe-pk-Hqs\"/>\n                                </connections>\n                            </button>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"5xc-iY-5SS\">\n                                <rect key=\"frame\" x=\"262\" y=\"8\" width=\"30\" height=\"30\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"30\" id=\"lAc-cg-RCf\"/>\n                                    <constraint firstAttribute=\"width\" constant=\"30\" id=\"uS2-Ah-QIQ\"/>\n                                </constraints>\n                                <inset key=\"contentEdgeInsets\" minX=\"2\" minY=\"2\" maxX=\"2\" maxY=\"2\"/>\n                                <state key=\"normal\" image=\"circle_next\"/>\n                                <connections>\n                                    <action selector=\"nextClicked:\" destination=\"M4Y-Lb-cyx\" eventType=\"touchUpInside\" id=\"dxu-Mq-cc7\"/>\n                                </connections>\n                            </button>\n                        </subviews>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"8cI-R5-ARn\" secondAttribute=\"trailing\" id=\"67U-Py-Qf0\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"5xc-iY-5SS\" secondAttribute=\"trailing\" constant=\"28\" id=\"CrB-Vi-bEe\"/>\n                            <constraint firstItem=\"8cI-R5-ARn\" firstAttribute=\"top\" secondItem=\"Ft6-oW-KC0\" secondAttribute=\"bottom\" id=\"D7v-9W-FZm\"/>\n                            <constraint firstItem=\"8cI-R5-ARn\" firstAttribute=\"leading\" secondItem=\"S3S-Oj-5AN\" secondAttribute=\"leading\" id=\"KI3-4a-hia\"/>\n                            <constraint firstItem=\"cQJ-NX-RmL\" firstAttribute=\"top\" secondItem=\"Ft6-oW-KC0\" secondAttribute=\"bottom\" constant=\"8\" id=\"Z13-du-b5B\"/>\n                            <constraint firstItem=\"5xc-iY-5SS\" firstAttribute=\"top\" secondItem=\"Ft6-oW-KC0\" secondAttribute=\"bottom\" constant=\"8\" id=\"av0-Lw-P2Q\"/>\n                            <constraint firstItem=\"cQJ-NX-RmL\" firstAttribute=\"leading\" secondItem=\"S3S-Oj-5AN\" secondAttribute=\"leading\" constant=\"28\" id=\"zM0-ra-XOS\"/>\n                        </constraints>\n                    </view>\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <value key=\"contentSizeForViewInPopover\" type=\"size\" width=\"320\" height=\"300\"/>\n                    <nil key=\"simulatedStatusBarMetrics\"/>\n                    <nil key=\"simulatedTopBarMetrics\"/>\n                    <nil key=\"simulatedBottomBarMetrics\"/>\n                    <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n                    <size key=\"freeformSize\" width=\"320\" height=\"300\"/>\n                    <connections>\n                        <outlet property=\"calendar\" destination=\"8cI-R5-ARn\" id=\"JDC-I6-ySm\"/>\n                        <outlet property=\"calendarHeight\" destination=\"vdS-18-fsM\" id=\"oF9-Rz-0pM\"/>\n                        <outlet property=\"nextButton\" destination=\"5xc-iY-5SS\" id=\"qgp-YO-bFJ\"/>\n                        <outlet property=\"prevButton\" destination=\"cQJ-NX-RmL\" id=\"DBr-bh-3u4\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"vXp-U4-Rya\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"825.60000000000002\" y=\"256.37181409295357\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"circle_next\" width=\"42\" height=\"42\"/>\n        <image name=\"circle_prev\" width=\"42\" height=\"42\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtension/Image.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-TodayExtension/TodayExtension/Image.xcassets/circle_next.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"circle_next.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-TodayExtension/TodayExtension/Image.xcassets/circle_prev.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"circle_prev.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-TodayExtension/TodayExtension/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>CFBundleDisplayName</key>\n\t<string>FSCalendar</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>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionMainStoryboard</key>\n\t\t<string>MainInterface</string>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.widget-extension</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtension/TodayViewController.h",
    "content": "//\n//  TodayViewController.h\n//  Example-TodayExtension\n//\n//  Created by dingwenchao on 9/6/16.\n//  Copyright © 2016 dingwenchao. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"FSCalendar.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface TodayViewController : UIViewController\n\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtension/TodayViewController.m",
    "content": "//\n//  TodayViewController.m\n//  Example-TodayExtension\n//\n//  Created by dingwenchao on 9/6/16.\n//  Copyright © 2016 dingwenchao. All rights reserved.\n//\n\n#import \"TodayViewController.h\"\n#import <NotificationCenter/NotificationCenter.h>\n#import \"FSCalendar.h\"\n\n@interface TodayViewController () <NCWidgetProviding,FSCalendarDataSource,FSCalendarDelegate,FSCalendarDelegateAppearance>\n\n@property (weak  , nonatomic) IBOutlet FSCalendar *calendar;\n@property (weak  , nonatomic) IBOutlet UIButton *prevButton;\n@property (weak  , nonatomic) IBOutlet UIButton *nextButton;\n@property (weak  , nonatomic) IBOutlet NSLayoutConstraint *calendarHeight;\n\n@property (strong, nonatomic) NSCalendar *gregorian;\n@property (strong, nonatomic) NSCalendar *lunarCalendar;\n@property (strong, nonatomic) NSArray<NSString *> *lunarChars;\n\n@end\n\n@implementation TodayViewController\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    // Do any additional setup after loading the view from its nib.\n    self.calendar.today = nil;\n    self.calendar.locale = [NSLocale localeWithLocaleIdentifier:@\"zh-CN\"];\n    self.calendar.adjustsBoundingRectWhenChangingMonths = NO;\n    self.calendar.placeholderType = FSCalendarPlaceholderTypeNone;\n    self.calendar.appearance.headerMinimumDissolvedAlpha = 0;\n    self.lunarCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese];\n    self.lunarCalendar.locale = [NSLocale localeWithLocaleIdentifier:@\"zh-CN\"];\n    self.lunarChars = @[@\"初一\",@\"初二\",@\"初三\",@\"初四\",@\"初五\",@\"初六\",@\"初七\",@\"初八\",@\"初九\",@\"初十\",@\"十一\",@\"十二\",@\"十三\",@\"十四\",@\"十五\",@\"十六\",@\"十七\",@\"十八\",@\"十九\",@\"二十\",@\"二一\",@\"二二\",@\"二三\",@\"二四\",@\"二五\",@\"二六\",@\"二七\",@\"二八\",@\"二九\",@\"三十\"];\n    self.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];\n    if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) {\n        self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;\n    } else {\n        self.preferredContentSize = CGSizeMake(0, self.calendarHeight.constant);\n    }\n    \n}\n\n- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize\n{\n    if (activeDisplayMode == NCWidgetDisplayModeCompact) {\n        [self.calendar setScope:FSCalendarScopeWeek animated:YES];\n        self.preferredContentSize = maxSize;\n    } else if (activeDisplayMode == NCWidgetDisplayModeExpanded) {\n        [self.calendar setScope:FSCalendarScopeMonth animated:YES];\n        self.preferredContentSize = CGSizeMake(maxSize.width, self.calendarHeight.constant);\n    }\n}\n\n- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler\n{\n    // Perform any setup necessary in order to update the view.\n    \n    // If an error is encountered, use NCUpdateResultFailed\n    // If there's no update required, use NCUpdateResultNoData\n    // If there's an update, use NCUpdateResultNewData\n    \n    completionHandler(NCUpdateResultNewData);\n}\n\n- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets\n{\n    return UIEdgeInsetsZero;\n}\n\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n    self.calendarHeight.constant = CGRectGetHeight(bounds);\n    [self.view layoutIfNeeded];\n    self.preferredContentSize = CGSizeMake(calendar.frame.size.width, self.calendarHeight.constant);\n}\n\n- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderDefaultColorForDate:(NSDate *)date\n{\n    return [self.gregorian isDateInToday:date] ? appearance.todayColor : nil;\n}\n\n- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillSelectionColorForDate:(NSDate *)date\n{\n    return [UIColor clearColor];\n}\n\n- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderSelectionColorForDate:(NSDate *)date\n{\n    return appearance.selectionColor;\n}\n\n- (NSString *)calendar:(FSCalendar *)calendar subtitleForDate:(NSDate *)date\n{\n    NSInteger day = [_lunarCalendar components:NSCalendarUnitDay fromDate:date].day;\n    return _lunarChars[day-1];\n}\n\n- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    if (monthPosition != FSCalendarMonthPositionCurrent) {\n        [calendar setCurrentPage:date animated:YES];\n    }\n}\n\n- (IBAction)prevClicked:(id)sender\n{\n    NSCalendarUnit unit = (self.calendar.scope==FSCalendarScopeMonth) ? NSCalendarUnitMonth : NSCalendarUnitWeekOfYear;\n    NSDate *prevPage = [self.gregorian dateByAddingUnit:unit value:-1 toDate:self.calendar.currentPage options:0];\n    [self.calendar setCurrentPage:prevPage animated:YES];\n    \n}\n\n- (IBAction)nextClicked:(id)sender\n{\n    NSCalendarUnit unit = (self.calendar.scope==FSCalendarScopeMonth) ? NSCalendarUnitMonth : NSCalendarUnitWeekOfYear;\n    NSDate *nextPage = [self.gregorian dateByAddingUnit:unit value:1 toDate:self.calendar.currentPage options:0];\n    [self.calendar setCurrentPage:nextPage animated:YES];\n}\n\n@end\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtensionExample/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  Example-TodayExtension\n//\n//  Created by dingwenchao on 9/6/16.\n//  Copyright © 2016 dingwenchao. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtensionExample/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  Example-TodayExtension\n//\n//  Created by dingwenchao on 9/6/16.\n//  Copyright © 2016 dingwenchao. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    // Override point for customization after application launch.\n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n@end\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtensionExample/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-57x57@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"57x57\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-57x57@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-TodayExtension/TodayExtensionExample/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example-TodayExtension/TodayExtensionExample/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=\"8150\" systemVersion=\"15A204g\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"8122\"/>\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=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <animations/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\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": "Example-TodayExtension/TodayExtensionExample/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11201\" systemVersion=\"15G1004\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11161\"/>\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\" 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=\"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=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtensionExample/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>CFBundleSignature</key>\n\t<string>????</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>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\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtensionExample/ViewController.h",
    "content": "//\n//  ViewController.h\n//  Example-TodayExtension\n//\n//  Created by dingwenchao on 9/6/16.\n//  Copyright © 2016 dingwenchao. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n\n@end\n\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtensionExample/ViewController.m",
    "content": "//\n//  ViewController.m\n//  Example-TodayExtension\n//\n//  Created by dingwenchao on 9/6/16.\n//  Copyright © 2016 dingwenchao. All rights reserved.\n//\n\n#import \"ViewController.h\"\n\n@interface ViewController ()\n\n@end\n\n@implementation ViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    // Do any additional setup after loading the view, typically from a nib.\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n@end\n"
  },
  {
    "path": "Example-TodayExtension/TodayExtensionExample/main.m",
    "content": "//\n//  main.m\n//  Example-TodayExtension\n//\n//  Created by dingwenchao on 9/6/16.\n//  Copyright © 2016 dingwenchao. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "Example-TodayExtension2/Example-TodayExtension.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\t302366E31DC78A90007D9922 /* FSCalendarCalculator.m in Sources */ = {isa = PBXBuildFile; fileRef = 302366E21DC78A90007D9922 /* FSCalendarCalculator.m */; };\n\t\t30501E431DCAECD700148FBB /* FSCalendarWeekdayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30501E421DCAECD700148FBB /* FSCalendarWeekdayView.m */; };\n\t\t305233131D8170480070AAFE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233121D8170480070AAFE /* main.m */; };\n\t\t305233161D8170480070AAFE /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233151D8170480070AAFE /* AppDelegate.m */; };\n\t\t305233191D8170480070AAFE /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233181D8170480070AAFE /* ViewController.m */; };\n\t\t3052331C1D8170480070AAFE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3052331A1D8170480070AAFE /* Main.storyboard */; };\n\t\t3052331E1D8170480070AAFE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3052331D1D8170480070AAFE /* Assets.xcassets */; };\n\t\t305233211D8170480070AAFE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3052331F1D8170480070AAFE /* LaunchScreen.storyboard */; };\n\t\t3052332F1D81706E0070AAFE /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3052332E1D81706E0070AAFE /* NotificationCenter.framework */; };\n\t\t305233361D81706E0070AAFE /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 305233341D81706E0070AAFE /* MainInterface.storyboard */; };\n\t\t3052333A1D81706E0070AAFE /* TodayExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 3052332C1D81706E0070AAFE /* TodayExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t305233411D8170B20070AAFE /* TodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233401D8170B20070AAFE /* TodayViewController.m */; };\n\t\t305233431D8170C60070AAFE /* Image.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 305233421D8170C60070AAFE /* Image.xcassets */; };\n\t\t305233671D8170E50070AAFE /* FSCalendar+Deprecated.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233481D8170E50070AAFE /* FSCalendar+Deprecated.m */; };\n\t\t305233691D8170E50070AAFE /* FSCalendar.m in Sources */ = {isa = PBXBuildFile; fileRef = 3052334C1D8170E50070AAFE /* FSCalendar.m */; };\n\t\t3052336B1D8170E50070AAFE /* FSCalendarAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233501D8170E50070AAFE /* FSCalendarAppearance.m */; };\n\t\t3052336C1D8170E50070AAFE /* FSCalendarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233521D8170E50070AAFE /* FSCalendarCell.m */; };\n\t\t3052336D1D8170E50070AAFE /* FSCalendarCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233541D8170E50070AAFE /* FSCalendarCollectionView.m */; };\n\t\t305233721D8170E50070AAFE /* FSCalendarScopeHandle.m in Sources */ = {isa = PBXBuildFile; fileRef = 3052335F1D8170E50070AAFE /* FSCalendarScopeHandle.m */; };\n\t\t305233731D8170E50070AAFE /* FSCalendarStickyHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 305233611D8170E50070AAFE /* FSCalendarStickyHeader.m */; };\n\t\t3055B1CB1DA933AD002AFA13 /* FSCalendarExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3055B1CA1DA933AD002AFA13 /* FSCalendarExtensions.m */; };\n\t\t30623F701DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 30623F6F1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m */; };\n\t\t30A07C041DCAF7F30071F025 /* FSCalendarHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A07C031DCAF7F30071F025 /* FSCalendarHeaderView.m */; };\n\t\t30A33A0B1DB1CA640039BEA3 /* FSCalendarConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A33A0A1DB1CA640039BEA3 /* FSCalendarConstants.m */; };\n\t\t30F4C95A1E07C48500D2EC4D /* FSCalendarDelegationFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9571E07C48500D2EC4D /* FSCalendarDelegationFactory.m */; };\n\t\t30F4C95B1E07C48500D2EC4D /* FSCalendarDelegationProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 30F4C9591E07C48500D2EC4D /* FSCalendarDelegationProxy.m */; };\n\t\tF9E5546B1E1E587300CBA753 /* FSCalendarTransitionCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = F9E5546A1E1E587300CBA753 /* FSCalendarTransitionCoordinator.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t305233381D81706E0070AAFE /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 305233061D8170480070AAFE /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 3052332B1D81706E0070AAFE;\n\t\t\tremoteInfo = DynamicTodayExtension;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t3052333E1D81706E0070AAFE /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\t3052333A1D81706E0070AAFE /* TodayExtension.appex in Embed App Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t302366E11DC78A90007D9922 /* FSCalendarCalculator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCalculator.h; sourceTree = \"<group>\"; };\n\t\t302366E21DC78A90007D9922 /* FSCalendarCalculator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCalculator.m; sourceTree = \"<group>\"; };\n\t\t30501E411DCAECD700148FBB /* FSCalendarWeekdayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarWeekdayView.h; sourceTree = \"<group>\"; };\n\t\t30501E421DCAECD700148FBB /* FSCalendarWeekdayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarWeekdayView.m; sourceTree = \"<group>\"; };\n\t\t3052330E1D8170480070AAFE /* Example-TodayExtension.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"Example-TodayExtension.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t305233121D8170480070AAFE /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t305233141D8170480070AAFE /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t305233151D8170480070AAFE /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t305233171D8170480070AAFE /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\t305233181D8170480070AAFE /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\t3052331B1D8170480070AAFE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t3052331D1D8170480070AAFE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t305233201D8170480070AAFE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t3052332C1D81706E0070AAFE /* TodayExtension.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = TodayExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t3052332E1D81706E0070AAFE /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; };\n\t\t305233351D81706E0070AAFE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = \"<group>\"; };\n\t\t305233371D81706E0070AAFE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t3052333F1D8170B20070AAFE /* TodayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TodayViewController.h; sourceTree = \"<group>\"; };\n\t\t305233401D8170B20070AAFE /* TodayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TodayViewController.m; sourceTree = \"<group>\"; };\n\t\t305233421D8170C60070AAFE /* Image.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Image.xcassets; sourceTree = \"<group>\"; };\n\t\t305233481D8170E50070AAFE /* FSCalendar+Deprecated.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"FSCalendar+Deprecated.m\"; sourceTree = \"<group>\"; };\n\t\t3052334B1D8170E50070AAFE /* FSCalendar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendar.h; sourceTree = \"<group>\"; };\n\t\t3052334C1D8170E50070AAFE /* FSCalendar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendar.m; sourceTree = \"<group>\"; };\n\t\t3052334F1D8170E50070AAFE /* FSCalendarAppearance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarAppearance.h; sourceTree = \"<group>\"; };\n\t\t305233501D8170E50070AAFE /* FSCalendarAppearance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarAppearance.m; sourceTree = \"<group>\"; };\n\t\t305233511D8170E50070AAFE /* FSCalendarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCell.h; sourceTree = \"<group>\"; };\n\t\t305233521D8170E50070AAFE /* FSCalendarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCell.m; sourceTree = \"<group>\"; };\n\t\t305233531D8170E50070AAFE /* FSCalendarCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionView.h; sourceTree = \"<group>\"; };\n\t\t305233541D8170E50070AAFE /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionView.m; sourceTree = \"<group>\"; };\n\t\t305233571D8170E50070AAFE /* FSCalendarDynamicHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDynamicHeader.h; sourceTree = \"<group>\"; };\n\t\t3052335E1D8170E50070AAFE /* FSCalendarScopeHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarScopeHandle.h; sourceTree = \"<group>\"; };\n\t\t3052335F1D8170E50070AAFE /* FSCalendarScopeHandle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarScopeHandle.m; sourceTree = \"<group>\"; };\n\t\t305233601D8170E50070AAFE /* FSCalendarStickyHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarStickyHeader.h; sourceTree = \"<group>\"; };\n\t\t305233611D8170E50070AAFE /* FSCalendarStickyHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarStickyHeader.m; sourceTree = \"<group>\"; };\n\t\t305233621D8170E50070AAFE /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t3055B1C91DA933AD002AFA13 /* FSCalendarExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarExtensions.h; sourceTree = \"<group>\"; };\n\t\t3055B1CA1DA933AD002AFA13 /* FSCalendarExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarExtensions.m; sourceTree = \"<group>\"; };\n\t\t30623F6E1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarCollectionViewLayout.h; sourceTree = \"<group>\"; };\n\t\t30623F6F1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarCollectionViewLayout.m; sourceTree = \"<group>\"; };\n\t\t30A07C021DCAF7F30071F025 /* FSCalendarHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarHeaderView.h; sourceTree = \"<group>\"; };\n\t\t30A07C031DCAF7F30071F025 /* FSCalendarHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarHeaderView.m; sourceTree = \"<group>\"; };\n\t\t30A33A091DB1CA640039BEA3 /* FSCalendarConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarConstants.h; sourceTree = \"<group>\"; };\n\t\t30A33A0A1DB1CA640039BEA3 /* FSCalendarConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarConstants.m; sourceTree = \"<group>\"; };\n\t\t30F4C9561E07C48500D2EC4D /* FSCalendarDelegationFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDelegationFactory.h; sourceTree = \"<group>\"; };\n\t\t30F4C9571E07C48500D2EC4D /* FSCalendarDelegationFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarDelegationFactory.m; sourceTree = \"<group>\"; };\n\t\t30F4C9581E07C48500D2EC4D /* FSCalendarDelegationProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarDelegationProxy.h; sourceTree = \"<group>\"; };\n\t\t30F4C9591E07C48500D2EC4D /* FSCalendarDelegationProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarDelegationProxy.m; sourceTree = \"<group>\"; };\n\t\tF9E554691E1E587300CBA753 /* FSCalendarTransitionCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSCalendarTransitionCoordinator.h; sourceTree = \"<group>\"; };\n\t\tF9E5546A1E1E587300CBA753 /* FSCalendarTransitionCoordinator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSCalendarTransitionCoordinator.m; sourceTree = \"<group>\"; };\n\t\tF9E5546C1E1E5A5600CBA753 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = \"../../Example-TodayExtension1/TodayExtensionExample/Info.plist\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t3052330B1D8170480070AAFE /* 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\t\t305233291D81706E0070AAFE /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3052332F1D81706E0070AAFE /* NotificationCenter.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t305233051D8170480070AAFE = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t305233101D8170480070AAFE /* Example-TodayExtension */,\n\t\t\t\t305233301D81706E0070AAFE /* TodayExtension */,\n\t\t\t\t3052332D1D81706E0070AAFE /* Frameworks */,\n\t\t\t\t3052330F1D8170480070AAFE /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3052330F1D8170480070AAFE /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3052330E1D8170480070AAFE /* Example-TodayExtension.app */,\n\t\t\t\t3052332C1D81706E0070AAFE /* TodayExtension.appex */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t305233101D8170480070AAFE /* Example-TodayExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t305233141D8170480070AAFE /* AppDelegate.h */,\n\t\t\t\t305233151D8170480070AAFE /* AppDelegate.m */,\n\t\t\t\t305233171D8170480070AAFE /* ViewController.h */,\n\t\t\t\t305233181D8170480070AAFE /* ViewController.m */,\n\t\t\t\t3052331A1D8170480070AAFE /* Main.storyboard */,\n\t\t\t\t3052331D1D8170480070AAFE /* Assets.xcassets */,\n\t\t\t\t3052331F1D8170480070AAFE /* LaunchScreen.storyboard */,\n\t\t\t\tF9E5546C1E1E5A5600CBA753 /* Info.plist */,\n\t\t\t\t305233111D8170480070AAFE /* Supporting Files */,\n\t\t\t);\n\t\t\tname = \"Example-TodayExtension\";\n\t\t\tpath = TodayExtensionExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t305233111D8170480070AAFE /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t305233121D8170480070AAFE /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3052332D1D81706E0070AAFE /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3052332E1D81706E0070AAFE /* NotificationCenter.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t305233301D81706E0070AAFE /* TodayExtension */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t305233441D8170E50070AAFE /* FSCalendar */,\n\t\t\t\t3052333F1D8170B20070AAFE /* TodayViewController.h */,\n\t\t\t\t305233401D8170B20070AAFE /* TodayViewController.m */,\n\t\t\t\t305233341D81706E0070AAFE /* MainInterface.storyboard */,\n\t\t\t\t305233421D8170C60070AAFE /* Image.xcassets */,\n\t\t\t\t305233371D81706E0070AAFE /* Info.plist */,\n\t\t\t);\n\t\t\tpath = TodayExtension;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t305233441D8170E50070AAFE /* FSCalendar */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3052334B1D8170E50070AAFE /* FSCalendar.h */,\n\t\t\t\t3052334C1D8170E50070AAFE /* FSCalendar.m */,\n\t\t\t\t3052334F1D8170E50070AAFE /* FSCalendarAppearance.h */,\n\t\t\t\t305233501D8170E50070AAFE /* FSCalendarAppearance.m */,\n\t\t\t\t305233511D8170E50070AAFE /* FSCalendarCell.h */,\n\t\t\t\t305233521D8170E50070AAFE /* FSCalendarCell.m */,\n\t\t\t\t305233531D8170E50070AAFE /* FSCalendarCollectionView.h */,\n\t\t\t\t305233541D8170E50070AAFE /* FSCalendarCollectionView.m */,\n\t\t\t\t30A33A091DB1CA640039BEA3 /* FSCalendarConstants.h */,\n\t\t\t\t30A33A0A1DB1CA640039BEA3 /* FSCalendarConstants.m */,\n\t\t\t\t30623F6E1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.h */,\n\t\t\t\t30623F6F1DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m */,\n\t\t\t\t30A07C021DCAF7F30071F025 /* FSCalendarHeaderView.h */,\n\t\t\t\t30A07C031DCAF7F30071F025 /* FSCalendarHeaderView.m */,\n\t\t\t\t30501E411DCAECD700148FBB /* FSCalendarWeekdayView.h */,\n\t\t\t\t30501E421DCAECD700148FBB /* FSCalendarWeekdayView.m */,\n\t\t\t\t3052335E1D8170E50070AAFE /* FSCalendarScopeHandle.h */,\n\t\t\t\t3052335F1D8170E50070AAFE /* FSCalendarScopeHandle.m */,\n\t\t\t\t305233601D8170E50070AAFE /* FSCalendarStickyHeader.h */,\n\t\t\t\t305233611D8170E50070AAFE /* FSCalendarStickyHeader.m */,\n\t\t\t\tF9E554691E1E587300CBA753 /* FSCalendarTransitionCoordinator.h */,\n\t\t\t\tF9E5546A1E1E587300CBA753 /* FSCalendarTransitionCoordinator.m */,\n\t\t\t\t302366E11DC78A90007D9922 /* FSCalendarCalculator.h */,\n\t\t\t\t302366E21DC78A90007D9922 /* FSCalendarCalculator.m */,\n\t\t\t\t30F4C9561E07C48500D2EC4D /* FSCalendarDelegationFactory.h */,\n\t\t\t\t30F4C9571E07C48500D2EC4D /* FSCalendarDelegationFactory.m */,\n\t\t\t\t30F4C9581E07C48500D2EC4D /* FSCalendarDelegationProxy.h */,\n\t\t\t\t30F4C9591E07C48500D2EC4D /* FSCalendarDelegationProxy.m */,\n\t\t\t\t3055B1C91DA933AD002AFA13 /* FSCalendarExtensions.h */,\n\t\t\t\t3055B1CA1DA933AD002AFA13 /* FSCalendarExtensions.m */,\n\t\t\t\t305233571D8170E50070AAFE /* FSCalendarDynamicHeader.h */,\n\t\t\t\t305233481D8170E50070AAFE /* FSCalendar+Deprecated.m */,\n\t\t\t\t305233621D8170E50070AAFE /* Info.plist */,\n\t\t\t);\n\t\t\tname = FSCalendar;\n\t\t\tpath = ../../FSCalendar;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t3052330D1D8170480070AAFE /* Example-TodayExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 305233251D8170480070AAFE /* Build configuration list for PBXNativeTarget \"Example-TodayExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t3052330A1D8170480070AAFE /* Sources */,\n\t\t\t\t3052330B1D8170480070AAFE /* Frameworks */,\n\t\t\t\t3052330C1D8170480070AAFE /* Resources */,\n\t\t\t\t3052333E1D81706E0070AAFE /* Embed App Extensions */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t305233391D81706E0070AAFE /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"Example-TodayExtension\";\n\t\t\tproductName = DynamicTodayExtensionExample;\n\t\t\tproductReference = 3052330E1D8170480070AAFE /* Example-TodayExtension.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t3052332B1D81706E0070AAFE /* TodayExtension */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 3052333B1D81706E0070AAFE /* Build configuration list for PBXNativeTarget \"TodayExtension\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t305233281D81706E0070AAFE /* Sources */,\n\t\t\t\t305233291D81706E0070AAFE /* Frameworks */,\n\t\t\t\t3052332A1D81706E0070AAFE /* 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 = TodayExtension;\n\t\t\tproductName = DynamicTodayExtension;\n\t\t\tproductReference = 3052332C1D81706E0070AAFE /* TodayExtension.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t305233061D8170480070AAFE /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1000;\n\t\t\t\tORGANIZATIONNAME = dingwenchao;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t3052330D1D8170480070AAFE = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t};\n\t\t\t\t\t3052332B1D81706E0070AAFE = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 305233091D8170480070AAFE /* Build configuration list for PBXProject \"Example-TodayExtension\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\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 = 305233051D8170480070AAFE;\n\t\t\tproductRefGroup = 3052330F1D8170480070AAFE /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t3052330D1D8170480070AAFE /* Example-TodayExtension */,\n\t\t\t\t3052332B1D81706E0070AAFE /* TodayExtension */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t3052330C1D8170480070AAFE /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t305233211D8170480070AAFE /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t3052331E1D8170480070AAFE /* Assets.xcassets in Resources */,\n\t\t\t\t3052331C1D8170480070AAFE /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t3052332A1D81706E0070AAFE /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t305233361D81706E0070AAFE /* MainInterface.storyboard in Resources */,\n\t\t\t\t305233431D8170C60070AAFE /* Image.xcassets 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\t3052330A1D8170480070AAFE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t305233191D8170480070AAFE /* ViewController.m in Sources */,\n\t\t\t\t305233161D8170480070AAFE /* AppDelegate.m in Sources */,\n\t\t\t\t305233131D8170480070AAFE /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t305233281D81706E0070AAFE /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t30A33A0B1DB1CA640039BEA3 /* FSCalendarConstants.m in Sources */,\n\t\t\t\t305233721D8170E50070AAFE /* FSCalendarScopeHandle.m in Sources */,\n\t\t\t\t30623F701DC1F46800FA31B3 /* FSCalendarCollectionViewLayout.m in Sources */,\n\t\t\t\t305233691D8170E50070AAFE /* FSCalendar.m in Sources */,\n\t\t\t\t305233671D8170E50070AAFE /* FSCalendar+Deprecated.m in Sources */,\n\t\t\t\t3052336B1D8170E50070AAFE /* FSCalendarAppearance.m in Sources */,\n\t\t\t\t305233731D8170E50070AAFE /* FSCalendarStickyHeader.m in Sources */,\n\t\t\t\tF9E5546B1E1E587300CBA753 /* FSCalendarTransitionCoordinator.m in Sources */,\n\t\t\t\t3055B1CB1DA933AD002AFA13 /* FSCalendarExtensions.m in Sources */,\n\t\t\t\t30F4C95B1E07C48500D2EC4D /* FSCalendarDelegationProxy.m in Sources */,\n\t\t\t\t30501E431DCAECD700148FBB /* FSCalendarWeekdayView.m in Sources */,\n\t\t\t\t3052336C1D8170E50070AAFE /* FSCalendarCell.m in Sources */,\n\t\t\t\t302366E31DC78A90007D9922 /* FSCalendarCalculator.m in Sources */,\n\t\t\t\t3052336D1D8170E50070AAFE /* FSCalendarCollectionView.m in Sources */,\n\t\t\t\t305233411D8170B20070AAFE /* TodayViewController.m in Sources */,\n\t\t\t\t30A07C041DCAF7F30071F025 /* FSCalendarHeaderView.m in Sources */,\n\t\t\t\t30F4C95A1E07C48500D2EC4D /* FSCalendarDelegationFactory.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t305233391D81706E0070AAFE /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 3052332B1D81706E0070AAFE /* TodayExtension */;\n\t\t\ttargetProxy = 305233381D81706E0070AAFE /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t3052331A1D8170480070AAFE /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t3052331B1D8170480070AAFE /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t3052331F1D8170480070AAFE /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t305233201D8170480070AAFE /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t305233341D81706E0070AAFE /* MainInterface.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t305233351D81706E0070AAFE /* Base */,\n\t\t\t);\n\t\t\tname = MainInterface.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t305233231D8170480070AAFE /* 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_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_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 = 8.0;\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\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t305233241D8170480070AAFE /* 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_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_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 = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t305233261D8170480070AAFE /* 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 = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/TodayExtensionExample/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.TodayExtensionExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t305233271D8170480070AAFE /* 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 = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/TodayExtensionExample/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.TodayExtensionExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t3052333C1D81706E0070AAFE /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/TodayExtension/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.TodayExtensionExample.TodayExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t3052333D1D81706E0070AAFE /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/TodayExtension/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.TodayExtensionExample.TodayExtension;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t305233091D8170480070AAFE /* Build configuration list for PBXProject \"Example-TodayExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t305233231D8170480070AAFE /* Debug */,\n\t\t\t\t305233241D8170480070AAFE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t305233251D8170480070AAFE /* Build configuration list for PBXNativeTarget \"Example-TodayExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t305233261D8170480070AAFE /* Debug */,\n\t\t\t\t305233271D8170480070AAFE /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t3052333B1D81706E0070AAFE /* Build configuration list for PBXNativeTarget \"TodayExtension\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t3052333C1D81706E0070AAFE /* Debug */,\n\t\t\t\t3052333D1D81706E0070AAFE /* 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 = 305233061D8170480070AAFE /* Project object */;\n}\n"
  },
  {
    "path": "FSCalendar/FSCalendar.h",
    "content": "//\n//  FSCalendar.h\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 29/1/15.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n// \n//  https://github.com/WenchaoD\n//\n//  FSCalendar is a superior awesome calendar control with high performance, high customizablility and very simple usage.\n//\n//  @see FSCalendarDataSource\n//  @see FSCalendarDelegate\n//  @see FSCalendarDelegateAppearance\n//  @see FSCalendarAppearance\n//\n\n#import <UIKit/UIKit.h>\n#import \"FSCalendarAppearance.h\"\n#import \"FSCalendarConstants.h\"\n#import \"FSCalendarCell.h\"\n#import \"FSCalendarWeekdayView.h\"\n#import \"FSCalendarHeaderView.h\"\n\n//! Project version number for FSCalendar.\nFOUNDATION_EXPORT double FSCalendarVersionNumber;\n\n//! Project version string for FSCalendar.\nFOUNDATION_EXPORT const unsigned char FSCalendarVersionString[];\n\ntypedef NS_ENUM(NSUInteger, FSCalendarScope) {\n    FSCalendarScopeMonth,\n    FSCalendarScopeWeek\n};\n\ntypedef NS_ENUM(NSUInteger, FSCalendarScrollDirection) {\n    FSCalendarScrollDirectionVertical,\n    FSCalendarScrollDirectionHorizontal\n};\n\ntypedef NS_ENUM(NSUInteger, FSCalendarPlaceholderType) {\n    FSCalendarPlaceholderTypeNone          = 0,\n    FSCalendarPlaceholderTypeFillHeadTail  = 1,\n    FSCalendarPlaceholderTypeFillSixRows   = 2\n};\n\ntypedef NS_ENUM(NSUInteger, FSCalendarMonthPosition) {\n    FSCalendarMonthPositionPrevious,\n    FSCalendarMonthPositionCurrent,\n    FSCalendarMonthPositionNext,\n    \n    FSCalendarMonthPositionNotFound = NSNotFound\n};\n\nNS_ASSUME_NONNULL_BEGIN\n\n@class FSCalendar;\n\n/**\n * FSCalendarDataSource is a source set of FSCalendar. The basic role is to provide event、subtitle and min/max day to display, or customized day cell for the calendar.\n */\n@protocol FSCalendarDataSource <NSObject>\n\n@optional\n\n/**\n * Asks the dataSource for a title for the specific date as a replacement of the day text\n */\n- (nullable NSString *)calendar:(FSCalendar *)calendar titleForDate:(NSDate *)date;\n\n/**\n * Asks the dataSource for a subtitle for the specific date under the day text.\n */\n- (nullable NSString *)calendar:(FSCalendar *)calendar subtitleForDate:(NSDate *)date;\n\n/**\n * Asks the dataSource for an image for the specific date.\n */\n- (nullable UIImage *)calendar:(FSCalendar *)calendar imageForDate:(NSDate *)date;\n\n/**\n * Asks the dataSource the minimum date to display.\n */\n- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar;\n\n/**\n * Asks the dataSource the maximum date to display.\n */\n- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar;\n\n/**\n * Asks the data source for a cell to insert in a particular data of the calendar.\n */\n- (__kindof FSCalendarCell *)calendar:(FSCalendar *)calendar cellForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position;\n\n/**\n * Asks the dataSource the number of event dots for a specific date.\n *\n * @see\n *   - (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventColorForDate:(NSDate *)date;\n *   - (NSArray *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventColorsForDate:(NSDate *)date;\n */\n- (NSInteger)calendar:(FSCalendar *)calendar numberOfEventsForDate:(NSDate *)date;\n\n@end\n\n\n/**\n * The delegate of a FSCalendar object must adopt the FSCalendarDelegate protocol. The optional methods of FSCalendarDelegate manage selections、 user events and help to manager the frame of the calendar.\n */\n@protocol FSCalendarDelegate <NSObject>\n\n@optional\n\n/**\n Asks the delegate whether the specific date is allowed to be selected by tapping.\n */\n- (BOOL)calendar:(FSCalendar *)calendar shouldSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition;\n\n/**\n Tells the delegate a date in the calendar is selected by tapping.\n */\n- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition;\n\n/**\n Asks the delegate whether the specific date is allowed to be deselected by tapping.\n */\n- (BOOL)calendar:(FSCalendar *)calendar shouldDeselectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition;\n\n/**\n Tells the delegate a date in the calendar is deselected by tapping.\n */\n- (void)calendar:(FSCalendar *)calendar didDeselectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition;\n\n\n/**\n Tells the delegate the calendar is about to change the bounding rect.\n */\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated;\n\n/**\n Tells the delegate that the specified cell is about to be displayed in the calendar.\n */\n- (void)calendar:(FSCalendar *)calendar willDisplayCell:(FSCalendarCell *)cell forDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition;\n\n/**\n Tells the delegate the calendar is about to change the current page.\n */\n- (void)calendarCurrentPageDidChange:(FSCalendar *)calendar;\n\n@end\n\n/**\n * FSCalendarDelegateAppearance determines the fonts and colors of components in the calendar, but more specifically. Basically, if you need to make a global customization of appearance of the calendar, use FSCalendarAppearance. But if you need different appearance for different days, use FSCalendarDelegateAppearance.\n *\n * @see FSCalendarAppearance\n */\n@protocol FSCalendarDelegateAppearance <FSCalendarDelegate>\n\n@optional\n\n/**\n * Asks the delegate for a fill color in unselected state for the specific date.\n */\n- (nullable UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillDefaultColorForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for a fill color in selected state for the specific date.\n */\n- (nullable UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance fillSelectionColorForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for day text color in unselected state for the specific date.\n */\n- (nullable UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance titleDefaultColorForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for day text color in selected state for the specific date.\n */\n- (nullable UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance titleSelectionColorForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for subtitle text color in unselected state for the specific date.\n */\n- (nullable UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance subtitleDefaultColorForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for subtitle text color in selected state for the specific date.\n */\n- (nullable UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance subtitleSelectionColorForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for event colors for the specific date.\n */\n- (nullable NSArray<UIColor *> *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventDefaultColorsForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for multiple event colors in selected state for the specific date.\n */\n- (nullable NSArray<UIColor *> *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventSelectionColorsForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for a border color in unselected state for the specific date.\n */\n- (nullable UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderDefaultColorForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for a border color in selected state for the specific date.\n */\n- (nullable UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderSelectionColorForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for an offset for day text for the specific date.\n */\n- (CGPoint)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance titleOffsetForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for an offset for subtitle for the specific date.\n */\n- (CGPoint)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance subtitleOffsetForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for an offset for image for the specific date.\n */\n- (CGPoint)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance imageOffsetForDate:(NSDate *)date;\n\n/**\n * Asks the delegate for an offset for event dots for the specific date.\n */\n- (CGPoint)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance eventOffsetForDate:(NSDate *)date;\n\n\n/**\n * Asks the delegate for a border radius for the specific date.\n */\n- (CGFloat)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderRadiusForDate:(NSDate *)date;\n\n@end\n\n#pragma mark - Primary\n\nIB_DESIGNABLE\n@interface FSCalendar : UIView\n\n/**\n * The timezone of the calendar. `defaultTimeZone` by default.\n */\n@property (strong, nonatomic) NSTimeZone *timeZone;\n\n/**\n * The object that acts as the delegate of the calendar.\n */\n@property (weak, nonatomic) IBOutlet id<FSCalendarDelegate> delegate;\n\n/**\n * The object that acts as the data source of the calendar.\n */\n@property (weak, nonatomic) IBOutlet id<FSCalendarDataSource> dataSource;\n\n/**\n * A special mark will be put on 'today' of the calendar.\n */\n@property (nullable, strong, nonatomic) NSDate *today;\n\n/**\n * The current page of calendar\n *\n * @desc In week mode, current page represents the current visible week; In month mode, it means current visible month.\n */\n@property (strong, nonatomic) NSDate *currentPage;\n\n/**\n * The locale of month and weekday symbols. Change it to display them in your own language.\n *\n * e.g. To display them in Chinese:\n * \n *    calendar.locale = [NSLocale localeWithLocaleIdentifier:@\"zh-CN\"];\n */\n@property (copy, nonatomic) NSLocale *locale;\n\n/**\n * The scroll direction of FSCalendar. \n *\n * e.g. To make the calendar scroll vertically\n *\n *    calendar.scrollDirection = FSCalendarScrollDirectionVertical;\n */\n@property (assign, nonatomic) FSCalendarScrollDirection scrollDirection;\n\n/**\n * The scope of calendar, change scope will trigger an inner frame change, make sure the frame has been correctly adjusted in \n *\n *    - (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated;\n */\n@property (assign, nonatomic) FSCalendarScope scope;\n\n/**\n A UIPanGestureRecognizer instance which enables the control of scope on the whole day-area. Not available if the scrollDirection is vertical.\n \n @deprecated Use -handleScopeGesture: instead\n \n e.g.\n \n    UIPanGestureRecognizer *scopeGesture = [[UIPanGestureRecognizer alloc] initWithTarget:calendar action:@selector(handleScopeGesture:)];\n    [calendar addGestureRecognizer:scopeGesture];\n \n @see DIYExample\n @see FSCalendarScopeExample\n */\n@property (readonly, nonatomic) UIPanGestureRecognizer *scopeGesture FSCalendarDeprecated(handleScopeGesture:);\n\n/**\n * A UILongPressGestureRecognizer instance which enables the swipe-to-choose feature of the calendar.\n *\n * e.g.\n *\n *    calendar.swipeToChooseGesture.enabled = YES;\n */\n@property (readonly, nonatomic) UILongPressGestureRecognizer *swipeToChooseGesture;\n\n/**\n * The placeholder type of FSCalendar. Default is FSCalendarPlaceholderTypeFillSixRows.\n *\n * e.g. To hide all placeholder of the calendar\n *\n *    calendar.placeholderType = FSCalendarPlaceholderTypeNone;\n */\n@property (assign, nonatomic) FSCalendarPlaceholderType placeholderType;\n\n/**\n The index of the first weekday of the calendar. Give a '2' to make Monday in the first column.\n */\n@property (assign, nonatomic) IBInspectable NSUInteger firstWeekday;\n\n/**\n The height of month header of the calendar. Give a '0' to remove the header.\n */\n@property (assign, nonatomic) IBInspectable CGFloat headerHeight;\n\n/**\n The height of weekday header of the calendar.\n */\n@property (assign, nonatomic) IBInspectable CGFloat weekdayHeight;\n\n/**\n The weekday view of the calendar\n */\n@property (strong, nonatomic) FSCalendarWeekdayView *calendarWeekdayView;\n\n/**\n The header view of the calendar\n */\n@property (strong, nonatomic) FSCalendarHeaderView *calendarHeaderView;\n\n/**\n A Boolean value that determines whether users can select a date.\n */\n@property (assign, nonatomic) IBInspectable BOOL allowsSelection;\n\n/**\n A Boolean value that determines whether users can select more than one date.\n */\n@property (assign, nonatomic) IBInspectable BOOL allowsMultipleSelection;\n\n/**\n A Boolean value that determines whether the bounding rect changes when the displayed month of the calendar is changed.\n */\n@property (assign, nonatomic) IBInspectable BOOL adjustsBoundingRectWhenChangingMonths;\n\n/**\n A Boolean value that determines whether paging is enabled for the calendar.\n */\n@property (assign, nonatomic) IBInspectable BOOL pagingEnabled;\n\n/**\n A Boolean value that determines whether scrolling is enabled for the calendar.\n */\n@property (assign, nonatomic) IBInspectable BOOL scrollEnabled;\n\n/**\n The row height of the calendar if paging enabled is NO.;\n */\n@property (assign, nonatomic) IBInspectable CGFloat rowHeight;\n\n/**\n The calendar appearance used to control the global fonts、colors .etc\n */\n@property (readonly, nonatomic) FSCalendarAppearance *appearance;\n\n/**\n A date object representing the minimum day enable、visible and selectable. (read-only)\n */\n@property (readonly, nonatomic) NSDate *minimumDate;\n\n/**\n A date object representing the maximum day enable、visible and selectable. (read-only)\n */\n@property (readonly, nonatomic) NSDate *maximumDate;\n\n/**\n A date object identifying the section of the selected date. (read-only)\n */\n@property (nullable, readonly, nonatomic) NSDate *selectedDate;\n\n/**\n The dates representing the selected dates. (read-only)\n */\n@property (readonly, nonatomic) NSArray<NSDate *> *selectedDates;\n\n/**\n Reload the dates and appearance of the calendar.\n */\n- (void)reloadData;\n\n/**\n Change the scope of the calendar. Make sure `-calendar:boundingRectWillChange:animated` is correctly adopted.\n \n @param scope The target scope to change.\n @param animated YES if you want to animate the scoping; NO if the change should be immediate.\n */\n- (void)setScope:(FSCalendarScope)scope animated:(BOOL)animated;\n\n/**\n Selects a given date in the calendar.\n \n @param date A date in the calendar.\n */\n- (void)selectDate:(nullable NSDate *)date;\n\n/**\n Selects a given date in the calendar, optionally scrolling the date to visible area.\n \n @param date A date in the calendar.\n @param scrollToDate A Boolean value that determines whether the calendar should scroll to the selected date to visible area.\n */\n- (void)selectDate:(nullable NSDate *)date scrollToDate:(BOOL)scrollToDate;\n\n/**\n Deselects a given date of the calendar.\n \n @param date A date in the calendar.\n */\n- (void)deselectDate:(NSDate *)date;\n\n/**\n Changes the current page of the calendar.\n \n @param currentPage Representing weekOfYear in week mode, or month in month mode.\n @param animated YES if you want to animate the change in position; NO if it should be immediate.\n */\n- (void)setCurrentPage:(NSDate *)currentPage animated:(BOOL)animated;\n\n/**\n Register a class for use in creating new calendar cells.\n\n @param cellClass The class of a cell that you want to use in the calendar.\n @param identifier The reuse identifier to associate with the specified class. This parameter must not be nil and must not be an empty string.\n */\n- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier;\n\n/**\n Returns a reusable calendar cell object located by its identifier.\n\n @param identifier The reuse identifier for the specified cell. This parameter must not be nil.\n @param date The specific date of the cell.\n @return A valid FSCalendarCell object.\n */\n- (__kindof FSCalendarCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position;\n\n/**\n Returns the calendar cell for the specified date.\n\n @param date The date of the cell\n @param position The month position for the cell\n @return An object representing a cell of the calendar, or nil if the cell is not visible or date is out of range.\n */\n- (nullable FSCalendarCell *)cellForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position;\n\n\n/**\n Returns the date of the specified cell.\n \n @param cell The cell object whose date you want.\n @return The date of the cell or nil if the specified cell is not in the calendar.\n */\n- (nullable NSDate *)dateForCell:(FSCalendarCell *)cell;\n\n/**\n Returns the month position of the specified cell.\n \n @param cell The cell object whose month position you want.\n @return The month position of the cell or FSCalendarMonthPositionNotFound if the specified cell is not in the calendar.\n */\n- (FSCalendarMonthPosition)monthPositionForCell:(FSCalendarCell *)cell;\n\n\n/**\n Returns an array of visible cells currently displayed by the calendar.\n \n @return An array of FSCalendarCell objects. If no cells are visible, this method returns an empty array.\n */\n- (NSArray<__kindof FSCalendarCell *> *)visibleCells;\n\n/**\n Returns the frame for a non-placeholder cell relative to the super view of the calendar.\n \n @param date A date is the calendar.\n */\n- (CGRect)frameForDate:(NSDate *)date;\n\n/**\n An action selector for UIPanGestureRecognizer instance to control the scope transition\n \n @param sender A UIPanGestureRecognizer instance which controls the scope of the calendar\n */\n- (void)handleScopeGesture:(UIPanGestureRecognizer *)sender;\n\n@end\n\n\nIB_DESIGNABLE\n@interface FSCalendar (IBExtension)\n\n#if TARGET_INTERFACE_BUILDER\n\n@property (assign, nonatomic) IBInspectable CGFloat  titleTextSize;\n@property (assign, nonatomic) IBInspectable CGFloat  subtitleTextSize;\n@property (assign, nonatomic) IBInspectable CGFloat  weekdayTextSize;\n@property (assign, nonatomic) IBInspectable CGFloat  headerTitleTextSize;\n\n@property (strong, nonatomic) IBInspectable UIColor  *eventDefaultColor;\n@property (strong, nonatomic) IBInspectable UIColor  *eventSelectionColor;\n@property (strong, nonatomic) IBInspectable UIColor  *weekdayTextColor;\n\n@property (strong, nonatomic) IBInspectable UIColor  *headerTitleColor;\n@property (strong, nonatomic) IBInspectable NSString *headerDateFormat;\n@property (assign, nonatomic) IBInspectable CGFloat  headerMinimumDissolvedAlpha;\n\n@property (strong, nonatomic) IBInspectable UIColor  *titleDefaultColor;\n@property (strong, nonatomic) IBInspectable UIColor  *titleSelectionColor;\n@property (strong, nonatomic) IBInspectable UIColor  *titleTodayColor;\n@property (strong, nonatomic) IBInspectable UIColor  *titlePlaceholderColor;\n@property (strong, nonatomic) IBInspectable UIColor  *titleWeekendColor;\n\n@property (strong, nonatomic) IBInspectable UIColor  *subtitleDefaultColor;\n@property (strong, nonatomic) IBInspectable UIColor  *subtitleSelectionColor;\n@property (strong, nonatomic) IBInspectable UIColor  *subtitleTodayColor;\n@property (strong, nonatomic) IBInspectable UIColor  *subtitlePlaceholderColor;\n@property (strong, nonatomic) IBInspectable UIColor  *subtitleWeekendColor;\n\n@property (strong, nonatomic) IBInspectable UIColor  *selectionColor;\n@property (strong, nonatomic) IBInspectable UIColor  *todayColor;\n@property (strong, nonatomic) IBInspectable UIColor  *todaySelectionColor;\n\n@property (strong, nonatomic) IBInspectable UIColor *borderDefaultColor;\n@property (strong, nonatomic) IBInspectable UIColor *borderSelectionColor;\n\n@property (assign, nonatomic) IBInspectable CGFloat borderRadius;\n@property (assign, nonatomic) IBInspectable BOOL    useVeryShortWeekdaySymbols;\n\n@property (assign, nonatomic) IBInspectable BOOL      fakeSubtitles;\n@property (assign, nonatomic) IBInspectable BOOL      fakeEventDots;\n@property (assign, nonatomic) IBInspectable NSInteger fakedSelectedDay;\n\n#endif\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "FSCalendar/FSCalendar.m",
    "content": "//\n//  FSCalendar.m\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 29/1/15.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendar.h\"\n#import \"FSCalendarHeaderView.h\"\n#import \"FSCalendarWeekdayView.h\"\n#import \"FSCalendarStickyHeader.h\"\n#import \"FSCalendarCollectionViewLayout.h\"\n\n#import \"FSCalendarExtensions.h\"\n#import \"FSCalendarDynamicHeader.h\"\n#import \"FSCalendarCollectionView.h\"\n#import \"FSCalendarTransitionCoordinator.h\"\n#import \"FSCalendarCalculator.h\"\n#import \"FSCalendarDelegationFactory.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\nstatic inline void FSCalendarAssertDateInBounds(NSDate *date, NSCalendar *calendar, NSDate *minimumDate, NSDate *maximumDate) {\n    BOOL valid = YES;\n    NSInteger minOffset = [calendar components:NSCalendarUnitDay fromDate:minimumDate toDate:date options:0].day;\n    valid &= minOffset >= 0;\n    if (valid) {\n        NSInteger maxOffset = [calendar components:NSCalendarUnitDay fromDate:maximumDate toDate:date options:0].day;\n        valid &= maxOffset <= 0;\n    }\n    if (!valid) {\n        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];\n        formatter.dateFormat = @\"yyyy/MM/dd\";\n        [NSException raise:@\"FSCalendar date out of bounds exception\" format:@\"Target date %@ beyond bounds [%@ - %@]\", [formatter stringFromDate:date], [formatter stringFromDate:minimumDate], [formatter stringFromDate:maximumDate]];\n    }\n}\n\nNS_ASSUME_NONNULL_END\n\ntypedef NS_ENUM(NSUInteger, FSCalendarOrientation) {\n    FSCalendarOrientationLandscape,\n    FSCalendarOrientationPortrait\n};\n\n@interface FSCalendar ()<UICollectionViewDataSource,UICollectionViewDelegate,FSCalendarCollectionViewInternalDelegate,UIGestureRecognizerDelegate>\n{\n    NSMutableArray  *_selectedDates;\n}\n\n@property (strong, nonatomic) NSCalendar *gregorian;\n@property (strong, nonatomic) NSDateFormatter *formatter;\n\n@property (weak  , nonatomic) UIView                     *contentView;\n@property (weak  , nonatomic) UIView                     *daysContainer;\n@property (weak  , nonatomic) FSCalendarCollectionView   *collectionView;\n@property (weak  , nonatomic) FSCalendarCollectionViewLayout *collectionViewLayout;\n\n@property (strong, nonatomic) FSCalendarTransitionCoordinator *transitionCoordinator;\n@property (strong, nonatomic) FSCalendarCalculator       *calculator;\n\n@property (weak  , nonatomic) FSCalendarHeaderTouchDeliver *deliver;\n\n@property (assign, nonatomic) BOOL                       needsAdjustingViewFrame;\n@property (assign, nonatomic) BOOL                       needsRequestingBoundingDates;\n@property (assign, nonatomic) CGFloat                    preferredHeaderHeight;\n@property (assign, nonatomic) CGFloat                    preferredWeekdayHeight;\n@property (assign, nonatomic) CGFloat                    preferredRowHeight;\n@property (assign, nonatomic) FSCalendarOrientation      orientation;\n\n@property (strong, nonatomic) NSMutableArray<NSOperation *> *didLayoutOperations;\n\n@property (readonly, nonatomic) BOOL floatingMode;\n@property (readonly, nonatomic) BOOL hasValidateVisibleLayout;\n@property (readonly, nonatomic) NSArray *visibleStickyHeaders;\n@property (readonly, nonatomic) FSCalendarOrientation currentCalendarOrientation;\n\n@property (strong, nonatomic) FSCalendarDelegationProxy  *dataSourceProxy;\n@property (strong, nonatomic) FSCalendarDelegationProxy  *delegateProxy;\n\n@property (strong, nonatomic) NSIndexPath *lastPressedIndexPath;\n@property (strong, nonatomic) NSMapTable *visibleSectionHeaders;\n\n- (void)orientationDidChange:(NSNotification *)notification;\n\n- (CGSize)sizeThatFits:(CGSize)size scope:(FSCalendarScope)scope;\n\n- (void)scrollToDate:(NSDate *)date;\n- (void)scrollToDate:(NSDate *)date animated:(BOOL)animated;\n- (void)scrollToPageForDate:(NSDate *)date animated:(BOOL)animated;\n\n- (BOOL)isPageInRange:(NSDate *)page;\n- (BOOL)isDateInRange:(NSDate *)date;\n- (BOOL)isDateSelected:(NSDate *)date;\n- (BOOL)isDateInDifferentPage:(NSDate *)date;\n\n- (void)selectDate:(NSDate *)date scrollToDate:(BOOL)scrollToDate atMonthPosition:(FSCalendarMonthPosition)monthPosition;\n- (void)enqueueSelectedDate:(NSDate *)date;\n\n- (void)invalidateDateTools;\n- (void)invalidateLayout;\n- (void)invalidateHeaders;\n- (void)invalidateAppearanceForCell:(FSCalendarCell *)cell forDate:(NSDate *)date;\n\n- (void)invalidateViewFrames;\n\n- (void)handleSwipeToChoose:(UILongPressGestureRecognizer *)pressGesture;\n\n- (void)selectCounterpartDate:(NSDate *)date;\n- (void)deselectCounterpartDate:(NSDate *)date;\n\n- (void)reloadDataForCell:(FSCalendarCell *)cell atIndexPath:(NSIndexPath *)indexPath;\n\n- (void)adjustMonthPosition;\n- (BOOL)requestBoundingDatesIfNecessary;\n- (void)executePendingOperationsIfNeeded;\n- (void)configureAppearance;\n\n@end\n\n@implementation FSCalendar\n\n@dynamic selectedDate;\n@synthesize scopeGesture = _scopeGesture, swipeToChooseGesture = _swipeToChooseGesture;\n\n#pragma mark - Life Cycle && Initialize\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        [self initialize];\n    }\n    return self;\n}\n\n- (id)initWithCoder:(NSCoder *)aDecoder\n{\n    self = [super initWithCoder:aDecoder];\n    if (self) {\n        [self initialize];\n    }\n    return self;\n}\n\n- (void)initialize\n{   \n    _appearance = [[FSCalendarAppearance alloc] init];\n    _appearance.calendar = self;\n    \n    _gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];\n    _formatter = [[NSDateFormatter alloc] init];\n    _formatter.dateFormat = @\"yyyy-MM-dd\";\n    _locale = [NSLocale currentLocale];\n    _timeZone = [NSTimeZone defaultTimeZone];\n    _firstWeekday = 1;\n    [self invalidateDateTools];\n    \n    _today = [self.gregorian startOfDayForDate:[NSDate date]];\n    _currentPage = [self.gregorian fs_firstDayOfMonth:_today];\n    \n    \n    _minimumDate = [self.formatter dateFromString:@\"1970-01-01\"];\n    _maximumDate = [self.formatter dateFromString:@\"2099-12-31\"];\n    \n    _headerHeight     = FSCalendarAutomaticDimension;\n    _weekdayHeight    = FSCalendarAutomaticDimension;\n    _rowHeight        = FSCalendarStandardRowHeight*MAX(1, FSCalendarDeviceIsIPad*1.5);\n    \n    _preferredHeaderHeight  = FSCalendarAutomaticDimension;\n    _preferredWeekdayHeight = FSCalendarAutomaticDimension;\n    _preferredRowHeight     = FSCalendarAutomaticDimension;\n    \n    _scrollDirection = FSCalendarScrollDirectionHorizontal;\n    _scope = FSCalendarScopeMonth;\n    _selectedDates = [NSMutableArray arrayWithCapacity:1];\n    _visibleSectionHeaders = [NSMapTable weakToWeakObjectsMapTable];\n    \n    _pagingEnabled = YES;\n    _scrollEnabled = YES;\n    _needsAdjustingViewFrame = YES;\n    _needsRequestingBoundingDates = YES;\n    _orientation = self.currentCalendarOrientation;\n    _placeholderType = FSCalendarPlaceholderTypeFillSixRows;\n    \n    _dataSourceProxy = [FSCalendarDelegationFactory dataSourceProxy];\n    _delegateProxy = [FSCalendarDelegationFactory delegateProxy];\n    \n    self.didLayoutOperations = NSMutableArray.array;\n    \n    UIView *contentView = [[UIView alloc] initWithFrame:CGRectZero];\n    contentView.backgroundColor = [UIColor clearColor];\n    contentView.clipsToBounds = YES;\n    [self addSubview:contentView];\n    self.contentView = contentView;\n    \n    UIView *daysContainer = [[UIView alloc] initWithFrame:CGRectZero];\n    daysContainer.backgroundColor = [UIColor clearColor];\n    daysContainer.clipsToBounds = YES;\n    [contentView addSubview:daysContainer];\n    self.daysContainer = daysContainer;\n    \n    FSCalendarCollectionViewLayout *collectionViewLayout = [[FSCalendarCollectionViewLayout alloc] init];\n    collectionViewLayout.calendar = self;\n    \n    FSCalendarCollectionView *collectionView = [[FSCalendarCollectionView alloc] initWithFrame:CGRectZero\n                                                                          collectionViewLayout:collectionViewLayout];\n    collectionView.dataSource = self;\n    collectionView.delegate = self;\n    collectionView.internalDelegate = self;\n    collectionView.backgroundColor = [UIColor clearColor];\n    collectionView.pagingEnabled = YES;\n    collectionView.showsHorizontalScrollIndicator = NO;\n    collectionView.showsVerticalScrollIndicator = NO;\n    collectionView.allowsMultipleSelection = NO;\n    collectionView.clipsToBounds = YES;\n    [collectionView registerClass:[FSCalendarCell class] forCellWithReuseIdentifier:FSCalendarDefaultCellReuseIdentifier];\n    [collectionView registerClass:[FSCalendarBlankCell class] forCellWithReuseIdentifier:FSCalendarBlankCellReuseIdentifier];\n    [collectionView registerClass:[FSCalendarStickyHeader class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@\"header\"];\n    [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@\"placeholderHeader\"];\n    [daysContainer addSubview:collectionView];\n    self.collectionView = collectionView;\n    self.collectionViewLayout = collectionViewLayout;\n    \n    [self invalidateLayout];\n    \n    // Assistants\n    self.transitionCoordinator = [[FSCalendarTransitionCoordinator alloc] initWithCalendar:self];\n    self.calculator = [[FSCalendarCalculator alloc] initWithCalendar:self];\n    \n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];\n    \n}\n\n- (void)dealloc\n{\n    self.collectionView.delegate = nil;\n    self.collectionView.dataSource = nil;\n    \n    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];\n}\n\n#pragma mark - Overriden methods\n\n- (void)setBounds:(CGRect)bounds\n{\n    [super setBounds:bounds];\n    if (!CGRectIsEmpty(bounds) && self.transitionCoordinator.state == FSCalendarTransitionStateIdle) {\n        [self invalidateViewFrames];\n    }\n}\n\n- (void)setFrame:(CGRect)frame\n{\n    [super setFrame:frame];\n    if (!CGRectIsEmpty(frame) && self.transitionCoordinator.state == FSCalendarTransitionStateIdle) {\n        [self invalidateViewFrames];\n    }\n}\n\n- (void)setValue:(id)value forUndefinedKey:(NSString *)key\n{\n#if !TARGET_INTERFACE_BUILDER\n    if ([key hasPrefix:@\"fake\"]) {\n        return;\n    }\n#endif\n    if (key.length) {\n        NSString *setter = [NSString stringWithFormat:@\"set%@%@:\",[key substringToIndex:1].uppercaseString,[key substringFromIndex:1]];\n        SEL selector = NSSelectorFromString(setter);\n        if ([self.appearance respondsToSelector:selector]) {\n            return [self.appearance setValue:value forKey:key];\n        } else if ([self.collectionViewLayout respondsToSelector:selector]) {\n            return [self.collectionViewLayout setValue:value forKey:key];\n        }\n    }\n    \n    return [super setValue:value forUndefinedKey:key];\n    \n}\n\n- (void)setTimeZone:(NSTimeZone *)tz\n{\n    _timeZone = tz;\n    [self invalidateDateTools];\n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    \n    if (_needsAdjustingViewFrame) {\n        _needsAdjustingViewFrame = NO;\n        \n        if (CGSizeEqualToSize(_transitionCoordinator.cachedMonthSize, CGSizeZero)) {\n            _transitionCoordinator.cachedMonthSize = self.frame.size;\n        }\n        \n        _contentView.frame = self.bounds;\n        CGFloat headerHeight = self.preferredHeaderHeight;\n        CGFloat weekdayHeight = self.preferredWeekdayHeight;\n        CGFloat rowHeight = self.preferredRowHeight;\n        CGFloat padding = 5;\n        if (self.scrollDirection == UICollectionViewScrollDirectionHorizontal) {\n            rowHeight = FSCalendarFloor(rowHeight*2)*0.5; // Round to nearest multiple of 0.5. e.g. (16.8->16.5),(16.2->16.0)\n        }\n        \n        self.calendarHeaderView.frame = CGRectMake(0, 0, self.fs_width, headerHeight);\n        self.calendarWeekdayView.frame = CGRectMake(0, self.calendarHeaderView.fs_bottom, self.contentView.fs_width, weekdayHeight);\n\n        _deliver.frame = CGRectMake(self.calendarHeaderView.fs_left, self.calendarHeaderView.fs_top, self.calendarHeaderView.fs_width, headerHeight+weekdayHeight);\n        _deliver.hidden = self.calendarHeaderView.hidden;\n        if (!self.floatingMode) {\n            switch (self.transitionCoordinator.representingScope) {\n                case FSCalendarScopeMonth: {\n                    CGFloat contentHeight = rowHeight*6 + padding*2;\n                    _daysContainer.frame = CGRectMake(0, headerHeight+weekdayHeight, self.fs_width, contentHeight);\n                    _collectionView.frame = CGRectMake(0, 0, _daysContainer.fs_width, contentHeight);\n                    break;\n                }\n                case FSCalendarScopeWeek: {\n                    CGFloat contentHeight = rowHeight + padding*2;\n                    _daysContainer.frame = CGRectMake(0, headerHeight+weekdayHeight, self.fs_width, contentHeight);\n                    _collectionView.frame = CGRectMake(0, 0, _daysContainer.fs_width, contentHeight);\n                    break;\n                }\n            }\n        } else {\n            \n            CGFloat contentHeight = _contentView.fs_height;\n            _daysContainer.frame = CGRectMake(0, 0, self.fs_width, contentHeight);\n            _collectionView.frame = _daysContainer.bounds;\n            \n        }\n        _collectionView.fs_height = FSCalendarHalfFloor(_collectionView.fs_height);\n    }\n    \n}\n\n#if TARGET_INTERFACE_BUILDER\n- (void)prepareForInterfaceBuilder\n{\n    NSDate *date = [NSDate date];\n    NSDateComponents *components = [self.gregorian components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:date];\n    components.day = _appearance.fakedSelectedDay?:1;\n    [_selectedDates addObject:[self.gregorian dateFromComponents:components]];\n    [self.collectionView reloadData];\n}\n#endif\n\n- (CGSize)sizeThatFits:(CGSize)size\n{\n    return [self sizeThatFits:size scope:self.transitionCoordinator.representingScope];\n}\n\n- (CGSize)sizeThatFits:(CGSize)size scope:(FSCalendarScope)scope\n{\n    CGFloat headerHeight = self.preferredHeaderHeight;\n    CGFloat weekdayHeight = self.preferredWeekdayHeight;\n    CGFloat rowHeight = self.preferredRowHeight;\n    CGFloat paddings = self.collectionViewLayout.sectionInsets.top + self.collectionViewLayout.sectionInsets.bottom;\n    \n    if (!self.floatingMode) {\n        switch (scope) {\n            case FSCalendarScopeMonth: {\n                CGFloat height = weekdayHeight + headerHeight + [self.calculator numberOfRowsInMonth:_currentPage]*rowHeight + paddings;\n                return CGSizeMake(size.width, height);\n            }\n            case FSCalendarScopeWeek: {\n                CGFloat height = weekdayHeight + headerHeight + rowHeight + paddings;\n                return CGSizeMake(size.width, height);\n            }\n        }\n    } else {\n        return CGSizeMake(size.width, self.fs_height);\n    }\n    return size;\n}\n\n#pragma mark - <UICollectionViewDataSource>\n\n- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView\n{\n    [self requestBoundingDatesIfNecessary];\n    return self.calculator.numberOfSections;\n}\n\n- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section\n{\n    if (self.floatingMode) {\n        NSInteger numberOfRows = [self.calculator numberOfRowsInSection:section];\n        return numberOfRows * 7;\n    }\n    switch (self.transitionCoordinator.representingScope) {\n        case FSCalendarScopeMonth: {\n            return 42;\n        }\n        case FSCalendarScopeWeek: {\n            return 7;\n        }\n    }\n    return 7;\n}\n\n- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath\n{\n    FSCalendarMonthPosition monthPosition = [self.calculator monthPositionForIndexPath:indexPath];\n    \n    switch (self.placeholderType) {\n        case FSCalendarPlaceholderTypeNone: {\n            if (self.transitionCoordinator.representingScope == FSCalendarScopeMonth && monthPosition != FSCalendarMonthPositionCurrent) {\n                return [collectionView dequeueReusableCellWithReuseIdentifier:FSCalendarBlankCellReuseIdentifier forIndexPath:indexPath];\n            }\n            break;\n        }\n        case FSCalendarPlaceholderTypeFillHeadTail: {\n            if (self.transitionCoordinator.representingScope == FSCalendarScopeMonth) {\n                if (indexPath.item >= 7 * [self.calculator numberOfRowsInSection:indexPath.section]) {\n                    return [collectionView dequeueReusableCellWithReuseIdentifier:FSCalendarBlankCellReuseIdentifier forIndexPath:indexPath];\n                }\n            }\n            break;\n        }\n        case FSCalendarPlaceholderTypeFillSixRows: {\n            break;\n        }\n    }\n    \n    NSDate *date = [self.calculator dateForIndexPath:indexPath];\n    FSCalendarCell *cell = [self.dataSourceProxy calendar:self cellForDate:date atMonthPosition:monthPosition];\n    if (!cell) {\n        cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:FSCalendarDefaultCellReuseIdentifier forIndexPath:indexPath];\n    }\n    [self reloadDataForCell:cell atIndexPath:indexPath];\n    return cell;\n}\n\n- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath\n{\n    if (self.floatingMode) {\n        if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {\n            FSCalendarStickyHeader *stickyHeader = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@\"header\" forIndexPath:indexPath];\n            stickyHeader.calendar = self;\n            stickyHeader.month = [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:indexPath.section toDate:[self.gregorian fs_firstDayOfMonth:_minimumDate] options:0];\n            self.visibleSectionHeaders[indexPath] = stickyHeader;\n            [stickyHeader setNeedsLayout];\n            return stickyHeader;\n        }\n    }\n    return [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@\"placeholderHeader\" forIndexPath:indexPath];\n}\n\n- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath\n{\n    if (self.floatingMode) {\n        if ([elementKind isEqualToString:UICollectionElementKindSectionHeader]) {\n            self.visibleSectionHeaders[indexPath] = nil;\n        }\n    }\n}\n\n#pragma mark - <UICollectionViewDelegate>\n\n- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath\n{\n    FSCalendarMonthPosition monthPosition = [self.calculator monthPositionForIndexPath:indexPath];\n    if (self.placeholderType == FSCalendarPlaceholderTypeNone && monthPosition != FSCalendarMonthPositionCurrent) {\n        return NO;\n    }\n    NSDate *date = [self.calculator dateForIndexPath:indexPath];\n    return [self isDateInRange:date] && (![self.delegateProxy respondsToSelector:@selector(calendar:shouldSelectDate:atMonthPosition:)] || [self.delegateProxy calendar:self shouldSelectDate:date atMonthPosition:monthPosition]);\n}\n\n- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath\n{\n    NSDate *selectedDate = [self.calculator dateForIndexPath:indexPath];\n    FSCalendarMonthPosition monthPosition = [self.calculator monthPositionForIndexPath:indexPath];\n    FSCalendarCell *cell;\n    if (monthPosition == FSCalendarMonthPositionCurrent) {\n        cell = (FSCalendarCell *)[collectionView cellForItemAtIndexPath:indexPath];\n    } else {\n        cell = [self cellForDate:selectedDate atMonthPosition:FSCalendarMonthPositionCurrent];\n        NSIndexPath *indexPath = [collectionView indexPathForCell:cell];\n        if (indexPath) {\n            [collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];\n        }\n    }\n    if (![_selectedDates containsObject:selectedDate]) {\n        cell.selected = YES;\n        [cell performSelecting];\n    }\n    [self enqueueSelectedDate:selectedDate];\n    [self.delegateProxy calendar:self didSelectDate:selectedDate atMonthPosition:monthPosition];\n    [self selectCounterpartDate:selectedDate];\n}\n\n- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath\n{\n    FSCalendarMonthPosition monthPosition = [self.calculator monthPositionForIndexPath:indexPath];\n    if (self.placeholderType == FSCalendarPlaceholderTypeNone && monthPosition != FSCalendarMonthPositionCurrent) {\n        return NO;\n    }\n    NSDate *date = [self.calculator dateForIndexPath:indexPath];\n    return [self isDateInRange:date] && (![self.delegateProxy respondsToSelector:@selector(calendar:shouldDeselectDate:atMonthPosition:)]||[self.delegateProxy calendar:self shouldDeselectDate:date atMonthPosition:monthPosition]);\n}\n\n- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath\n{\n    NSDate *selectedDate = [self.calculator dateForIndexPath:indexPath];\n    FSCalendarMonthPosition monthPosition = [self.calculator monthPositionForIndexPath:indexPath];\n    FSCalendarCell *cell;\n    if (monthPosition == FSCalendarMonthPositionCurrent) {\n        cell = (FSCalendarCell *)[collectionView cellForItemAtIndexPath:indexPath];\n    } else {\n        cell = [self cellForDate:selectedDate atMonthPosition:FSCalendarMonthPositionCurrent];\n        NSIndexPath *indexPath = [collectionView indexPathForCell:cell];\n        if (indexPath) {\n            [collectionView deselectItemAtIndexPath:indexPath animated:NO];\n        }\n    }\n    cell.selected = NO;\n    [cell configureAppearance];\n    \n    [_selectedDates removeObject:selectedDate];\n    [self.delegateProxy calendar:self didDeselectDate:selectedDate atMonthPosition:monthPosition];\n    [self deselectCounterpartDate:selectedDate];\n    \n}\n\n- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath\n{\n    if (![cell isKindOfClass:[FSCalendarCell class]]) {\n        return;\n    }\n    NSDate *date = [self.calculator dateForIndexPath:indexPath];\n    FSCalendarMonthPosition monthPosition = [self.calculator monthPositionForIndexPath:indexPath];\n    [self.delegateProxy calendar:self willDisplayCell:(FSCalendarCell *)cell forDate:date atMonthPosition:monthPosition];\n}\n\n- (void)collectionViewDidFinishLayoutSubviews:(FSCalendarCollectionView *)collectionView\n{\n    [self executePendingOperationsIfNeeded];\n}\n\n#pragma mark - <UIScrollViewDelegate>\n\n- (void)scrollViewDidScroll:(UIScrollView *)scrollView\n{\n    if (!self.window) return;\n    if (self.floatingMode && _collectionView.indexPathsForVisibleItems.count) {\n        // Do nothing on bouncing\n        if (_collectionView.contentOffset.y < 0 || _collectionView.contentOffset.y > _collectionView.contentSize.height-_collectionView.fs_height) {\n            return;\n        }\n        NSDate *currentPage = _currentPage;\n        CGPoint significantPoint = CGPointMake(_collectionView.fs_width*0.5,MIN(self.collectionViewLayout.estimatedItemSize.height*2.75, _collectionView.fs_height*0.5)+_collectionView.contentOffset.y);\n        NSIndexPath *significantIndexPath = [_collectionView indexPathForItemAtPoint:significantPoint];\n        if (significantIndexPath) {\n            currentPage = [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:significantIndexPath.section toDate:[self.gregorian fs_firstDayOfMonth:_minimumDate] options:0];\n        } else {\n            FSCalendarStickyHeader *significantHeader = [self.visibleStickyHeaders filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(FSCalendarStickyHeader * _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {\n                return CGRectContainsPoint(evaluatedObject.frame, significantPoint);\n            }]].firstObject;\n            if (significantHeader) {\n                currentPage = significantHeader.month;\n            }\n        }\n        \n        if (![self.gregorian isDate:currentPage equalToDate:_currentPage toUnitGranularity:NSCalendarUnitMonth]) {\n            [self willChangeValueForKey:@\"currentPage\"];\n            _currentPage = currentPage;\n            [self.delegateProxy calendarCurrentPageDidChange:self];\n            [self didChangeValueForKey:@\"currentPage\"];\n        }\n        \n    } else if (self.hasValidateVisibleLayout) {\n        CGFloat scrollOffset = 0;\n        switch (_collectionViewLayout.scrollDirection) {\n            case UICollectionViewScrollDirectionHorizontal: {\n                scrollOffset = scrollView.contentOffset.x/scrollView.fs_width;\n                break;\n            }\n            case UICollectionViewScrollDirectionVertical: {\n                scrollOffset = scrollView.contentOffset.y/scrollView.fs_height;\n                break;\n            }\n        }\n        _calendarHeaderView.scrollOffset = scrollOffset;\n    }\n}\n\n- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset\n{\n    if (!_pagingEnabled || !_scrollEnabled) {\n        return;\n    }\n    CGFloat targetOffset = 0, contentSize = 0;\n    switch (_collectionViewLayout.scrollDirection) {\n        case UICollectionViewScrollDirectionHorizontal: {\n            targetOffset = targetContentOffset->x;\n            contentSize = scrollView.fs_width;\n            break;\n        }\n        case UICollectionViewScrollDirectionVertical: {\n            targetOffset = targetContentOffset->y;\n            contentSize = scrollView.fs_height;\n            break;\n        }\n    }\n    \n    NSInteger sections = lrint(targetOffset/contentSize);\n    NSDate *targetPage = nil;\n    switch (_scope) {\n        case FSCalendarScopeMonth: {\n            NSDate *minimumPage = [self.gregorian fs_firstDayOfMonth:_minimumDate];\n            targetPage = [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:sections toDate:minimumPage options:0];\n            break;\n        }\n        case FSCalendarScopeWeek: {\n            NSDate *minimumPage = [self.gregorian fs_firstDayOfWeek:_minimumDate];\n            targetPage = [self.gregorian dateByAddingUnit:NSCalendarUnitWeekOfYear value:sections toDate:minimumPage options:0];\n            break;\n        }\n    }\n    BOOL shouldTriggerPageChange = [self isDateInDifferentPage:targetPage];\n    if (shouldTriggerPageChange) {\n        NSDate *lastPage = _currentPage;\n        [self willChangeValueForKey:@\"currentPage\"];\n        _currentPage = targetPage;\n        [self.delegateProxy calendarCurrentPageDidChange:self];\n        if (_placeholderType != FSCalendarPlaceholderTypeFillSixRows) {\n            [self.transitionCoordinator performBoundingRectTransitionFromMonth:lastPage toMonth:_currentPage duration:0.25];\n        }\n        [self didChangeValueForKey:@\"currentPage\"];\n    }\n    \n}\n\n#pragma mark - <UIGestureRecognizerDelegate>\n\n- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer\n{\n    return YES;\n}\n\n#pragma mark - Notification\n\n- (void)orientationDidChange:(NSNotification *)notification\n{\n    self.orientation = self.currentCalendarOrientation;\n}\n\n#pragma mark - Properties\n\n- (void)setScrollDirection:(FSCalendarScrollDirection)scrollDirection\n{\n    if (_scrollDirection != scrollDirection) {\n        _scrollDirection = scrollDirection;\n        \n        if (self.floatingMode) return;\n        \n        switch (_scope) {\n            case FSCalendarScopeMonth: {\n                _collectionViewLayout.scrollDirection = (UICollectionViewScrollDirection)scrollDirection;\n                _calendarHeaderView.scrollDirection = _collectionViewLayout.scrollDirection;\n                if (self.hasValidateVisibleLayout) {\n                    [_collectionView reloadData];\n                    [_calendarHeaderView reloadData];\n                }\n                _needsAdjustingViewFrame = YES;\n                [self setNeedsLayout];\n                break;\n            }\n            case FSCalendarScopeWeek: {\n                break;\n            }\n        }\n    }\n}\n\n+ (BOOL)automaticallyNotifiesObserversOfScope\n{\n    return NO;\n}\n\n- (void)setScope:(FSCalendarScope)scope\n{\n    [self setScope:scope animated:NO];\n}\n\n- (void)setFirstWeekday:(NSUInteger)firstWeekday\n{\n    if (_firstWeekday != firstWeekday) {\n        _firstWeekday = firstWeekday;\n        _needsRequestingBoundingDates = YES;\n        [self invalidateDateTools];\n        [self invalidateHeaders];\n        [self.collectionView reloadData];\n        [self configureAppearance];\n    }\n}\n\n- (void)setToday:(NSDate *)today\n{\n    if (!today) {\n        _today = nil;\n    } else {\n        FSCalendarAssertDateInBounds(today,self.gregorian,self.minimumDate,self.maximumDate);\n        [self updateToday];\n    }\n    if (self.hasValidateVisibleLayout) {\n        [self.visibleCells makeObjectsPerformSelector:@selector(setDateIsToday:) withObject:nil];\n        if (today) [[_collectionView cellForItemAtIndexPath:[self.calculator indexPathForDate:today]] setValue:@YES forKey:@\"dateIsToday\"];\n        [self.visibleCells makeObjectsPerformSelector:@selector(configureAppearance)];\n    }\n}\n\n- (void)setCurrentPage:(NSDate *)currentPage\n{\n    [self setCurrentPage:currentPage animated:NO];\n}\n\n- (void)setCurrentPage:(NSDate *)currentPage animated:(BOOL)animated\n{\n    [self requestBoundingDatesIfNecessary];\n    if (self.floatingMode || [self isDateInDifferentPage:currentPage]) {\n        currentPage = [self.gregorian startOfDayForDate:currentPage];\n        if ([self isPageInRange:currentPage]) {\n            [self scrollToPageForDate:currentPage animated:animated];\n        }\n    }\n}\n\n- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier\n{\n    if (!identifier.length) {\n        [NSException raise:FSCalendarInvalidArgumentsExceptionName format:@\"This identifier must not be nil and must not be an empty string.\"];\n    }\n    if (![cellClass isSubclassOfClass:[FSCalendarCell class]]) {\n        [NSException raise:@\"The cell class must be a subclass of FSCalendarCell.\" format:@\"\"];\n    }\n    if ([identifier isEqualToString:FSCalendarBlankCellReuseIdentifier]) {\n        [NSException raise:FSCalendarInvalidArgumentsExceptionName format:@\"Do not use %@ as the cell reuse identifier.\", identifier];\n    }\n    [self.collectionView registerClass:cellClass forCellWithReuseIdentifier:identifier];\n\n}\n\n- (FSCalendarCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position;\n{\n    if (!identifier.length) {\n        [NSException raise:FSCalendarInvalidArgumentsExceptionName format:@\"This identifier must not be nil and must not be an empty string.\"];\n    }\n    NSIndexPath *indexPath = [self.calculator indexPathForDate:date atMonthPosition:position];\n    if (!indexPath) {\n        [NSException raise:FSCalendarInvalidArgumentsExceptionName format:@\"Attempting to dequeue a cell with invalid date.\"];\n    }\n    FSCalendarCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];\n    return cell;\n}\n\n- (nullable FSCalendarCell *)cellForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position\n{\n    NSIndexPath *indexPath = [self.calculator indexPathForDate:date atMonthPosition:position];\n    return (FSCalendarCell *)[self.collectionView cellForItemAtIndexPath:indexPath];\n}\n\n- (NSDate *)dateForCell:(FSCalendarCell *)cell\n{\n    NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];\n    return [self.calculator dateForIndexPath:indexPath];\n}\n\n- (FSCalendarMonthPosition)monthPositionForCell:(FSCalendarCell *)cell\n{\n    NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];\n    return [self.calculator monthPositionForIndexPath:indexPath];\n}\n\n- (NSArray<FSCalendarCell *> *)visibleCells\n{\n    return [self.collectionView.visibleCells filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id  _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {\n        return [evaluatedObject isKindOfClass:[FSCalendarCell class]];\n    }]];\n}\n\n- (CGRect)frameForDate:(NSDate *)date\n{\n    if (!self.superview) {\n        return CGRectZero;\n    }\n    CGRect frame = [_collectionViewLayout layoutAttributesForItemAtIndexPath:[self.calculator indexPathForDate:date]].frame;\n    frame = [self.superview convertRect:frame fromView:_collectionView];\n    return frame;\n}\n\n- (void)setHeaderHeight:(CGFloat)headerHeight\n{\n    if (_headerHeight != headerHeight) {\n        _headerHeight = headerHeight;\n        _needsAdjustingViewFrame = YES;\n        [self setNeedsLayout];\n    }\n}\n\n- (void)setWeekdayHeight:(CGFloat)weekdayHeight\n{\n    if (_weekdayHeight != weekdayHeight) {\n        _weekdayHeight = weekdayHeight;\n        _needsAdjustingViewFrame = YES;\n        [self setNeedsLayout];\n    }\n}\n\n- (void)setLocale:(NSLocale *)locale\n{\n    if (![_locale isEqual:locale]) {\n        _locale = locale.copy;\n        [self invalidateDateTools];\n        [self configureAppearance];\n        if (self.hasValidateVisibleLayout) {\n            [self invalidateHeaders];\n        }\n    }\n}\n\n- (void)setAllowsMultipleSelection:(BOOL)allowsMultipleSelection\n{\n    _collectionView.allowsMultipleSelection = allowsMultipleSelection;\n}\n\n- (BOOL)allowsMultipleSelection\n{\n    return _collectionView.allowsMultipleSelection;\n}\n\n- (void)setAllowsSelection:(BOOL)allowsSelection\n{\n    _collectionView.allowsSelection = allowsSelection;\n}\n\n- (BOOL)allowsSelection\n{\n    return _collectionView.allowsSelection;\n}\n\n- (void)setPagingEnabled:(BOOL)pagingEnabled\n{\n    if (_pagingEnabled != pagingEnabled) {\n        _pagingEnabled = pagingEnabled;\n        \n        [self invalidateLayout];\n    }\n}\n\n- (void)setScrollEnabled:(BOOL)scrollEnabled\n{\n    if (_scrollEnabled != scrollEnabled) {\n        _scrollEnabled = scrollEnabled;\n        \n        _collectionView.scrollEnabled = scrollEnabled;\n        _calendarHeaderView.scrollEnabled = scrollEnabled;\n        \n        [self invalidateLayout];\n    }\n}\n\n- (void)setOrientation:(FSCalendarOrientation)orientation\n{\n    if (_orientation != orientation) {\n        _orientation = orientation;\n        \n        _needsAdjustingViewFrame = YES;\n        _preferredWeekdayHeight = FSCalendarAutomaticDimension;\n        _preferredRowHeight = FSCalendarAutomaticDimension;\n        _preferredHeaderHeight = FSCalendarAutomaticDimension;\n        [self setNeedsLayout];\n    }\n}\n\n- (NSDate *)selectedDate\n{\n    return _selectedDates.lastObject;\n}\n\n- (NSArray *)selectedDates\n{\n    return [NSArray arrayWithArray:_selectedDates];\n}\n\n- (CGFloat)preferredHeaderHeight\n{\n    if (_headerHeight == FSCalendarAutomaticDimension) {\n        if (_preferredWeekdayHeight == FSCalendarAutomaticDimension) {\n            if (!self.floatingMode) {\n                CGFloat DIYider = FSCalendarStandardMonthlyPageHeight;\n                CGFloat contentHeight = self.transitionCoordinator.cachedMonthSize.height;\n                _preferredHeaderHeight = (FSCalendarStandardHeaderHeight/DIYider)*contentHeight;\n                _preferredHeaderHeight -= (_preferredHeaderHeight-FSCalendarStandardHeaderHeight)*0.5;\n            } else {\n                _preferredHeaderHeight = FSCalendarStandardHeaderHeight*MAX(1, FSCalendarDeviceIsIPad*1.5);\n            }\n        }\n        return _preferredHeaderHeight;\n    }\n    return _headerHeight;\n}\n\n- (CGFloat)preferredWeekdayHeight\n{\n    if (_weekdayHeight == FSCalendarAutomaticDimension) {\n        if (_preferredWeekdayHeight == FSCalendarAutomaticDimension) {\n            if (!self.floatingMode) {\n                CGFloat DIYider = FSCalendarStandardMonthlyPageHeight;\n                CGFloat contentHeight = self.transitionCoordinator.cachedMonthSize.height;\n                _preferredWeekdayHeight = (FSCalendarStandardWeekdayHeight/DIYider)*contentHeight;\n            } else {\n                _preferredWeekdayHeight = FSCalendarStandardWeekdayHeight*MAX(1, FSCalendarDeviceIsIPad*1.5);\n            }\n        }\n        return _preferredWeekdayHeight;\n    }\n    return _weekdayHeight;\n}\n\n- (CGFloat)preferredRowHeight\n{\n    if (_preferredRowHeight == FSCalendarAutomaticDimension) {\n        CGFloat headerHeight = self.preferredHeaderHeight;\n        CGFloat weekdayHeight = self.preferredWeekdayHeight;\n        CGFloat contentHeight = self.transitionCoordinator.cachedMonthSize.height-headerHeight-weekdayHeight;\n        CGFloat padding = 5;\n        if (!self.floatingMode) {\n            _preferredRowHeight = (contentHeight-padding*2)/6.0;\n        } else {\n            _preferredRowHeight = _rowHeight;\n        }\n    }\n    return _preferredRowHeight;\n}\n\n- (BOOL)floatingMode\n{\n    return _scope == FSCalendarScopeMonth && _scrollEnabled && !_pagingEnabled;\n}\n\n- (UIPanGestureRecognizer *)scopeGesture\n{\n    if (!_scopeGesture) {\n        UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self.transitionCoordinator action:@selector(handleScopeGesture:)];\n        panGesture.delegate = self.transitionCoordinator;\n        panGesture.minimumNumberOfTouches = 1;\n        panGesture.maximumNumberOfTouches = 2;\n        panGesture.enabled = NO;\n        [self.daysContainer addGestureRecognizer:panGesture];\n        _scopeGesture = panGesture;\n    }\n    return _scopeGesture;\n}\n\n- (UILongPressGestureRecognizer *)swipeToChooseGesture\n{\n    if (!_swipeToChooseGesture) {\n        UILongPressGestureRecognizer *pressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeToChoose:)];\n        pressGesture.enabled = NO;\n        pressGesture.numberOfTapsRequired = 0;\n        pressGesture.numberOfTouchesRequired = 1;\n        pressGesture.minimumPressDuration = 0.7;\n        [self.daysContainer addGestureRecognizer:pressGesture];\n        [self.collectionView.panGestureRecognizer requireGestureRecognizerToFail:pressGesture];\n        _swipeToChooseGesture = pressGesture;\n    }\n    return _swipeToChooseGesture;\n}\n\n- (void)setDataSource:(id<FSCalendarDataSource>)dataSource\n{\n    self.dataSourceProxy.delegation = dataSource;\n}\n\n- (id<FSCalendarDataSource>)dataSource\n{\n    return self.dataSourceProxy.delegation;\n}\n\n- (void)setDelegate:(id<FSCalendarDelegate>)delegate\n{\n    self.delegateProxy.delegation = delegate;\n}\n\n- (id<FSCalendarDelegate>)delegate\n{\n    return self.delegateProxy.delegation;\n}\n\n#pragma mark - Public methods\n\n- (void)reloadData\n{\n    _needsRequestingBoundingDates = YES;\n    if ([self requestBoundingDatesIfNecessary] || !self.collectionView.indexPathsForVisibleItems.count) {\n        [self invalidateHeaders];\n    }\n    [self.collectionView reloadData];\n}\n\n- (void)setScope:(FSCalendarScope)scope animated:(BOOL)animated\n{\n    if (self.floatingMode) return;\n    if (self.transitionCoordinator.state != FSCalendarTransitionStateIdle) return;\n    \n    [self performEnsuringValidLayout:^{\n        [self.transitionCoordinator performScopeTransitionFromScope:self.scope toScope:scope animated:animated];\n    }];\n}\n\n- (void)setPlaceholderType:(FSCalendarPlaceholderType)placeholderType\n{\n    _placeholderType = placeholderType;\n    if (self.hasValidateVisibleLayout) {\n        _preferredRowHeight = FSCalendarAutomaticDimension;\n        [_collectionView reloadData];\n    }\n    [self adjustBoundingRectIfNecessary];\n}\n\n- (void)setAdjustsBoundingRectWhenChangingMonths:(BOOL)adjustsBoundingRectWhenChangingMonths\n{\n    _adjustsBoundingRectWhenChangingMonths = adjustsBoundingRectWhenChangingMonths;\n    [self adjustBoundingRectIfNecessary];\n}\n\n- (void)selectDate:(NSDate *)date\n{\n    [self selectDate:date scrollToDate:YES];\n}\n\n- (void)selectDate:(NSDate *)date scrollToDate:(BOOL)scrollToDate\n{\n    [self selectDate:date scrollToDate:scrollToDate atMonthPosition:FSCalendarMonthPositionCurrent];\n}\n\n- (void)deselectDate:(NSDate *)date\n{\n    date = [self.gregorian startOfDayForDate:date];\n    if (![_selectedDates containsObject:date]) {\n        return;\n    }\n    [_selectedDates removeObject:date];\n    [self deselectCounterpartDate:date];\n    NSIndexPath *indexPath = [self.calculator indexPathForDate:date];\n    if ([_collectionView.indexPathsForSelectedItems containsObject:indexPath]) {\n        [_collectionView deselectItemAtIndexPath:indexPath animated:YES];\n        FSCalendarCell *cell = (FSCalendarCell *)[_collectionView cellForItemAtIndexPath:indexPath];\n        cell.selected = NO;\n        [cell configureAppearance];\n    }\n}\n\n- (void)selectDate:(NSDate *)date scrollToDate:(BOOL)scrollToDate atMonthPosition:(FSCalendarMonthPosition)monthPosition\n{\n    if (!self.allowsSelection || !date) return;\n        \n    [self requestBoundingDatesIfNecessary];\n    \n    FSCalendarAssertDateInBounds(date,self.gregorian,self.minimumDate,self.maximumDate);\n    \n    NSDate *targetDate = [self.gregorian startOfDayForDate:date];\n    NSIndexPath *targetIndexPath = [self.calculator indexPathForDate:targetDate];\n    \n    BOOL shouldSelect = YES;\n    // 跨月份点击\n    if (monthPosition==FSCalendarMonthPositionPrevious||monthPosition==FSCalendarMonthPositionNext) {\n        if (self.allowsMultipleSelection) {\n            if ([self isDateSelected:targetDate]) {\n                BOOL shouldDeselect = ![self.delegateProxy respondsToSelector:@selector(calendar:shouldDeselectDate:atMonthPosition:)] || [self.delegateProxy calendar:self shouldDeselectDate:targetDate atMonthPosition:monthPosition];\n                if (!shouldDeselect) {\n                    return;\n                }\n            } else {\n                shouldSelect &= (![self.delegateProxy respondsToSelector:@selector(calendar:shouldSelectDate:atMonthPosition:)] || [self.delegateProxy calendar:self shouldSelectDate:targetDate atMonthPosition:monthPosition]);\n                if (!shouldSelect) {\n                    return;\n                }\n                [_collectionView selectItemAtIndexPath:targetIndexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];\n                [self collectionView:_collectionView didSelectItemAtIndexPath:targetIndexPath];\n            }\n        } else {\n            shouldSelect &= (![self.delegateProxy respondsToSelector:@selector(calendar:shouldSelectDate:atMonthPosition:)] || [self.delegateProxy calendar:self shouldSelectDate:targetDate atMonthPosition:monthPosition]);\n            if (shouldSelect) {\n                if ([self isDateSelected:targetDate]) {\n                    [self.delegateProxy calendar:self didSelectDate:targetDate atMonthPosition:monthPosition];\n                } else {\n                    NSDate *selectedDate = self.selectedDate;\n                    if (selectedDate) {\n                        [self deselectDate:selectedDate];\n                    }\n                    [_collectionView selectItemAtIndexPath:targetIndexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];\n                    [self collectionView:_collectionView didSelectItemAtIndexPath:targetIndexPath];\n                }\n            } else {\n                return;\n            }\n        }\n        \n    } else if (![self isDateSelected:targetDate]){\n        if (self.selectedDate && !self.allowsMultipleSelection) {\n            [self deselectDate:self.selectedDate];\n        }\n        [_collectionView selectItemAtIndexPath:targetIndexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];\n        FSCalendarCell *cell = (FSCalendarCell *)[_collectionView cellForItemAtIndexPath:targetIndexPath];\n        [cell performSelecting];\n        [self enqueueSelectedDate:targetDate];\n        [self selectCounterpartDate:targetDate];\n        \n    } else if (![_collectionView.indexPathsForSelectedItems containsObject:targetIndexPath]) {\n        [_collectionView selectItemAtIndexPath:targetIndexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];\n    }\n    \n    if (scrollToDate) {\n        if (!shouldSelect) {\n            return;\n        }\n        [self scrollToPageForDate:targetDate animated:YES];\n    }\n}\n\n- (void)handleScopeGesture:(UIPanGestureRecognizer *)sender\n{\n    if (self.floatingMode) return;\n    [self.transitionCoordinator handleScopeGesture:sender];\n}\n\n#pragma mark - Private methods\n\n- (void)scrollToDate:(NSDate *)date\n{\n    [self scrollToDate:date animated:NO];\n}\n\n- (void)scrollToDate:(NSDate *)date animated:(BOOL)animated\n{\n    if (!_minimumDate || !_maximumDate) {\n        return;\n    }\n    animated &= _scrollEnabled; // No animation if _scrollEnabled == NO;\n    \n    date = [self.calculator safeDateForDate:date];\n    NSInteger scrollOffset = [self.calculator indexPathForDate:date atMonthPosition:FSCalendarMonthPositionCurrent].section;\n    \n    if (!self.floatingMode) {\n        switch (_collectionViewLayout.scrollDirection) {\n            case UICollectionViewScrollDirectionVertical: {\n                [_collectionView setContentOffset:CGPointMake(0, scrollOffset * _collectionView.fs_height) animated:animated];\n                break;\n            }\n            case UICollectionViewScrollDirectionHorizontal: {\n                [_collectionView setContentOffset:CGPointMake(scrollOffset * _collectionView.fs_width, 0) animated:animated];\n                break;\n            }\n        }\n        \n    } else if (self.hasValidateVisibleLayout) {\n        [_collectionViewLayout layoutAttributesForElementsInRect:_collectionView.bounds];\n        CGRect headerFrame = [_collectionViewLayout layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:scrollOffset]].frame;\n        CGPoint targetOffset = CGPointMake(0, MIN(headerFrame.origin.y,MAX(0,_collectionViewLayout.collectionViewContentSize.height-_collectionView.fs_bottom)));\n        [_collectionView setContentOffset:targetOffset animated:animated];\n    }\n    if (!animated) {\n        self.calendarHeaderView.scrollOffset = scrollOffset;\n    }\n}\n\n- (void)scrollToPageForDate:(NSDate *)date animated:(BOOL)animated\n{\n    if (!date) return;\n    if (![self isDateInRange:date]) {\n        date = [self.calculator safeDateForDate:date];\n        if (!date) return;\n    }\n    \n    if (!self.floatingMode) {\n        if ([self isDateInDifferentPage:date]) {\n            [self willChangeValueForKey:@\"currentPage\"];\n            NSDate *lastPage = _currentPage;\n            switch (self.transitionCoordinator.representingScope) {\n                case FSCalendarScopeMonth: {\n                    _currentPage = [self.gregorian fs_firstDayOfMonth:date];\n                    break;\n                }\n                case FSCalendarScopeWeek: {\n                    _currentPage = [self.gregorian fs_firstDayOfWeek:date];\n                    break;\n                }\n            }\n            if (self.hasValidateVisibleLayout) {\n                [self.delegateProxy calendarCurrentPageDidChange:self];\n                if (_placeholderType != FSCalendarPlaceholderTypeFillSixRows && self.transitionCoordinator.state == FSCalendarTransitionStateIdle) {\n                    [self.transitionCoordinator performBoundingRectTransitionFromMonth:lastPage toMonth:_currentPage duration:0.33];\n                }\n            }\n            [self didChangeValueForKey:@\"currentPage\"];\n        }\n        [self scrollToDate:_currentPage animated:animated];\n    } else {\n        [self scrollToDate:[self.gregorian fs_firstDayOfMonth:date] animated:animated];\n    }\n}\n\n\n- (BOOL)isDateInRange:(NSDate *)date\n{\n    BOOL flag = YES;\n    flag &= [self.gregorian components:NSCalendarUnitDay fromDate:date toDate:self.minimumDate options:0].day <= 0;\n    flag &= [self.gregorian components:NSCalendarUnitDay fromDate:date toDate:self.maximumDate options:0].day >= 0;;\n    return flag;\n}\n\n- (BOOL)isPageInRange:(NSDate *)page\n{\n    BOOL flag = YES;\n    switch (self.transitionCoordinator.representingScope) {\n        case FSCalendarScopeMonth: {\n            NSDateComponents *c1 = [self.gregorian components:NSCalendarUnitDay fromDate:[self.gregorian fs_firstDayOfMonth:self.minimumDate] toDate:page options:0];\n            flag &= (c1.day>=0);\n            if (!flag) break;\n            NSDateComponents *c2 = [self.gregorian components:NSCalendarUnitDay fromDate:page toDate:[self.gregorian fs_lastDayOfMonth:self.maximumDate] options:0];\n            flag &= (c2.day>=0);\n            break;\n        }\n        case FSCalendarScopeWeek: {\n            NSDateComponents *c1 = [self.gregorian components:NSCalendarUnitDay fromDate:[self.gregorian fs_firstDayOfWeek:self.minimumDate] toDate:page options:0];\n            flag &= (c1.day>=0);\n            if (!flag) break;\n            NSDateComponents *c2 = [self.gregorian components:NSCalendarUnitDay fromDate:page toDate:[self.gregorian fs_lastDayOfWeek:self.maximumDate] options:0];\n            flag &= (c2.day>=0);\n            break;\n        }\n        default:\n            break;\n    }\n    return flag;\n}\n\n- (BOOL)isDateSelected:(NSDate *)date\n{\n    return [_selectedDates containsObject:date] || [_collectionView.indexPathsForSelectedItems containsObject:[self.calculator indexPathForDate:date]];\n}\n\n- (BOOL)isDateInDifferentPage:(NSDate *)date\n{\n    if (self.floatingMode) {\n        return ![self.gregorian isDate:date equalToDate:_currentPage toUnitGranularity:NSCalendarUnitMonth];\n    }\n    switch (_scope) {\n        case FSCalendarScopeMonth:\n            return ![self.gregorian isDate:date equalToDate:_currentPage toUnitGranularity:NSCalendarUnitMonth];\n        case FSCalendarScopeWeek:\n            return ![self.gregorian isDate:date equalToDate:_currentPage toUnitGranularity:NSCalendarUnitWeekOfYear];\n    }\n}\n\n- (BOOL)hasValidateVisibleLayout\n{\n#if TARGET_INTERFACE_BUILDER\n    return YES;\n#else\n    return self.superview  && !CGRectIsEmpty(_collectionView.frame) && !CGSizeEqualToSize(_collectionViewLayout.collectionViewContentSize, CGSizeZero);\n#endif\n}\n\n- (void)invalidateDateTools\n{\n    _gregorian.locale = _locale;\n    _gregorian.timeZone = _timeZone;\n    _gregorian.firstWeekday = _firstWeekday;\n    _formatter.calendar = _gregorian;\n    _formatter.timeZone = _timeZone;\n    _formatter.locale = _locale;\n    \n    [self updateToday];\n}\n\n- (void)updateToday\n{\n    NSDateComponents *dateComponents = [self.gregorian components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:[NSDate date]];\n    dateComponents.hour = 0;\n    dateComponents.minute = 0;\n    dateComponents.second = 0;\n    dateComponents.timeZone = self.timeZone;\n    \n    _today = [self.gregorian dateFromComponents:dateComponents];\n}\n\n- (void)invalidateLayout\n{\n    if (!self.floatingMode) {\n        \n        if (!_calendarHeaderView) {\n            \n            FSCalendarHeaderView *headerView = [[FSCalendarHeaderView alloc] initWithFrame:CGRectZero];\n            headerView.calendar = self;\n            headerView.scrollEnabled = _scrollEnabled;\n            [_contentView addSubview:headerView];\n            self.calendarHeaderView = headerView;\n            \n        }\n        \n        if (!_calendarWeekdayView) {\n            FSCalendarWeekdayView *calendarWeekdayView = [[FSCalendarWeekdayView alloc] initWithFrame:CGRectZero];\n            calendarWeekdayView.calendar = self;\n            [_contentView addSubview:calendarWeekdayView];\n            _calendarWeekdayView = calendarWeekdayView;\n        }\n        \n        if (_scrollEnabled) {\n            if (!_deliver) {\n                FSCalendarHeaderTouchDeliver *deliver = [[FSCalendarHeaderTouchDeliver alloc] initWithFrame:CGRectZero];\n                deliver.header = _calendarHeaderView;\n                deliver.calendar = self;\n                [_contentView addSubview:deliver];\n                self.deliver = deliver;\n            }\n        } else if (_deliver) {\n            [_deliver removeFromSuperview];\n        }\n        \n        _collectionView.pagingEnabled = YES;\n        _collectionViewLayout.scrollDirection = (UICollectionViewScrollDirection)self.scrollDirection;\n        \n    } else {\n        \n        [self.calendarHeaderView removeFromSuperview];\n        [self.deliver removeFromSuperview];\n        [self.calendarWeekdayView removeFromSuperview];\n        \n        _collectionView.pagingEnabled = NO;\n        _collectionViewLayout.scrollDirection = UICollectionViewScrollDirectionVertical;\n        \n    }\n    \n    _preferredHeaderHeight = FSCalendarAutomaticDimension;\n    _preferredWeekdayHeight = FSCalendarAutomaticDimension;\n    _preferredRowHeight = FSCalendarAutomaticDimension;\n    _needsAdjustingViewFrame = YES;\n    [self setNeedsLayout];\n}\n\n- (void)invalidateHeaders\n{\n    [self.calendarHeaderView.collectionView reloadData];\n    [self.visibleStickyHeaders makeObjectsPerformSelector:@selector(configureAppearance)];\n}\n\n- (void)invalidateAppearanceForCell:(FSCalendarCell *)cell forDate:(NSDate *)date\n{\n#define FSCalendarInvalidateCellAppearance(SEL1,SEL2) \\\n    cell.SEL1 = [self.delegateProxy calendar:self appearance:self.appearance SEL2:date];\n    \n#define FSCalendarInvalidateCellAppearanceWithDefault(SEL1,SEL2,DEFAULT) \\\n    if ([self.delegateProxy respondsToSelector:@selector(calendar:appearance:SEL2:)]) { \\\n        cell.SEL1 = [self.delegateProxy calendar:self appearance:self.appearance SEL2:date]; \\\n    } else { \\\n        cell.SEL1 = DEFAULT; \\\n    }\n    \n    FSCalendarInvalidateCellAppearance(preferredFillDefaultColor,fillDefaultColorForDate);\n    FSCalendarInvalidateCellAppearance(preferredFillSelectionColor,fillSelectionColorForDate);\n    FSCalendarInvalidateCellAppearance(preferredTitleDefaultColor,titleDefaultColorForDate);\n    FSCalendarInvalidateCellAppearance(preferredTitleSelectionColor,titleSelectionColorForDate);\n\n    FSCalendarInvalidateCellAppearanceWithDefault(preferredTitleOffset,titleOffsetForDate,CGPointInfinity);\n    if (cell.subtitle) {\n        FSCalendarInvalidateCellAppearance(preferredSubtitleDefaultColor,subtitleDefaultColorForDate);\n        FSCalendarInvalidateCellAppearance(preferredSubtitleSelectionColor,subtitleSelectionColorForDate);\n        FSCalendarInvalidateCellAppearanceWithDefault(preferredSubtitleOffset,subtitleOffsetForDate,CGPointInfinity);\n    }\n    if (cell.numberOfEvents) {\n        FSCalendarInvalidateCellAppearance(preferredEventDefaultColors,eventDefaultColorsForDate);\n        FSCalendarInvalidateCellAppearance(preferredEventSelectionColors,eventSelectionColorsForDate);\n        FSCalendarInvalidateCellAppearanceWithDefault(preferredEventOffset,eventOffsetForDate,CGPointInfinity);\n    }\n    FSCalendarInvalidateCellAppearance(preferredBorderDefaultColor,borderDefaultColorForDate);\n    FSCalendarInvalidateCellAppearance(preferredBorderSelectionColor,borderSelectionColorForDate);\n    FSCalendarInvalidateCellAppearanceWithDefault(preferredBorderRadius,borderRadiusForDate,-1);\n\n    if (cell.image) {\n        FSCalendarInvalidateCellAppearanceWithDefault(preferredImageOffset,imageOffsetForDate,CGPointInfinity);\n    }\n    \n#undef FSCalendarInvalidateCellAppearance\n#undef FSCalendarInvalidateCellAppearanceWithDefault\n    \n}\n\n- (void)reloadDataForCell:(FSCalendarCell *)cell atIndexPath:(NSIndexPath *)indexPath\n{\n    cell.calendar = self;\n    NSDate *date = [self.calculator dateForIndexPath:indexPath];\n    cell.image = [self.dataSourceProxy calendar:self imageForDate:date];\n    cell.numberOfEvents = [self.dataSourceProxy calendar:self numberOfEventsForDate:date];\n    cell.titleLabel.text = [self.dataSourceProxy calendar:self titleForDate:date] ?: @([self.gregorian component:NSCalendarUnitDay fromDate:date]).stringValue;\n    cell.subtitle  = [self.dataSourceProxy calendar:self subtitleForDate:date];\n    cell.selected = [_selectedDates containsObject:date];\n    cell.dateIsToday = self.today?[self.gregorian isDate:date inSameDayAsDate:self.today]:NO;\n    cell.weekend = [self.gregorian isDateInWeekend:date];\n    cell.monthPosition = [self.calculator monthPositionForIndexPath:indexPath];\n    switch (self.transitionCoordinator.representingScope) {\n        case FSCalendarScopeMonth: {\n            cell.placeholder = (cell.monthPosition == FSCalendarMonthPositionPrevious || cell.monthPosition == FSCalendarMonthPositionNext) || ![self isDateInRange:date];\n            if (cell.placeholder) {\n                cell.selected &= _pagingEnabled;\n                cell.dateIsToday &= _pagingEnabled;\n            }\n            break;\n        }\n        case FSCalendarScopeWeek: {\n            cell.placeholder = ![self isDateInRange:date];\n            break;\n        }\n    }\n    // Synchronize selecion state to the collection view, otherwise delegate methods would not be triggered.\n    if (cell.selected) {\n        [self.collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];\n    } else {\n        [self.collectionView deselectItemAtIndexPath:indexPath animated:NO];\n    }\n    [self invalidateAppearanceForCell:cell forDate:date];\n    [cell configureAppearance];\n}\n\n\n- (void)handleSwipeToChoose:(UILongPressGestureRecognizer *)pressGesture\n{\n    switch (pressGesture.state) {\n        case UIGestureRecognizerStateBegan:\n        case UIGestureRecognizerStateChanged: {\n            NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:[pressGesture locationInView:self.collectionView]];\n            if (indexPath && ![indexPath isEqual:self.lastPressedIndexPath]) {\n                NSDate *date = [self.calculator dateForIndexPath:indexPath];\n                FSCalendarMonthPosition monthPosition = [self.calculator monthPositionForIndexPath:indexPath];\n                if (![self.selectedDates containsObject:date] && [self collectionView:self.collectionView shouldSelectItemAtIndexPath:indexPath]) {\n                    [self selectDate:date scrollToDate:NO atMonthPosition:monthPosition];\n                    [self collectionView:self.collectionView didSelectItemAtIndexPath:indexPath];\n                } else if (self.collectionView.allowsMultipleSelection && [self collectionView:self.collectionView shouldDeselectItemAtIndexPath:indexPath]) {\n                    [self deselectDate:date];\n                    [self collectionView:self.collectionView didDeselectItemAtIndexPath:indexPath];\n                }\n            }\n            self.lastPressedIndexPath = indexPath;\n            break;\n        }\n        case UIGestureRecognizerStateEnded:\n        case UIGestureRecognizerStateCancelled: {\n            self.lastPressedIndexPath = nil;\n            break;\n        }\n        default:\n            break;\n    }\n   \n}\n\n- (void)selectCounterpartDate:(NSDate *)date\n{\n    if (_placeholderType == FSCalendarPlaceholderTypeNone) return;\n    if (self.scope == FSCalendarScopeWeek) return;\n    NSInteger numberOfDays = [self.gregorian fs_numberOfDaysInMonth:date];\n    NSInteger day = [self.gregorian component:NSCalendarUnitDay fromDate:date];\n    FSCalendarCell *cell;\n    if (day < numberOfDays/2+1) {\n        cell = [self cellForDate:date atMonthPosition:FSCalendarMonthPositionNext];\n    } else {\n        cell = [self cellForDate:date atMonthPosition:FSCalendarMonthPositionPrevious];\n    }\n    if (cell) {\n        cell.selected = YES;\n        if (self.collectionView.allowsMultipleSelection) {   \n            [self.collectionView selectItemAtIndexPath:[self.collectionView indexPathForCell:cell] animated:NO scrollPosition:UICollectionViewScrollPositionNone];\n        }\n    }\n    [cell configureAppearance];\n}\n\n- (void)deselectCounterpartDate:(NSDate *)date\n{\n    if (_placeholderType == FSCalendarPlaceholderTypeNone) return;\n    if (self.scope == FSCalendarScopeWeek) return;\n    NSInteger numberOfDays = [self.gregorian fs_numberOfDaysInMonth:date];\n    NSInteger day = [self.gregorian component:NSCalendarUnitDay fromDate:date];\n    FSCalendarCell *cell;\n    if (day < numberOfDays/2+1) {\n        cell = [self cellForDate:date atMonthPosition:FSCalendarMonthPositionNext];\n    } else {\n        cell = [self cellForDate:date atMonthPosition:FSCalendarMonthPositionPrevious];\n    }\n    if (cell) {\n        cell.selected = NO;\n        [self.collectionView deselectItemAtIndexPath:[self.collectionView indexPathForCell:cell] animated:NO];\n    }\n    [cell configureAppearance];\n}\n\n- (void)enqueueSelectedDate:(NSDate *)date\n{\n    if (!self.allowsMultipleSelection) {\n        [_selectedDates removeAllObjects];\n    }\n    if (![_selectedDates containsObject:date]) {\n        [_selectedDates addObject:date];\n    }\n}\n\n- (NSArray *)visibleStickyHeaders\n{\n    return [self.visibleSectionHeaders.dictionaryRepresentation allValues];\n}\n\n- (void)invalidateViewFrames\n{\n    _needsAdjustingViewFrame = YES;\n    \n    _preferredHeaderHeight  = FSCalendarAutomaticDimension;\n    _preferredWeekdayHeight = FSCalendarAutomaticDimension;\n    _preferredRowHeight     = FSCalendarAutomaticDimension;\n    \n    [self setNeedsLayout];\n    \n}\n\n// The best way to detect orientation\n// http://stackoverflow.com/questions/25830448/what-is-the-best-way-to-detect-orientation-in-an-app-extension/26023538#26023538\n- (FSCalendarOrientation)currentCalendarOrientation\n{\n    CGFloat scale = [UIScreen mainScreen].scale;\n    CGSize nativeSize = [UIScreen mainScreen].currentMode.size;\n    CGSize sizeInPoints = [UIScreen mainScreen].bounds.size;\n    FSCalendarOrientation orientation = scale * sizeInPoints.width == nativeSize.width ? FSCalendarOrientationPortrait : FSCalendarOrientationLandscape;\n    return orientation;\n}\n\n- (void)adjustMonthPosition\n{\n    [self requestBoundingDatesIfNecessary];\n    NSDate *targetPage = self.pagingEnabled?self.currentPage:(self.currentPage?:self.selectedDate);\n    [self scrollToPageForDate:targetPage animated:NO];\n}\n\n- (BOOL)requestBoundingDatesIfNecessary\n{\n    if (_needsRequestingBoundingDates) {\n        _needsRequestingBoundingDates = NO;\n        self.formatter.dateFormat = @\"yyyy-MM-dd\";\n        NSDate *newMin = [self.dataSourceProxy minimumDateForCalendar:self]?:[self.formatter dateFromString:@\"1970-01-01\"];\n        newMin = [self.gregorian startOfDayForDate:newMin];\n        NSDate *newMax = [self.dataSourceProxy maximumDateForCalendar:self]?:[self.formatter dateFromString:@\"2099-12-31\"];\n        newMax = [self.gregorian startOfDayForDate:newMax];\n        \n        NSAssert([self.gregorian compareDate:newMin toDate:newMax toUnitGranularity:NSCalendarUnitDay] != NSOrderedDescending, @\"The minimum date of calendar should be earlier than the maximum.\");\n        \n        BOOL res = ![self.gregorian isDate:newMin inSameDayAsDate:_minimumDate] || ![self.gregorian isDate:newMax inSameDayAsDate:_maximumDate];\n        _minimumDate = newMin;\n        _maximumDate = newMax;\n        [self.calculator reloadSections];\n        \n        return res;\n    }\n    return NO;\n}\n\n- (void)configureAppearance\n{\n    [self.visibleCells makeObjectsPerformSelector:@selector(configureAppearance)];\n    [self.visibleStickyHeaders makeObjectsPerformSelector:@selector(configureAppearance)];\n    [self.calendarHeaderView configureAppearance];\n    [self.calendarWeekdayView configureAppearance];\n}\n\n- (void)adjustBoundingRectIfNecessary\n{\n    if (self.placeholderType == FSCalendarPlaceholderTypeFillSixRows) {\n        return;\n    }\n    if (!self.adjustsBoundingRectWhenChangingMonths) {\n        return;\n    }\n    [self performEnsuringValidLayout:^{\n        [self.transitionCoordinator performBoundingRectTransitionFromMonth:nil toMonth:self.currentPage duration:0];\n    }];\n}\n\n- (void)performEnsuringValidLayout:(void (^)(void))block\n{\n    if (self.collectionView.visibleCells.count) {\n        block();\n    } else {\n        [self setNeedsLayout];\n        [self.didLayoutOperations addObject:[NSBlockOperation blockOperationWithBlock:block]];\n    }\n}\n\n- (void)executePendingOperationsIfNeeded\n{\n    NSArray<NSOperation *> *operations = nil;\n    if (self.didLayoutOperations.count) {\n        operations = self.didLayoutOperations.copy;\n        [self.didLayoutOperations removeAllObjects];\n    }\n    [operations makeObjectsPerformSelector:@selector(start)];\n}\n\n\n@end\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarAppearance.h",
    "content": "//\n//  FSCalendarAppearance.h\n//  Pods\n//\n//  Created by DingWenchao on 6/29/15.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n//  https://github.com/WenchaoD\n//\n\n#import \"FSCalendarConstants.h\"\n\n@class FSCalendar;\n\ntypedef NS_ENUM(NSInteger, FSCalendarCellState) {\n    FSCalendarCellStateNormal      = 0,\n    FSCalendarCellStateSelected    = 1,\n    FSCalendarCellStatePlaceholder = 1 << 1,\n    FSCalendarCellStateDisabled    = 1 << 2,\n    FSCalendarCellStateToday       = 1 << 3,\n    FSCalendarCellStateWeekend     = 1 << 4,\n    FSCalendarCellStateTodaySelected = FSCalendarCellStateToday|FSCalendarCellStateSelected\n};\n\ntypedef NS_ENUM(NSUInteger, FSCalendarSeparators) {\n    FSCalendarSeparatorNone          = 0,\n    FSCalendarSeparatorInterRows     = 1\n};\n\ntypedef NS_OPTIONS(NSUInteger, FSCalendarCaseOptions) {\n    FSCalendarCaseOptionsHeaderUsesDefaultCase      = 0,\n    FSCalendarCaseOptionsHeaderUsesUpperCase        = 1 << 0,\n    FSCalendarCaseOptionsHeaderUsesCapitalized      = 1 << 1,\n    \n    FSCalendarCaseOptionsWeekdayUsesDefaultCase     = 0 << 4,\n    FSCalendarCaseOptionsWeekdayUsesUpperCase       = 1 << 4,\n    FSCalendarCaseOptionsWeekdayUsesSingleUpperCase = 2 << 4,\n};\n\n/**\n * FSCalendarAppearance determines the fonts and colors of components in the calendar.\n *\n * @see FSCalendarDelegateAppearance\n */\n@interface FSCalendarAppearance : NSObject\n\n/**\n * The font of the day text.\n */\n@property (strong, nonatomic) UIFont   *titleFont;\n\n/**\n * The font of the subtitle text.\n */\n@property (strong, nonatomic) UIFont   *subtitleFont;\n\n/**\n * The font of the weekday text.\n */\n@property (strong, nonatomic) UIFont   *weekdayFont;\n\n/**\n * The font of the month text.\n */\n@property (strong, nonatomic) UIFont   *headerTitleFont;\n\n/**\n * The offset of the month header from default position.\n */\n@property (assign, nonatomic) CGPoint  headerTitleOffset;\n\n/**\n * The offset of the day text from default position.\n */\n@property (assign, nonatomic) CGPoint  titleOffset;\n\n/**\n * The offset of the day text from default position.\n */\n@property (assign, nonatomic) CGPoint  subtitleOffset;\n\n/**\n * The offset of the event dots from default position.\n */\n@property (assign, nonatomic) CGPoint eventOffset;\n\n/**\n * The offset of the image from default position.\n */\n@property (assign, nonatomic) CGPoint imageOffset;\n\n/**\n * The color of event dots.\n */\n@property (strong, nonatomic) UIColor  *eventDefaultColor;\n\n/**\n * The color of event dots.\n */\n@property (strong, nonatomic) UIColor  *eventSelectionColor;\n\n/**\n * The color of weekday text.\n */\n@property (strong, nonatomic) UIColor  *weekdayTextColor;\n\n/**\n * The color of month header text.\n */\n@property (strong, nonatomic) UIColor  *headerTitleColor;\n\n/**\n * The color oh month header separator\n */\n@property (strong, nonatomic) UIColor  *headerSeparatorColor;\n\n/**\n * The date format of the month header.\n */\n@property (strong, nonatomic) NSString *headerDateFormat;\n\n/**\n * The text alignment of the month header.\n */\n@property (assign, nonatomic) NSTextAlignment headerTitleAlignment;\n\n/**\n * The alpha value of month label staying on the fringes.\n */\n@property (assign, nonatomic) CGFloat  headerMinimumDissolvedAlpha;\n\n/**\n * The day text color for unselected state.\n */\n@property (strong, nonatomic) UIColor  *titleDefaultColor;\n\n/**\n * The day text color for selected state.\n */\n@property (strong, nonatomic) UIColor  *titleSelectionColor;\n\n/**\n * The day text color for today in the calendar.\n */\n@property (strong, nonatomic) UIColor  *titleTodayColor;\n\n/**\n * The day text color for days out of current month.\n */\n@property (strong, nonatomic) UIColor  *titlePlaceholderColor;\n\n/**\n * The day text color for weekend.\n */\n@property (strong, nonatomic) UIColor  *titleWeekendColor;\n\n/**\n * The subtitle text color for unselected state.\n */\n@property (strong, nonatomic) UIColor  *subtitleDefaultColor;\n\n/**\n * The subtitle text color for selected state.\n */\n@property (strong, nonatomic) UIColor  *subtitleSelectionColor;\n\n/**\n * The subtitle text color for today in the calendar.\n */\n@property (strong, nonatomic) UIColor  *subtitleTodayColor;\n\n/**\n * The subtitle text color for days out of current month.\n */\n@property (strong, nonatomic) UIColor  *subtitlePlaceholderColor;\n\n/**\n * The subtitle text color for weekend.\n */\n@property (strong, nonatomic) UIColor  *subtitleWeekendColor;\n\n/**\n * The fill color of the shape for selected state.\n */\n@property (strong, nonatomic) UIColor  *selectionColor;\n\n/**\n * The fill color of the shape for today.\n */\n@property (strong, nonatomic) UIColor  *todayColor;\n\n/**\n * The fill color of the shape for today and selected state.\n */\n@property (strong, nonatomic) UIColor  *todaySelectionColor;\n\n/**\n * The border color of the shape for unselected state.\n */\n@property (strong, nonatomic) UIColor  *borderDefaultColor;\n\n/**\n * The border color of the shape for selected state.\n */\n@property (strong, nonatomic) UIColor  *borderSelectionColor;\n\n/**\n * The border radius, while 1 means a circle, 0 means a rectangle, and the middle value will give it a corner radius.\n */\n@property (assign, nonatomic) CGFloat borderRadius;\n\n/**\n * The case options manage the case of month label and weekday symbols.\n *\n * @see FSCalendarCaseOptions\n */\n@property (assign, nonatomic) FSCalendarCaseOptions caseOptions;\n\n/**\n * The line integrations for calendar.\n *\n */\n@property (assign, nonatomic) FSCalendarSeparators separators;\n\n#if TARGET_INTERFACE_BUILDER\n\n// For preview only\n@property (assign, nonatomic) BOOL      fakeSubtitles;\n@property (assign, nonatomic) BOOL      fakeEventDots;\n@property (assign, nonatomic) NSInteger fakedSelectedDay;\n\n#endif\n\n@end\n\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarAppearance.m",
    "content": "//\n//  FSCalendarAppearance.m\n//  Pods\n//\n//  Created by DingWenchao on 6/29/15.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n//  https://github.com/WenchaoD\n//\n\n#import \"FSCalendarAppearance.h\"\n#import \"FSCalendarDynamicHeader.h\"\n#import \"FSCalendarExtensions.h\"\n\n@interface FSCalendarAppearance ()\n\n@property (weak  , nonatomic) FSCalendar *calendar;\n\n@property (strong, nonatomic) NSMutableDictionary *backgroundColors;\n@property (strong, nonatomic) NSMutableDictionary *titleColors;\n@property (strong, nonatomic) NSMutableDictionary *subtitleColors;\n@property (strong, nonatomic) NSMutableDictionary *borderColors;\n\n@end\n\n@implementation FSCalendarAppearance\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        \n        _titleFont = [UIFont systemFontOfSize:FSCalendarStandardTitleTextSize];\n        _subtitleFont = [UIFont systemFontOfSize:FSCalendarStandardSubtitleTextSize];\n        _weekdayFont = [UIFont systemFontOfSize:FSCalendarStandardWeekdayTextSize];\n        _headerTitleFont = [UIFont systemFontOfSize:FSCalendarStandardHeaderTextSize];\n        \n        _headerTitleColor = FSCalendarStandardTitleTextColor;\n        _headerSeparatorColor = FSCalendarStandardLineColor;\n        _headerDateFormat = @\"MMMM yyyy\";\n        _headerMinimumDissolvedAlpha = 0.2;\n        _headerTitleOffset = CGPointZero;\n        _headerTitleAlignment = NSTextAlignmentCenter;\n        _weekdayTextColor = FSCalendarStandardTitleTextColor;\n        _caseOptions = FSCalendarCaseOptionsHeaderUsesDefaultCase|FSCalendarCaseOptionsWeekdayUsesDefaultCase;\n        \n        _backgroundColors = [NSMutableDictionary dictionaryWithCapacity:5];\n        _backgroundColors[@(FSCalendarCellStateNormal)]      = [UIColor clearColor];\n        _backgroundColors[@(FSCalendarCellStateSelected)]    = FSCalendarStandardSelectionColor;\n        _backgroundColors[@(FSCalendarCellStateDisabled)]    = [UIColor clearColor];\n        _backgroundColors[@(FSCalendarCellStatePlaceholder)] = [UIColor clearColor];\n        _backgroundColors[@(FSCalendarCellStateToday)]       = FSCalendarStandardTodayColor;\n        \n        _titleColors = [NSMutableDictionary dictionaryWithCapacity:5];\n        _titleColors[@(FSCalendarCellStateNormal)]      = [UIColor blackColor];\n        _titleColors[@(FSCalendarCellStateSelected)]    = [UIColor whiteColor];\n        _titleColors[@(FSCalendarCellStateDisabled)]    = [UIColor grayColor];\n        _titleColors[@(FSCalendarCellStatePlaceholder)] = [UIColor lightGrayColor];\n        _titleColors[@(FSCalendarCellStateToday)]       = [UIColor whiteColor];\n        \n        _subtitleColors = [NSMutableDictionary dictionaryWithCapacity:5];\n        _subtitleColors[@(FSCalendarCellStateNormal)]      = [UIColor darkGrayColor];\n        _subtitleColors[@(FSCalendarCellStateSelected)]    = [UIColor whiteColor];\n        _subtitleColors[@(FSCalendarCellStateDisabled)]    = [UIColor lightGrayColor];\n        _subtitleColors[@(FSCalendarCellStatePlaceholder)] = [UIColor lightGrayColor];\n        _subtitleColors[@(FSCalendarCellStateToday)]       = [UIColor whiteColor];\n        \n        _borderColors[@(FSCalendarCellStateSelected)] = [UIColor clearColor];\n        _borderColors[@(FSCalendarCellStateNormal)] = [UIColor clearColor];\n        \n        _borderRadius = 1.0;\n        _eventDefaultColor = FSCalendarStandardEventDotColor;\n        _eventSelectionColor = FSCalendarStandardEventDotColor;\n        \n        _borderColors = [NSMutableDictionary dictionaryWithCapacity:2];\n        \n#if TARGET_INTERFACE_BUILDER\n        _fakeEventDots = YES;\n#endif\n        \n    }\n    return self;\n}\n\n- (void)setTitleFont:(UIFont *)titleFont\n{\n    if (![_titleFont isEqual:titleFont]) {\n        _titleFont = titleFont;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setSubtitleFont:(UIFont *)subtitleFont\n{\n    if (![_subtitleFont isEqual:subtitleFont]) {\n        _subtitleFont = subtitleFont;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setWeekdayFont:(UIFont *)weekdayFont\n{\n    if (![_weekdayFont isEqual:weekdayFont]) {\n        _weekdayFont = weekdayFont;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setHeaderTitleFont:(UIFont *)headerTitleFont\n{\n    if (![_headerTitleFont isEqual:headerTitleFont]) {\n        _headerTitleFont = headerTitleFont;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setHeaderTitleOffset:(CGPoint)headerTitleOffset {\n    if (!CGPointEqualToPoint(_headerTitleOffset, headerTitleOffset)) {\n        _headerTitleOffset = headerTitleOffset;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setTitleOffset:(CGPoint)titleOffset\n{\n    if (!CGPointEqualToPoint(_titleOffset, titleOffset)) {\n        _titleOffset = titleOffset;\n        [_calendar.visibleCells makeObjectsPerformSelector:@selector(setNeedsLayout)];\n    }\n}\n\n- (void)setSubtitleOffset:(CGPoint)subtitleOffset\n{\n    if (!CGPointEqualToPoint(_subtitleOffset, subtitleOffset)) {\n        _subtitleOffset = subtitleOffset;\n        [_calendar.visibleCells makeObjectsPerformSelector:@selector(setNeedsLayout)];\n    }\n}\n\n- (void)setImageOffset:(CGPoint)imageOffset\n{\n    if (!CGPointEqualToPoint(_imageOffset, imageOffset)) {\n        _imageOffset = imageOffset;\n        [_calendar.visibleCells makeObjectsPerformSelector:@selector(setNeedsLayout)];\n    }\n}\n\n- (void)setEventOffset:(CGPoint)eventOffset\n{\n    if (!CGPointEqualToPoint(_eventOffset, eventOffset)) {\n        _eventOffset = eventOffset;\n        [_calendar.visibleCells makeObjectsPerformSelector:@selector(setNeedsLayout)];\n    }\n}\n\n- (void)setTitleDefaultColor:(UIColor *)color\n{\n    if (color) {\n        _titleColors[@(FSCalendarCellStateNormal)] = color;\n    } else {\n        [_titleColors removeObjectForKey:@(FSCalendarCellStateNormal)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)titleDefaultColor\n{\n    return _titleColors[@(FSCalendarCellStateNormal)];\n}\n\n- (void)setTitleSelectionColor:(UIColor *)color\n{\n    if (color) {\n        _titleColors[@(FSCalendarCellStateSelected)] = color;\n    } else {\n        [_titleColors removeObjectForKey:@(FSCalendarCellStateSelected)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)titleSelectionColor\n{\n    return _titleColors[@(FSCalendarCellStateSelected)];\n}\n\n- (void)setTitleTodayColor:(UIColor *)color\n{\n    if (color) {\n        _titleColors[@(FSCalendarCellStateToday)] = color;\n    } else {\n        [_titleColors removeObjectForKey:@(FSCalendarCellStateToday)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)titleTodayColor\n{\n    return _titleColors[@(FSCalendarCellStateToday)];\n}\n\n- (void)setTitlePlaceholderColor:(UIColor *)color\n{\n    if (color) {\n        _titleColors[@(FSCalendarCellStatePlaceholder)] = color;\n    } else {\n        [_titleColors removeObjectForKey:@(FSCalendarCellStatePlaceholder)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)titlePlaceholderColor\n{\n    return _titleColors[@(FSCalendarCellStatePlaceholder)];\n}\n\n- (void)setTitleWeekendColor:(UIColor *)color\n{\n    if (color) {\n        _titleColors[@(FSCalendarCellStateWeekend)] = color;\n    } else {\n        [_titleColors removeObjectForKey:@(FSCalendarCellStateWeekend)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)titleWeekendColor\n{\n    return _titleColors[@(FSCalendarCellStateWeekend)];\n}\n\n- (void)setSubtitleDefaultColor:(UIColor *)color\n{\n    if (color) {\n        _subtitleColors[@(FSCalendarCellStateNormal)] = color;\n    } else {\n        [_subtitleColors removeObjectForKey:@(FSCalendarCellStateNormal)];\n    }\n    [self.calendar configureAppearance];\n}\n\n-(UIColor *)subtitleDefaultColor\n{\n    return _subtitleColors[@(FSCalendarCellStateNormal)];\n}\n\n- (void)setSubtitleSelectionColor:(UIColor *)color\n{\n    if (color) {\n        _subtitleColors[@(FSCalendarCellStateSelected)] = color;\n    } else {\n        [_subtitleColors removeObjectForKey:@(FSCalendarCellStateSelected)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)subtitleSelectionColor\n{\n    return _subtitleColors[@(FSCalendarCellStateSelected)];\n}\n\n- (void)setSubtitleTodayColor:(UIColor *)color\n{\n    if (color) {\n        _subtitleColors[@(FSCalendarCellStateToday)] = color;\n    } else {\n        [_subtitleColors removeObjectForKey:@(FSCalendarCellStateToday)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)subtitleTodayColor\n{\n    return _subtitleColors[@(FSCalendarCellStateToday)];\n}\n\n- (void)setSubtitlePlaceholderColor:(UIColor *)color\n{\n    if (color) {\n        _subtitleColors[@(FSCalendarCellStatePlaceholder)] = color;\n    } else {\n        [_subtitleColors removeObjectForKey:@(FSCalendarCellStatePlaceholder)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)subtitlePlaceholderColor\n{\n    return _subtitleColors[@(FSCalendarCellStatePlaceholder)];\n}\n\n- (void)setSubtitleWeekendColor:(UIColor *)color\n{\n    if (color) {\n        _subtitleColors[@(FSCalendarCellStateWeekend)] = color;\n    } else {\n        [_subtitleColors removeObjectForKey:@(FSCalendarCellStateWeekend)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)subtitleWeekendColor\n{\n    return _subtitleColors[@(FSCalendarCellStateWeekend)];\n}\n\n- (void)setSelectionColor:(UIColor *)color\n{\n    if (color) {\n        _backgroundColors[@(FSCalendarCellStateSelected)] = color;\n    } else {\n        [_backgroundColors removeObjectForKey:@(FSCalendarCellStateSelected)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)selectionColor\n{\n    return _backgroundColors[@(FSCalendarCellStateSelected)];\n}\n\n- (void)setTodayColor:(UIColor *)todayColor\n{\n    if (todayColor) {\n        _backgroundColors[@(FSCalendarCellStateToday)] = todayColor;\n    } else {\n        [_backgroundColors removeObjectForKey:@(FSCalendarCellStateToday)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)todayColor\n{\n    return _backgroundColors[@(FSCalendarCellStateToday)];\n}\n\n- (void)setTodaySelectionColor:(UIColor *)todaySelectionColor\n{\n    if (todaySelectionColor) {\n        _backgroundColors[@(FSCalendarCellStateToday|FSCalendarCellStateSelected)] = todaySelectionColor;\n    } else {\n        [_backgroundColors removeObjectForKey:@(FSCalendarCellStateToday|FSCalendarCellStateSelected)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)todaySelectionColor\n{\n    return _backgroundColors[@(FSCalendarCellStateToday|FSCalendarCellStateSelected)];\n}\n\n- (void)setEventDefaultColor:(UIColor *)eventDefaultColor\n{\n    if (![_eventDefaultColor isEqual:eventDefaultColor]) {\n        _eventDefaultColor = eventDefaultColor;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setBorderDefaultColor:(UIColor *)color\n{\n    if (color) {\n        _borderColors[@(FSCalendarCellStateNormal)] = color;\n    } else {\n        [_borderColors removeObjectForKey:@(FSCalendarCellStateNormal)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)borderDefaultColor\n{\n    return _borderColors[@(FSCalendarCellStateNormal)];\n}\n\n- (void)setBorderSelectionColor:(UIColor *)color\n{\n    if (color) {\n        _borderColors[@(FSCalendarCellStateSelected)] = color;\n    } else {\n        [_borderColors removeObjectForKey:@(FSCalendarCellStateSelected)];\n    }\n    [self.calendar configureAppearance];\n}\n\n- (UIColor *)borderSelectionColor\n{\n    return _borderColors[@(FSCalendarCellStateSelected)];\n}\n\n- (void)setBorderRadius:(CGFloat)borderRadius\n{\n    borderRadius = MAX(0.0, borderRadius);\n    borderRadius = MIN(1.0, borderRadius);\n    if (_borderRadius != borderRadius) {\n        _borderRadius = borderRadius;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setWeekdayTextColor:(UIColor *)weekdayTextColor\n{\n    if (![_weekdayTextColor isEqual:weekdayTextColor]) {\n        _weekdayTextColor = weekdayTextColor;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setHeaderTitleColor:(UIColor *)color\n{\n    if (![_headerTitleColor isEqual:color]) {\n        _headerTitleColor = color;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setHeaderSeparatorColor:(UIColor *)headerSeparatorColor\n{\n    if (![_headerSeparatorColor isEqual:headerSeparatorColor]) {\n        _headerSeparatorColor = headerSeparatorColor;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setHeaderMinimumDissolvedAlpha:(CGFloat)headerMinimumDissolvedAlpha\n{\n    if (_headerMinimumDissolvedAlpha != headerMinimumDissolvedAlpha) {\n        _headerMinimumDissolvedAlpha = headerMinimumDissolvedAlpha;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setHeaderDateFormat:(NSString *)headerDateFormat\n{\n    if (![_headerDateFormat isEqual:headerDateFormat]) {\n        _headerDateFormat = headerDateFormat;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setHeaderTitleAlignment:(NSTextAlignment)headerTitleAlignment\n{\n    if (_headerTitleAlignment != headerTitleAlignment) {\n        _headerTitleAlignment = headerTitleAlignment;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setCaseOptions:(FSCalendarCaseOptions)caseOptions\n{\n    if (_caseOptions != caseOptions) {\n        _caseOptions = caseOptions;\n        [self.calendar configureAppearance];\n    }\n}\n\n- (void)setSeparators:(FSCalendarSeparators)separators\n{\n    if (_separators != separators) {\n        _separators = separators;\n        [_calendar.collectionView.collectionViewLayout invalidateLayout];\n    }\n}\n\n@end\n\n\n@implementation FSCalendarAppearance (Deprecated)\n\n- (void)setUseVeryShortWeekdaySymbols:(BOOL)useVeryShortWeekdaySymbols\n{\n    _caseOptions &= 15;\n    self.caseOptions |= (useVeryShortWeekdaySymbols*FSCalendarCaseOptionsWeekdayUsesSingleUpperCase);\n}\n\n- (BOOL)useVeryShortWeekdaySymbols\n{\n    return (_caseOptions & (15<<4) ) == FSCalendarCaseOptionsWeekdayUsesSingleUpperCase;\n}\n\n- (void)setTitleVerticalOffset:(CGFloat)titleVerticalOffset\n{\n    self.titleOffset = CGPointMake(0, titleVerticalOffset);\n}\n\n- (CGFloat)titleVerticalOffset\n{\n    return self.titleOffset.y;\n}\n\n- (void)setSubtitleVerticalOffset:(CGFloat)subtitleVerticalOffset\n{\n    self.subtitleOffset = CGPointMake(0, subtitleVerticalOffset);\n}\n\n- (CGFloat)subtitleVerticalOffset\n{\n    return self.subtitleOffset.y;\n}\n\n- (void)setEventColor:(UIColor *)eventColor\n{\n    self.eventDefaultColor = eventColor;\n}\n\n- (UIColor *)eventColor\n{\n    return self.eventDefaultColor;\n}\n\n- (void)setTitleTextSize:(CGFloat)titleTextSize\n{\n    self.titleFont = [self.titleFont fontWithSize:titleTextSize];\n}\n\n- (void)setSubtitleTextSize:(CGFloat)subtitleTextSize\n{\n    self.subtitleFont = [self.subtitleFont fontWithSize:subtitleTextSize];\n}\n\n- (void)setWeekdayTextSize:(CGFloat)weekdayTextSize\n{\n    self.weekdayFont = [self.weekdayFont fontWithSize:weekdayTextSize];\n}\n\n- (void)setHeaderTitleTextSize:(CGFloat)headerTitleTextSize\n{\n    self.headerTitleFont = [self.headerTitleFont fontWithSize:headerTitleTextSize];\n}\n\n- (void)invalidateAppearance\n{\n    [self.calendar configureAppearance];\n}\n\n@end\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarCalculator.h",
    "content": "//\n//  FSCalendarCalculator.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 30/10/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <Foundation/Foundation.h>\n\nstruct FSCalendarCoordinate {\n    NSInteger row;\n    NSInteger column;\n};\ntypedef struct FSCalendarCoordinate FSCalendarCoordinate;\n\n@interface FSCalendarCalculator : NSObject\n\n@property (weak  , nonatomic) FSCalendar *calendar;\n\n@property (readonly, nonatomic) NSInteger numberOfSections;\n\n- (instancetype)initWithCalendar:(FSCalendar *)calendar;\n\n- (NSDate *)safeDateForDate:(NSDate *)date;\n\n- (NSDate *)dateForIndexPath:(NSIndexPath *)indexPath;\n- (NSDate *)dateForIndexPath:(NSIndexPath *)indexPath scope:(FSCalendarScope)scope;\n- (NSIndexPath *)indexPathForDate:(NSDate *)date;\n- (NSIndexPath *)indexPathForDate:(NSDate *)date scope:(FSCalendarScope)scope;\n- (NSIndexPath *)indexPathForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position;\n- (NSIndexPath *)indexPathForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position scope:(FSCalendarScope)scope;\n\n- (NSDate *)pageForSection:(NSInteger)section;\n- (NSDate *)weekForSection:(NSInteger)section;\n- (NSDate *)monthForSection:(NSInteger)section;\n- (NSDate *)monthHeadForSection:(NSInteger)section;\n\n- (NSInteger)numberOfHeadPlaceholdersForMonth:(NSDate *)month;\n- (NSInteger)numberOfRowsInMonth:(NSDate *)month;\n- (NSInteger)numberOfRowsInSection:(NSInteger)section;\n\n- (FSCalendarMonthPosition)monthPositionForIndexPath:(NSIndexPath *)indexPath;\n- (FSCalendarCoordinate)coordinateForIndexPath:(NSIndexPath *)indexPath;\n\n- (void)reloadSections;\n\n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarCalculator.m",
    "content": "//\n//  FSCalendarCalculator.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 30/10/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendar.h\"\n#import \"FSCalendarCalculator.h\"\n#import \"FSCalendarDynamicHeader.h\"\n#import \"FSCalendarExtensions.h\"\n\n@interface FSCalendarCalculator ()\n\n@property (assign, nonatomic) NSInteger numberOfMonths;\n@property (strong, nonatomic) NSMutableDictionary<NSNumber *, NSDate *> *months;\n@property (strong, nonatomic) NSMutableDictionary<NSNumber *, NSDate *> *monthHeads;\n\n@property (assign, nonatomic) NSInteger numberOfWeeks;\n@property (strong, nonatomic) NSMutableDictionary<NSNumber *, NSDate *> *weeks;\n@property (strong, nonatomic) NSMutableDictionary<NSDate *, NSNumber *> *rowCounts;\n\n@property (readonly, nonatomic) NSCalendar *gregorian;\n@property (readonly, nonatomic) NSDate *minimumDate;\n@property (readonly, nonatomic) NSDate *maximumDate;\n\n- (void)didReceiveNotifications:(NSNotification *)notification;\n\n@end\n\n@implementation FSCalendarCalculator\n\n@dynamic gregorian,minimumDate,maximumDate;\n\n- (instancetype)initWithCalendar:(FSCalendar *)calendar\n{\n    self = [super init];\n    if (self) {\n        self.calendar = calendar;\n        \n        self.months = [NSMutableDictionary dictionary];\n        self.monthHeads = [NSMutableDictionary dictionary];\n        self.weeks = [NSMutableDictionary dictionary];\n        self.rowCounts = [NSMutableDictionary dictionary];\n        \n        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotifications:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];\n    }\n    return self;\n}\n\n- (void)dealloc\n{\n    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];\n}\n\n- (id)forwardingTargetForSelector:(SEL)selector\n{\n    if ([self.calendar respondsToSelector:selector]) {\n        return self.calendar;\n    }\n    return [super forwardingTargetForSelector:selector];\n}\n\n#pragma mark - Public functions\n\n- (NSDate *)safeDateForDate:(NSDate *)date\n{\n    if ([self.gregorian compareDate:date toDate:self.minimumDate toUnitGranularity:NSCalendarUnitDay] == NSOrderedAscending) {\n        date = self.minimumDate;\n    } else if ([self.gregorian compareDate:date toDate:self.maximumDate toUnitGranularity:NSCalendarUnitDay] == NSOrderedDescending) {\n        date = self.maximumDate;\n    }\n    return date;\n}\n\n- (NSDate *)dateForIndexPath:(NSIndexPath *)indexPath scope:(FSCalendarScope)scope\n{\n    if (!indexPath) return nil;\n    switch (scope) {\n        case FSCalendarScopeMonth: {\n            NSDate *head = [self monthHeadForSection:indexPath.section];\n            NSUInteger daysOffset = indexPath.item;\n            NSDate *date = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:daysOffset toDate:head options:0];\n            return date;\n            break;\n        }\n        case FSCalendarScopeWeek: {\n            NSDate *currentPage = [self weekForSection:indexPath.section];\n            NSDate *date = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:indexPath.item toDate:currentPage options:0];\n            return date;\n        }\n    }\n    return nil;\n}\n\n- (NSDate *)dateForIndexPath:(NSIndexPath *)indexPath\n{\n    if (!indexPath) return nil;\n    return [self dateForIndexPath:indexPath scope:self.calendar.transitionCoordinator.representingScope];\n}\n\n- (NSIndexPath *)indexPathForDate:(NSDate *)date\n{\n    return [self indexPathForDate:date atMonthPosition:FSCalendarMonthPositionCurrent scope:self.calendar.transitionCoordinator.representingScope];\n}\n\n- (NSIndexPath *)indexPathForDate:(NSDate *)date scope:(FSCalendarScope)scope\n{\n    return [self indexPathForDate:date atMonthPosition:FSCalendarMonthPositionCurrent scope:scope];\n}\n\n- (NSIndexPath *)indexPathForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position scope:(FSCalendarScope)scope\n{\n    if (!date) return nil;\n    NSInteger item = 0;\n    NSInteger section = 0;\n    switch (scope) {\n        case FSCalendarScopeMonth: {\n            section = [self.gregorian components:NSCalendarUnitMonth fromDate:[self.gregorian fs_firstDayOfMonth:self.minimumDate] toDate:[self.gregorian fs_firstDayOfMonth:date] options:0].month;\n            if (position == FSCalendarMonthPositionPrevious) {\n                section++;\n            } else if (position == FSCalendarMonthPositionNext) {\n                section--;\n            }\n            NSDate *head = [self monthHeadForSection:section];\n            item = [self.gregorian components:NSCalendarUnitDay fromDate:head toDate:date options:0].day;\n            break;\n        }\n        case FSCalendarScopeWeek: {\n            section = [self.gregorian components:NSCalendarUnitWeekOfYear fromDate:[self.gregorian fs_firstDayOfWeek:self.minimumDate] toDate:[self.gregorian fs_firstDayOfWeek:date] options:0].weekOfYear;\n            item = (([self.gregorian component:NSCalendarUnitWeekday fromDate:date] - self.gregorian.firstWeekday) + 7) % 7;\n            break;\n        }\n    }\n    if (item < 0 || section < 0) {\n        return nil;\n    }\n    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:section];\n    return indexPath;\n}\n\n- (NSIndexPath *)indexPathForDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)position\n{\n    return [self indexPathForDate:date atMonthPosition:position scope:self.calendar.transitionCoordinator.representingScope];\n}\n\n- (NSDate *)pageForSection:(NSInteger)section\n{\n    switch (self.calendar.transitionCoordinator.representingScope) {\n        case FSCalendarScopeWeek:\n            return [self.gregorian fs_middleDayOfWeek:[self weekForSection:section]];\n        case FSCalendarScopeMonth:\n            return [self monthForSection:section];\n        default:\n            break;\n    }\n}\n\n- (NSDate *)monthForSection:(NSInteger)section\n{\n    NSNumber *key = @(section);\n    NSDate *month = self.months[key];\n    if (!month) {\n        month = [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:section toDate:[self.gregorian fs_firstDayOfMonth:self.minimumDate] options:0];\n        NSInteger numberOfHeadPlaceholders = [self numberOfHeadPlaceholdersForMonth:month];\n        NSDate *monthHead = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:-numberOfHeadPlaceholders toDate:month options:0];\n        self.months[key] = month;\n        self.monthHeads[key] = monthHead;\n    }\n    return month;\n}\n\n- (NSDate *)monthHeadForSection:(NSInteger)section\n{\n    NSNumber *key = @(section);\n    NSDate *monthHead = self.monthHeads[key];\n    if (!monthHead) {\n        NSDate *month = [self.gregorian dateByAddingUnit:NSCalendarUnitMonth value:section toDate:[self.gregorian fs_firstDayOfMonth:self.minimumDate] options:0];\n        NSInteger numberOfHeadPlaceholders = [self numberOfHeadPlaceholdersForMonth:month];\n        monthHead = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:-numberOfHeadPlaceholders toDate:month options:0];\n        self.months[key] = month;\n        self.monthHeads[key] = monthHead;\n    }\n    return monthHead;\n}\n\n- (NSDate *)weekForSection:(NSInteger)section\n{\n    NSNumber *key = @(section);\n    NSDate *week = self.weeks[key];\n    if (!week) {\n        week = [self.gregorian dateByAddingUnit:NSCalendarUnitWeekOfYear value:section toDate:[self.gregorian fs_firstDayOfWeek:self.minimumDate] options:0];\n        self.weeks[key] = week;\n    }\n    return week;\n}\n\n- (NSInteger)numberOfSections\n{\n    switch (self.calendar.transitionCoordinator.representingScope) {\n        case FSCalendarScopeMonth: {\n            return self.numberOfMonths;\n        }\n        case FSCalendarScopeWeek: {\n            return self.numberOfWeeks;\n        }\n    }\n}\n\n- (NSInteger)numberOfHeadPlaceholdersForMonth:(NSDate *)month\n{\n    NSInteger currentWeekday = [self.gregorian component:NSCalendarUnitWeekday fromDate:month];\n    NSInteger number = ((currentWeekday- self.gregorian.firstWeekday) + 7) % 7 ?: (7 * (!self.calendar.floatingMode&&(self.calendar.placeholderType == FSCalendarPlaceholderTypeFillSixRows)));\n    return number;\n}\n\n- (NSInteger)numberOfRowsInMonth:(NSDate *)month\n{\n    if (!month) return 0;\n    if (self.calendar.placeholderType == FSCalendarPlaceholderTypeFillSixRows) return 6;\n    \n    NSNumber *rowCount = self.rowCounts[month];\n    if (rowCount == nil) {\n        NSDate *firstDayOfMonth = [self.gregorian fs_firstDayOfMonth:month];\n        NSInteger weekdayOfFirstDay = [self.gregorian component:NSCalendarUnitWeekday fromDate:firstDayOfMonth];\n        NSInteger numberOfDaysInMonth = [self.gregorian fs_numberOfDaysInMonth:month];\n        NSInteger numberOfPlaceholdersForPrev = ((weekdayOfFirstDay - self.gregorian.firstWeekday) + 7) % 7;\n        NSInteger headDayCount = numberOfDaysInMonth + numberOfPlaceholdersForPrev;\n        NSInteger numberOfRows = (headDayCount/7) + (headDayCount%7>0);\n        rowCount = @(numberOfRows);\n        self.rowCounts[month] = rowCount;\n    }\n    return rowCount.integerValue;\n}\n\n- (NSInteger)numberOfRowsInSection:(NSInteger)section\n{\n    if (self.calendar.transitionCoordinator.representingScope == FSCalendarScopeWeek) return 1;\n    NSDate *month = [self monthForSection:section];\n    return [self numberOfRowsInMonth:month];\n}\n\n- (FSCalendarMonthPosition)monthPositionForIndexPath:(NSIndexPath *)indexPath\n{\n    if (!indexPath) return FSCalendarMonthPositionNotFound;\n    if (self.calendar.transitionCoordinator.representingScope == FSCalendarScopeWeek) {\n        return FSCalendarMonthPositionCurrent;\n    }\n    NSDate *date = [self dateForIndexPath:indexPath];\n    NSDate *page = [self pageForSection:indexPath.section];\n    NSComparisonResult comparison = [self.gregorian compareDate:date toDate:page toUnitGranularity:NSCalendarUnitMonth];\n    switch (comparison) {\n        case NSOrderedAscending:\n            return FSCalendarMonthPositionPrevious;\n        case NSOrderedSame:\n            return FSCalendarMonthPositionCurrent;\n        case NSOrderedDescending:\n            return FSCalendarMonthPositionNext;\n    }\n}\n\n- (FSCalendarCoordinate)coordinateForIndexPath:(NSIndexPath *)indexPath\n{\n    FSCalendarCoordinate coordinate;\n    coordinate.row = indexPath.item / 7;\n    coordinate.column = indexPath.item % 7;\n    return coordinate;\n}\n\n- (void)reloadSections\n{\n    self.numberOfMonths = [self.gregorian components:NSCalendarUnitMonth fromDate:[self.gregorian fs_firstDayOfMonth:self.minimumDate] toDate:self.maximumDate options:0].month+1;\n    self.numberOfWeeks = [self.gregorian components:NSCalendarUnitWeekOfYear fromDate:[self.gregorian fs_firstDayOfWeek:self.minimumDate] toDate:self.maximumDate options:0].weekOfYear+1;\n    [self clearCaches];\n}\n\n- (void)clearCaches\n{\n    [self.months removeAllObjects];\n    [self.monthHeads removeAllObjects];\n    [self.weeks removeAllObjects];\n    [self.rowCounts removeAllObjects];\n}\n\n#pragma mark - Private functions\n\n- (void)didReceiveNotifications:(NSNotification *)notification\n{\n    if ([notification.name isEqualToString:UIApplicationDidReceiveMemoryWarningNotification]) {\n        [self clearCaches];\n    }\n}\n\n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarCell.h",
    "content": "//\n//  FSCalendarCell.h\n//  Pods\n//\n//  Created by Wenchao Ding on 12/3/15.\n//\n//\n\n#import <UIKit/UIKit.h>\n\n@class FSCalendar, FSCalendarAppearance, FSCalendarEventIndicator;\n\ntypedef NS_ENUM(NSUInteger, FSCalendarMonthPosition);\n\n@interface FSCalendarCell : UICollectionViewCell\n\n#pragma mark - Public properties\n\n/**\n The day text label of the cell\n */\n@property (weak, nonatomic) UILabel  *titleLabel;\n\n\n/**\n The subtitle label of the cell\n */\n@property (weak, nonatomic) UILabel  *subtitleLabel;\n\n\n/**\n The shape layer of the cell\n */\n@property (weak, nonatomic) CAShapeLayer *shapeLayer;\n\n/**\n The imageView below shape layer of the cell\n */\n@property (weak, nonatomic) UIImageView *imageView;\n\n\n/**\n The collection of event dots of the cell\n */\n@property (weak, nonatomic) FSCalendarEventIndicator *eventIndicator;\n\n/**\n A boolean value indicates that whether the cell is \"placeholder\". Default is NO.\n */\n@property (assign, nonatomic, getter=isPlaceholder) BOOL placeholder;\n\n#pragma mark - Private properties\n\n@property (weak, nonatomic) FSCalendar *calendar;\n@property (weak, nonatomic) FSCalendarAppearance *appearance;\n\n@property (strong, nonatomic) NSString *subtitle;\n@property (strong, nonatomic) UIImage  *image;\n@property (assign, nonatomic) FSCalendarMonthPosition monthPosition;\n\n@property (assign, nonatomic) NSInteger numberOfEvents;\n@property (assign, nonatomic) BOOL dateIsToday;\n@property (assign, nonatomic) BOOL weekend;\n\n@property (strong, nonatomic) UIColor *preferredFillDefaultColor;\n@property (strong, nonatomic) UIColor *preferredFillSelectionColor;\n@property (strong, nonatomic) UIColor *preferredTitleDefaultColor;\n@property (strong, nonatomic) UIColor *preferredTitleSelectionColor;\n@property (strong, nonatomic) UIColor *preferredSubtitleDefaultColor;\n@property (strong, nonatomic) UIColor *preferredSubtitleSelectionColor;\n@property (strong, nonatomic) UIColor *preferredBorderDefaultColor;\n@property (strong, nonatomic) UIColor *preferredBorderSelectionColor;\n@property (assign, nonatomic) CGPoint preferredTitleOffset;\n@property (assign, nonatomic) CGPoint preferredSubtitleOffset;\n@property (assign, nonatomic) CGPoint preferredImageOffset;\n@property (assign, nonatomic) CGPoint preferredEventOffset;\n\n@property (strong, nonatomic) NSArray<UIColor *> *preferredEventDefaultColors;\n@property (strong, nonatomic) NSArray<UIColor *> *preferredEventSelectionColors;\n@property (assign, nonatomic) CGFloat preferredBorderRadius;\n\n// Add subviews to self.contentView and set up constraints\n- (instancetype)initWithFrame:(CGRect)frame NS_REQUIRES_SUPER;\n- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_REQUIRES_SUPER;\n\n// For DIY overridden\n- (void)layoutSubviews NS_REQUIRES_SUPER; // Configure frames of subviews\n- (void)configureAppearance NS_REQUIRES_SUPER; // Configure appearance for cell\n\n- (UIColor *)colorForCurrentStateInDictionary:(NSDictionary *)dictionary;\n- (void)performSelecting;\n\n@end\n\n@interface FSCalendarEventIndicator : UIView\n\n@property (assign, nonatomic) NSInteger numberOfEvents;\n@property (strong, nonatomic) id color;\n\n@end\n\n@interface FSCalendarBlankCell : UICollectionViewCell\n\n- (void)configureAppearance;\n\n@end\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarCell.m",
    "content": "//\n//  FSCalendarCell.m\n//  Pods\n//\n//  Created by Wenchao Ding on 12/3/15.\n//\n//\n\n#import \"FSCalendarCell.h\"\n#import \"FSCalendar.h\"\n#import \"FSCalendarExtensions.h\"\n#import \"FSCalendarDynamicHeader.h\"\n#import \"FSCalendarConstants.h\"\n\n@interface FSCalendarCell ()\n\n@property (readonly, nonatomic) UIColor *colorForCellFill;\n@property (readonly, nonatomic) UIColor *colorForTitleLabel;\n@property (readonly, nonatomic) UIColor *colorForSubtitleLabel;\n@property (readonly, nonatomic) UIColor *colorForCellBorder;\n@property (readonly, nonatomic) NSArray<UIColor *> *colorsForEvents;\n@property (readonly, nonatomic) CGFloat borderRadius;\n\n@end\n\n@implementation FSCalendarCell\n\n#pragma mark - Life cycle\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        [self commonInit];\n    }\n    return self;\n}\n\n- (instancetype)initWithCoder:(NSCoder *)aDecoder\n{\n    self = [super initWithCoder:aDecoder];\n    if (self) {\n        [self commonInit];\n    }\n    return self;\n}\n\n- (void)commonInit\n{   \n    UILabel *label;\n    CAShapeLayer *shapeLayer;\n    UIImageView *imageView;\n    FSCalendarEventIndicator *eventIndicator;\n    \n    label = [[UILabel alloc] initWithFrame:CGRectZero];\n    label.textAlignment = NSTextAlignmentCenter;\n    label.textColor = [UIColor blackColor];\n    [self.contentView addSubview:label];\n    self.titleLabel = label;\n    \n    label = [[UILabel alloc] initWithFrame:CGRectZero];\n    label.textAlignment = NSTextAlignmentCenter;\n    label.textColor = [UIColor lightGrayColor];\n    [self.contentView addSubview:label];\n    self.subtitleLabel = label;\n    \n    shapeLayer = [CAShapeLayer layer];\n    shapeLayer.backgroundColor = [UIColor clearColor].CGColor;\n    shapeLayer.borderWidth = 1.0;\n    shapeLayer.borderColor = [UIColor clearColor].CGColor;\n    shapeLayer.opacity = 0;\n    [self.contentView.layer insertSublayer:shapeLayer below:_titleLabel.layer];\n    self.shapeLayer = shapeLayer;\n    \n    eventIndicator = [[FSCalendarEventIndicator alloc] initWithFrame:CGRectZero];\n    eventIndicator.backgroundColor = [UIColor clearColor];\n    eventIndicator.hidden = YES;\n    [self.contentView addSubview:eventIndicator];\n    self.eventIndicator = eventIndicator;\n    \n    imageView = [[UIImageView alloc] initWithFrame:CGRectZero];\n    imageView.contentMode = UIViewContentModeBottom|UIViewContentModeCenter;\n    [self.contentView addSubview:imageView];\n    self.imageView = imageView;\n    \n    self.clipsToBounds = NO;\n    self.contentView.clipsToBounds = NO;\n    \n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    if (_subtitle) {\n        _subtitleLabel.text = _subtitle;\n        if (_subtitleLabel.hidden) {\n            _subtitleLabel.hidden = NO;\n        }\n    } else {\n        if (!_subtitleLabel.hidden) {\n            _subtitleLabel.hidden = YES;\n        }\n    }\n    \n    if (_subtitle) {\n        CGFloat titleHeight = self.titleLabel.font.lineHeight;\n        CGFloat subtitleHeight = self.subtitleLabel.font.lineHeight;\n        \n        CGFloat height = titleHeight + subtitleHeight;\n        _titleLabel.frame = CGRectMake(\n                                       self.preferredTitleOffset.x,\n                                       (self.contentView.fs_height*5.0/6.0-height)*0.5+self.preferredTitleOffset.y,\n                                       self.contentView.fs_width,\n                                       titleHeight\n                                       );\n        _subtitleLabel.frame = CGRectMake(\n                                          self.preferredSubtitleOffset.x,\n                                          (_titleLabel.fs_bottom-self.preferredTitleOffset.y) - (_titleLabel.fs_height-_titleLabel.font.pointSize)+self.preferredSubtitleOffset.y,\n                                          self.contentView.fs_width,\n                                          subtitleHeight\n                                          );\n    } else {\n        _titleLabel.frame = CGRectMake(\n                                       self.preferredTitleOffset.x,\n                                       self.preferredTitleOffset.y,\n                                       self.contentView.fs_width,\n                                       floor(self.contentView.fs_height*5.0/6.0)\n                                       );\n    }\n    \n    _imageView.frame = CGRectMake(self.preferredImageOffset.x, self.preferredImageOffset.y, self.contentView.fs_width, self.contentView.fs_height);\n    \n    CGFloat titleHeight = self.bounds.size.height*5.0/6.0;\n    CGFloat diameter = MIN(self.bounds.size.height*5.0/6.0,self.bounds.size.width);\n    diameter = diameter > FSCalendarStandardCellDiameter ? (diameter - (diameter-FSCalendarStandardCellDiameter)*0.5) : diameter;\n    _shapeLayer.frame = CGRectMake((self.bounds.size.width-diameter)/2,\n                                   (titleHeight-diameter)/2,\n                                   diameter,\n                                   diameter);\n    \n    CGPathRef path = [UIBezierPath bezierPathWithRoundedRect:_shapeLayer.bounds\n                                                cornerRadius:CGRectGetWidth(_shapeLayer.bounds)*0.5*self.borderRadius].CGPath;\n    if (!CGPathEqualToPath(_shapeLayer.path,path)) {\n        _shapeLayer.path = path;\n    }\n    \n    CGFloat eventSize = _shapeLayer.frame.size.height/6.0;\n    _eventIndicator.frame = CGRectMake(\n                                       self.preferredEventOffset.x,\n                                       CGRectGetMaxY(_shapeLayer.frame)+eventSize*0.17+self.preferredEventOffset.y,\n                                       self.fs_width,\n                                       eventSize*0.83\n                                      );\n    \n}\n\n- (void)prepareForReuse\n{\n    [super prepareForReuse];\n    if (self.window) { // Avoid interrupt of navigation transition somehow\n        [CATransaction setDisableActions:YES]; // Avoid blink of shape layer.\n    }\n    self.shapeLayer.opacity = 0;\n    [self.contentView.layer removeAnimationForKey:@\"opacity\"];\n}\n\n#pragma mark - Public\n\n- (void)performSelecting\n{\n    _shapeLayer.opacity = 1;\n        \n    CAAnimationGroup *group = [CAAnimationGroup animation];\n    CABasicAnimation *zoomOut = [CABasicAnimation animationWithKeyPath:@\"transform.scale\"];\n    zoomOut.fromValue = @0.3;\n    zoomOut.toValue = @1.2;\n    zoomOut.duration = FSCalendarDefaultBounceAnimationDuration/4*3;\n    CABasicAnimation *zoomIn = [CABasicAnimation animationWithKeyPath:@\"transform.scale\"];\n    zoomIn.fromValue = @1.2;\n    zoomIn.toValue = @1.0;\n    zoomIn.beginTime = FSCalendarDefaultBounceAnimationDuration/4*3;\n    zoomIn.duration = FSCalendarDefaultBounceAnimationDuration/4;\n    group.duration = FSCalendarDefaultBounceAnimationDuration;\n    group.animations = @[zoomOut, zoomIn];\n    [_shapeLayer addAnimation:group forKey:@\"bounce\"];\n    [self configureAppearance];\n    \n}\n\n#pragma mark - Private\n\n- (void)configureAppearance\n{\n    UIColor *textColor = self.colorForTitleLabel;\n    if (![textColor isEqual:_titleLabel.textColor]) {\n        _titleLabel.textColor = textColor;\n    }\n    UIFont *titleFont = self.calendar.appearance.titleFont;\n    if (![titleFont isEqual:_titleLabel.font]) {\n        _titleLabel.font = titleFont;\n    }\n    if (_subtitle) {\n        textColor = self.colorForSubtitleLabel;\n        if (![textColor isEqual:_subtitleLabel.textColor]) {\n            _subtitleLabel.textColor = textColor;\n        }\n        titleFont = self.calendar.appearance.subtitleFont;\n        if (![titleFont isEqual:_subtitleLabel.font]) {\n            _subtitleLabel.font = titleFont;\n        }\n    }\n    \n    UIColor *borderColor = self.colorForCellBorder;\n    UIColor *fillColor = self.colorForCellFill;\n    \n    BOOL shouldHideShapeLayer = !self.selected && !self.dateIsToday && !borderColor && !fillColor;\n    \n    if (_shapeLayer.opacity == shouldHideShapeLayer) {\n        _shapeLayer.opacity = !shouldHideShapeLayer;\n    }\n    if (!shouldHideShapeLayer) {\n        \n        CGColorRef cellFillColor = self.colorForCellFill.CGColor;\n        if (!CGColorEqualToColor(_shapeLayer.fillColor, cellFillColor)) {\n            _shapeLayer.fillColor = cellFillColor;\n        }\n        \n        CGColorRef cellBorderColor = self.colorForCellBorder.CGColor;\n        if (!CGColorEqualToColor(_shapeLayer.strokeColor, cellBorderColor)) {\n            _shapeLayer.strokeColor = cellBorderColor;\n        }\n        \n        CGPathRef path = [UIBezierPath bezierPathWithRoundedRect:_shapeLayer.bounds\n                                                    cornerRadius:CGRectGetWidth(_shapeLayer.bounds)*0.5*self.borderRadius].CGPath;\n        if (!CGPathEqualToPath(_shapeLayer.path, path)) {\n            _shapeLayer.path = path;\n        }\n        \n    }\n    \n    if (![_image isEqual:_imageView.image]) {\n        _imageView.image = _image;\n        _imageView.hidden = !_image;\n    }\n    \n    if (_eventIndicator.hidden == (_numberOfEvents > 0)) {\n        _eventIndicator.hidden = !_numberOfEvents;\n    }\n    \n    _eventIndicator.numberOfEvents = self.numberOfEvents;\n    _eventIndicator.color = self.colorsForEvents;\n\n}\n\n- (UIColor *)colorForCurrentStateInDictionary:(NSDictionary *)dictionary\n{\n    if (self.isSelected) {\n        if (self.dateIsToday) {\n            return dictionary[@(FSCalendarCellStateSelected|FSCalendarCellStateToday)] ?: dictionary[@(FSCalendarCellStateSelected)];\n        }\n        return dictionary[@(FSCalendarCellStateSelected)];\n    }\n    if (self.dateIsToday && [[dictionary allKeys] containsObject:@(FSCalendarCellStateToday)]) {\n        return dictionary[@(FSCalendarCellStateToday)];\n    }\n    if (self.placeholder && [[dictionary allKeys] containsObject:@(FSCalendarCellStatePlaceholder)]) {\n        return dictionary[@(FSCalendarCellStatePlaceholder)];\n    }\n    if (self.weekend && [[dictionary allKeys] containsObject:@(FSCalendarCellStateWeekend)]) {\n        return dictionary[@(FSCalendarCellStateWeekend)];\n    }\n    return dictionary[@(FSCalendarCellStateNormal)];\n}\n\n#pragma mark - Properties\n\n- (UIColor *)colorForCellFill\n{\n    if (self.selected) {\n        return self.preferredFillSelectionColor ?: [self colorForCurrentStateInDictionary:_appearance.backgroundColors];\n    }\n    return self.preferredFillDefaultColor ?: [self colorForCurrentStateInDictionary:_appearance.backgroundColors];\n}\n\n- (UIColor *)colorForTitleLabel\n{\n    if (self.selected) {\n        return self.preferredTitleSelectionColor ?: [self colorForCurrentStateInDictionary:_appearance.titleColors];\n    }\n    return self.preferredTitleDefaultColor ?: [self colorForCurrentStateInDictionary:_appearance.titleColors];\n}\n\n- (UIColor *)colorForSubtitleLabel\n{\n    if (self.selected) {\n        return self.preferredSubtitleSelectionColor ?: [self colorForCurrentStateInDictionary:_appearance.subtitleColors];\n    }\n    return self.preferredSubtitleDefaultColor ?: [self colorForCurrentStateInDictionary:_appearance.subtitleColors];\n}\n\n- (UIColor *)colorForCellBorder\n{\n    if (self.selected) {\n        return _preferredBorderSelectionColor ?: _appearance.borderSelectionColor;\n    }\n    return _preferredBorderDefaultColor ?: _appearance.borderDefaultColor;\n}\n\n- (NSArray<UIColor *> *)colorsForEvents\n{\n    if (self.selected) {\n        return _preferredEventSelectionColors ?: @[_appearance.eventSelectionColor];\n    }\n    return _preferredEventDefaultColors ?: @[_appearance.eventDefaultColor];\n}\n\n- (CGFloat)borderRadius\n{\n    return _preferredBorderRadius >= 0 ? _preferredBorderRadius : _appearance.borderRadius;\n}\n\n#define OFFSET_PROPERTY(NAME,CAPITAL,ALTERNATIVE) \\\n\\\n@synthesize NAME = _##NAME; \\\n\\\n- (void)set##CAPITAL:(CGPoint)NAME \\\n{ \\\n    BOOL diff = !CGPointEqualToPoint(NAME, self.NAME); \\\n    _##NAME = NAME; \\\n    if (diff) { \\\n        [self setNeedsLayout]; \\\n    } \\\n} \\\n\\\n- (CGPoint)NAME \\\n{ \\\n    return CGPointEqualToPoint(_##NAME, CGPointInfinity) ? ALTERNATIVE : _##NAME; \\\n}\n\nOFFSET_PROPERTY(preferredTitleOffset, PreferredTitleOffset, _appearance.titleOffset);\nOFFSET_PROPERTY(preferredSubtitleOffset, PreferredSubtitleOffset, _appearance.subtitleOffset);\nOFFSET_PROPERTY(preferredImageOffset, PreferredImageOffset, _appearance.imageOffset);\nOFFSET_PROPERTY(preferredEventOffset, PreferredEventOffset, _appearance.eventOffset);\n\n#undef OFFSET_PROPERTY\n\n- (void)setCalendar:(FSCalendar *)calendar\n{\n    if (![_calendar isEqual:calendar]) {\n        _calendar = calendar;\n        _appearance = calendar.appearance;\n        [self configureAppearance];\n    }\n}\n\n- (void)setSubtitle:(NSString *)subtitle\n{\n    if (![_subtitle isEqualToString:subtitle]) {\n        BOOL diff = (subtitle.length && !_subtitle.length) || (_subtitle.length && !subtitle.length);\n        _subtitle = subtitle;\n        if (diff) {\n            [self setNeedsLayout];\n        }\n    }\n}\n\n@end\n\n\n@interface FSCalendarEventIndicator ()\n\n@property (weak, nonatomic) UIView *contentView;\n\n@property (strong, nonatomic) NSPointerArray *eventLayers;\n\n@end\n\n@implementation FSCalendarEventIndicator\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        \n        UIView *view = [[UIView alloc] initWithFrame:CGRectZero];\n        [self addSubview:view];\n        self.contentView = view;\n        \n        self.eventLayers = [NSPointerArray weakObjectsPointerArray];\n        for (int i = 0; i < FSCalendarMaximumNumberOfEvents; i++) {\n            CALayer *layer = [CALayer layer];\n            layer.backgroundColor = [UIColor clearColor].CGColor;\n            [self.contentView.layer addSublayer:layer];\n            [self.eventLayers addPointer:(__bridge void * _Nullable)(layer)];\n        }\n        \n    }\n    return self;\n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    CGFloat diameter = MIN(MIN(self.fs_width, self.fs_height),FSCalendarMaximumEventDotDiameter);\n    self.contentView.fs_height = self.fs_height;\n    self.contentView.fs_width = (self.numberOfEvents*2-1)*diameter;\n    self.contentView.center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));\n}\n\n- (void)layoutSublayersOfLayer:(CALayer *)layer\n{\n    [super layoutSublayersOfLayer:layer];\n    if (layer == self.layer) {\n        \n        CGFloat diameter = MIN(MIN(self.fs_width, self.fs_height),FSCalendarMaximumEventDotDiameter);\n        for (int i = 0; i < self.eventLayers.count; i++) {\n            CALayer *eventLayer = [self.eventLayers pointerAtIndex:i];\n            eventLayer.hidden = i >= self.numberOfEvents;\n            if (!eventLayer.hidden) {\n                eventLayer.frame = CGRectMake(2*i*diameter, (self.fs_height-diameter)*0.5, diameter, diameter);\n                if (eventLayer.cornerRadius != diameter/2) {\n                    eventLayer.cornerRadius = diameter/2;\n                }\n            }\n        }\n    }\n}\n\n- (void)setColor:(id)color\n{\n    if (![_color isEqual:color]) {\n        _color = color;\n        \n        if ([_color isKindOfClass:[UIColor class]]) {\n            for (NSInteger i = 0; i < self.eventLayers.count; i++) {\n                CALayer *layer = [self.eventLayers pointerAtIndex:i];\n                layer.backgroundColor = [_color CGColor];\n            }\n        } else if ([_color isKindOfClass:[NSArray class]]) {\n            NSArray<UIColor *> *colors = (NSArray *)_color;\n            for (int i = 0; i < self.eventLayers.count; i++) {\n                CALayer *eventLayer = [self.eventLayers pointerAtIndex:i];\n                eventLayer.backgroundColor = colors[MIN(i,colors.count-1)].CGColor;\n            }\n        }\n        \n    }\n}\n\n- (void)setNumberOfEvents:(NSInteger)numberOfEvents\n{\n    if (_numberOfEvents != numberOfEvents) {\n        _numberOfEvents = MIN(MAX(numberOfEvents,0),FSCalendarMaximumNumberOfEvents);\n        [self setNeedsLayout];\n    }\n}\n\n@end\n\n\n@implementation FSCalendarBlankCell\n\n- (void)configureAppearance {}\n\n@end\n\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarCollectionView.h",
    "content": "//\n//  FSCalendarCollectionView.h\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 10/25/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n@class FSCalendarCollectionView;\n\n\n@protocol FSCalendarCollectionViewInternalDelegate <UICollectionViewDelegate>\n\n@optional\n- (void)collectionViewDidFinishLayoutSubviews:(FSCalendarCollectionView *)collectionView;\n\n@end\n\n@interface FSCalendarCollectionView : UICollectionView\n\n@property (weak, nonatomic) id<FSCalendarCollectionViewInternalDelegate> internalDelegate;\n\n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarCollectionView.m",
    "content": "//\n//  FSCalendarCollectionView.m\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 10/25/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n//  Reject -[UIScrollView(UIScrollViewInternal) _adjustContentOffsetIfNecessary]\n\n\n#import \"FSCalendarCollectionView.h\"\n#import \"FSCalendarExtensions.h\"\n#import \"FSCalendarConstants.h\"\n\n@interface FSCalendarCollectionView ()\n\n- (void)commonInit;\n\n@end\n\n@implementation FSCalendarCollectionView\n\n@synthesize scrollsToTop = _scrollsToTop, contentInset = _contentInset;\n\n- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout\n{\n    self = [super initWithFrame:frame collectionViewLayout:layout];\n    if (self) {\n        [self commonInit];\n    }\n    return self;\n}\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        [self commonInit];\n    }\n    return self;\n}\n\n- (void)commonInit\n{\n    self.scrollsToTop = NO;\n    self.contentInset = UIEdgeInsetsZero;\n    if (@available(iOS 10.0, *)) self.prefetchingEnabled = NO;\n    if (@available(iOS 11.0, *)) self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;\n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    if (self.internalDelegate && [self.internalDelegate respondsToSelector:@selector(collectionViewDidFinishLayoutSubviews:)]) {\n        [self.internalDelegate collectionViewDidFinishLayoutSubviews:self];\n    }\n}\n\n- (void)setContentInset:(UIEdgeInsets)contentInset\n{\n    [super setContentInset:UIEdgeInsetsZero];\n    if (contentInset.top) {\n        self.contentOffset = CGPointMake(self.contentOffset.x, self.contentOffset.y+contentInset.top);\n    }\n}\n\n- (void)setScrollsToTop:(BOOL)scrollsToTop\n{\n    [super setScrollsToTop:NO];\n}\n\n@end\n\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarCollectionViewLayout.h",
    "content": "//\n//  FSCalendarAnimationLayout.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 1/3/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class FSCalendar;\n\n@interface FSCalendarCollectionViewLayout : UICollectionViewLayout\n\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (assign, nonatomic) UIEdgeInsets sectionInsets;\n@property (assign, nonatomic) UICollectionViewScrollDirection scrollDirection;\n\n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarCollectionViewLayout.m",
    "content": "//\n//  FSCalendarAnimationLayout.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 1/3/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendarCollectionViewLayout.h\"\n#import \"FSCalendar.h\"\n#import \"FSCalendarDynamicHeader.h\"\n#import \"FSCalendarCollectionView.h\"\n#import \"FSCalendarExtensions.h\"\n#import \"FSCalendarConstants.h\"\n#import \"FSCalendarSeparatorDecorationView.h\"\n\n#define kFSCalendarSeparatorInterRows @\"FSCalendarSeparatorInterRows\"\n#define kFSCalendarSeparatorInterColumns @\"FSCalendarSeparatorInterColumns\"\n\n@interface FSCalendarCollectionViewLayout ()\n\n@property (assign, nonatomic) CGFloat *widths;\n@property (assign, nonatomic) CGFloat *heights;\n@property (assign, nonatomic) CGFloat *lefts;\n@property (assign, nonatomic) CGFloat *tops;\n\n@property (assign, nonatomic) CGFloat *sectionHeights;\n@property (assign, nonatomic) CGFloat *sectionTops;\n@property (assign, nonatomic) CGFloat *sectionBottoms;\n@property (assign, nonatomic) CGFloat *sectionRowCounts;\n\n@property (assign, nonatomic) CGSize estimatedItemSize;\n\n@property (assign, nonatomic) CGSize contentSize;\n@property (assign, nonatomic) CGSize collectionViewSize;\n@property (assign, nonatomic) CGSize headerReferenceSize;\n@property (assign, nonatomic) NSInteger numberOfSections;\n\n@property (assign, nonatomic) FSCalendarSeparators separators;\n\n@property (strong, nonatomic) NSMutableDictionary<NSIndexPath *, UICollectionViewLayoutAttributes *> *itemAttributes;\n@property (strong, nonatomic) NSMutableDictionary<NSIndexPath *, UICollectionViewLayoutAttributes *> *headerAttributes;\n@property (strong, nonatomic) NSMutableDictionary<NSIndexPath *, UICollectionViewLayoutAttributes *> *rowSeparatorAttributes;\n\n- (void)didReceiveNotifications:(NSNotification *)notification;\n- (CGFloat)calculateRowOffset:(NSInteger)row totalRows:(NSInteger)totalRows;\n\n@end\n\n@implementation FSCalendarCollectionViewLayout\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.estimatedItemSize = CGSizeZero;\n        self.widths = NULL;\n        self.heights = NULL;\n        self.tops = NULL;\n        self.lefts = NULL;\n        \n        self.sectionHeights = NULL;\n        self.sectionTops = NULL;\n        self.sectionBottoms = NULL;\n        self.sectionRowCounts = NULL;\n        \n        self.scrollDirection = UICollectionViewScrollDirectionHorizontal;\n        self.sectionInsets = UIEdgeInsetsMake(5, 0, 5, 0);\n        \n        self.itemAttributes = NSMutableDictionary.dictionary;\n        self.headerAttributes = NSMutableDictionary.dictionary;\n        self.rowSeparatorAttributes = NSMutableDictionary.dictionary;\n        \n        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotifications:) name:UIDeviceOrientationDidChangeNotification object:nil];\n        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotifications:) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];\n        \n        [self registerClass:FSCalendarSeparatorDecorationView.class forDecorationViewOfKind:kFSCalendarSeparatorInterRows];\n    }\n    return self;\n}\n\n- (void)dealloc\n{\n    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];\n    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];\n    \n    free(self.widths);\n    free(self.heights);\n    free(self.tops);\n    free(self.lefts);\n    \n    free(self.sectionHeights);\n    free(self.sectionTops);\n    free(self.sectionRowCounts);\n    free(self.sectionBottoms);\n}\n\n- (void)prepareLayout\n{\n    if (CGSizeEqualToSize(self.collectionViewSize, self.collectionView.frame.size) && self.numberOfSections == self.collectionView.numberOfSections && self.separators == self.calendar.appearance.separators) {\n        return;\n    }\n    self.collectionViewSize = self.collectionView.frame.size;\n    self.separators = self.calendar.appearance.separators;\n    \n    [self.itemAttributes removeAllObjects];\n    [self.headerAttributes removeAllObjects];\n    [self.rowSeparatorAttributes removeAllObjects];\n    \n    self.headerReferenceSize = ({\n        CGSize headerSize = CGSizeZero;\n        if (self.calendar.floatingMode) {\n            CGFloat headerHeight = self.calendar.preferredWeekdayHeight*1.5+self.calendar.preferredHeaderHeight;\n            headerSize = CGSizeMake(self.collectionView.fs_width, headerHeight);\n        }\n        headerSize;\n    });\n    self.estimatedItemSize = ({\n        CGFloat width = (self.collectionView.fs_width-self.sectionInsets.left-self.sectionInsets.right)/7.0;\n        CGFloat height = ({\n            CGFloat height = FSCalendarStandardRowHeight;\n            if (!self.calendar.floatingMode) {\n                switch (self.calendar.transitionCoordinator.representingScope) {\n                    case FSCalendarScopeMonth: {\n                        height = (self.collectionView.fs_height-self.sectionInsets.top-self.sectionInsets.bottom)/6.0;\n                        break;\n                    }\n                    case FSCalendarScopeWeek: {\n                        height = (self.collectionView.fs_height-self.sectionInsets.top-self.sectionInsets.bottom);\n                        break;\n                    }\n                    default:\n                        break;\n                }\n            } else {\n                height = self.calendar.rowHeight;\n            }\n            height;\n        });\n        CGSize size = CGSizeMake(width, height);\n        size;\n    });\n    \n    // Calculate item widths and lefts\n    free(self.widths);\n    self.widths = ({\n        NSInteger columnCount = 7;\n        size_t columnSize = sizeof(CGFloat)*columnCount;\n        CGFloat *widths = malloc(columnSize);\n        CGFloat contentWidth = self.collectionView.fs_width - self.sectionInsets.left - self.sectionInsets.right;\n        FSCalendarSliceCake(contentWidth, columnCount, widths);\n        widths;\n    });\n    \n    free(self.lefts);\n    self.lefts = ({\n        NSInteger columnCount = 7;\n        size_t columnSize = sizeof(CGFloat)*columnCount;\n        CGFloat *lefts = malloc(columnSize);\n        lefts[0] = self.sectionInsets.left;\n        for (int i = 1; i < columnCount; i++) {\n            lefts[i] = lefts[i-1] + self.widths[i-1];\n        }\n        lefts;\n    });\n    \n    // Calculate item heights and tops\n    free(self.heights);\n    self.heights = ({\n        NSInteger rowCount = self.calendar.transitionCoordinator.representingScope == FSCalendarScopeWeek ? 1 : 6;\n        size_t rowSize = sizeof(CGFloat)*rowCount;\n        CGFloat *heights = malloc(rowSize);\n        if (!self.calendar.floatingMode) {\n            CGFloat contentHeight = self.collectionView.fs_height - self.sectionInsets.top - self.sectionInsets.bottom;\n            FSCalendarSliceCake(contentHeight, rowCount, heights);\n        } else {\n            for (int i = 0; i < rowCount; i++) {\n                heights[i] = self.estimatedItemSize.height;\n            }\n        }\n        heights;\n    });\n    \n    free(self.tops);\n    self.tops = ({\n        NSInteger rowCount = self.calendar.transitionCoordinator.representingScope == FSCalendarScopeWeek ? 1 : 6;\n        size_t rowSize = sizeof(CGFloat)*rowCount;\n        CGFloat *tops = malloc(rowSize);\n        tops[0] = self.sectionInsets.top;\n        for (int i = 1; i < rowCount; i++) {\n            tops[i] = tops[i-1] + self.heights[i-1];\n        }\n        tops;\n    });\n    \n    // Calculate content size\n    self.numberOfSections = self.collectionView.numberOfSections;\n    self.contentSize = ({\n        CGSize contentSize = CGSizeZero;\n        if (!self.calendar.floatingMode) {\n            CGFloat width = self.collectionView.fs_width;\n            CGFloat height = self.collectionView.fs_height;\n            switch (self.scrollDirection) {\n                case UICollectionViewScrollDirectionHorizontal: {\n                    width *= self.numberOfSections;\n                    break;\n                }\n                case UICollectionViewScrollDirectionVertical: {\n                    height *= self.numberOfSections;\n                    break;\n                }\n                default:\n                    break;\n            }\n            contentSize = CGSizeMake(width, height);\n        } else {\n            free(self.sectionHeights);\n            self.sectionHeights = malloc(sizeof(CGFloat)*self.numberOfSections);\n            free(self.sectionRowCounts);\n            self.sectionRowCounts = malloc(sizeof(NSInteger)*self.numberOfSections);\n            CGFloat width = self.collectionView.fs_width;\n            CGFloat height = 0;\n            for (int i = 0; i < self.numberOfSections; i++) {\n                NSInteger rowCount = [self.calendar.calculator numberOfRowsInSection:i];\n                self.sectionRowCounts[i] = rowCount;\n                CGFloat sectionHeight = self.headerReferenceSize.height;\n                for (int j = 0; j < rowCount; j++) {\n                    sectionHeight += self.heights[j];\n                }\n                self.sectionHeights[i] = sectionHeight;\n                height += sectionHeight;\n            }\n            free(self.sectionTops);\n            self.sectionTops = malloc(sizeof(CGFloat)*self.numberOfSections);\n            free(self.sectionBottoms);\n            self.sectionBottoms = malloc(sizeof(CGFloat)*self.numberOfSections);\n            self.sectionTops[0] = 0;\n            self.sectionBottoms[0] = self.sectionHeights[0];\n            for (int i = 1; i < self.numberOfSections; i++) {\n                self.sectionTops[i] = self.sectionTops[i-1] + self.sectionHeights[i-1];\n                self.sectionBottoms[i] = self.sectionTops[i] + self.sectionHeights[i];\n            }\n            contentSize = CGSizeMake(width, height);\n        }\n        contentSize;\n    });\n    \n    [self.calendar adjustMonthPosition];\n}\n\n- (CGSize)collectionViewContentSize\n{\n    return self.contentSize;\n}\n\n- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect\n{\n    // Clipping\n    rect = CGRectIntersection(rect, CGRectMake(0, 0, self.contentSize.width, self.contentSize.height));\n    if (CGRectIsEmpty(rect)) return nil;\n    \n    // Calculating attributes\n    NSMutableArray<UICollectionViewLayoutAttributes *> *layoutAttributes = [NSMutableArray array];\n    \n    if (!self.calendar.floatingMode) {\n        \n        switch (self.scrollDirection) {\n            case UICollectionViewScrollDirectionHorizontal: {\n                \n                NSInteger startColumn = ({\n                    NSInteger startSection = rect.origin.x/self.collectionView.fs_width;\n                    CGFloat widthDelta = FSCalendarMod(CGRectGetMinX(rect), self.collectionView.fs_width)-self.sectionInsets.left;\n                    widthDelta = MIN(MAX(0, widthDelta), self.collectionView.fs_width-self.sectionInsets.left);\n                    NSInteger countDelta = FSCalendarFloor(widthDelta/self.estimatedItemSize.width);\n                    NSInteger startColumn = startSection*7 + countDelta;\n                    startColumn;\n                });\n                \n                NSInteger endColumn = ({\n                    NSInteger endColumn;\n                    CGFloat section = CGRectGetMaxX(rect)/self.collectionView.fs_width;\n                    CGFloat remainder = FSCalendarMod(section, 1);\n                    // https://stackoverflow.com/a/10335601/2398107\n                    if (remainder <= MAX(100*FLT_EPSILON*ABS(remainder), FLT_MIN)) {\n                        endColumn = FSCalendarFloor(section)*7 - 1;\n                    } else {\n                        CGFloat widthDelta = FSCalendarMod(CGRectGetMaxX(rect), self.collectionView.fs_width)-self.sectionInsets.left;\n                        widthDelta = MIN(MAX(0, widthDelta), self.collectionView.fs_width - self.sectionInsets.left);\n                        NSInteger countDelta = FSCalendarCeil(widthDelta/self.estimatedItemSize.width);\n                        endColumn = FSCalendarFloor(section)*7 + countDelta - 1;\n                    }\n                    endColumn;\n                });\n                \n                NSInteger numberOfRows = self.calendar.transitionCoordinator.representingScope == FSCalendarScopeMonth ? 6 : 1;\n                \n                for (NSInteger column = startColumn; column <= endColumn; column++) {\n                    for (NSInteger row = 0; row < numberOfRows; row++) {\n                        NSInteger section = column / 7;\n                        NSInteger item = column % 7 + row * 7;\n                        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:section];\n                        UICollectionViewLayoutAttributes *itemAttributes = [self layoutAttributesForItemAtIndexPath:indexPath];\n                        [layoutAttributes addObject:itemAttributes];\n                        \n                        UICollectionViewLayoutAttributes *rowSeparatorAttributes = [self layoutAttributesForDecorationViewOfKind:kFSCalendarSeparatorInterRows atIndexPath:indexPath];\n                        if (rowSeparatorAttributes) {\n                            [layoutAttributes addObject:rowSeparatorAttributes];\n                        }\n                    }\n                }\n                \n                break;\n            }\n            case UICollectionViewScrollDirectionVertical: {\n                \n                NSInteger startRow = ({\n                    NSInteger startSection = rect.origin.y/self.collectionView.fs_height;\n                    CGFloat heightDelta = FSCalendarMod(CGRectGetMinY(rect), self.collectionView.fs_height)-self.sectionInsets.top;\n                    heightDelta = MIN(MAX(0, heightDelta), self.collectionView.fs_height-self.sectionInsets.top);\n                    NSInteger countDelta = FSCalendarFloor(heightDelta/self.estimatedItemSize.height);\n                    NSInteger startRow = startSection*6 + countDelta;\n                    startRow;\n                });\n                \n                NSInteger endRow = ({\n                    NSInteger endRow;\n                    CGFloat section = CGRectGetMaxY(rect)/self.collectionView.fs_height;\n                    CGFloat remainder = FSCalendarMod(section, 1);\n                    // https://stackoverflow.com/a/10335601/2398107\n                    if (remainder <= MAX(100*FLT_EPSILON*ABS(remainder), FLT_MIN)) {\n                        endRow = FSCalendarFloor(section)*6 - 1;\n                    } else {\n                        CGFloat heightDelta = FSCalendarMod(CGRectGetMaxY(rect), self.collectionView.fs_height)-self.sectionInsets.top;\n                        heightDelta = MIN(MAX(0, heightDelta), self.collectionView.fs_height-self.sectionInsets.top);\n                        NSInteger countDelta = FSCalendarCeil(heightDelta/self.estimatedItemSize.height);\n                        endRow = FSCalendarFloor(section)*6 + countDelta-1;\n                    }\n                    endRow;\n                });\n                \n                for (NSInteger row = startRow; row <= endRow; row++) {\n                    for (NSInteger column = 0; column < 7; column++) {\n                        NSInteger section = row / 6;\n                        NSInteger item = column + (row % 6) * 7;\n                        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:section];\n                        UICollectionViewLayoutAttributes *itemAttributes = [self layoutAttributesForItemAtIndexPath:indexPath];\n                        [layoutAttributes addObject:itemAttributes];\n                        \n                        UICollectionViewLayoutAttributes *rowSeparatorAttributes = [self layoutAttributesForDecorationViewOfKind:kFSCalendarSeparatorInterRows atIndexPath:indexPath];\n                        if (rowSeparatorAttributes) {\n                            [layoutAttributes addObject:rowSeparatorAttributes];\n                        }\n                        \n                    }\n                }\n                \n                break;\n            }\n            default:\n                break;\n        }\n        \n    } else {\n        \n        NSInteger startSection = [self searchStartSection:rect :0 :self.numberOfSections-1];\n        NSInteger startRowIndex = ({\n            CGFloat heightDelta1 = MIN(self.sectionBottoms[startSection]-CGRectGetMinY(rect)-self.sectionInsets.bottom, self.sectionRowCounts[startSection]*self.estimatedItemSize.height);\n            NSInteger startRowCount = FSCalendarCeil(heightDelta1/self.estimatedItemSize.height);\n            NSInteger startRowIndex = self.sectionRowCounts[startSection]-startRowCount;\n            startRowIndex;\n        });\n        \n        NSInteger endSection = [self searchEndSection:rect :startSection :self.numberOfSections-1];\n        NSInteger endRowIndex = ({\n            CGFloat heightDelta2 = MAX(CGRectGetMaxY(rect) - self.sectionTops[endSection]- self.headerReferenceSize.height - self.sectionInsets.top, 0);\n            NSInteger endRowCount = FSCalendarCeil(heightDelta2/self.estimatedItemSize.height);\n            NSInteger endRowIndex = endRowCount - 1;\n            endRowIndex;\n        });\n        for (NSInteger section = startSection; section <= endSection; section++) {\n            NSInteger startRow = (section == startSection) ? startRowIndex : 0;\n            NSInteger endRow = (section == endSection) ? endRowIndex : self.sectionRowCounts[section]-1;\n            UICollectionViewLayoutAttributes *headerAttributes = [self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]];\n            [layoutAttributes addObject:headerAttributes];\n            for (NSInteger row = startRow; row <= endRow; row++) {\n                for (NSInteger column = 0; column < 7; column++) {\n                    NSInteger item = row * 7 + column;\n                    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:section];\n                    UICollectionViewLayoutAttributes *itemAttributes = [self layoutAttributesForItemAtIndexPath:indexPath];\n                    [layoutAttributes addObject:itemAttributes];\n                    UICollectionViewLayoutAttributes *rowSeparatorAttributes = [self layoutAttributesForDecorationViewOfKind:kFSCalendarSeparatorInterRows atIndexPath:indexPath];\n                    if (rowSeparatorAttributes) {\n                        [layoutAttributes addObject:rowSeparatorAttributes];\n                    }\n                }\n            }\n        }\n        \n    }\n    return [NSArray arrayWithArray:layoutAttributes];\n    \n}\n\n// Items\n- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath\n{\n    FSCalendarCoordinate coordinate = [self.calendar.calculator coordinateForIndexPath:indexPath];\n    NSInteger column = coordinate.column;\n    NSInteger row = coordinate.row;\n    NSInteger numberOfRows = [self.calendar.calculator numberOfRowsInSection:indexPath.section];\n    UICollectionViewLayoutAttributes *attributes = self.itemAttributes[indexPath];\n    if (!attributes) {\n        attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];\n        CGRect frame = ({\n            CGFloat width = self.widths[column];\n            CGFloat height = self.heights[row];\n            CGFloat x, y;\n            switch (self.scrollDirection) {\n                case UICollectionViewScrollDirectionHorizontal: {\n                    x = self.lefts[column] + indexPath.section * self.collectionView.fs_width;\n                    y = [self calculateRowOffset:row totalRows:numberOfRows];\n                    break;\n                }\n                case UICollectionViewScrollDirectionVertical: {\n                    x = self.lefts[column];\n                    if (!self.calendar.floatingMode) {\n                        CGFloat sectionTop = indexPath.section * self.collectionView.fs_height;\n                        CGFloat rowOffset = [self calculateRowOffset:row totalRows:numberOfRows];\n                        y = sectionTop + rowOffset;\n                    } else {\n                        y = self.sectionTops[indexPath.section] + self.headerReferenceSize.height + self.tops[row];\n                    }\n                    break;\n                }\n                default:\n                    break;\n            }\n            CGRect frame = CGRectMake(x, y, width, height);\n            frame;\n        });\n        attributes.frame = frame;\n        self.itemAttributes[indexPath] = attributes;\n    }\n    return attributes;\n}\n\n// Section headers\n- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath\n{\n    if ([elementKind isEqualToString:UICollectionElementKindSectionHeader]) {\n        UICollectionViewLayoutAttributes *attributes = self.headerAttributes[indexPath];\n        if (!attributes) {\n            attributes = [UICollectionViewLayoutAttributes layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader withIndexPath:indexPath];\n            attributes.frame = CGRectMake(0, self.sectionTops[indexPath.section], self.collectionView.fs_width, self.headerReferenceSize.height);\n            self.headerAttributes[indexPath] = attributes;\n        }\n        return attributes;\n    }\n    return nil;\n}\n\n// Separators\n- (UICollectionViewLayoutAttributes *)layoutAttributesForDecorationViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath\n{\n    if ([elementKind isEqualToString:kFSCalendarSeparatorInterRows] && (self.separators & FSCalendarSeparatorInterRows)) {\n        UICollectionViewLayoutAttributes *attributes = self.rowSeparatorAttributes[indexPath];\n        if (!attributes) {\n            FSCalendarCoordinate coordinate = [self.calendar.calculator coordinateForIndexPath:indexPath];\n            if (coordinate.row >= [self.calendar.calculator numberOfRowsInSection:indexPath.section]-1) {\n                return nil;\n            }\n            attributes = [UICollectionViewLayoutAttributes layoutAttributesForDecorationViewOfKind:kFSCalendarSeparatorInterRows withIndexPath:indexPath];\n            CGFloat x, y;\n            if (!self.calendar.floatingMode) {\n                CGFloat rowOffset = [self calculateRowOffset:coordinate.row totalRows:[self.calendar.calculator numberOfRowsInSection:indexPath.section]] + self.heights[coordinate.row];\n                switch (self.scrollDirection) {\n                    case UICollectionViewScrollDirectionHorizontal: {\n                        x = self.lefts[coordinate.column] + indexPath.section * self.collectionView.fs_width;\n                        y = rowOffset;\n                        break;\n                    }\n                    case UICollectionViewScrollDirectionVertical: {\n                        x = 0;\n                        y = indexPath.section * self.collectionView.fs_height + rowOffset;\n                        break;\n                    }\n                    default:\n                        break;\n                }\n            } else {\n                x = 0;\n                y = self.sectionTops[indexPath.section] + self.headerReferenceSize.height + self.tops[coordinate.row] + self.heights[coordinate.row];\n            }\n            CGFloat width = self.collectionView.fs_width;\n            CGFloat height = FSCalendarStandardSeparatorThickness;\n            attributes.frame = CGRectMake(x, y, width, height);\n            attributes.zIndex = NSIntegerMax;\n            self.rowSeparatorAttributes[indexPath] = attributes;\n        }\n        return attributes;\n    }\n    return nil;\n}\n\n- (BOOL)flipsHorizontallyInOppositeLayoutDirection\n{\n    return YES;\n}\n\n#pragma mark - Notifications\n\n- (void)didReceiveNotifications:(NSNotification *)notification\n{\n    if ([notification.name isEqualToString:UIDeviceOrientationDidChangeNotification]) {\n        [self invalidateLayout];\n    }\n    if ([notification.name isEqualToString:UIApplicationDidReceiveMemoryWarningNotification]) {\n        [self.itemAttributes removeAllObjects];\n        [self.headerAttributes removeAllObjects];\n        [self.rowSeparatorAttributes removeAllObjects];\n    }\n}\n\n#pragma mark - Private properties\n\n- (void)setScrollDirection:(UICollectionViewScrollDirection)scrollDirection\n{\n    if (_scrollDirection != scrollDirection) {\n        _scrollDirection = scrollDirection;\n        self.collectionViewSize = CGSizeAutomatic;\n    }\n}\n\n#pragma mark - Private functions\n\n- (CGFloat)calculateRowOffset:(NSInteger)row totalRows:(NSInteger)totalRows\n{\n    if (self.calendar.adjustsBoundingRectWhenChangingMonths) {\n        return self.tops[row];\n    }\n    CGFloat height = self.heights[row];\n    switch (totalRows) {\n        case 4:\n        case 5: {\n            CGFloat contentHeight = self.collectionView.fs_height - self.sectionInsets.top - self.sectionInsets.bottom;\n            CGFloat rowSpan = contentHeight/totalRows;\n            return (row + 0.5) * rowSpan - height * 0.5 + self.sectionInsets.top;\n        }\n        case 6:\n        default:\n            return self.tops[row];\n    }\n}\n\n- (NSInteger)searchStartSection:(CGRect)rect :(NSInteger)left :(NSInteger)right\n{\n    NSInteger mid = left + (right-left)/2;\n    CGFloat y = rect.origin.y;\n    CGFloat minY = self.sectionTops[mid];\n    CGFloat maxY = self.sectionBottoms[mid];\n    if (y >= minY && y < maxY) {\n        return mid;\n    } else if (y < minY) {\n        return [self searchStartSection:rect :left :mid];\n    } else {\n        return [self searchStartSection:rect :mid+1 :right];\n    }\n}\n\n- (NSInteger)searchEndSection:(CGRect)rect :(NSInteger)left :(NSInteger)right\n{\n    NSInteger mid = left + (right-left)/2;\n    CGFloat y = CGRectGetMaxY(rect);\n    CGFloat minY = self.sectionTops[mid];\n    CGFloat maxY = self.sectionBottoms[mid];\n    if (y > minY && y <= maxY) {\n        return mid;\n    } else if (y <= minY) {\n        return [self searchEndSection:rect :left :mid];\n    } else {\n        return [self searchEndSection:rect :mid+1 :right];\n    }\n}\n\n@end\n\n\n#undef kFSCalendarSeparatorInterColumns\n#undef kFSCalendarSeparatorInterRows\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarConstants.h",
    "content": "//\n//  FSCalendarConstants.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 8/28/15.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n//  https://github.com/WenchaoD\n//\n\n#import <UIKit/UIKit.h>\n#import <Foundation/Foundation.h>\n\n#pragma mark - Constants\n\nCG_EXTERN CGFloat const FSCalendarStandardHeaderHeight;\nCG_EXTERN CGFloat const FSCalendarStandardWeekdayHeight;\nCG_EXTERN CGFloat const FSCalendarStandardMonthlyPageHeight;\nCG_EXTERN CGFloat const FSCalendarStandardWeeklyPageHeight;\nCG_EXTERN CGFloat const FSCalendarStandardCellDiameter;\nCG_EXTERN CGFloat const FSCalendarStandardSeparatorThickness;\nCG_EXTERN CGFloat const FSCalendarAutomaticDimension;\nCG_EXTERN CGFloat const FSCalendarDefaultBounceAnimationDuration;\nCG_EXTERN CGFloat const FSCalendarStandardRowHeight;\nCG_EXTERN CGFloat const FSCalendarStandardTitleTextSize;\nCG_EXTERN CGFloat const FSCalendarStandardSubtitleTextSize;\nCG_EXTERN CGFloat const FSCalendarStandardWeekdayTextSize;\nCG_EXTERN CGFloat const FSCalendarStandardHeaderTextSize;\nCG_EXTERN CGFloat const FSCalendarMaximumEventDotDiameter;\n\nUIKIT_EXTERN NSInteger const FSCalendarDefaultHourComponent;\nUIKIT_EXTERN NSInteger const FSCalendarMaximumNumberOfEvents;\n\nUIKIT_EXTERN NSString * const FSCalendarDefaultCellReuseIdentifier;\nUIKIT_EXTERN NSString * const FSCalendarBlankCellReuseIdentifier;\nUIKIT_EXTERN NSString * const FSCalendarInvalidArgumentsExceptionName;\n\nCG_EXTERN CGPoint const CGPointInfinity;\nCG_EXTERN CGSize const CGSizeAutomatic;\n\n#if TARGET_INTERFACE_BUILDER\n#define FSCalendarDeviceIsIPad NO\n#else\n#define FSCalendarDeviceIsIPad [[UIDevice currentDevice].model hasPrefix:@\"iPad\"]\n#endif\n\n#define FSCalendarStandardSelectionColor   FSColorRGBA(31,119,219,1.0)\n#define FSCalendarStandardTodayColor       FSColorRGBA(198,51,42 ,1.0)\n#define FSCalendarStandardTitleTextColor   FSColorRGBA(14,69,221 ,1.0)\n#define FSCalendarStandardEventDotColor    FSColorRGBA(31,119,219,0.75)\n\n#define FSCalendarStandardLineColor        [[UIColor lightGrayColor] colorWithAlphaComponent:0.30]\n#define FSCalendarStandardSeparatorColor   [[UIColor lightGrayColor] colorWithAlphaComponent:0.60]\n\n#define FSColorRGBA(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]\n#define FSCalendarInAppExtension [[[NSBundle mainBundle] bundlePath] hasSuffix:@\".appex\"]\n\n#define FSCalendarFloor(c) floorf(c)\n#define FSCalendarRound(c) roundf(c)\n#define FSCalendarCeil(c) ceilf(c)\n#define FSCalendarMod(c1,c2) fmodf(c1,c2)\n\n#define FSCalendarHalfRound(c) (FSCalendarRound(c*2)*0.5)\n#define FSCalendarHalfFloor(c) (FSCalendarFloor(c*2)*0.5)\n#define FSCalendarHalfCeil(c) (FSCalendarCeil(c*2)*0.5)\n\n#define FSCalendarUseWeakSelf __weak __typeof__(self) FSCalendarWeakSelf = self;\n#define FSCalendarUseStrongSelf __strong __typeof__(self) self = FSCalendarWeakSelf;\n\n\n#pragma mark - Deprecated\n\n#define FSCalendarDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(\" Use \" # instead \" instead\")\n\nstatic inline void FSCalendarSliceCake(CGFloat cake, NSInteger count, CGFloat *pieces) {\n    CGFloat total = cake;\n    for (int i = 0; i < count; i++) {\n        NSInteger remains = count - i;\n        CGFloat piece = FSCalendarRound(total/remains*2)*0.5;\n        total -= piece;\n        pieces[i] = piece;\n    }\n}\n\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarConstants.m",
    "content": "//\n//  FSCalendarConstants.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 8/28/15.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n//  https://github.com/WenchaoD\n//\n\n#import \"FSCalendarConstants.h\"\n\nCGFloat const FSCalendarStandardHeaderHeight = 40;\nCGFloat const FSCalendarStandardWeekdayHeight = 25;\nCGFloat const FSCalendarStandardMonthlyPageHeight = 300.0;\nCGFloat const FSCalendarStandardWeeklyPageHeight = 108+1/3.0;\nCGFloat const FSCalendarStandardCellDiameter = 100/3.0;\nCGFloat const FSCalendarStandardSeparatorThickness = 0.5;\nCGFloat const FSCalendarAutomaticDimension = -1;\nCGFloat const FSCalendarDefaultBounceAnimationDuration = 0.15;\nCGFloat const FSCalendarStandardRowHeight = 38;\nCGFloat const FSCalendarStandardTitleTextSize = 13.5;\nCGFloat const FSCalendarStandardSubtitleTextSize = 10;\nCGFloat const FSCalendarStandardWeekdayTextSize = 14;\nCGFloat const FSCalendarStandardHeaderTextSize = 16.5;\nCGFloat const FSCalendarMaximumEventDotDiameter = 4.8;\n\nNSInteger const FSCalendarDefaultHourComponent = 0;\nNSInteger const FSCalendarMaximumNumberOfEvents = 3;\n\nNSString * const FSCalendarDefaultCellReuseIdentifier = @\"_FSCalendarDefaultCellReuseIdentifier\";\nNSString * const FSCalendarBlankCellReuseIdentifier = @\"_FSCalendarBlankCellReuseIdentifier\";\nNSString * const FSCalendarInvalidArgumentsExceptionName = @\"Invalid argument exception\";\n\nCGPoint const CGPointInfinity = {\n    .x =  CGFLOAT_MAX,\n    .y =  CGFLOAT_MAX\n};\n\nCGSize const CGSizeAutomatic = {\n    .width =  FSCalendarAutomaticDimension,\n    .height =  FSCalendarAutomaticDimension\n};\n\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarDelegationFactory.h",
    "content": "//\n//  FSCalendarDelegationFactory.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 19/12/2016.\n//  Copyright © 2016 wenchaoios. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"FSCalendarDelegationProxy.h\"\n\n@interface FSCalendarDelegationFactory : NSObject\n\n+ (FSCalendarDelegationProxy *)dataSourceProxy;\n+ (FSCalendarDelegationProxy *)delegateProxy;\n\n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarDelegationFactory.m",
    "content": "//\n//  FSCalendarDelegationFactory.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 19/12/2016.\n//  Copyright © 2016 wenchaoios. All rights reserved.\n//\n\n#import \"FSCalendarDelegationFactory.h\"\n\n@implementation FSCalendarDelegationFactory\n\n+ (FSCalendarDelegationProxy *)dataSourceProxy\n{\n    FSCalendarDelegationProxy *delegation = [[FSCalendarDelegationProxy alloc] init];\n    delegation.protocol = @protocol(FSCalendarDataSource);\n    return delegation;\n}\n\n+ (FSCalendarDelegationProxy *)delegateProxy\n{\n    FSCalendarDelegationProxy *delegation = [[FSCalendarDelegationProxy alloc] init];\n    delegation.protocol = @protocol(FSCalendarDelegateAppearance);\n    return delegation;\n}\n\n@end\n\n#undef FSCalendarSelectorEntry\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarDelegationProxy.h",
    "content": "//\n//  FSCalendarDelegationProxy.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 11/12/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n//  https://github.com/WenchaoD\n//\n//  1. Smart proxy delegation http://petersteinberger.com/blog/2013/smart-proxy-delegation/\n//  2. Manage deprecated delegation functions\n//\n\n#import <Foundation/Foundation.h>\n#import \"FSCalendar.h\"\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface FSCalendarDelegationProxy : NSProxy\n\n@property (weak  , nonatomic) id delegation;\n@property (strong, nonatomic) Protocol *protocol;\n@property (strong, nonatomic) NSDictionary<NSString *,NSString *> *deprecations;\n\n- (instancetype)init;\n- (SEL)deprecatedSelectorOfSelector:(SEL)selector;\n\n@end\n\nNS_ASSUME_NONNULL_END\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarDelegationProxy.m",
    "content": "//\n//  FSCalendarDelegationProxy.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 11/12/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendarDelegationProxy.h\"\n#import <objc/runtime.h>\n\n@implementation FSCalendarDelegationProxy\n\n- (instancetype)init\n{\n    return self;\n}\n\n- (BOOL)respondsToSelector:(SEL)selector\n{\n    BOOL responds = [self.delegation respondsToSelector:selector];\n    if (!responds) responds = [self.delegation respondsToSelector:[self deprecatedSelectorOfSelector:selector]];\n    if (!responds) responds = [super respondsToSelector:selector];\n    return responds;\n}\n\n- (BOOL)conformsToProtocol:(Protocol *)protocol\n{\n    return [self.delegation conformsToProtocol:protocol];\n}\n\n- (void)forwardInvocation:(NSInvocation *)invocation\n{\n    SEL selector = invocation.selector;\n    if (![self.delegation respondsToSelector:selector]) {\n        selector = [self deprecatedSelectorOfSelector:selector];\n        invocation.selector = selector;\n    }\n    if ([self.delegation respondsToSelector:selector]) {\n        [invocation invokeWithTarget:self.delegation];\n    }\n}\n\n- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel\n{\n    if ([self.delegation respondsToSelector:sel]) {\n        return [(NSObject *)self.delegation methodSignatureForSelector:sel];\n    }\n    SEL selector = [self deprecatedSelectorOfSelector:sel];\n    if ([self.delegation respondsToSelector:selector]) {\n        return [(NSObject *)self.delegation methodSignatureForSelector:selector];\n    }\n#if TARGET_INTERFACE_BUILDER\n    return [NSObject methodSignatureForSelector:@selector(init)];\n#else\n    struct objc_method_description desc = protocol_getMethodDescription(self.protocol, sel, NO, YES);\n    const char *types = desc.types;\n    return types?[NSMethodSignature signatureWithObjCTypes:types]:[NSObject methodSignatureForSelector:@selector(init)];\n#endif\n}\n\n- (SEL)deprecatedSelectorOfSelector:(SEL)selector\n{\n    NSString *selectorString = NSStringFromSelector(selector);\n    selectorString = self.deprecations[selectorString];\n    return NSSelectorFromString(selectorString);\n}\n\n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarDynamicHeader.h",
    "content": "//\n//  FSCalendarDynamicHeader.h\n//  Pods\n//\n//  Created by DingWenchao on 6/29/15.\n//\n//  动感头文件，仅供框架内部使用。\n//  Private header, don't use it.\n//\n\n#import <UIKit/UIKit.h>\n#import <Foundation/Foundation.h>\n\n#import \"FSCalendar.h\"\n#import \"FSCalendarCell.h\"\n#import \"FSCalendarHeaderView.h\"\n#import \"FSCalendarStickyHeader.h\"\n#import \"FSCalendarCollectionView.h\"\n#import \"FSCalendarCollectionViewLayout.h\"\n#import \"FSCalendarCalculator.h\"\n#import \"FSCalendarTransitionCoordinator.h\"\n#import \"FSCalendarDelegationProxy.h\"\n\n@interface FSCalendar (Dynamic)\n\n@property (readonly, nonatomic) FSCalendarCollectionView *collectionView;\n@property (readonly, nonatomic) FSCalendarCollectionViewLayout *collectionViewLayout;\n@property (readonly, nonatomic) FSCalendarTransitionCoordinator *transitionCoordinator;\n@property (readonly, nonatomic) FSCalendarCalculator *calculator;\n@property (readonly, nonatomic) BOOL floatingMode;\n@property (readonly, nonatomic) NSArray *visibleStickyHeaders;\n@property (readonly, nonatomic) CGFloat preferredHeaderHeight;\n@property (readonly, nonatomic) CGFloat preferredWeekdayHeight;\n\n@property (readonly, nonatomic) NSCalendar *gregorian;\n@property (readonly, nonatomic) NSDateFormatter *formatter;\n\n@property (readonly, nonatomic) UIView *contentView;\n@property (readonly, nonatomic) UIView *daysContainer;\n\n@property (assign, nonatomic) BOOL needsAdjustingViewFrame;\n\n- (void)adjustMonthPosition;\n- (void)configureAppearance;\n\n- (CGSize)sizeThatFits:(CGSize)size scope:(FSCalendarScope)scope;\n\n@end\n\n@interface FSCalendarAppearance (Dynamic)\n\n@property (readwrite, nonatomic) FSCalendar *calendar;\n\n@property (readonly, nonatomic) NSDictionary *backgroundColors;\n@property (readonly, nonatomic) NSDictionary *titleColors;\n@property (readonly, nonatomic) NSDictionary *subtitleColors;\n@property (readonly, nonatomic) NSDictionary *borderColors;\n\n@end\n\n@interface FSCalendarWeekdayView (Dynamic)\n\n@property (readwrite, nonatomic) FSCalendar *calendar;\n\n@end\n\n@interface FSCalendarCollectionViewLayout (Dynamic)\n\n@property (readonly, nonatomic) CGSize estimatedItemSize;\n\n@end\n\n@interface FSCalendarDelegationProxy()<FSCalendarDataSource,FSCalendarDelegate,FSCalendarDelegateAppearance>\n@end\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarExtensions.h",
    "content": "//\n//  FSCalendarExtensions.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 10/8/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface UIView (FSCalendarExtensions)\n\n@property (nonatomic) CGFloat fs_width;\n@property (nonatomic) CGFloat fs_height;\n\n@property (nonatomic) CGFloat fs_top;\n@property (nonatomic) CGFloat fs_left;\n@property (nonatomic) CGFloat fs_bottom;\n@property (nonatomic) CGFloat fs_right;\n\n@end\n\n\n@interface CALayer (FSCalendarExtensions)\n\n@property (nonatomic) CGFloat fs_width;\n@property (nonatomic) CGFloat fs_height;\n\n@property (nonatomic) CGFloat fs_top;\n@property (nonatomic) CGFloat fs_left;\n@property (nonatomic) CGFloat fs_bottom;\n@property (nonatomic) CGFloat fs_right;\n\n@end\n\n\n@interface NSCalendar (FSCalendarExtensions)\n\n- (nullable NSDate *)fs_firstDayOfMonth:(NSDate *)month;\n- (nullable NSDate *)fs_lastDayOfMonth:(NSDate *)month;\n- (nullable NSDate *)fs_firstDayOfWeek:(NSDate *)week;\n- (nullable NSDate *)fs_lastDayOfWeek:(NSDate *)week;\n- (nullable NSDate *)fs_middleDayOfWeek:(NSDate *)week;\n- (NSInteger)fs_numberOfDaysInMonth:(NSDate *)month;\n\n@end\n\n@interface NSMapTable (FSCalendarExtensions)\n\n- (void)setObject:(nullable id)obj forKeyedSubscript:(id<NSCopying>)key;\n- (id)objectForKeyedSubscript:(id<NSCopying>)key;\n\n@end\n\n@interface NSCache (FSCalendarExtensions)\n\n- (void)setObject:(nullable id)obj forKeyedSubscript:(id<NSCopying>)key;\n- (id)objectForKeyedSubscript:(id<NSCopying>)key;\n\n@end\n\n\n@interface NSObject (FSCalendarExtensions)\n\n#define IVAR_DEF(SET,GET,TYPE) \\\n- (void)fs_set##SET##Variable:(TYPE)value forKey:(NSString *)key; \\\n- (TYPE)fs_##GET##VariableForKey:(NSString *)key;\nIVAR_DEF(Bool, bool, BOOL)\nIVAR_DEF(Float, float, CGFloat)\nIVAR_DEF(Integer, integer, NSInteger)\nIVAR_DEF(UnsignedInteger, unsignedInteger, NSUInteger)\n#undef IVAR_DEF\n\n- (void)fs_setVariable:(id)variable forKey:(NSString *)key;\n- (id)fs_variableForKey:(NSString *)key;\n\n- (nullable id)fs_performSelector:(SEL)selector withObjects:(nullable id)firstObject, ... NS_REQUIRES_NIL_TERMINATION;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "FSCalendar/FSCalendarExtensions.m",
    "content": "//\n//  FSCalendarExtensions.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 10/8/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendarExtensions.h\"\n#import <objc/runtime.h>\n\n@implementation UIView (FSCalendarExtensions)\n\n- (CGFloat)fs_width\n{\n    return CGRectGetWidth(self.frame);\n}\n\n- (void)setFs_width:(CGFloat)fs_width\n{\n    self.frame = CGRectMake(self.fs_left, self.fs_top, fs_width, self.fs_height);\n}\n\n- (CGFloat)fs_height\n{\n    return CGRectGetHeight(self.frame);\n}\n\n- (void)setFs_height:(CGFloat)fs_height\n{\n    self.frame = CGRectMake(self.fs_left, self.fs_top, self.fs_width, fs_height);\n}\n\n- (CGFloat)fs_top\n{\n    return CGRectGetMinY(self.frame);\n}\n\n- (void)setFs_top:(CGFloat)fs_top\n{\n    self.frame = CGRectMake(self.fs_left, fs_top, self.fs_width, self.fs_height);\n}\n\n- (CGFloat)fs_bottom\n{\n    return CGRectGetMaxY(self.frame);\n}\n\n- (void)setFs_bottom:(CGFloat)fs_bottom\n{\n    self.fs_top = fs_bottom - self.fs_height;\n}\n\n- (CGFloat)fs_left\n{\n    return CGRectGetMinX(self.frame);\n}\n\n- (void)setFs_left:(CGFloat)fs_left\n{\n    self.frame = CGRectMake(fs_left, self.fs_top, self.fs_width, self.fs_height);\n}\n\n- (CGFloat)fs_right\n{\n    return CGRectGetMaxX(self.frame);\n}\n\n- (void)setFs_right:(CGFloat)fs_right\n{\n    self.fs_left = self.fs_right - self.fs_width;\n}\n\n@end\n\n\n@implementation CALayer (FSCalendarExtensions)\n\n- (CGFloat)fs_width\n{\n    return CGRectGetWidth(self.frame);\n}\n\n- (void)setFs_width:(CGFloat)fs_width\n{\n    self.frame = CGRectMake(self.fs_left, self.fs_top, fs_width, self.fs_height);\n}\n\n- (CGFloat)fs_height\n{\n    return CGRectGetHeight(self.frame);\n}\n\n- (void)setFs_height:(CGFloat)fs_height\n{\n    self.frame = CGRectMake(self.fs_left, self.fs_top, self.fs_width, fs_height);\n}\n\n- (CGFloat)fs_top\n{\n    return CGRectGetMinY(self.frame);\n}\n\n- (void)setFs_top:(CGFloat)fs_top\n{\n    self.frame = CGRectMake(self.fs_left, fs_top, self.fs_width, self.fs_height);\n}\n\n- (CGFloat)fs_bottom\n{\n    return CGRectGetMaxY(self.frame);\n}\n\n- (void)setFs_bottom:(CGFloat)fs_bottom\n{\n    self.fs_top = fs_bottom - self.fs_height;\n}\n\n- (CGFloat)fs_left\n{\n    return CGRectGetMinX(self.frame);\n}\n\n- (void)setFs_left:(CGFloat)fs_left\n{\n    self.frame = CGRectMake(fs_left, self.fs_top, self.fs_width, self.fs_height);\n}\n\n- (CGFloat)fs_right\n{\n    return CGRectGetMaxX(self.frame);\n}\n\n- (void)setFs_right:(CGFloat)fs_right\n{\n    self.fs_left = self.fs_right - self.fs_width;\n}\n\n@end\n\n@interface NSCalendar (FSCalendarExtensionsPrivate)\n\n@property (readonly, nonatomic) NSDateComponents *fs_privateComponents;\n\n@end\n\n@implementation NSCalendar (FSCalendarExtensions)\n\n- (nullable NSDate *)fs_firstDayOfMonth:(NSDate *)month\n{\n    if (!month) return nil;\n    NSDateComponents *components = [self components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:month];\n    components.day = 1;\n    return [self dateFromComponents:components];\n}\n\n- (nullable NSDate *)fs_lastDayOfMonth:(NSDate *)month\n{\n    if (!month) return nil;\n    NSDateComponents *components = [self components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:month];\n    components.month++;\n    components.day = 0;\n    return [self dateFromComponents:components];\n}\n\n- (nullable NSDate *)fs_firstDayOfWeek:(NSDate *)week\n{\n    if (!week) return nil;\n    NSDateComponents *weekdayComponents = [self components:NSCalendarUnitWeekday fromDate:week];\n    NSDateComponents *components = self.fs_privateComponents;\n    components.day = - (weekdayComponents.weekday - self.firstWeekday);\n    components.day = (components.day-7) % 7;\n    NSDate *firstDayOfWeek = [self dateByAddingComponents:components toDate:week options:0];\n    firstDayOfWeek = [self startOfDayForDate:firstDayOfWeek];\n    components.day = NSIntegerMax;\n    return firstDayOfWeek;\n}\n\n- (nullable NSDate *)fs_lastDayOfWeek:(NSDate *)week\n{\n    if (!week) return nil;\n    NSDateComponents *weekdayComponents = [self components:NSCalendarUnitWeekday fromDate:week];\n    NSDateComponents *components = self.fs_privateComponents;\n    components.day = - (weekdayComponents.weekday - self.firstWeekday);\n    components.day = (components.day-7) % 7 + 6;\n    NSDate *lastDayOfWeek = [self dateByAddingComponents:components toDate:week options:0];\n    lastDayOfWeek = [self startOfDayForDate:lastDayOfWeek];\n    components.day = NSIntegerMax;\n    return lastDayOfWeek;\n}\n\n- (nullable NSDate *)fs_middleDayOfWeek:(NSDate *)week\n{\n    if (!week) return nil;\n    NSDateComponents *weekdayComponents = [self components:NSCalendarUnitWeekday fromDate:week];\n    NSDateComponents *componentsToSubtract = self.fs_privateComponents;\n    componentsToSubtract.day = - (weekdayComponents.weekday - self.firstWeekday) + 3;\n    // Fix https://github.com/WenchaoD/FSCalendar/issues/1100 and https://github.com/WenchaoD/FSCalendar/issues/1102\n    // If firstWeekday is not 1, and weekday is less than firstWeekday, the middleDayOfWeek will be the middle day of next week\n    if (weekdayComponents.weekday < self.firstWeekday) {\n        componentsToSubtract.day = componentsToSubtract.day - 7;\n    }\n    NSDate *middleDayOfWeek = [self dateByAddingComponents:componentsToSubtract toDate:week options:0];\n    NSDateComponents *components = [self components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:middleDayOfWeek];\n    middleDayOfWeek = [self dateFromComponents:components];\n    componentsToSubtract.day = NSIntegerMax;\n    return middleDayOfWeek;\n}\n\n- (NSInteger)fs_numberOfDaysInMonth:(NSDate *)month\n{\n    if (!month) return 0;\n    NSRange days = [self rangeOfUnit:NSCalendarUnitDay\n                                        inUnit:NSCalendarUnitMonth\n                                       forDate:month];\n    return days.length;\n}\n\n- (NSDateComponents *)fs_privateComponents\n{\n    NSDateComponents *components = objc_getAssociatedObject(self, _cmd);\n    if (!components) {\n        components = [[NSDateComponents alloc] init];\n        objc_setAssociatedObject(self, _cmd, components, OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n    }\n    return components;\n}\n\n@end\n\n@implementation NSMapTable (FSCalendarExtensions)\n\n- (void)setObject:(nullable id)obj forKeyedSubscript:(id<NSCopying>)key\n{\n    if (!key) return;\n    \n    if (obj) {\n        [self setObject:obj forKey:key];\n    } else {\n        [self removeObjectForKey:key];\n    }\n}\n\n- (id)objectForKeyedSubscript:(id<NSCopying>)key\n{\n    return [self objectForKey:key];\n}\n\n@end\n\n@implementation NSCache (FSCalendarExtensions)\n\n- (void)setObject:(nullable id)obj forKeyedSubscript:(id<NSCopying>)key\n{\n    if (!key) return;\n    \n    if (obj) {\n        [self setObject:obj forKey:key];\n    } else {\n        [self removeObjectForKey:key];\n    }\n}\n\n- (id)objectForKeyedSubscript:(id<NSCopying>)key\n{\n    return [self objectForKey:key];\n}\n\n@end\n\n@implementation NSObject (FSCalendarExtensions)\n\n#define IVAR_IMP(SET,GET,TYPE) \\\n- (void)fs_set##SET##Variable:(TYPE)value forKey:(NSString *)key \\\n{ \\\n    Ivar ivar = class_getInstanceVariable([self class], key.UTF8String); \\\n    ((void (*)(id, Ivar, TYPE))object_setIvar)(self, ivar, value); \\\n} \\\n- (TYPE)fs_##GET##VariableForKey:(NSString *)key \\\n{ \\\n    Ivar ivar = class_getInstanceVariable([self class], key.UTF8String); \\\n    ptrdiff_t offset = ivar_getOffset(ivar); \\\n    unsigned char *bytes = (unsigned char *)(__bridge void *)self; \\\n    TYPE value = *((TYPE *)(bytes+offset)); \\\n    return value; \\\n}\nIVAR_IMP(Bool,bool,BOOL)\nIVAR_IMP(Float,float,CGFloat)\nIVAR_IMP(Integer,integer,NSInteger)\nIVAR_IMP(UnsignedInteger,unsignedInteger,NSUInteger)\n#undef IVAR_IMP\n\n- (void)fs_setVariable:(id)variable forKey:(NSString *)key\n{\n    Ivar ivar = class_getInstanceVariable(self.class, key.UTF8String);\n    object_setIvar(self, ivar, variable);\n}\n\n- (id)fs_variableForKey:(NSString *)key\n{\n    Ivar ivar = class_getInstanceVariable(self.class, key.UTF8String);\n    id variable = object_getIvar(self, ivar);\n    return variable;\n}\n\n- (id)fs_performSelector:(SEL)selector withObjects:(nullable id)firstObject, ...\n{\n    if (!selector) return nil;\n    NSMethodSignature *signature = [self methodSignatureForSelector:selector];\n    if (!signature) return nil;\n    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];\n    if (!invocation) return nil;\n    invocation.target = self;\n    invocation.selector = selector;\n    \n    // Parameters\n    if (firstObject) {\n        int index = 2;\n        va_list args;\n        va_start(args, firstObject);\n        if (firstObject) {\n            id obj = firstObject;\n            do {\n                const char *argType = [signature getArgumentTypeAtIndex:index];\n                if(!strcmp(argType, @encode(id))){\n                    // object\n                    [invocation setArgument:&obj atIndex:index++];\n                } else {\n                    NSString *argTypeString = [NSString stringWithUTF8String:argType];\n                    if ([argTypeString hasPrefix:@\"{\"] && [argTypeString hasSuffix:@\"}\"]) {\n                        // struct\n#define PARAM_STRUCT_TYPES(_type,_getter,_default) \\\nif (!strcmp(argType, @encode(_type))) { \\\n    _type value = [obj respondsToSelector:@selector(_getter)]?[obj _getter]:_default; \\\n    [invocation setArgument:&value atIndex:index]; \\\n}\n                        PARAM_STRUCT_TYPES(CGPoint, CGPointValue, CGPointZero)\n                        PARAM_STRUCT_TYPES(CGSize, CGSizeValue, CGSizeZero)\n                        PARAM_STRUCT_TYPES(CGRect, CGRectValue, CGRectZero)\n                        PARAM_STRUCT_TYPES(CGAffineTransform, CGAffineTransformValue, CGAffineTransformIdentity)\n                        PARAM_STRUCT_TYPES(CATransform3D, CATransform3DValue, CATransform3DIdentity)\n                        PARAM_STRUCT_TYPES(CGVector, CGVectorValue, CGVectorMake(0, 0))\n                        PARAM_STRUCT_TYPES(UIEdgeInsets, UIEdgeInsetsValue, UIEdgeInsetsZero)\n                        PARAM_STRUCT_TYPES(UIOffset, UIOffsetValue, UIOffsetZero)\n                        PARAM_STRUCT_TYPES(NSRange, rangeValue, NSMakeRange(NSNotFound, 0))\n                        \n#undef PARAM_STRUCT_TYPES\n                        index++;\n                    } else {\n                        // basic type\n#define PARAM_BASIC_TYPES(_type,_getter) \\\nif (!strcmp(argType, @encode(_type))) { \\\n    _type value = [obj respondsToSelector:@selector(_getter)]?[obj _getter]:0; \\\n    [invocation setArgument:&value atIndex:index]; \\\n}\n                        PARAM_BASIC_TYPES(BOOL, boolValue)\n                        PARAM_BASIC_TYPES(int, intValue)\n                        PARAM_BASIC_TYPES(unsigned int, unsignedIntValue)\n                        PARAM_BASIC_TYPES(char, charValue)\n                        PARAM_BASIC_TYPES(unsigned char, unsignedCharValue)\n                        PARAM_BASIC_TYPES(long, longValue)\n                        PARAM_BASIC_TYPES(unsigned long, unsignedLongValue)\n                        PARAM_BASIC_TYPES(long long, longLongValue)\n                        PARAM_BASIC_TYPES(unsigned long long, unsignedLongLongValue)\n                        PARAM_BASIC_TYPES(float, floatValue)\n                        PARAM_BASIC_TYPES(double, doubleValue)\n                        \n#undef PARAM_BASIC_TYPES\n                        index++;\n                    }\n                }\n            } while((obj = va_arg(args, id)));\n            \n        }\n        va_end(args);\n        [invocation retainArguments];\n    }\n    \n    // Execute\n    [invocation invoke];\n    \n    // Return\n    const char *returnType = signature.methodReturnType;\n    NSUInteger length = [signature methodReturnLength];\n    id returnValue;\n    if (!strcmp(returnType, @encode(void))){\n        // void\n        returnValue = nil;\n    } else if(!strcmp(returnType, @encode(id))){\n        // id\n        void *value;\n        [invocation getReturnValue:&value];\n        returnValue = (__bridge id)(value);\n        return returnValue;\n    } else {\n        NSString *returnTypeString = [NSString stringWithUTF8String:returnType];\n        if ([returnTypeString hasPrefix:@\"{\"] && [returnTypeString hasSuffix:@\"}\"]) {\n            // struct\n#define RETURN_STRUCT_TYPES(_type) \\\nif (!strcmp(returnType, @encode(_type))) { \\\n    _type value; \\\n    [invocation getReturnValue:&value]; \\\n    returnValue = [NSValue value:&value withObjCType:@encode(_type)]; \\\n}\n            RETURN_STRUCT_TYPES(CGPoint)\n            RETURN_STRUCT_TYPES(CGSize)\n            RETURN_STRUCT_TYPES(CGRect)\n            RETURN_STRUCT_TYPES(CGAffineTransform)\n            RETURN_STRUCT_TYPES(CATransform3D)\n            RETURN_STRUCT_TYPES(CGVector)\n            RETURN_STRUCT_TYPES(UIEdgeInsets)\n            RETURN_STRUCT_TYPES(UIOffset)\n            RETURN_STRUCT_TYPES(NSRange)\n            \n#undef RETURN_STRUCT_TYPES\n        } else {\n            // basic\n            void *buffer = (void *)malloc(length);\n            [invocation getReturnValue:buffer];\n#define RETURN_BASIC_TYPES(_type) \\\n    if (!strcmp(returnType, @encode(_type))) { \\\n    returnValue = @(*((_type*)buffer)); \\\n}\n            RETURN_BASIC_TYPES(BOOL)\n            RETURN_BASIC_TYPES(int)\n            RETURN_BASIC_TYPES(unsigned int)\n            RETURN_BASIC_TYPES(char)\n            RETURN_BASIC_TYPES(unsigned char)\n            RETURN_BASIC_TYPES(long)\n            RETURN_BASIC_TYPES(unsigned long)\n            RETURN_BASIC_TYPES(long long)\n            RETURN_BASIC_TYPES(unsigned long long)\n            RETURN_BASIC_TYPES(float)\n            RETURN_BASIC_TYPES(double)\n            \n#undef RETURN_BASIC_TYPES\n            free(buffer);\n        }\n    }\n    return returnValue;\n}\n\n@end\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarHeaderView.h",
    "content": "//\n//  FSCalendarHeader.h\n//  Pods\n//\n//  Created by Wenchao Ding on 29/1/15.\n//\n//\n\n#import <UIKit/UIKit.h>\n\n@class FSCalendar, FSCalendarAppearance, FSCalendarHeaderLayout, FSCalendarCollectionView;\n\n@interface FSCalendarHeaderView : UIView\n\n@property (weak, nonatomic) FSCalendarCollectionView *collectionView;\n@property (weak, nonatomic) FSCalendarHeaderLayout *collectionViewLayout;\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (assign, nonatomic) UICollectionViewScrollDirection scrollDirection;\n@property (assign, nonatomic) BOOL scrollEnabled;\n\n- (void)setScrollOffset:(CGFloat)scrollOffset;\n- (void)setScrollOffset:(CGFloat)scrollOffset animated:(BOOL)animated;\n- (void)reloadData;\n- (void)configureAppearance;\n\n@end\n\n\n@interface FSCalendarHeaderCell : UICollectionViewCell\n\n@property (weak, nonatomic) UILabel *titleLabel;\n@property (weak, nonatomic) FSCalendarHeaderView *header;\n\n@end\n\n@interface FSCalendarHeaderLayout : UICollectionViewFlowLayout\n\n@end\n\n@interface FSCalendarHeaderTouchDeliver : UIView\n\n@property (weak, nonatomic) FSCalendar *calendar;\n@property (weak, nonatomic) FSCalendarHeaderView *header;\n\n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarHeaderView.m",
    "content": "//\n//  FSCalendarHeader.m\n//  Pods\n//\n//  Created by Wenchao Ding on 29/1/15.\n//\n//\n\n#import \"FSCalendar.h\"\n#import \"FSCalendarExtensions.h\"\n#import \"FSCalendarHeaderView.h\"\n#import \"FSCalendarCollectionView.h\"\n#import \"FSCalendarDynamicHeader.h\"\n\n@interface FSCalendarHeaderView ()<UICollectionViewDataSource,UICollectionViewDelegate,FSCalendarCollectionViewInternalDelegate>\n\n- (void)scrollToOffset:(CGFloat)scrollOffset animated:(BOOL)animated;\n- (void)configureCell:(FSCalendarHeaderCell *)cell atIndexPath:(NSIndexPath *)indexPath;\n\n@end\n\n@implementation FSCalendarHeaderView\n\n#pragma mark - Life cycle\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        [self initialize];\n    }\n    return self;\n}\n\n- (id)initWithCoder:(NSCoder *)aDecoder\n{\n    self = [super initWithCoder:aDecoder];\n    if (self) {\n        [self initialize];\n    }\n    return self;\n}\n\n- (void)initialize\n{\n    _scrollDirection = UICollectionViewScrollDirectionHorizontal;\n    _scrollEnabled = YES;\n    \n    FSCalendarHeaderLayout *collectionViewLayout = [[FSCalendarHeaderLayout alloc] init];\n    self.collectionViewLayout = collectionViewLayout;\n    \n    FSCalendarCollectionView *collectionView = [[FSCalendarCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:collectionViewLayout];\n    collectionView.scrollEnabled = NO;\n    collectionView.userInteractionEnabled = NO;\n    collectionView.backgroundColor = [UIColor clearColor];\n    collectionView.dataSource = self;\n    collectionView.delegate = self;\n    collectionView.showsHorizontalScrollIndicator = NO;\n    collectionView.showsVerticalScrollIndicator = NO;\n    [self addSubview:collectionView];\n    [collectionView registerClass:[FSCalendarHeaderCell class] forCellWithReuseIdentifier:@\"cell\"];\n    self.collectionView = collectionView;\n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    self.collectionView.frame = CGRectMake(0, self.fs_height*0.1, self.fs_width, self.fs_height*0.9);\n}\n\n- (void)dealloc\n{\n    self.collectionView.dataSource = nil;\n    self.collectionView.delegate = nil;\n}\n\n#pragma mark - <UICollectionViewDataSource>\n\n- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section\n{\n    NSInteger numberOfSections = self.calendar.collectionView.numberOfSections;\n    if (self.scrollDirection == UICollectionViewScrollDirectionVertical) {\n        return numberOfSections;\n    }\n    return numberOfSections + 2;\n}\n\n- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath\n{\n    FSCalendarHeaderCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@\"cell\" forIndexPath:indexPath];\n    cell.header = self;\n    [self configureCell:cell atIndexPath:indexPath];\n    return cell;\n}\n\n- (void)scrollViewDidScroll:(UIScrollView *)scrollView\n{\n    [_collectionView.visibleCells makeObjectsPerformSelector:@selector(setNeedsLayout)];\n}\n\n#pragma mark - Properties\n\n- (void)setCalendar:(FSCalendar *)calendar\n{\n    _calendar = calendar;\n    [self configureAppearance];\n}\n\n- (void)setScrollOffset:(CGFloat)scrollOffset\n{\n    [self setScrollOffset:scrollOffset animated:NO];\n}\n\n- (void)setScrollOffset:(CGFloat)scrollOffset animated:(BOOL)animated\n{\n    [self scrollToOffset:scrollOffset animated:NO];\n}\n\n- (void)scrollToOffset:(CGFloat)scrollOffset animated:(BOOL)animated\n{\n    if (self.scrollDirection == UICollectionViewScrollDirectionHorizontal) {\n        CGFloat step = self.collectionView.fs_width*((self.scrollDirection==UICollectionViewScrollDirectionHorizontal)?0.5:1);\n        [_collectionView setContentOffset:CGPointMake((scrollOffset+0.5)*step, 0) animated:animated];\n    } else {\n        CGFloat step = self.collectionView.fs_height;\n        [_collectionView setContentOffset:CGPointMake(0, scrollOffset*step) animated:animated];\n    }\n}\n\n- (void)setScrollDirection:(UICollectionViewScrollDirection)scrollDirection\n{\n    if (_scrollDirection != scrollDirection) {\n        _scrollDirection = scrollDirection;\n        _collectionViewLayout.scrollDirection = scrollDirection;\n        [self setNeedsLayout];\n    }\n}\n\n- (void)setScrollEnabled:(BOOL)scrollEnabled\n{\n    if (_scrollEnabled != scrollEnabled) {\n        _scrollEnabled = scrollEnabled;\n        [_collectionView.visibleCells makeObjectsPerformSelector:@selector(setNeedsLayout)];\n    }\n}\n\n#pragma mark - Public\n\n- (void)reloadData\n{\n    [_collectionView reloadData];\n}\n\n- (void)configureCell:(FSCalendarHeaderCell *)cell atIndexPath:(NSIndexPath *)indexPath\n{\n    FSCalendarAppearance *appearance = self.calendar.appearance;\n    cell.titleLabel.font = appearance.headerTitleFont;\n    cell.titleLabel.textColor = appearance.headerTitleColor;\n    cell.titleLabel.textAlignment = appearance.headerTitleAlignment; \n    _calendar.formatter.dateFormat = appearance.headerDateFormat;\n    NSString *text = nil;\n    switch (self.calendar.transitionCoordinator.representingScope) {\n        case FSCalendarScopeMonth: {\n            if (_scrollDirection == UICollectionViewScrollDirectionHorizontal) {\n                // 多出的两项需要制空\n                if ((indexPath.item == 0 || indexPath.item == [self.collectionView numberOfItemsInSection:0] - 1)) {\n                    text = nil;\n                } else {\n                    NSDate *date = [self.calendar.gregorian dateByAddingUnit:NSCalendarUnitMonth value:indexPath.item-1 toDate:self.calendar.minimumDate options:0];\n                    text = [_calendar.formatter stringFromDate:date];\n                }\n            } else {\n                NSDate *date = [self.calendar.gregorian dateByAddingUnit:NSCalendarUnitMonth value:indexPath.item toDate:self.calendar.minimumDate options:0];\n                text = [_calendar.formatter stringFromDate:date];\n            }\n            break;\n        }\n        case FSCalendarScopeWeek: {\n            if ((indexPath.item == 0 || indexPath.item == [self.collectionView numberOfItemsInSection:0] - 1)) {\n                text = nil;\n            } else {\n                NSDate *firstPage = [self.calendar.gregorian fs_middleDayOfWeek:self.calendar.minimumDate];\n                NSDate *date = [self.calendar.gregorian dateByAddingUnit:NSCalendarUnitWeekOfYear value:indexPath.item-1 toDate:firstPage options:0];\n                text = [_calendar.formatter stringFromDate:date];\n            }\n            break;\n        }\n        default: {\n            break;\n        }\n    }\n    BOOL usesUpperCase   = (appearance.caseOptions & 15) == FSCalendarCaseOptionsHeaderUsesUpperCase;\n    BOOL usesCapitalized = (appearance.caseOptions & 15) == FSCalendarCaseOptionsHeaderUsesCapitalized;\n    if (usesUpperCase) {\n        text = text.uppercaseString;\n    } else if (usesCapitalized) {\n        text = text.capitalizedString;\n    }\n    cell.titleLabel.text = text;\n    [cell setNeedsLayout];\n}\n\n- (void)configureAppearance\n{\n    [self.collectionView.visibleCells enumerateObjectsUsingBlock:^(__kindof FSCalendarHeaderCell * _Nonnull cell, NSUInteger idx, BOOL * _Nonnull stop) {\n        [self configureCell:cell atIndexPath:[self.collectionView indexPathForCell:cell]];\n    }];\n}\n\n@end\n\n\n@implementation FSCalendarHeaderCell\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];\n        titleLabel.lineBreakMode = NSLineBreakByWordWrapping;\n        titleLabel.numberOfLines = 0;\n        [self.contentView addSubview:titleLabel];\n        self.titleLabel = titleLabel;\n    }\n    return self;\n}\n\n- (void)setBounds:(CGRect)bounds\n{\n    [super setBounds:bounds];\n    self.titleLabel.frame = bounds;\n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n\n    CGPoint titleHeaderOffset = self.header.calendar.appearance.headerTitleOffset;\n    self.titleLabel.frame = CGRectOffset(self.contentView.bounds,\n                                         titleHeaderOffset.x,\n                                         titleHeaderOffset.y);\n    \n    if (self.header.scrollDirection == UICollectionViewScrollDirectionHorizontal) {\n        CGFloat position = [self.contentView convertPoint:CGPointMake(CGRectGetMidX(self.contentView.bounds), CGRectGetMidY(self.contentView.bounds)) toView:self.header].x;\n        CGFloat center = CGRectGetMidX(self.header.bounds);\n        if (self.header.scrollEnabled) {\n            self.contentView.alpha = 1.0 - (1.0-self.header.calendar.appearance.headerMinimumDissolvedAlpha)*ABS(center-position)/self.fs_width;\n        } else {\n            self.contentView.alpha = (position > self.header.fs_width*0.25 && position < self.header.fs_width*0.75);\n        }\n    } else if (self.header.scrollDirection == UICollectionViewScrollDirectionVertical) {\n        CGFloat position = [self.contentView convertPoint:CGPointMake(CGRectGetMidX(self.contentView.bounds), CGRectGetMidY(self.contentView.bounds)) toView:self.header].y;\n        CGFloat center = CGRectGetMidY(self.header.bounds);\n        self.contentView.alpha = 1.0 - (1.0-self.header.calendar.appearance.headerMinimumDissolvedAlpha)*ABS(center-position)/self.fs_height;\n    }\n}\n\n@end\n\n\n@implementation FSCalendarHeaderLayout\n\n- (instancetype)init\n{\n    self = [super init];\n    if (self) {\n        self.scrollDirection = UICollectionViewScrollDirectionHorizontal;\n        self.minimumInteritemSpacing = 0;\n        self.minimumLineSpacing = 0;\n        self.sectionInset = UIEdgeInsetsZero;\n        self.itemSize = CGSizeMake(1, 1);\n        [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(didReceiveOrientationChangeNotification:) name:UIDeviceOrientationDidChangeNotification object:nil];\n    }\n    return self;\n}\n\n- (void)dealloc\n{\n    [NSNotificationCenter.defaultCenter removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];\n}\n\n- (void)prepareLayout\n{\n    [super prepareLayout];\n    \n    self.itemSize = CGSizeMake(\n                               self.collectionView.fs_width*((self.scrollDirection==UICollectionViewScrollDirectionHorizontal)?0.5:1),\n                               self.collectionView.fs_height\n                              );\n    \n}\n\n- (void)didReceiveOrientationChangeNotification:(NSNotification *)notificatino\n{\n    [self invalidateLayout];\n}\n\n- (BOOL)flipsHorizontallyInOppositeLayoutDirection\n{\n    return YES;\n}\n\n@end\n\n@implementation FSCalendarHeaderTouchDeliver\n\n- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event\n{\n    UIView *hitView = [super hitTest:point withEvent:event];\n    if (hitView == self) {\n        return _calendar.collectionView ?: hitView;\n    }\n    return hitView;\n}\n\n@end\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarSeparatorDecorationView.h",
    "content": "//\n//  FSCalendarSeparatorDecorationView.h\n//  FSCalendar\n//\n//  Created by 丁文超 on 2018/10/10.\n//  Copyright © 2018 wenchaoios. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface FSCalendarSeparatorDecorationView : UICollectionReusableView\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "FSCalendar/FSCalendarSeparatorDecorationView.m",
    "content": "//\n//  FSCalendarSeparatorDecorationView.m\n//  FSCalendar\n//\n//  Created by 丁文超 on 2018/10/10.\n//  Copyright © 2018 wenchaoios. All rights reserved.\n//\n\n#import \"FSCalendarSeparatorDecorationView.h\"\n#import \"FSCalendarConstants.h\"\n\n@implementation FSCalendarSeparatorDecorationView\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        self.backgroundColor = FSCalendarStandardSeparatorColor;\n    }\n    return self;\n}\n\n- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes\n{\n    self.frame = layoutAttributes.frame;\n}\n\n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarStickyHeader.h",
    "content": "//\n//  FSCalendarStaticHeader.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 9/17/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@class FSCalendar,FSCalendarAppearance;\n\n@interface FSCalendarStickyHeader : UICollectionReusableView\n\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (weak, nonatomic) UILabel *titleLabel;\n\n@property (strong, nonatomic) NSDate *month;\n\n- (void)configureAppearance;\n\n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarStickyHeader.m",
    "content": "//\n//  FSCalendarStaticHeader.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 9/17/15.\n//  Copyright (c) 2015 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendarStickyHeader.h\"\n#import \"FSCalendar.h\"\n#import \"FSCalendarWeekdayView.h\"\n#import \"FSCalendarExtensions.h\"\n#import \"FSCalendarConstants.h\"\n#import \"FSCalendarDynamicHeader.h\"\n\n@interface FSCalendarStickyHeader ()\n\n@property (weak  , nonatomic) UIView  *contentView;\n@property (weak  , nonatomic) UIView  *bottomBorder;\n@property (weak  , nonatomic) FSCalendarWeekdayView *weekdayView;\n\n@end\n\n@implementation FSCalendarStickyHeader\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        \n        UIView *view;\n        UILabel *label;\n        \n        view = [[UIView alloc] initWithFrame:CGRectZero];\n        view.backgroundColor = [UIColor clearColor];\n        [self addSubview:view];\n        self.contentView = view;\n        \n        label = [[UILabel alloc] initWithFrame:CGRectZero];\n        label.textAlignment = NSTextAlignmentCenter;\n        label.numberOfLines = 0;\n        [_contentView addSubview:label];\n        self.titleLabel = label;\n        \n        view = [[UIView alloc] initWithFrame:CGRectZero];\n        view.backgroundColor = FSCalendarStandardLineColor;\n        [_contentView addSubview:view];\n        self.bottomBorder = view;\n        \n        FSCalendarWeekdayView *weekdayView = [[FSCalendarWeekdayView alloc] init];\n        [self.contentView addSubview:weekdayView];\n        self.weekdayView = weekdayView;\n    }\n    return self;\n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    \n    _contentView.frame = self.bounds;\n    \n    CGFloat weekdayHeight = _calendar.preferredWeekdayHeight;\n    CGFloat weekdayMargin = weekdayHeight * 0.1;\n    CGFloat titleWidth = _contentView.fs_width;\n    \n    self.weekdayView.frame = CGRectMake(0, _contentView.fs_height-weekdayHeight-weekdayMargin, self.contentView.fs_width, weekdayHeight);\n    \n    CGFloat titleHeight = [@\"1\" sizeWithAttributes:@{NSFontAttributeName:self.calendar.appearance.headerTitleFont}].height*1.5 + weekdayMargin*3;\n    \n    _bottomBorder.frame = CGRectMake(0, _contentView.fs_height-weekdayHeight-weekdayMargin*2, _contentView.fs_width, 1.0);\n\n    CGPoint titleHeaderOffset = self.calendar.appearance.headerTitleOffset;\n    _titleLabel.frame = CGRectMake(titleHeaderOffset.x,\n                                   titleHeaderOffset.y+_bottomBorder.fs_bottom-titleHeight-weekdayMargin,\n                                   titleWidth,\n                                   titleHeight);\n}\n\n#pragma mark - Properties\n\n- (void)setCalendar:(FSCalendar *)calendar\n{\n    if (![_calendar isEqual:calendar]) {\n        _calendar = calendar;\n        _weekdayView.calendar = calendar;\n        [self configureAppearance];\n    }\n}\n\n#pragma mark - Private methods\n\n- (void)configureAppearance\n{\n    _titleLabel.font = self.calendar.appearance.headerTitleFont;\n    _titleLabel.textColor = self.calendar.appearance.headerTitleColor;\n    _titleLabel.textAlignment = self.calendar.appearance.headerTitleAlignment;\n    _bottomBorder.backgroundColor = self.calendar.appearance.headerSeparatorColor;\n    [self.weekdayView configureAppearance];\n}\n\n- (void)setMonth:(NSDate *)month\n{\n    _month = month;\n    _calendar.formatter.dateFormat = self.calendar.appearance.headerDateFormat;\n    BOOL usesUpperCase   = (self.calendar.appearance.caseOptions & 15) == FSCalendarCaseOptionsHeaderUsesUpperCase;\n    BOOL usesCapitalized = (self.calendar.appearance.caseOptions & 15) == FSCalendarCaseOptionsHeaderUsesCapitalized;\n\n    NSString *text = [_calendar.formatter stringFromDate:_month];\n    if (usesUpperCase) {\n        text = text.uppercaseString;\n    } else if (usesCapitalized) {\n        text = text.capitalizedString;\n    }\n\n    self.titleLabel.text = text;\n}\n\n@end\n\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarTransitionCoordinator.h",
    "content": "//\n//  FSCalendarTransitionCoordinator.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 3/13/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendar.h\"\n#import \"FSCalendarCollectionView.h\"\n#import \"FSCalendarCollectionViewLayout.h\"\n\ntypedef NS_ENUM(NSUInteger, FSCalendarTransitionState) {\n    FSCalendarTransitionStateIdle,\n    FSCalendarTransitionStateChanging,\n    FSCalendarTransitionStateFinishing,\n};\n\n@interface FSCalendarTransitionCoordinator : NSObject <UIGestureRecognizerDelegate>\n\n@property (assign, nonatomic) FSCalendarTransitionState state;\n\n@property (assign, nonatomic) CGSize cachedMonthSize;\n\n@property (readonly, nonatomic) FSCalendarScope representingScope;\n\n- (instancetype)initWithCalendar:(FSCalendar *)calendar;\n\n- (void)performScopeTransitionFromScope:(FSCalendarScope)fromScope toScope:(FSCalendarScope)toScope animated:(BOOL)animated;\n- (void)performBoundingRectTransitionFromMonth:(NSDate *)fromMonth toMonth:(NSDate *)toMonth duration:(CGFloat)duration;\n- (CGRect)boundingRectForScope:(FSCalendarScope)scope page:(NSDate *)page;\n\n- (void)handleScopeGesture:(id)sender;\n\n@end\n\n\n@interface FSCalendarTransitionAttributes : NSObject\n\n@property (assign, nonatomic) CGRect sourceBounds;\n@property (assign, nonatomic) CGRect targetBounds;\n@property (strong, nonatomic) NSDate *sourcePage;\n@property (strong, nonatomic) NSDate *targetPage;\n@property (assign, nonatomic) NSInteger focusedRow;\n@property (strong, nonatomic) NSDate *focusedDate;\n@property (assign, nonatomic) FSCalendarScope targetScope;\n\n- (void)revert;\n    \n@end\n\n"
  },
  {
    "path": "FSCalendar/FSCalendarTransitionCoordinator.m",
    "content": "//\n//  FSCalendarTransitionCoordinator.m\n//  FSCalendar\n//\n//  Created by Wenchao Ding on 3/13/16.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendarTransitionCoordinator.h\"\n#import \"FSCalendarExtensions.h\"\n#import \"FSCalendarDynamicHeader.h\"\n\n@interface FSCalendarTransitionCoordinator ()\n\n@property (weak, nonatomic) FSCalendarCollectionView *collectionView;\n@property (weak, nonatomic) FSCalendarCollectionViewLayout *collectionViewLayout;\n@property (weak, nonatomic) FSCalendar *calendar;\n\n@property (strong, nonatomic) FSCalendarTransitionAttributes *transitionAttributes;\n\n- (FSCalendarTransitionAttributes *)createTransitionAttributesTargetingScope:(FSCalendarScope)targetScope;\n\n- (void)performTransitionCompletionAnimated:(BOOL)animated;\n\n- (void)performAlphaAnimationWithProgress:(CGFloat)progress;\n- (void)performPathAnimationWithProgress:(CGFloat)progress;\n\n- (void)scopeTransitionDidBegin:(UIPanGestureRecognizer *)panGesture;\n- (void)scopeTransitionDidUpdate:(UIPanGestureRecognizer *)panGesture;\n- (void)scopeTransitionDidEnd:(UIPanGestureRecognizer *)panGesture;\n\n- (void)boundingRectWillChange:(CGRect)targetBounds animated:(BOOL)animated;\n\n@end\n\n@implementation FSCalendarTransitionCoordinator\n\n- (instancetype)initWithCalendar:(FSCalendar *)calendar\n{\n    self = [super init];\n    if (self) {\n        self.calendar = calendar;\n        self.collectionView = self.calendar.collectionView;\n        self.collectionViewLayout = self.calendar.collectionViewLayout;\n    }\n    return self;\n}\n\n#pragma mark - Target actions\n\n- (void)handleScopeGesture:(UIPanGestureRecognizer *)sender\n{\n    switch (sender.state) {\n        case UIGestureRecognizerStateBegan: {\n            [self scopeTransitionDidBegin:sender];\n            break;\n        }\n        case UIGestureRecognizerStateChanged: {\n            [self scopeTransitionDidUpdate:sender];\n            break;\n        }\n        case UIGestureRecognizerStateEnded:\n        case UIGestureRecognizerStateCancelled:\n        case UIGestureRecognizerStateFailed:{\n            [self scopeTransitionDidEnd:sender];\n            break;\n        }\n        default: {\n            break;\n        }\n    }\n}\n\n#pragma mark - <UIGestureRecognizerDelegate>\n\n- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer\n{\n    if (self.state != FSCalendarTransitionStateIdle) {\n        return NO;\n    }\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n    \n    if (gestureRecognizer == self.calendar.scopeGesture && self.calendar.collectionViewLayout.scrollDirection == UICollectionViewScrollDirectionVertical) {\n        return NO;\n    }\n    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [[gestureRecognizer valueForKey:@\"_targets\"] containsObject:self.calendar]) {\n        CGPoint velocity = [(UIPanGestureRecognizer *)gestureRecognizer velocityInView:gestureRecognizer.view];\n        BOOL shouldStart = self.calendar.scope == FSCalendarScopeWeek ? velocity.y >= 0 : velocity.y <= 0;\n        if (!shouldStart) return NO;\n        shouldStart = (ABS(velocity.x)<=ABS(velocity.y));\n        if (shouldStart) {\n            self.calendar.collectionView.panGestureRecognizer.enabled = NO;\n            self.calendar.collectionView.panGestureRecognizer.enabled = YES;\n        }\n        return shouldStart;\n    }\n    return YES;\n    \n#pragma GCC diagnostic pop\n    \n    return NO;\n}\n\n- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer\n{\n    return otherGestureRecognizer == self.collectionView.panGestureRecognizer && self.collectionView.decelerating;\n}\n\n- (void)scopeTransitionDidBegin:(UIPanGestureRecognizer *)panGesture\n{\n    if (self.state != FSCalendarTransitionStateIdle) return;\n    \n    CGPoint velocity = [panGesture velocityInView:panGesture.view];\n    if (self.calendar.scope == FSCalendarScopeMonth && velocity.y >= 0) {\n        return;\n    }\n    if (self.calendar.scope == FSCalendarScopeWeek && velocity.y <= 0) {\n        return;\n    }\n    self.state = FSCalendarTransitionStateChanging;\n    \n    self.transitionAttributes = [self createTransitionAttributesTargetingScope:1-self.calendar.scope];\n    \n    if (self.transitionAttributes.targetScope == FSCalendarScopeMonth) {\n        [self prepareWeekToMonthTransition];\n    }\n}\n\n- (void)scopeTransitionDidUpdate:(UIPanGestureRecognizer *)panGesture\n{\n    if (self.state != FSCalendarTransitionStateChanging) return;\n    \n    CGFloat translation = ABS([panGesture translationInView:panGesture.view].y);\n    CGFloat progress = ({\n        CGFloat maxTranslation = ABS(CGRectGetHeight(self.transitionAttributes.targetBounds) - CGRectGetHeight(self.transitionAttributes.sourceBounds));\n        translation = MIN(maxTranslation, translation);\n        translation = MAX(0, translation);\n        CGFloat progress = translation/maxTranslation;\n        progress;\n    });\n    [self performAlphaAnimationWithProgress:progress];\n    [self performPathAnimationWithProgress:progress];\n}\n\n- (void)scopeTransitionDidEnd:(UIPanGestureRecognizer *)panGesture\n{\n    if (self.state != FSCalendarTransitionStateChanging) return;\n    \n    self.state = FSCalendarTransitionStateFinishing;\n\n    CGFloat translation = [panGesture translationInView:panGesture.view].y;\n    CGFloat velocity = [panGesture velocityInView:panGesture.view].y;\n    \n    CGFloat progress = ({\n        CGFloat maxTranslation = CGRectGetHeight(self.transitionAttributes.targetBounds) - CGRectGetHeight(self.transitionAttributes.sourceBounds);\n        translation = MAX(0, translation);\n        translation = MIN(maxTranslation, translation);\n        CGFloat progress = translation/maxTranslation;\n        progress;\n    });\n    if (velocity * translation < 0) {\n        [self.transitionAttributes revert];\n    }\n    [self performTransition:self.transitionAttributes.targetScope fromProgress:progress toProgress:1.0 animated:YES];\n}\n\n#pragma mark - Public methods\n\n- (void)performScopeTransitionFromScope:(FSCalendarScope)fromScope toScope:(FSCalendarScope)toScope animated:(BOOL)animated\n{\n    if (fromScope == toScope) {\n        [self.calendar willChangeValueForKey:@\"scope\"];\n        [self.calendar fs_setUnsignedIntegerVariable:toScope forKey:@\"_scope\"];\n        [self.calendar didChangeValueForKey:@\"scope\"];\n        return;\n    }\n    // Start transition\n    self.state = FSCalendarTransitionStateFinishing;\n    FSCalendarTransitionAttributes *attr = [self createTransitionAttributesTargetingScope:toScope];\n    self.transitionAttributes = attr;\n    if (toScope == FSCalendarScopeMonth) {\n        [self prepareWeekToMonthTransition];\n    }\n    [self performTransition:self.transitionAttributes.targetScope fromProgress:0 toProgress:1 animated:animated];\n}\n\n- (void)performBoundingRectTransitionFromMonth:(NSDate *)fromMonth toMonth:(NSDate *)toMonth duration:(CGFloat)duration\n{\n    if (!self.calendar.adjustsBoundingRectWhenChangingMonths) return;\n    if (self.calendar.scope != FSCalendarScopeMonth) return;\n    NSInteger lastRowCount = [self.calendar.calculator numberOfRowsInMonth:fromMonth];\n    NSInteger currentRowCount = [self.calendar.calculator numberOfRowsInMonth:toMonth];\n    if (lastRowCount != currentRowCount) {\n        CGFloat animationDuration = duration;\n        CGRect bounds = [self boundingRectForScope:FSCalendarScopeMonth page:toMonth];\n        self.state = FSCalendarTransitionStateChanging;\n        void (^completion)(BOOL) = ^(BOOL finished) {\n            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MAX(0, duration-animationDuration) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n                self.calendar.needsAdjustingViewFrame = YES;\n                [self.calendar setNeedsLayout];\n                self.state = FSCalendarTransitionStateIdle;\n            });\n        };\n        if (FSCalendarInAppExtension) {\n            // Detect today extension: http://stackoverflow.com/questions/25048026/ios-8-extension-how-to-detect-running\n            [self boundingRectWillChange:bounds animated:YES];\n            completion(YES);\n        } else {\n            [UIView animateWithDuration:animationDuration delay:0  options:UIViewAnimationOptionAllowUserInteraction animations:^{\n                [self boundingRectWillChange:bounds animated:YES];\n            } completion:completion];\n        }\n        \n    }\n}\n\n#pragma mark - Private properties\n\n- (void)performTransitionCompletionAnimated:(BOOL)animated\n{\n    switch (self.transitionAttributes.targetScope) {\n        case FSCalendarScopeWeek: {\n            self.collectionViewLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;\n            self.calendar.calendarHeaderView.scrollDirection = self.collectionViewLayout.scrollDirection;\n            self.calendar.needsAdjustingViewFrame = YES;\n            [self.collectionView reloadData];\n            [self.calendar.calendarHeaderView reloadData];\n            break;\n        }\n        case FSCalendarScopeMonth: {\n            self.calendar.needsAdjustingViewFrame = YES;\n            break;\n        }\n        default:\n            break;\n    }\n    self.state = FSCalendarTransitionStateIdle;\n    self.transitionAttributes = nil;\n    [self.calendar setNeedsLayout];\n    [self.calendar layoutIfNeeded];\n}\n\n- (FSCalendarTransitionAttributes *)createTransitionAttributesTargetingScope:(FSCalendarScope)targetScope\n{\n    FSCalendarTransitionAttributes *attributes = [[FSCalendarTransitionAttributes alloc] init];\n    attributes.sourceBounds = self.calendar.bounds;\n    attributes.sourcePage = self.calendar.currentPage;\n    attributes.targetScope = targetScope;\n    attributes.focusedDate = ({\n        NSArray<NSDate *> *candidates = ({\n            NSMutableArray *dates = self.calendar.selectedDates.reverseObjectEnumerator.allObjects.mutableCopy;\n            if (self.calendar.today) {\n                [dates addObject:self.calendar.today];\n            }\n            if (targetScope == FSCalendarScopeWeek) {\n                [dates addObject:self.calendar.currentPage];\n            } else {\n                [dates addObject:[self.calendar.gregorian dateByAddingUnit:NSCalendarUnitDay value:3 toDate:self.calendar.currentPage options:0]];\n            }\n            dates.copy;\n        });\n        NSArray<NSDate *> *visibleCandidates = [candidates filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSDate *  _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {\n            NSIndexPath *indexPath = [self.calendar.calculator indexPathForDate:evaluatedObject scope:1-targetScope];\n            NSInteger currentSection = [self.calendar.calculator indexPathForDate:self.calendar.currentPage scope:1-targetScope].section;\n            return indexPath.section == currentSection;\n        }]];\n        NSDate *date = visibleCandidates.firstObject;\n        date;\n    });\n    attributes.focusedRow = ({\n        NSIndexPath *indexPath = [self.calendar.calculator indexPathForDate:attributes.focusedDate scope:FSCalendarScopeMonth];\n        FSCalendarCoordinate coordinate = [self.calendar.calculator coordinateForIndexPath:indexPath];\n        coordinate.row;\n    });\n    attributes.targetPage = ({\n        NSDate *targetPage = targetScope == FSCalendarScopeMonth ? [self.calendar.gregorian fs_firstDayOfMonth:attributes.focusedDate] : [self.calendar.gregorian fs_middleDayOfWeek:attributes.focusedDate];\n        targetPage;\n    });\n    attributes.targetBounds = [self boundingRectForScope:attributes.targetScope page:attributes.targetPage];\n    return attributes;\n}\n\n#pragma mark - Private properties\n\n- (FSCalendarScope)representingScope\n{\n    switch (self.state) {\n        case FSCalendarTransitionStateIdle: {\n            return self.calendar.scope;\n        }\n        case FSCalendarTransitionStateChanging:\n        case FSCalendarTransitionStateFinishing: {\n            return FSCalendarScopeMonth;\n        }\n    }\n}\n\n#pragma mark - Private methods\n\n- (CGRect)boundingRectForScope:(FSCalendarScope)scope page:(NSDate *)page\n{\n    CGSize contentSize;\n    switch (scope) {\n        case FSCalendarScopeMonth: {\n            contentSize = self.calendar.adjustsBoundingRectWhenChangingMonths ? [self.calendar sizeThatFits:self.calendar.frame.size scope:scope] : self.cachedMonthSize;\n            break;\n        }\n        case FSCalendarScopeWeek: {\n            contentSize = [self.calendar sizeThatFits:self.calendar.frame.size scope:scope];\n            break;\n        }\n    }\n    return (CGRect){CGPointZero, contentSize};\n}\n\n- (void)boundingRectWillChange:(CGRect)targetBounds animated:(BOOL)animated\n{\n    self.calendar.contentView.fs_height = CGRectGetHeight(targetBounds);\n    self.calendar.daysContainer.fs_height = CGRectGetHeight(targetBounds)-self.calendar.preferredHeaderHeight-self.calendar.preferredWeekdayHeight;\n    [[self.calendar valueForKey:@\"delegateProxy\"] calendar:self.calendar boundingRectWillChange:targetBounds animated:animated];\n}\n\n- (void)performTransition:(FSCalendarScope)targetScope fromProgress:(CGFloat)fromProgress toProgress:(CGFloat)toProgress animated:(BOOL)animated\n{\n    FSCalendarTransitionAttributes *attr = self.transitionAttributes;\n    \n    [self.calendar willChangeValueForKey:@\"scope\"];\n    [self.calendar fs_setUnsignedIntegerVariable:targetScope forKey:@\"_scope\"];\n    if (targetScope == FSCalendarScopeWeek) {\n        [self.calendar fs_setVariable:attr.targetPage forKey:@\"_currentPage\"];\n    }\n    [self.calendar didChangeValueForKey:@\"scope\"];\n    \n    if (animated) {\n        if (self.calendar.delegate && ([self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)])) {\n            [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{\n                [self performAlphaAnimationWithProgress:toProgress];\n                self.collectionView.fs_top = [self calculateOffsetForProgress:toProgress];\n                [self boundingRectWillChange:attr.targetBounds animated:YES];\n            } completion:^(BOOL finished) {\n                [self performTransitionCompletionAnimated:YES];\n            }];\n        }\n    } else {\n        [self performTransitionCompletionAnimated:animated];\n        [self boundingRectWillChange:attr.targetBounds animated:animated];\n    }\n}\n\n- (void)performAlphaAnimationWithProgress:(CGFloat)progress\n{\n    CGFloat opacity = self.transitionAttributes.targetScope == FSCalendarScopeWeek ? MAX((1-progress*1.1), 0) : progress;\n    NSArray<FSCalendarCell *> *surroundingCells = [self.calendar.visibleCells filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(FSCalendarCell *  _Nullable cell, NSDictionary<NSString *,id> * _Nullable bindings) {\n        if (!CGRectContainsPoint(self.collectionView.bounds, cell.center)) {\n            return NO;\n        }\n        NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];\n        NSInteger row = [self.calendar.calculator coordinateForIndexPath:indexPath].row;\n        return row != self.transitionAttributes.focusedRow;\n    }]];\n    [surroundingCells setValue:@(opacity) forKey:@\"alpha\"];\n}\n\n- (void)performPathAnimationWithProgress:(CGFloat)progress\n{\n    CGFloat targetHeight = CGRectGetHeight(self.transitionAttributes.targetBounds);\n    CGFloat sourceHeight = CGRectGetHeight(self.transitionAttributes.sourceBounds);\n    CGFloat currentHeight = sourceHeight - (sourceHeight-targetHeight)*progress;\n    CGRect currentBounds = CGRectMake(0, 0, CGRectGetWidth(self.transitionAttributes.targetBounds), currentHeight);\n    self.collectionView.fs_top = [self calculateOffsetForProgress:progress];\n    [self boundingRectWillChange:currentBounds animated:NO];\n    if (self.transitionAttributes.targetScope == FSCalendarScopeMonth) {\n        self.calendar.contentView.fs_height = targetHeight;\n    }\n}\n\n- (CGFloat)calculateOffsetForProgress:(CGFloat)progress\n{\n    NSIndexPath *indexPath = [self.calendar.calculator indexPathForDate:self.transitionAttributes.focusedDate scope:FSCalendarScopeMonth];\n    CGRect frame = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:indexPath].frame;\n    CGFloat ratio = self.transitionAttributes.targetScope == FSCalendarScopeWeek ? progress : (1 - progress);\n    CGFloat offset = (-frame.origin.y + self.collectionViewLayout.sectionInsets.top) * ratio;\n    return offset;\n}\n\n- (void)prepareWeekToMonthTransition\n{\n    [self.calendar fs_setVariable:self.transitionAttributes.targetPage forKey:@\"_currentPage\"];\n    self.calendar.contentView.fs_height = CGRectGetHeight(self.transitionAttributes.targetBounds);\n    self.collectionViewLayout.scrollDirection = (UICollectionViewScrollDirection)self.calendar.scrollDirection;\n    self.calendar.calendarHeaderView.scrollDirection = self.collectionViewLayout.scrollDirection;\n    self.calendar.needsAdjustingViewFrame = YES;\n    \n    [CATransaction begin];\n    [CATransaction setDisableActions:NO];\n    [self.collectionView reloadData];\n    [self.calendar.calendarHeaderView reloadData];\n    [self.calendar layoutIfNeeded];\n    [CATransaction commit];\n    \n    self.collectionView.fs_top = [self calculateOffsetForProgress:0];\n}\n\n@end\n\n@implementation FSCalendarTransitionAttributes\n\n- (void)revert\n{\n    CGRect tempRect = self.sourceBounds;\n    self.sourceBounds = self.targetBounds;\n    self.targetBounds = tempRect;\n\n    NSDate *tempDate = self.sourcePage;\n    self.sourcePage = self.targetPage;\n    self.targetPage = tempDate;\n    \n    self.targetScope = 1 - self.targetScope;\n}\n    \n@end\n"
  },
  {
    "path": "FSCalendar/FSCalendarWeekdayView.h",
    "content": "//\n//  FSCalendarWeekdayView.h\n//  FSCalendar\n//\n//  Created by dingwenchao on 03/11/2016.\n//  Copyright © 2016 dingwenchao. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@class FSCalendar;\n\n@interface FSCalendarWeekdayView : UIView\n\n/**\n An array of UILabel objects displaying the weekday symbols.\n */\n@property (readonly, nonatomic) NSArray<UILabel *> *weekdayLabels;\n\n- (void)configureAppearance;\n\n@end\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "FSCalendar/FSCalendarWeekdayView.m",
    "content": "//\n//  FSCalendarWeekdayView.m\n//  FSCalendar\n//\n//  Created by dingwenchao on 03/11/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSCalendarWeekdayView.h\"\n#import \"FSCalendar.h\"\n#import \"FSCalendarDynamicHeader.h\"\n#import \"FSCalendarExtensions.h\"\n\n@interface FSCalendarWeekdayView()\n\n@property (strong, nonatomic) NSPointerArray *weekdayPointers;\n@property (weak  , nonatomic) UIView *contentView;\n@property (weak  , nonatomic) FSCalendar *calendar;\n\n- (void)commonInit;\n\n@end\n\n@implementation FSCalendarWeekdayView\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        [self commonInit];\n    }\n    return self;\n}\n\n- (instancetype)initWithCoder:(NSCoder *)coder\n{\n    self = [super initWithCoder:coder];\n    if (self) {\n        [self commonInit];\n    }\n    return self;\n}\n\n- (void)commonInit\n{\n    UIView *contentView = [[UIView alloc] initWithFrame:CGRectZero];\n    [self addSubview:contentView];\n    _contentView = contentView;\n    \n    _weekdayPointers = [NSPointerArray weakObjectsPointerArray];\n    for (int i = 0; i < 7; i++) {\n        UILabel *weekdayLabel = [[UILabel alloc] initWithFrame:CGRectZero];\n        weekdayLabel.textAlignment = NSTextAlignmentCenter;\n        [self.contentView addSubview:weekdayLabel];\n        [_weekdayPointers addPointer:(__bridge void * _Nullable)(weekdayLabel)];\n    }\n}\n\n- (void)layoutSubviews\n{\n    [super layoutSubviews];\n    \n    self.contentView.frame = self.bounds;\n    \n    // Position Calculation\n    NSInteger count = self.weekdayPointers.count;\n    size_t size = sizeof(CGFloat)*count;\n    CGFloat *widths = malloc(size);\n    CGFloat contentWidth = self.contentView.fs_width;\n    FSCalendarSliceCake(contentWidth, count, widths);\n    \n    BOOL opposite = NO;\n    if (@available(iOS 9.0, *)) {\n        UIUserInterfaceLayoutDirection direction = [UIView userInterfaceLayoutDirectionForSemanticContentAttribute:self.calendar.semanticContentAttribute];\n        opposite = (direction == UIUserInterfaceLayoutDirectionRightToLeft);\n    }\n    CGFloat x = 0;\n    for (NSInteger i = 0; i < count; i++) {\n        CGFloat width = widths[i];\n        NSInteger labelIndex = opposite ? count-1-i : i;\n        UILabel *label = [self.weekdayPointers pointerAtIndex:labelIndex];\n        label.frame = CGRectMake(x, 0, width, self.contentView.fs_height);\n        x = CGRectGetMaxX(label.frame);\n    }\n    free(widths);\n}\n\n- (void)setCalendar:(FSCalendar *)calendar\n{\n    _calendar = calendar;\n    [self configureAppearance];\n}\n\n- (NSArray<UILabel *> *)weekdayLabels\n{\n    return self.weekdayPointers.allObjects;\n}\n\n- (void)configureAppearance\n{\n    BOOL useVeryShortWeekdaySymbols = (self.calendar.appearance.caseOptions & (15<<4) ) == FSCalendarCaseOptionsWeekdayUsesSingleUpperCase;\n    NSArray *weekdaySymbols = useVeryShortWeekdaySymbols ? self.calendar.gregorian.veryShortStandaloneWeekdaySymbols : self.calendar.gregorian.shortStandaloneWeekdaySymbols;\n    BOOL useDefaultWeekdayCase = (self.calendar.appearance.caseOptions & (15<<4) ) == FSCalendarCaseOptionsWeekdayUsesDefaultCase;\n    \n    for (NSInteger i = 0; i < self.weekdayPointers.count; i++) {\n        NSInteger index = (i + self.calendar.firstWeekday-1) % 7;\n        UILabel *label = [self.weekdayPointers pointerAtIndex:i];\n        label.font = self.calendar.appearance.weekdayFont;\n        label.textColor = self.calendar.appearance.weekdayTextColor;\n        label.text = useDefaultWeekdayCase ? weekdaySymbols[index] : [weekdaySymbols[index] uppercaseString];\n    }\n\n}\n\n@end\n"
  },
  {
    "path": "FSCalendar/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>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(MARKETING_VERSION)</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>282</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n\t<key>net.goout.GoOut.groupIdentifier</key>\n\t<string>$(GROUP_IDENTIFIER)</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSCalendar/include/module.modulemap",
    "content": "module FSCalendar {\n    header \"FSCalendar.h\"\n    header \"FSCalendarAppearance.h\"\n    header \"FSCalendarCalculator.h\"\n    header \"FSCalendarCell.h\"\n    header \"FSCalendarCollectionView.h\"\n    header \"FSCalendarCollectionViewLayout.h\"\n    header \"FSCalendarConstants.h\"\n    header \"FSCalendarDelegationFactory.h\"\n    header \"FSCalendarDelegationProxy.h\"\n    header \"FSCalendarDynamicHeader.h\"\n    header \"FSCalendarExtensions.h\"\n    header \"FSCalendarHeaderView.h\"\n    header \"FSCalendarSeparatorDecorationView.h\"\n    header \"FSCalendarStickyHeader.h\"\n    header \"FSCalendarTransitionCoordinator.h\"\n    header \"FSCalendarWeekdayView.h\"\n\n    export *\n}\n"
  },
  {
    "path": "FSCalendar.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name             = \"FSCalendar\"\n  s.version          = \"2.8.4\"\n  s.summary          = \"A superiorly awesome iOS7+ calendar control, compatible with Objective-C and Swift.\"\n  \n  s.homepage         = \"https://github.com/WenchaoD/FSCalendar\"\n  s.screenshots      = \"https://cloud.githubusercontent.com/assets/5186464/10262249/4fabae40-69f2-11e5-97ab-afbacd0a3da2.jpg\"\n  s.license          = 'MIT'\n  s.author           = { \"Wenchao Ding\" => \"f33chobits@gmail.com\" }\n  s.source           = { :git => \"https://github.com/WenchaoD/FSCalendar.git\", :tag => s.version.to_s }\n\n  s.platform     = :ios\n  s.ios.deployment_target = '8.0'\n  s.requires_arc = true\n  s.framework    = 'UIKit', 'QuartzCore'\n  s.source_files = 'FSCalendar/*.{h,m}'\n\nend\n"
  },
  {
    "path": "FSCalendarExamples.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Example-Objc/FSCalendar.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Example-Swift/FSCalendarSwiftExample.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Example-TodayExtension/Example-TodayExtension.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "FSCalendarExamples.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": "LICENSE",
    "content": "Copyright (c) 2013-2016 FSCalendar (https://github.com/WenchaoD/FSCalendar)\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": "MOREUSAGE.md",
    "content": "# More usage\n\n### If you want `FSCalendar` to scroll vertically\n\n* Objective - c\n\n```objective-c\n_calendar.scrollDirection = FSCalendarScrollDirectionVertical;\n```\n\n* Swift\n\n```swift\ncalendar.scrollDirection = .vertical \n```\n\n![fscalendar-vertical](https://cloud.githubusercontent.com/assets/5186464/8448624/384e344c-1ffc-11e5-8b0b-1c3951dab2e1.gif)\n\n### If you want `FSCalendar` to scroll horizontally (Default)\n\n* Objective - c\n\n```objective-c\n_calendar.scrollDirection = FSCalendarScrollDirectionHorizontal; // By default\n```\n\n* Swift\n\n```swift\ncalendar.scrollDirection = .Horizontal \n```\n\n![fscalendar-horizontal](https://cloud.githubusercontent.com/assets/5186464/8448696/059e9acc-1ffd-11e5-8a95-aff6d871c6e1.gif)\n\n## Focus on selected date on ***week mode***\n![fscalendar-scope](https://cloud.githubusercontent.com/assets/5186464/12474251/aec94a32-c054-11e5-8b30-9e3d03d9a846.gif)\n\n* There are cases such as `Changing Scope`、`Changing month while showsPlaceholders is false` will trigger a bounds changing of FSCalendar, make sure the frame is adjusted in `-calendar:boundingRectWillChange:animated:`\n\n```objc\n// For autoLayout\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n    _calendarHeightConstraint.constant = CGRectGetHeight(bounds);\n    [self.view layoutIfNeeded];\n}\n```\n\n```objc\n// For manual layout\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n    calendar.frame = (CGRect){calendar.frame.origin,bounds.size};\n}\n```\n\n### For week mode\n\n* Objective-C\n\n```objective-c\n_calendar.scope = FSCalendarScopeWeek;\n```\n\n* Swift\n\n```swift\ncalendar.scope = .week \n```\n\n### For month mode\n\n* Objective - c\n\n```objective-c\n_calendar.scope = FSCalendarScopeMonth; // By default\n```\n\n* Swift\n\n```swift\ncalendar.scope = .month \n```\n\n![fscalendar-scope](https://cloud.githubusercontent.com/assets/5186464/12474251/aec94a32-c054-11e5-8b30-9e3d03d9a846.gif)\n\n### To select more than one date\n\n* Objective-C \n\n```objective-c\ncalendar.allowsMultipleSelection = YES;\n```\n\n* Swift\n\n```swift\ncalendar.allowsMultipleSelection = true;\n```\n\n\n![fscalendar-mulipleselection](https://cloud.githubusercontent.com/assets/5186464/9751497/368f55f6-56d8-11e5-9af5-0d09ba13f0eb.png)\n\n### If you want `FSCalendar` to use `Monday` as the first column (or any other weekday)\n\n* Objective-C \n\n```objective-c\n_calendar.firstWeekday = 2; \n```\n\n* Swift\n\n```swift\ncalendar.firstWeekday = 2\n```\n\n![fscalendar---monday](https://cloud.githubusercontent.com/assets/5186464/8448782/c92505e4-1ffd-11e5-95c0-9bf3c8bec669.png)\n\n\n### The date format of header can be customized\n\n* Objective-C \n\n```objective-c\ncalendar.appearance.headerDateFormat = @\"MMM yy\";\n```\n\n* Swift\n\n```swift\ncalendar.appearance.headerDateFormat = \"MMM yy\"\n```\n\n![fscalendar---headerformat](https://cloud.githubusercontent.com/assets/5186464/8449322/15d79168-2003-11e5-997a-06c6721dd807.png)\n\n### You can define the appearance\n\n* Objective-c\n\n```objective-c\n_calendar.appearance.weekdayTextColor = [UIColor redColor];\n_calendar.appearance.headerTitleColor = [UIColor redColor];\n_calendar.appearance.eventColor = [UIColor greenColor];\n_calendar.appearance.selectionColor = [UIColor blueColor];\n_calendar.appearance.todayColor = [UIColor orangeColor];\n_calendar.appearance.todaySelectionColor = [UIColor blackColor];\n```\n\n* Swift\n\n```objective-c\ncalendar.appearance.weekdayTextColor = UIColor.redColor\ncalendar.appearance.headerTitleColor = UIColor.redColor\ncalendar.appearance.eventColor = UIColor.greenColor\ncalendar.appearance.selectionColor = UIColor.blueColor\ncalendar.appearance.todayColor = UIColor.orangeColor\ncalendar.appearance.todaySelectionColor = UIColor.blackColor\n```\n\n\n![fscalendar---colors](https://cloud.githubusercontent.com/assets/5186464/8449300/d55d1c7a-2002-11e5-8de6-be04f3783456.png)\n\n### The day shape doesn't have to be a circle\n\n* Objective-C\n\n```objective-c\ncalendar.appearance.borderRadius = 0\n```\n\n* Swift\n\n```swift\ncalendar.appearance.borderRadius = 0\n```\n\n![fscalendar---rectangle](https://cloud.githubusercontent.com/assets/5186464/8449186/d38ea39c-2001-11e5-99f4-32fcd6120a01.png)\n\n### `FSCalendar` can show subtitle for each day\n\n* Objective-C\n\n```objective-c\n// FSCalendarDataSource\n- (NSString *)calendar:(FSCalendar *)calendar subtitleForDate:(NSDate *)date\n{\n    return yourSubtitle;\n}\n```\n\n* Swift\n\n```swift\n// FSCalendarDataSource\nfunc calendar(_ calendar: FSCalendar!, subtitleFor date: NSDate!) -> String! {\n    return yourSubtitle\n}\n```\n\n![fscalendar---subtitle2](https://cloud.githubusercontent.com/assets/5186464/8449075/b0bb34ee-2000-11e5-9c4a-401bc708d9ea.png)\n<br/>\n![fscalendar---subtitle1](https://cloud.githubusercontent.com/assets/5186464/8449076/b0be3d88-2000-11e5-9c5d-22ecd325b6cc.png)\n\n### And event dot for some days\n\n* Objective-C\n\n```objective-c\n// FSCalendarDataSource\n- (BOOL)calendar:(FSCalendar *)calendar hasEventForDate:(NSDate *)date\n{\n    return shouldShowEventDot;\n}\n```\n\n* Swift\n\n```swift\n// FSCalendarDataSource\nfunc calendar(calendar: FSCalendar!, hasEventForDate date: NSDate!) -> Bool {\n    return shouldShowEventDot\n}\n```\n\n### Or image for some days\n\n* Objective - c\n\n```objective-c\n// FSCalendarDataSource\n- (UIImage *)calendar:(FSCalendar *)calendar imageForDate:(NSDate *)date\n{\n    return anyImage;\n}\n```\n\n* Swift\n\n```swift\n// FSCalendarDataSource\nfunc calendar(_ calendar: FSCalendar!, imageFor date: NSDate!) -> UIImage! {\n    return anyImage\n}\n```\n\n![fscalendar---image](https://cloud.githubusercontent.com/assets/5186464/8449772/e94d3126-2006-11e5-8871-e4f8dbce81ea.png)\n\n#### You can hide top and bottom borders\n\n* Objective-C\n\n```objective-c\ncalendar.clipsToBounds = YES\n```\n\n* Swift\n\n```swift\ncalendar.clipsToBounds = true\n```\n\n![fscalendar---image](https://cloud.githubusercontent.com/assets/403372/13673426/3c207c16-e6d9-11e5-9c2a-111c4c15582f.png)\n\n#### There are left and right boundaries\n\n```objective-c\n// FSCalendarDataSource\n- (NSDate *)minimumDateForCalendar:(FSCalendar *)calendar\n{\n    return yourMinimumDate;\n}\n\n- (NSDate *)maximumDateForCalendar:(FSCalendar *)calendar\n{\n    return yourMaximumDate;\n}\n```\n\n### You can do something when a date is selected\n\n* Objective - c\n\n```objective-c\n// FSCalendarDelegate\n- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date\n{\n    // Do something\n}\n```\n\n* Swift\n\n```swift\n// FSCalendarDelegate\nfunc calendar(calendar: FSCalendar!, didSelectDate date: NSDate!) {\n    \n}\n\n```\n\n### You can prevent it from being selected\n\n* Objective - c\n\n```objective-c\n// FSCalendarDelegate\n- (BOOL)calendar:(FSCalendar *)calendar shouldSelectDate:(NSDate *)date\n{\n    if ([dateShouldNotBeSelected]) {\n        return NO;\n    }\n    return YES;\n}\n```\n\n* Swift\n\n```swift\nfunc calendar(calendar: FSCalendar!, shouldSelectDate date: NSDate!) -> Bool {\n    if dateShouldNotBeSelected {\n        return false\n    }\n    return true\n}\n```\n \n\n### You will get notified when `FSCalendar` changes the month or week\n\n* Objective-C\n\n```objective-c\n- (void)calendarCurrentMonthDidChange:(FSCalendar *)calendar\n{\n    // Do something\n}\n```\n\n* Swift\n\n```swift\nfunc calendarCurrentMonthDidChange(_ calendar: FSCalendar!) {\n    // Do something\n}\n```\n\n* `fakeSubtitles` and `fakedSelectedDay` is only used for preview in Interface Builder\n\n\n## Q & A\n\n### Q:&nbsp;&nbsp;What if I don't need the `today` circle?\nJust nill-out the `today` property like:\n\n```objc\nself.calendar.today = nil;\n```\n\n### Q:&nbsp;&nbsp;Can we hide this?\n![fscalendar---headeralpha](https://cloud.githubusercontent.com/assets/5186464/8450978/217855ca-2012-11e5-8b97-a9b45ece4e71.png)\n\n```objc\nself.calendar.appearance.headerMinimumDissolvedAlpha = 0.0;\n```\n\n### Q:&nbsp;&nbsp;Can we refresh the calendar after a network request?\nYes. Like UITableView or UICollectionView, there is also `reloadData` in `FSCalendar`;\n\n```objc\n[self.calendar reloadData];\n```\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.3\nimport PackageDescription\n\nlet package = Package(\n    name: \"FSCalendar\",\n    platforms: [.iOS(.v9)],\n    products: [\n        .library(\n            name: \"FSCalendar\",\n            targets: [\"FSCalendar\"]\n        ),\n    ],\n    targets: [\n        .target(\n            name: \"FSCalendar\",\n            dependencies: [],\n            path: \"FSCalendar/\",\n            exclude: [\"Info.plist\"]\n        )\n    ]\n)\n"
  },
  {
    "path": "README.md",
    "content": "\n![logo](https://cloud.githubusercontent.com/assets/5186464/16540124/efc51f72-408b-11e6-934a-4e750b8b55bb.png)\n<br/><br/>\n[![Apps Using](https://img.shields.io/badge/Apps%20Using-%3E%2010,000-00BFFF.svg?style=plastic)](https://cocoapods.org/pods/FSCalendar)\n[![Total Downloads](https://img.shields.io/badge/Total%20Downloads-%3E%20500,000-00BFFF.svg?style=plastic)](https://cocoapods.org/pods/FSCalendar)\n<br>\n[![Travis](https://travis-ci.org/WenchaoD/FSCalendar.svg?branch=master)](https://travis-ci.org/WenchaoD/FSCalendar)\n[![Version](https://img.shields.io/cocoapods/v/FSCalendar.svg?style=flat)](http://cocoadocs.org/docsets/FSCalendar)\n[![Platform](https://img.shields.io/badge/platform-iOS%207%2B-blue.svg?style=flat)](http://cocoadocs.org/docsets/FSCalendar)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![SwiftPM](https://img.shields.io/badge/SPM-supported-DE5C43.svg?style=flat)](https://swift.org/package-manager/)\n<br>\n[![Languages](https://img.shields.io/badge/language-objc%20|%20swift-FF69B4.svg?style=plastic)](#)\n\n# Table of contents\n* [Screenshots](#screenshots)\n* [Installation](#installation)\n* [Pre-knowledge](#pre-knowledge)\n* [Support](#support)\n* [Contact](#contact)\n\n## <a id=\"screenshots\"></a>Screenshots \n\n### iPhone\n![fscalendar](https://cloud.githubusercontent.com/assets/5186464/10262249/4fabae40-69f2-11e5-97ab-afbacd0a3da2.jpg)\n\n### iPad\n![fscalendar-ipad](https://cloud.githubusercontent.com/assets/5186464/10927681/d2448cb6-82dc-11e5-9d11-f664a06698a7.jpg)\n\n### Safe Orientation\n![fscalendar-scope-orientation-autolayout](https://cloud.githubusercontent.com/assets/5186464/20325758/ea125e1e-abc0-11e6-9e29-491acbcb0d07.gif)\n\n### Today Extension\n|    iOS8/9    |    iOS10    |\n|--------------|-------------|\n|![today1](https://cloud.githubusercontent.com/assets/5186464/20288375/ed3fba0e-ab0d-11e6-8b15-43d3dc656f22.gif)|![today2](https://cloud.githubusercontent.com/assets/5186464/20288378/f11e318c-ab0d-11e6-8d1d-9d89b563e9d7.gif)|\n\n### Interactive Scope Gesture\n| ![1](https://cloud.githubusercontent.com/assets/5186464/21559640/e92a9ccc-ce8a-11e6-8c60-e52204f33249.gif) |\n| ---- |\n\n### DIY support\n|  ![1](https://cloud.githubusercontent.com/assets/5186464/20026983/22354a0e-a342-11e6-8ae6-0614ea7f35ae.gif)    |\n| -------------  |\n> To customize your own cell, view DIY Example in `Example-Swift` or `Example-Objc`\n\n\n### Swipe-To-Choose\n\n|Single-Selection<br/>Swipe-To-Choose|Multiple-Selection<br/>Swipe-To-Choose|DIY<br/>Swipe-To-Choose|\n|----------|--------|--------|\n|![1](https://cloud.githubusercontent.com/assets/5186464/20257768/cb1905d4-aa86-11e6-9ef7-af76f9caa024.gif)|![2](https://cloud.githubusercontent.com/assets/5186464/20257826/254070ec-aa87-11e6-81b1-1815453fd464.gif)|![3](https://cloud.githubusercontent.com/assets/5186464/20257836/2ffa3252-aa87-11e6-8ff9-3b40f5b2307b.gif)|\n\n## Achievement of Users <a id=\"achievement\"></a>\n\n|  ![1](https://cloud.githubusercontent.com/assets/5186464/21747193/3111e4ee-d59a-11e6-8e4d-ca695b53e421.png)    |  ![2](https://cloud.githubusercontent.com/assets/5186464/21747393/42a753fa-d5a0-11e6-9cb2-de7cc642e69e.png)  |  ![3](https://cloud.githubusercontent.com/assets/5186464/21897255/ff78fcdc-d923-11e6-9d59-62119bc4343f.png)  |  ![4](https://cloud.githubusercontent.com/assets/5186464/21747192/3111cacc-d59a-11e6-8626-44cd75ebd794.png)  |\n| ------------- | ------------- | ------------- | ------------- |\n\n#### [***More Achievements***](https://github.com/WenchaoD/FSCalendar/wiki/) are available in [***FSCalendar Gallery***](https://github.com/WenchaoD/FSCalendar/wiki/)  \n\n# <a id=\"installation\"></a>Installation\n\n## CocoaPods:\n\n* For iOS8+: 👍\n\n```ruby\nuse_frameworks!\ntarget '<Your Target Name>' do\n    pod 'FSCalendar'\nend\n```\n\n* For iOS7+:\n\n```ruby\ntarget '<Your Target Name>' do\n\tpod 'FSCalendar'\nend\n```\n\n> [NSCalendarExtension](https://github.com/WenchaoD/NSCalendarExtension) is required to get iOS7 compatibility.\n\n## Carthage: \n* For iOS8+\n\n```ruby\ngithub \"WenchaoD/FSCalendar\"\n```\n\n## SPM:\n\nAdd dependency:\n```swift\n.package(url: \"https://github.com/WenchaoD/FSCalendar.git\", from: \"2.8.4\")\n```\n\n## Manually:\n* Drag all files under `FSCalendar` folder into your project. 👍\n\n> Alternatively to give it a test run, simply press `command+u` in `Example-Objc` or `Example-Swift` and launch the ***UITest Target***. <br>\n> Only the methods marked \"👍\" support IBInspectable / IBDesignable feature. [Have fun with Interface builder](#roll_with_interface_builder)\n\n\n# Setup\n\n## Use Interface Builder\n\n1、 Drag an UIView object to ViewController Scene\n2、 Change the `Custom Class` to `FSCalendar`<br/>\n3、 Link `dataSource` and `delegate` to the ViewController <br/>\n\n![fscalendar-ib](https://cloud.githubusercontent.com/assets/5186464/9488580/a360297e-4c0d-11e5-8548-ee9274e7c4af.jpg)\n\n4、 Finally, implement `FSCalendarDataSource` and `FSCalendarDelegate` in your `ViewController`\n\n## Or use code\n\n```objc\n@property (weak , nonatomic) FSCalendar *calendar;\n```\n```objc\n// In loadView(Recommended) or viewDidLoad\nFSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, 0, 320, 300)];\ncalendar.dataSource = self;\ncalendar.delegate = self;\n[self.view addSubview:calendar];\nself.calendar = calendar;\n```\n<br/>\n\n## Or swift\n\n* To use `FSCalendar` in swift, you need to [Create Bridge Header](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html) first.\n\n\n```swift\nfileprivate weak var calendar: FSCalendar!\n```\n```swift\n// In loadView or viewDidLoad\nlet calendar = FSCalendar(frame: CGRect(x: 0, y: 0, width: 320, height: 300))\ncalendar.dataSource = self\ncalendar.delegate = self\nview.addSubview(calendar)\nself.calendar = calendar\n```\n\n> To use **FSCalendar** in Swift3, see `Example-Swift` for details.\n\n\n## <a id='adjusts_frame_dynamicly' /></a>Warning \n`FSCalendar` ***doesn't*** update frame by itself, Please implement\n\n* For ***AutoLayout***\n\n```objc\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n    self.calendarHeightConstraint.constant = CGRectGetHeight(bounds);\n    // Do other updates here\n    [self.view layoutIfNeeded];\n}\n```\n\n* For ***Manual Layout***\n\n```objc\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n    calendar.frame = (CGRect){calendar.frame.origin,bounds.size};\n    // Do other updates here\n}\n```\n\n* If you are using ***Masonry***\n\n```objc\n- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated\n{\n    [calendar mas_updateConstraints:^(MASConstraintMaker *make) {\n        make.height.equalTo(@(bounds.size.height));\n        // Do other updates\n    }];\n    [self.view layoutIfNeeded];\n}\n```\n\n* If you are using ***SnapKit***\n\n```swift\nfunc calendar(_ calendar: FSCalendar, boundingRectWillChange bounds: CGRect, animated: Bool) {\n    calendar.snp.updateConstraints { (make) in\n        make.height.equalTo(bounds.height)\n        // Do other updates\n    }\n    self.view.layoutIfNeeded()\n}\n```\n\n### <a id=\"roll_with_interface_builder\"></a> Roll with Interface Builder\n![fscalendar - ibdesignable](https://cloud.githubusercontent.com/assets/5186464/9301716/2e76a2ca-4503-11e5-8450-1fa7aa93e9fd.gif)\n\n# <a id=\"pre-knowledge\"></a>Pre-knowledge\n\n> In `Swift3`, `NSDate` and `NSDateFormatter` have been renamed to ***Date*** and ***DateFormatter*** , see `Example-Swift` for details.\n\n## How to create NSDate object\n\n* By **NSCalendar**.\n\n```objc\nself.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];\n```\n\nThen:\n\n```objc\nNSDate *date = [gregorian dateWithEra:1 year:2016 month:9 day:10 hour:0 minute:0 second:0 nanosecond:0];\n// 2016-09-10 00:00:00\n```\n\n\n* Or by **NSDateFormatter**\n\n```objc\nself.formatter = [[NSDateFormatter alloc] init];\nself.formatter.dateFormat = @\"yyyy-MM-dd\";\n```\n\nThen:\n\n```objc\nNSDate *date = [self.formatter dateFromString:@\"2016-09-10\"];\n```\n\n## How to print out NSDate object\n\n* Use **NSDateFormatter**\n\n```objc\nself.formatter = [[NSDateFormatter alloc] init];\nself.formatter.dateFormat = @\"yyyy/MM/dd\";\n```\n\n```objc\nNSString *string = [self.formatter stringFromDate:date];\nNSLog(@\"Date is %@\", string);\n```\n\n## How to manipulate NSDate with NSCalendar\n\n```objc\nself.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];\n```\n* Get component of NSDate\n\n```objc\nNSInteger era = [self.gregorian component:NSCalendarUnitEra fromDate:date];\nNSInteger year = [self.gregorian component:NSCalendarUnitYear fromDate:date];\nNSInteger month = [self.gregorian component:NSCalendarUnitMonth fromDate:date];\nNSInteger day = [self.gregorian component:NSCalendarUnitDay fromDate:date];\nNSInteger hour = [self.gregorian component:NSCalendarUnitHour fromDate:date];\nNSInteger minute = [self.gregorian component:NSCalendarUnitMinute fromDate:date];\n...\n\n```\n\n* Get next **month**\n\n```objc\nNSDate *nextMonth = [self.gregorain dateByAddingUnit:NSCalendarUnitMonth value:1 toDate:date options:0];\n```\n\n* Get next **day**\n\n```objc\nNSDate *nextDay = [self.gregorain dateByAddingUnit:NSCalendarUnitDay value:1 toDate:date options:0];\n```\n\n* Is date in today/tomorrow/yesterday/weekend\n\n```objc\nBOOL isToday = [self.gregorian isDateInToday:date];\nBOOL isYesterday = [self.gregorian isDateInYesterday:date];\nBOOL isTomorrow = [self.gregorian isDateInTomorrow:date];\nBOOL isWeekend = [self.gregorian isDateInWeekend:date];\n```\n\n* Compare two dates\n\n```objc\n\nBOOL sameDay = [self.gregorian isDate:date1 inSameDayAsDate:date2];\n// Yes if the date1 and date2 are in same day\n\n\n[self.gregorian compareDate:date1 toDate:date2 toUnitGranularity:unit];\n// compare the era/year/month/day/hour/minute .etc ...\n// return NSOrderAscending/NSOrderSame/NSOrderDecending\n\nBOOL inSameUnit = [self.gregorian isDate:date1 equalToDate:date2 toUnitGranularity:unit];\n// if the given unit (era/year/month/day/hour/minute .etc) are the same\n\n\n```\n\n\n## <a id=\"support\"></a>Support this repo\n* [**★Star**](#) this repo \n<br/>\n* Support with &nbsp; <a href=\"https://www.paypal.me/WenchaoD\" target=\"_blank\"><img src=\"https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom.svg\" width=\"100\" height=\"40\" style=\"margin-bottom:-15px;\"></a>\n<br/>\n* Support with <a href=\"https://user-images.githubusercontent.com/5186464/45949944-46960480-c030-11e8-9e90-30b015698cf6.png\" target=\"_blank\"><img src=\"http://a1.mzstatic.com/us/r30/Purple49/v4/50/16/b3/5016b341-39c1-b47b-2994-d7e23823baed/icon175x175.png\" width=\"40\" height=\"40\" style=\"margin-bottom:-15px;-webkit-border-radius:10px;border:1px solid rgba(30, 154, 236, 1);\"></a> or\n<a href=\"https://cloud.githubusercontent.com/assets/5186464/15096872/b06f3a3a-153c-11e6-89f9-2e9c7b88ef42.png\" target=\"_blank\"><img src=\"http://a4.mzstatic.com/us/r30/Purple49/v4/23/31/14/233114f8-2e8d-7b63-8dc5-85d29893061e/icon175x175.jpeg\" height=\"40\" width=\"40\" style=\"margin-bottom:-15px; -webkit-border-radius: 10px;border:1px solid rgba(43, 177, 0, 1)\"></a>\n\n\n<br/>\n\n\n## <a id='contact'/></a> Contact\n* 微博： [**@WenchaoD**](http://weibo.com/WenchaoD)\n* Twitter：[**@WenchaoD**](https://twitter.com/WenchaoD)\n* <a id='qq_group'/></a>QQ支持群: <br><br>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n![fscalendar](https://cloud.githubusercontent.com/assets/5186464/18407011/8e4b6e48-7738-11e6-9fad-0e23cc881516.JPG)\n\n> If your made a beautiful calendar with this library in your app, please take a screen shot and [@me](https://twitter.com/WenchaoD) in twitter. Your help really means a lot to me! <br/>\n\n\n# License\nFSCalendar is available under the MIT license. See the LICENSE file for more info.\n\n### [Documentation](http://cocoadocs.org/docsets/FSCalendar/) | [More Usage](https://github.com/WenchaoD/FSCalendar/blob/master/MOREUSAGE.md) | [简书](http://www.jianshu.com/notebooks/4276521/latest)\n"
  }
]