summaryrefslogtreecommitdiff
path: root/zend/library/Zend
diff options
context:
space:
mode:
Diffstat (limited to 'zend/library/Zend')
-rw-r--r--zend/library/Zend/Exception.php96
-rw-r--r--zend/library/Zend/Gdata.php241
-rw-r--r--zend/library/Zend/Gdata/Analytics.php137
-rw-r--r--zend/library/Zend/Gdata/Analytics/AccountEntry.php102
-rw-r--r--zend/library/Zend/Gdata/Analytics/AccountFeed.php57
-rw-r--r--zend/library/Zend/Gdata/Analytics/AccountQuery.php190
-rw-r--r--zend/library/Zend/Gdata/Analytics/DataEntry.php116
-rw-r--r--zend/library/Zend/Gdata/Analytics/DataFeed.php64
-rw-r--r--zend/library/Zend/Gdata/Analytics/DataQuery.php403
-rw-r--r--zend/library/Zend/Gdata/Analytics/Extension/Dimension.php40
-rw-r--r--zend/library/Zend/Gdata/Analytics/Extension/Goal.php52
-rw-r--r--zend/library/Zend/Gdata/Analytics/Extension/Metric.php54
-rw-r--r--zend/library/Zend/Gdata/Analytics/Extension/Property.php122
-rw-r--r--zend/library/Zend/Gdata/Analytics/Extension/TableId.php112
-rw-r--r--zend/library/Zend/Gdata/App.php1243
-rw-r--r--zend/library/Zend/Gdata/App/AuthException.php41
-rw-r--r--zend/library/Zend/Gdata/App/BadMethodCallException.php42
-rw-r--r--zend/library/Zend/Gdata/App/Base.php572
-rw-r--r--zend/library/Zend/Gdata/App/BaseMediaSource.php179
-rw-r--r--zend/library/Zend/Gdata/App/CaptchaRequiredException.php94
-rw-r--r--zend/library/Zend/Gdata/App/Entry.php389
-rw-r--r--zend/library/Zend/Gdata/App/Exception.php43
-rw-r--r--zend/library/Zend/Gdata/App/Extension.php40
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Author.php43
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Category.php140
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Content.php88
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Contributor.php43
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Control.php98
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Draft.php50
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Edited.php49
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Element.php58
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Email.php49
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Generator.php115
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Icon.php49
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Id.php49
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Link.php219
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Logo.php49
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Name.php48
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Person.php163
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Published.php49
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Rights.php49
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Source.php46
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Subtitle.php43
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Summary.php43
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Text.php90
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Title.php43
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Updated.php49
-rw-r--r--zend/library/Zend/Gdata/App/Extension/Uri.php49
-rwxr-xr-xzend/library/Zend/Gdata/App/Feed.php352
-rwxr-xr-xzend/library/Zend/Gdata/App/FeedEntryParent.php681
-rw-r--r--zend/library/Zend/Gdata/App/FeedSourceParent.php267
-rw-r--r--zend/library/Zend/Gdata/App/HttpException.php121
-rw-r--r--zend/library/Zend/Gdata/App/IOException.php43
-rw-r--r--zend/library/Zend/Gdata/App/InvalidArgumentException.php42
-rw-r--r--zend/library/Zend/Gdata/App/LoggingHttpClientAdapterSocket.php119
-rw-r--r--zend/library/Zend/Gdata/App/MediaEntry.php119
-rw-r--r--zend/library/Zend/Gdata/App/MediaFileSource.php146
-rw-r--r--zend/library/Zend/Gdata/App/MediaSource.php73
-rw-r--r--zend/library/Zend/Gdata/App/Util.php112
-rw-r--r--zend/library/Zend/Gdata/App/VersionException.php42
-rw-r--r--zend/library/Zend/Gdata/AuthSub.php248
-rwxr-xr-xzend/library/Zend/Gdata/Books.php204
-rw-r--r--zend/library/Zend/Gdata/Books/CollectionEntry.php56
-rw-r--r--zend/library/Zend/Gdata/Books/CollectionFeed.php62
-rw-r--r--zend/library/Zend/Gdata/Books/Extension/AnnotationLink.php63
-rw-r--r--zend/library/Zend/Gdata/Books/Extension/BooksCategory.php59
-rw-r--r--zend/library/Zend/Gdata/Books/Extension/BooksLink.php61
-rw-r--r--zend/library/Zend/Gdata/Books/Extension/Embeddability.php122
-rw-r--r--zend/library/Zend/Gdata/Books/Extension/InfoLink.php59
-rw-r--r--zend/library/Zend/Gdata/Books/Extension/PreviewLink.php60
-rw-r--r--zend/library/Zend/Gdata/Books/Extension/Review.php152
-rw-r--r--zend/library/Zend/Gdata/Books/Extension/ThumbnailLink.php60
-rw-r--r--zend/library/Zend/Gdata/Books/Extension/Viewability.php123
-rw-r--r--zend/library/Zend/Gdata/Books/VolumeEntry.php687
-rw-r--r--zend/library/Zend/Gdata/Books/VolumeFeed.php62
-rwxr-xr-xzend/library/Zend/Gdata/Books/VolumeQuery.php112
-rw-r--r--zend/library/Zend/Gdata/Calendar.php169
-rw-r--r--zend/library/Zend/Gdata/Calendar/EventEntry.php164
-rw-r--r--zend/library/Zend/Gdata/Calendar/EventFeed.php106
-rw-r--r--zend/library/Zend/Gdata/Calendar/EventQuery.php491
-rw-r--r--zend/library/Zend/Gdata/Calendar/Extension/AccessLevel.php125
-rw-r--r--zend/library/Zend/Gdata/Calendar/Extension/Color.php125
-rw-r--r--zend/library/Zend/Gdata/Calendar/Extension/Hidden.php134
-rw-r--r--zend/library/Zend/Gdata/Calendar/Extension/Link.php125
-rw-r--r--zend/library/Zend/Gdata/Calendar/Extension/QuickAdd.php132
-rw-r--r--zend/library/Zend/Gdata/Calendar/Extension/Selected.php133
-rw-r--r--zend/library/Zend/Gdata/Calendar/Extension/SendEventNotifications.php132
-rw-r--r--zend/library/Zend/Gdata/Calendar/Extension/Timezone.php124
-rw-r--r--zend/library/Zend/Gdata/Calendar/Extension/WebContent.php177
-rw-r--r--zend/library/Zend/Gdata/Calendar/ListEntry.php246
-rw-r--r--zend/library/Zend/Gdata/Calendar/ListFeed.php106
-rw-r--r--zend/library/Zend/Gdata/ClientLogin.php182
-rwxr-xr-xzend/library/Zend/Gdata/Docs.php303
-rwxr-xr-xzend/library/Zend/Gdata/Docs/DocumentListEntry.php54
-rwxr-xr-xzend/library/Zend/Gdata/Docs/DocumentListFeed.php68
-rwxr-xr-xzend/library/Zend/Gdata/Docs/Query.php222
-rwxr-xr-xzend/library/Zend/Gdata/DublinCore.php65
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Creator.php58
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Date.php60
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Description.php58
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Format.php58
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Identifier.php58
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Language.php58
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Publisher.php58
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Rights.php58
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Subject.php58
-rw-r--r--zend/library/Zend/Gdata/DublinCore/Extension/Title.php58
-rw-r--r--zend/library/Zend/Gdata/Entry.php132
-rwxr-xr-xzend/library/Zend/Gdata/Exif.php65
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Entry.php145
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/Distance.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/Exposure.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/FStop.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/Flash.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/FocalLength.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/ImageUniqueId.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/Iso.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/Make.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/Model.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/Tags.php549
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Extension/Time.php61
-rwxr-xr-xzend/library/Zend/Gdata/Exif/Feed.php70
-rw-r--r--zend/library/Zend/Gdata/Extension.php58
-rw-r--r--zend/library/Zend/Gdata/Extension/AttendeeStatus.php123
-rw-r--r--zend/library/Zend/Gdata/Extension/AttendeeType.php123
-rw-r--r--zend/library/Zend/Gdata/Extension/Comments.php117
-rw-r--r--zend/library/Zend/Gdata/Extension/EntryLink.php167
-rw-r--r--zend/library/Zend/Gdata/Extension/EventStatus.php101
-rw-r--r--zend/library/Zend/Gdata/Extension/ExtendedProperty.php106
-rw-r--r--zend/library/Zend/Gdata/Extension/FeedLink.php175
-rw-r--r--zend/library/Zend/Gdata/Extension/OpenSearchItemsPerPage.php50
-rw-r--r--zend/library/Zend/Gdata/Extension/OpenSearchStartIndex.php50
-rw-r--r--zend/library/Zend/Gdata/Extension/OpenSearchTotalResults.php50
-rw-r--r--zend/library/Zend/Gdata/Extension/OriginalEvent.php142
-rw-r--r--zend/library/Zend/Gdata/Extension/Rating.php240
-rw-r--r--zend/library/Zend/Gdata/Extension/Recurrence.php49
-rw-r--r--zend/library/Zend/Gdata/Extension/RecurrenceException.php215
-rw-r--r--zend/library/Zend/Gdata/Extension/Reminder.php171
-rw-r--r--zend/library/Zend/Gdata/Extension/Transparency.php123
-rw-r--r--zend/library/Zend/Gdata/Extension/Visibility.php123
-rw-r--r--zend/library/Zend/Gdata/Extension/When.php169
-rw-r--r--zend/library/Zend/Gdata/Extension/Where.php171
-rw-r--r--zend/library/Zend/Gdata/Extension/Who.php299
-rw-r--r--zend/library/Zend/Gdata/Feed.php251
-rw-r--r--zend/library/Zend/Gdata/Gapps.php1683
-rw-r--r--zend/library/Zend/Gdata/Gapps/EmailListEntry.php214
-rw-r--r--zend/library/Zend/Gdata/Gapps/EmailListFeed.php53
-rw-r--r--zend/library/Zend/Gdata/Gapps/EmailListQuery.php187
-rw-r--r--zend/library/Zend/Gdata/Gapps/EmailListRecipientEntry.php146
-rw-r--r--zend/library/Zend/Gdata/Gapps/EmailListRecipientFeed.php53
-rw-r--r--zend/library/Zend/Gdata/Gapps/EmailListRecipientQuery.php153
-rw-r--r--zend/library/Zend/Gdata/Gapps/Error.php233
-rw-r--r--zend/library/Zend/Gdata/Gapps/Extension/EmailList.php144
-rw-r--r--zend/library/Zend/Gdata/Gapps/Extension/Login.php485
-rw-r--r--zend/library/Zend/Gdata/Gapps/Extension/Name.php181
-rw-r--r--zend/library/Zend/Gdata/Gapps/Extension/Nickname.php142
-rw-r--r--zend/library/Zend/Gdata/Gapps/Extension/Property.php179
-rw-r--r--zend/library/Zend/Gdata/Gapps/Extension/Quota.php142
-rw-r--r--zend/library/Zend/Gdata/Gapps/GroupEntry.php158
-rw-r--r--zend/library/Zend/Gdata/Gapps/GroupFeed.php53
-rw-r--r--zend/library/Zend/Gdata/Gapps/GroupQuery.php226
-rw-r--r--zend/library/Zend/Gdata/Gapps/MemberEntry.php159
-rw-r--r--zend/library/Zend/Gdata/Gapps/MemberFeed.php53
-rw-r--r--zend/library/Zend/Gdata/Gapps/MemberQuery.php194
-rw-r--r--zend/library/Zend/Gdata/Gapps/NicknameEntry.php189
-rw-r--r--zend/library/Zend/Gdata/Gapps/NicknameFeed.php53
-rw-r--r--zend/library/Zend/Gdata/Gapps/NicknameQuery.php186
-rw-r--r--zend/library/Zend/Gdata/Gapps/OwnerEntry.php158
-rw-r--r--zend/library/Zend/Gdata/Gapps/OwnerFeed.php53
-rw-r--r--zend/library/Zend/Gdata/Gapps/OwnerQuery.php147
-rw-r--r--zend/library/Zend/Gdata/Gapps/Query.php123
-rw-r--r--zend/library/Zend/Gdata/Gapps/ServiceException.php208
-rw-r--r--zend/library/Zend/Gdata/Gapps/UserEntry.php295
-rw-r--r--zend/library/Zend/Gdata/Gapps/UserFeed.php53
-rw-r--r--zend/library/Zend/Gdata/Gapps/UserQuery.php147
-rw-r--r--zend/library/Zend/Gdata/Gbase.php78
-rw-r--r--zend/library/Zend/Gdata/Gbase/Entry.php59
-rw-r--r--zend/library/Zend/Gdata/Gbase/Extension/BaseAttribute.php54
-rw-r--r--zend/library/Zend/Gdata/Gbase/Feed.php61
-rw-r--r--zend/library/Zend/Gdata/Gbase/ItemEntry.php42
-rw-r--r--zend/library/Zend/Gdata/Gbase/ItemFeed.php42
-rw-r--r--zend/library/Zend/Gdata/Gbase/ItemQuery.php52
-rw-r--r--zend/library/Zend/Gdata/Gbase/Query.php69
-rw-r--r--zend/library/Zend/Gdata/Gbase/SnippetEntry.php42
-rw-r--r--zend/library/Zend/Gdata/Gbase/SnippetFeed.php47
-rw-r--r--zend/library/Zend/Gdata/Gbase/SnippetQuery.php46
-rwxr-xr-xzend/library/Zend/Gdata/Geo.php70
-rwxr-xr-xzend/library/Zend/Gdata/Geo/Entry.php97
-rwxr-xr-xzend/library/Zend/Gdata/Geo/Extension/GeoRssWhere.php135
-rwxr-xr-xzend/library/Zend/Gdata/Geo/Extension/GmlPoint.php136
-rwxr-xr-xzend/library/Zend/Gdata/Geo/Extension/GmlPos.php61
-rwxr-xr-xzend/library/Zend/Gdata/Geo/Feed.php64
-rwxr-xr-xzend/library/Zend/Gdata/Health.php89
-rwxr-xr-xzend/library/Zend/Gdata/Health/Extension/Ccr.php58
-rwxr-xr-xzend/library/Zend/Gdata/Health/ProfileEntry.php59
-rwxr-xr-xzend/library/Zend/Gdata/Health/ProfileFeed.php61
-rwxr-xr-xzend/library/Zend/Gdata/Health/ProfileListEntry.php59
-rwxr-xr-xzend/library/Zend/Gdata/Health/ProfileListFeed.php55
-rwxr-xr-xzend/library/Zend/Gdata/Health/Query.php75
-rw-r--r--zend/library/Zend/Gdata/HttpAdapterStreamingProxy.php127
-rw-r--r--zend/library/Zend/Gdata/HttpAdapterStreamingSocket.php111
-rw-r--r--zend/library/Zend/Gdata/HttpClient.php352
-rw-r--r--zend/library/Zend/Gdata/Kind/EventEntry.php428
-rwxr-xr-xzend/library/Zend/Gdata/Media.php65
-rwxr-xr-xzend/library/Zend/Gdata/Media/Entry.php134
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaCategory.php148
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaContent.php522
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaCopyright.php116
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaCredit.php149
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaDescription.php116
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaGroup.php566
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaHash.php115
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaKeywords.php52
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaPlayer.php178
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaRating.php118
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaRestriction.php149
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaText.php211
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaThumbnail.php210
-rwxr-xr-xzend/library/Zend/Gdata/Media/Extension/MediaTitle.php118
-rwxr-xr-xzend/library/Zend/Gdata/Media/Feed.php70
-rw-r--r--zend/library/Zend/Gdata/MediaMimeStream.php190
-rw-r--r--zend/library/Zend/Gdata/MimeBodyString.php92
-rw-r--r--zend/library/Zend/Gdata/MimeFile.php66
-rwxr-xr-xzend/library/Zend/Gdata/Photos.php576
-rwxr-xr-xzend/library/Zend/Gdata/Photos/AlbumEntry.php610
-rwxr-xr-xzend/library/Zend/Gdata/Photos/AlbumFeed.php509
-rwxr-xr-xzend/library/Zend/Gdata/Photos/AlbumQuery.php149
-rwxr-xr-xzend/library/Zend/Gdata/Photos/CommentEntry.php195
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Access.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/AlbumId.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/BytesUsed.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Checksum.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Client.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/CommentCount.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/CommentingEnabled.php64
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Height.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Id.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Location.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Name.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Nickname.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/NumPhotos.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/NumPhotosRemaining.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/PhotoId.php61
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Position.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/QuotaCurrent.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/QuotaLimit.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Rotation.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Size.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Thumbnail.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Timestamp.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/User.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Version.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Weight.php63
-rwxr-xr-xzend/library/Zend/Gdata/Photos/Extension/Width.php62
-rwxr-xr-xzend/library/Zend/Gdata/Photos/PhotoEntry.php691
-rwxr-xr-xzend/library/Zend/Gdata/Photos/PhotoFeed.php559
-rwxr-xr-xzend/library/Zend/Gdata/Photos/PhotoQuery.php98
-rwxr-xr-xzend/library/Zend/Gdata/Photos/TagEntry.php140
-rwxr-xr-xzend/library/Zend/Gdata/Photos/UserEntry.php366
-rwxr-xr-xzend/library/Zend/Gdata/Photos/UserFeed.php247
-rwxr-xr-xzend/library/Zend/Gdata/Photos/UserQuery.php355
-rw-r--r--zend/library/Zend/Gdata/Query.php418
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets.php445
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/CellEntry.php104
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/CellFeed.php158
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/CellQuery.php417
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/DocumentQuery.php288
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/Extension/Cell.php201
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/Extension/ColCount.php59
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/Extension/Custom.php100
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/Extension/RowCount.php60
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/ListEntry.php208
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/ListFeed.php64
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/ListQuery.php305
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/SpreadsheetEntry.php64
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/SpreadsheetFeed.php64
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/WorksheetEntry.php187
-rw-r--r--zend/library/Zend/Gdata/Spreadsheets/WorksheetFeed.php64
-rw-r--r--zend/library/Zend/Gdata/YouTube.php874
-rw-r--r--zend/library/Zend/Gdata/YouTube/ActivityEntry.php232
-rw-r--r--zend/library/Zend/Gdata/YouTube/ActivityFeed.php66
-rw-r--r--zend/library/Zend/Gdata/YouTube/CommentEntry.php59
-rw-r--r--zend/library/Zend/Gdata/YouTube/CommentFeed.php66
-rw-r--r--zend/library/Zend/Gdata/YouTube/ContactEntry.php136
-rw-r--r--zend/library/Zend/Gdata/YouTube/ContactFeed.php68
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/AboutMe.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Age.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Books.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Company.php51
-rwxr-xr-xzend/library/Zend/Gdata/YouTube/Extension/Control.php133
-rwxr-xr-xzend/library/Zend/Gdata/YouTube/Extension/CountHint.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Description.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Duration.php126
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/FirstName.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Gender.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Hobbies.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Hometown.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/LastName.php51
-rwxr-xr-xzend/library/Zend/Gdata/YouTube/Extension/Link.php133
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Location.php51
-rwxr-xr-xzend/library/Zend/Gdata/YouTube/Extension/MediaContent.php120
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/MediaCredit.php189
-rwxr-xr-xzend/library/Zend/Gdata/YouTube/Extension/MediaGroup.php336
-rwxr-xr-xzend/library/Zend/Gdata/YouTube/Extension/MediaRating.php150
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Movies.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Music.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/NoEmbed.php54
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Occupation.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/PlaylistId.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/PlaylistTitle.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Position.php90
-rwxr-xr-xzend/library/Zend/Gdata/YouTube/Extension/Private.php81
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/QueryString.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Racy.php124
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Recorded.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Relationship.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/ReleaseDate.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/School.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/State.php193
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Statistics.php309
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Status.php51
-rwxr-xr-xzend/library/Zend/Gdata/YouTube/Extension/Token.php70
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Uploaded.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/Username.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/Extension/VideoId.php51
-rw-r--r--zend/library/Zend/Gdata/YouTube/InboxEntry.php281
-rw-r--r--zend/library/Zend/Gdata/YouTube/InboxFeed.php68
-rwxr-xr-xzend/library/Zend/Gdata/YouTube/MediaEntry.php81
-rw-r--r--zend/library/Zend/Gdata/YouTube/PlaylistListEntry.php300
-rw-r--r--zend/library/Zend/Gdata/YouTube/PlaylistListFeed.php68
-rw-r--r--zend/library/Zend/Gdata/YouTube/PlaylistVideoEntry.php132
-rw-r--r--zend/library/Zend/Gdata/YouTube/PlaylistVideoFeed.php68
-rw-r--r--zend/library/Zend/Gdata/YouTube/SubscriptionEntry.php446
-rw-r--r--zend/library/Zend/Gdata/YouTube/SubscriptionFeed.php68
-rw-r--r--zend/library/Zend/Gdata/YouTube/UserProfileEntry.php1041
-rw-r--r--zend/library/Zend/Gdata/YouTube/VideoEntry.php1095
-rw-r--r--zend/library/Zend/Gdata/YouTube/VideoFeed.php65
-rw-r--r--zend/library/Zend/Gdata/YouTube/VideoQuery.php540
-rw-r--r--zend/library/Zend/Http/Client.php1564
-rw-r--r--zend/library/Zend/Http/Client/Adapter/Curl.php510
-rw-r--r--zend/library/Zend/Http/Client/Adapter/Exception.php38
-rw-r--r--zend/library/Zend/Http/Client/Adapter/Interface.php78
-rw-r--r--zend/library/Zend/Http/Client/Adapter/Proxy.php343
-rw-r--r--zend/library/Zend/Http/Client/Adapter/Socket.php543
-rwxr-xr-xzend/library/Zend/Http/Client/Adapter/Stream.php46
-rw-r--r--zend/library/Zend/Http/Client/Adapter/Test.php248
-rw-r--r--zend/library/Zend/Http/Client/Exception.php36
-rw-r--r--zend/library/Zend/Http/Exception.php36
-rw-r--r--zend/library/Zend/Http/Response.php667
-rwxr-xr-xzend/library/Zend/Http/Response/Stream.php235
-rw-r--r--zend/library/Zend/Loader.php343
-rw-r--r--zend/library/Zend/Registry.php209
-rw-r--r--zend/library/Zend/Uri.php207
-rw-r--r--zend/library/Zend/Uri/Exception.php37
-rw-r--r--zend/library/Zend/Uri/Http.php765
-rw-r--r--zend/library/Zend/Validate/Abstract.php460
-rw-r--r--zend/library/Zend/Validate/Hostname.php788
-rw-r--r--zend/library/Zend/Validate/Hostname/Biz.php2917
-rw-r--r--zend/library/Zend/Validate/Hostname/Cn.php2199
-rw-r--r--zend/library/Zend/Validate/Hostname/Com.php198
-rw-r--r--zend/library/Zend/Validate/Hostname/Jp.php739
-rw-r--r--zend/library/Zend/Validate/Interface.php54
-rw-r--r--zend/library/Zend/Validate/Ip.php191
-rw-r--r--zend/library/Zend/Version.php81
365 files changed, 63687 insertions, 0 deletions
diff --git a/zend/library/Zend/Exception.php b/zend/library/Zend/Exception.php
new file mode 100644
index 0000000..92b2e46
--- /dev/null
+++ b/zend/library/Zend/Exception.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+* @category Zend
+* @package Zend
+* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+* @license http://framework.zend.com/license/new-bsd New BSD License
+*/
+class Zend_Exception extends Exception
+{
+ /**
+ * @var null|Exception
+ */
+ private $_previous = null;
+
+ /**
+ * Construct the exception
+ *
+ * @param string $msg
+ * @param int $code
+ * @param Exception $previous
+ * @return void
+ */
+ public function __construct($msg = '', $code = 0, Exception $previous = null)
+ {
+ if (version_compare(PHP_VERSION, '5.3.0', '<')) {
+ parent::__construct($msg, (int) $code);
+ $this->_previous = $previous;
+ } else {
+ parent::__construct($msg, (int) $code, $previous);
+ }
+ }
+
+ /**
+ * Overloading
+ *
+ * For PHP < 5.3.0, provides access to the getPrevious() method.
+ *
+ * @param string $method
+ * @param array $args
+ * @return mixed
+ */
+ public function __call($method, array $args)
+ {
+ if ('getprevious' == strtolower($method)) {
+ return $this->_getPrevious();
+ }
+ return null;
+ }
+
+ /**
+ * String representation of the exception
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ if (version_compare(PHP_VERSION, '5.3.0', '<')) {
+ if (null !== ($e = $this->getPrevious())) {
+ return $e->__toString()
+ . "\n\nNext "
+ . parent::__toString();
+ }
+ }
+ return parent::__toString();
+ }
+
+ /**
+ * Returns previous Exception
+ *
+ * @return Exception|null
+ */
+ protected function _getPrevious()
+ {
+ return $this->_previous;
+ }
+}
diff --git a/zend/library/Zend/Gdata.php b/zend/library/Zend/Gdata.php
new file mode 100644
index 0000000..1135374
--- /dev/null
+++ b/zend/library/Zend/Gdata.php
@@ -0,0 +1,241 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Gdata.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App
+ */
+require_once 'Zend/Gdata/App.php';
+
+/**
+ * Provides functionality to interact with Google data APIs
+ * Subclasses exist to implement service-specific features
+ *
+ * As the Google data API protocol is based upon the Atom Publishing Protocol
+ * (APP), Gdata functionality extends the appropriate Zend_Gdata_App classes
+ *
+ * @link http://code.google.com/apis/gdata/overview.html
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata extends Zend_Gdata_App
+{
+
+ /**
+ * Service name for use with Google's authentication mechanisms
+ *
+ * @var string
+ */
+ const AUTH_SERVICE_NAME = 'xapi';
+
+ /**
+ * Default URI to which to POST.
+ *
+ * @var string
+ */
+ protected $_defaultPostUri = null;
+
+ /**
+ * Packages to search for classes when using magic __call method, in order.
+ *
+ * @var array
+ */
+ protected $_registeredPackages = array(
+ 'Zend_Gdata_Kind',
+ 'Zend_Gdata_Extension',
+ 'Zend_Gdata',
+ 'Zend_Gdata_App_Extension',
+ 'Zend_Gdata_App');
+
+ /**
+ * Namespaces used for Gdata data
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('gd', 'http://schemas.google.com/g/2005', 1, 0),
+ array('openSearch', 'http://a9.com/-/spec/opensearchrss/1.0/', 1, 0),
+ array('openSearch', 'http://a9.com/-/spec/opensearch/1.1/', 2, 0),
+ array('rss', 'http://blogs.law.harvard.edu/tech/rss', 1, 0)
+ );
+
+ /**
+ * Client object used to communicate
+ *
+ * @var Zend_Gdata_HttpClient
+ */
+ protected $_httpClient;
+
+ /**
+ * Client object used to communicate in static context
+ *
+ * @var Zend_Gdata_HttpClient
+ */
+ protected static $_staticHttpClient = null;
+
+ /**
+ * Create Gdata object
+ *
+ * @param Zend_Http_Client $client
+ * @param string $applicationId The identity of the app in the form of
+ * Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ parent::__construct($client, $applicationId);
+ }
+
+ /**
+ * Imports a feed located at $uri.
+ *
+ * @param string $uri
+ * @param Zend_Http_Client $client The client used for communication
+ * @param string $className The class which is used as the return type
+ * @throws Zend_Gdata_App_Exception
+ * @return string|Zend_Gdata_App_Feed Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public static function import($uri, $client = null,
+ $className='Zend_Gdata_Feed')
+ {
+ $app = new Zend_Gdata($client);
+ $requestData = $app->decodeRequest('GET', $uri);
+ $response = $app->performHttpRequest($requestData['method'], $requestData['url']);
+
+ $feedContent = $response->getBody();
+
+ $feed = self::importString($feedContent, $className);
+ if ($client != null) {
+ $feed->setHttpClient($client);
+ }
+ return $feed;
+ }
+
+ /**
+ * Retrieve feed as string or object
+ *
+ * @param mixed $location The location as string or Zend_Gdata_Query
+ * @param string $className The class type to use for returning the feed
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return string|Zend_Gdata_App_Feed Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function getFeed($location, $className='Zend_Gdata_Feed')
+ {
+ if (is_string($location)) {
+ $uri = $location;
+ } elseif ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify the location as either a string URI ' .
+ 'or a child of Zend_Gdata_Query');
+ }
+ return parent::getFeed($uri, $className);
+ }
+
+ /**
+ * Retrieve entry as string or object
+ *
+ * @param mixed $location The location as string or Zend_Gdata_Query
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return string|Zend_Gdata_App_Entry Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function getEntry($location, $className='Zend_Gdata_Entry')
+ {
+ if (is_string($location)) {
+ $uri = $location;
+ } elseif ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify the location as either a string URI ' .
+ 'or a child of Zend_Gdata_Query');
+ }
+ return parent::getEntry($uri, $className);
+ }
+
+ /**
+ * Performs a HTTP request using the specified method.
+ *
+ * Overrides the definition in the parent (Zend_Gdata_App)
+ * and uses the Zend_Gdata_HttpClient functionality
+ * to filter the HTTP requests and responses.
+ *
+ * @param string $method The HTTP method for the request -
+ * 'GET', 'POST', 'PUT', 'DELETE'
+ * @param string $url The URL to which this request is being performed,
+ * or null if found in $data
+ * @param array $headers An associative array of HTTP headers
+ * for this request
+ * @param string $body The body of the HTTP request
+ * @param string $contentType The value for the content type of the
+ * request body
+ * @param int $remainingRedirects Number of redirects to follow
+ * if requests results in one
+ * @return Zend_Http_Response The response object
+ */
+ public function performHttpRequest($method, $url, $headers = array(), $body = null, $contentType = null, $remainingRedirects = null)
+ {
+ if ($this->_httpClient instanceof Zend_Gdata_HttpClient) {
+ $filterResult = $this->_httpClient->filterHttpRequest($method, $url, $headers, $body, $contentType);
+ $method = $filterResult['method'];
+ $url = $filterResult['url'];
+ $body = $filterResult['body'];
+ $headers = $filterResult['headers'];
+ $contentType = $filterResult['contentType'];
+ return $this->_httpClient->filterHttpResponse(parent::performHttpRequest($method, $url, $headers, $body, $contentType, $remainingRedirects));
+ } else {
+ return parent::performHttpRequest($method, $url, $headers, $body, $contentType, $remainingRedirects);
+ }
+ }
+
+ /**
+ * Determines whether service object is authenticated.
+ *
+ * @return boolean True if service object is authenticated, false otherwise.
+ */
+ public function isAuthenticated()
+ {
+ $client = parent::getHttpClient();
+ if ($client->getClientLoginToken() ||
+ $client->getAuthSubToken()) {
+ return true;
+ }
+
+ return false;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Analytics.php b/zend/library/Zend/Gdata/Analytics.php
new file mode 100644
index 0000000..60706d5
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * @see Zend_Gdata_Analytics_AccountEntry
+ */
+require_once 'Zend/Gdata/Analytics/AccountEntry.php';
+
+/**
+ * @see Zend_Gdata_Analytics_AccountFeed
+ */
+require_once 'Zend/Gdata/Analytics/AccountFeed.php';
+
+/**
+ * @see Zend_Gdata_Analytics_DataEntry
+ */
+require_once 'Zend/Gdata/Analytics/DataEntry.php';
+
+/**
+ * @see Zend_Gdata_Analytics_DataFeed
+ */
+require_once 'Zend/Gdata/Analytics/DataFeed.php';
+
+/**
+ * @see Zend_Gdata_Analytics_DataQuery
+ */
+require_once 'Zend/Gdata/Analytics/DataQuery.php';
+
+/**
+ * @see Zend_Gdata_Analytics_AccountQuery
+ */
+require_once 'Zend/Gdata/Analytics/AccountQuery.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics extends Zend_Gdata
+{
+
+ const AUTH_SERVICE_NAME = 'analytics';
+ const ANALYTICS_FEED_URI = 'https://www.googleapis.com/analytics/v2.4/data';
+ const ANALYTICS_ACCOUNT_FEED_URI = 'https://www.googleapis.com/analytics/v2.4/management/accounts';
+
+ public static $namespaces = array(
+ array('analytics', 'http://schemas.google.com/analytics/2009', 1, 0),
+ array('ga', 'http://schemas.google.com/ga/2009', 1, 0)
+ );
+
+ /**
+ * Create Gdata object
+ *
+ * @param Zend_Http_Client $client
+ * @param string $applicationId The identity of the app in the form of
+ * Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Analytics');
+ $this->registerPackage('Zend_Gdata_Analytics_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Retrieve account feed object
+ *
+ * @param string|Zend_Uri_Uri $uri
+ * @return Zend_Gdata_Analytics_AccountFeed
+ */
+ public function getAccountFeed($uri = self::ANALYTICS_ACCOUNT_FEED_URI)
+ {
+ if ($uri instanceof Query) {
+ $uri = $uri->getQueryUrl();
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Analytics_AccountFeed');
+ }
+
+ /**
+ * Retrieve data feed object
+ *
+ * @param string|Zend_Uri_Uri $uri
+ * @return Zend_Gdata_Analytics_DataFeed
+ */
+ public function getDataFeed($uri = self::ANALYTICS_FEED_URI)
+ {
+ if ($uri instanceof Query) {
+ $uri = $uri->getQueryUrl();
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Analytics_DataFeed');
+ }
+
+ /**
+ * Returns a new DataQuery object.
+ *
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function newDataQuery()
+ {
+ return new Zend_Gdata_Analytics_DataQuery();
+ }
+
+ /**
+ * Returns a new AccountQuery object.
+ *
+ * @return Zend_Gdata_Analytics_AccountQuery
+ */
+ public function newAccountQuery()
+ {
+ return new Zend_Gdata_Analytics_AccountQuery();
+ }
+}
diff --git a/zend/library/Zend/Gdata/Analytics/AccountEntry.php b/zend/library/Zend/Gdata/Analytics/AccountEntry.php
new file mode 100644
index 0000000..c709bb7
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/AccountEntry.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Analytics_Extension_Dimension
+ */
+require_once 'Zend/Gdata/Analytics/Extension/Dimension.php';
+
+/**
+ * @see Zend_Gdata_Analytics_Extension_Metric
+ */
+require_once 'Zend/Gdata/Analytics/Extension/Metric.php';
+
+/**
+ * @see Zend_Gdata_Analytics_Extension_Property
+ */
+require_once 'Zend/Gdata/Analytics/Extension/Property.php';
+
+/**
+ * @see Zend_Gdata_Analytics_Extension_TableId
+ */
+require_once 'Zend/Gdata/Analytics/Extension/TableId.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_AccountEntry extends Zend_Gdata_Entry
+{
+ protected $_accountId;
+ protected $_accountName;
+ protected $_profileId;
+ protected $_webPropertyId;
+ protected $_currency;
+ protected $_timezone;
+ protected $_tableId;
+ protected $_profileName;
+ protected $_goal;
+
+ /**
+ * @see Zend_Gdata_Entry::__construct()
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Analytics::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * @param DOMElement $child
+ * @return void
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName){
+ case $this->lookupNamespace('analytics') . ':' . 'property';
+ $property = new Zend_Gdata_Analytics_Extension_Property();
+ $property->transferFromDOM($child);
+ $this->{$property->getName()} = $property;
+ break;
+ case $this->lookupNamespace('analytics') . ':' . 'tableId';
+ $tableId = new Zend_Gdata_Analytics_Extension_TableId();
+ $tableId->transferFromDOM($child);
+ $this->_tableId = $tableId;
+ break;
+ case $this->lookupNamespace('ga') . ':' . 'goal';
+ $goal = new Zend_Gdata_Analytics_Extension_Goal();
+ $goal->transferFromDOM($child);
+ $this->_goal = $goal;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+}
diff --git a/zend/library/Zend/Gdata/Analytics/AccountFeed.php b/zend/library/Zend/Gdata/Analytics/AccountFeed.php
new file mode 100644
index 0000000..b0e81a6
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/AccountFeed.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_AccountFeed extends Zend_Gdata_Feed
+{
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Analytics_AccountEntry';
+
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Analytics_AccountFeed';
+
+ /**
+ * @see Zend_GData_Feed::__construct()
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Analytics::$namespaces);
+ parent::__construct($element);
+ }
+}
diff --git a/zend/library/Zend/Gdata/Analytics/AccountQuery.php b/zend/library/Zend/Gdata/Analytics/AccountQuery.php
new file mode 100644
index 0000000..6d8dbdc
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/AccountQuery.php
@@ -0,0 +1,190 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Query
+ */
+require_once 'Zend/Gdata/Query.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_AccountQuery extends Zend_Gdata_Query
+{
+ const ANALYTICS_FEED_URI = 'https://www.googleapis.com/analytics/v2.4/management/accounts';
+
+ /**
+ * The default URI used for feeds.
+ */
+ protected $_defaultFeedUri = self::ANALYTICS_FEED_URI;
+
+ /**
+ * @var string
+ */
+ protected $_accountId = '~all';
+ /**
+ * @var string
+ */
+ protected $_webpropertyId = '~all';
+ /**
+ * @var string
+ */
+ protected $_profileId = '~all';
+
+ /**
+ * @var bool
+ */
+ protected $_webproperties = false;
+ /**
+ * @var bool
+ */
+ protected $_profiles = false;
+ /**
+ * @var bool
+ */
+ protected $_goals = false;
+
+ /**
+ * @param string $accountId
+ * @return Zend_Gdata_Analytics_AccountQuery
+ */
+ public function setAccountId($accountId)
+ {
+ $this->_accountId = $accountId;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountId()
+ {
+ return $this->_accountId;
+ }
+
+ /**
+ * @param string $webpropertyId
+ * @return Zend_Gdata_Analytics_AccountQuery
+ */
+ public function setWebpropertyId($webpropertyId)
+ {
+ $this->_webpropertyId = $webpropertyId;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getWebpropertyId()
+ {
+ return $this->_webpropertyId;
+ }
+
+ /**
+ * @param string $profileId
+ * @return Zend_Gdata_Analytics_AccountQuery
+ */
+ public function setProfileId($profileId)
+ {
+ $this->_profileId = $profileId;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getProfileId()
+ {
+ return $this->_profileId;
+ }
+
+ /**
+ * @param string $accountId
+ * @return Zend_Gdata_Analytics_AccountQuery
+ */
+ public function webproperties($accountId = '~all')
+ {
+ $this->_webproperties = true;
+ $this->setAccountId($accountId);
+ return $this;
+ }
+
+ /**
+ * @param string $webpropertyId
+ * @param string $accountId
+ * @return Zend_Gdata_Analytics_AccountQuery
+ */
+ public function profiles($webpropertyId = '~all', $accountId = '~all')
+ {
+ $this->_profiles = true;
+ if (null !== $accountId) {
+ $this->setAccountId($accountId);
+ }
+ $this->setWebpropertyId($webpropertyId);
+ return $this;
+ }
+
+ /**
+ * @param string $webpropertyId
+ * @param string $accountId
+ * @param string $accountId
+ * @return Zend_Gdata_Analytics_AccountQuery
+ */
+ public function goals($profileId = '~all', $webpropertyId = '~all', $accountId = '~all')
+ {
+ $this->_goals = true;
+ if (null !== $accountId) {
+ $this->setAccountId($accountId);
+ }
+ if (null !== $webpropertyId) {
+ $this->setWebpropertyId($webpropertyId);
+ }
+ $this->setProfileId($profileId);
+ return $this;
+ }
+
+ /**
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ $url = $this->_defaultFeedUri;
+
+ // add account id
+ if ($this->_webproperties or $this->_profiles or $this->_goals) {
+ $url .= '/' . $this->_accountId . '/webproperties';
+ }
+
+ if ($this->_profiles or $this->_goals) {
+ $url .= '/' . $this->_webpropertyId . '/profiles';
+ }
+
+ if ($this->_goals) {
+ $url .= '/' . $this->_profileId . '/goals';
+ }
+
+ $url .= $this->getQueryString();
+ return $url;
+ }
+} \ No newline at end of file
diff --git a/zend/library/Zend/Gdata/Analytics/DataEntry.php b/zend/library/Zend/Gdata/Analytics/DataEntry.php
new file mode 100644
index 0000000..a0ccb81
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/DataEntry.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_DataEntry extends Zend_Gdata_Entry
+{
+ /**
+ * @var array
+ */
+ protected $_dimensions = array();
+ /**
+ * @var array
+ */
+ protected $_metrics = array();
+
+ /**
+ * @param DOMElement $element
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Analytics::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * @param DOMElement $child
+ * @return void
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('analytics') . ':' . 'dimension';
+ $dimension = new Zend_Gdata_Analytics_Extension_Dimension();
+ $dimension->transferFromDOM($child);
+ $this->_dimensions[] = $dimension;
+ break;
+ case $this->lookupNamespace('analytics') . ':' . 'metric';
+ $metric = new Zend_Gdata_Analytics_Extension_Metric();
+ $metric->transferFromDOM($child);
+ $this->_metrics[] = $metric;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @param string $name
+ * @return mixed
+ */
+ public function getDimension($name)
+ {
+ foreach ($this->_dimensions as $dimension) {
+ if ($dimension->getName() == $name) {
+ return $dimension;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @param string $name
+ * @return mixed
+ */
+ public function getMetric($name)
+ {
+ foreach ($this->_metrics as $metric) {
+ if ($metric->getName() == $name) {
+ return $metric;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @param string $name
+ * @return mixed
+ */
+ public function getValue($name)
+ {
+ if (null !== ($metric = $this->getMetric($name))) {
+ return $metric;
+ }
+ return $this->getDimension($name);
+ }
+}
diff --git a/zend/library/Zend/Gdata/Analytics/DataFeed.php b/zend/library/Zend/Gdata/Analytics/DataFeed.php
new file mode 100644
index 0000000..42e3156
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/DataFeed.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Analytics
+ */
+require_once 'Zend/Gdata/Analytics.php';
+
+/**
+ * @see Zend_Gdata_Geo_Entry
+ */
+require_once 'Zend/Gdata/Analytics/DataEntry.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_DataFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Analytics_DataEntry';
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Analytics_DataFeed';
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Analytics::$namespaces);
+ parent::__construct($element);
+ }
+}
diff --git a/zend/library/Zend/Gdata/Analytics/DataQuery.php b/zend/library/Zend/Gdata/Analytics/DataQuery.php
new file mode 100644
index 0000000..51c9e5c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/DataQuery.php
@@ -0,0 +1,403 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Query
+ */
+require_once 'Zend/Gdata/Query.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_DataQuery extends Zend_Gdata_Query
+{
+ const ANALYTICS_FEED_URI = 'https://www.googleapis.com/analytics/v2.4/data';
+
+ /**
+ * The default URI used for feeds.
+ */
+ protected $_defaultFeedUri = self::ANALYTICS_FEED_URI;
+
+ // D1. Visitor
+ const DIMENSION_BROWSER = 'ga:browser';
+ const DIMENSION_BROWSER_VERSION = 'ga:browserVersion';
+ const DIMENSION_CITY = 'ga:city';
+ const DIMENSION_CONNECTIONSPEED = 'ga:connectionSpeed';
+ const DIMENSION_CONTINENT = 'ga:continent';
+ const DIMENSION_COUNTRY = 'ga:country';
+ const DIMENSION_DATE = 'ga:date';
+ const DIMENSION_DAY = 'ga:day';
+ const DIMENSION_DAYS_SINCE_LAST_VISIT= 'ga:daysSinceLastVisit';
+ const DIMENSION_FLASH_VERSION = 'ga:flashVersion';
+ const DIMENSION_HOSTNAME = 'ga:hostname';
+ const DIMENSION_HOUR = 'ga:hour';
+ const DIMENSION_JAVA_ENABLED= 'ga:javaEnabled';
+ const DIMENSION_LANGUAGE= 'ga:language';
+ const DIMENSION_LATITUDE = 'ga:latitude';
+ const DIMENSION_LONGITUDE = 'ga:longitude';
+ const DIMENSION_MONTH = 'ga:month';
+ const DIMENSION_NETWORK_DOMAIN = 'ga:networkDomain';
+ const DIMENSION_NETWORK_LOCATION = 'ga:networkLocation';
+ const DIMENSION_OPERATING_SYSTEM = 'ga:operatingSystem';
+ const DIMENSION_OPERATING_SYSTEM_VERSION = 'ga:operatingSystemVersion';
+ const DIMENSION_PAGE_DEPTH = 'ga:pageDepth';
+ const DIMENSION_REGION = 'ga:region';
+ const DIMENSION_SCREEN_COLORS= 'ga:screenColors';
+ const DIMENSION_SCREEN_RESOLUTION = 'ga:screenResolution';
+ const DIMENSION_SUB_CONTINENT = 'ga:subContinent';
+ const DIMENSION_USER_DEFINED_VALUE = 'ga:userDefinedValue';
+ const DIMENSION_VISIT_COUNT = 'ga:visitCount';
+ const DIMENSION_VISIT_LENGTH = 'ga:visitLength';
+ const DIMENSION_VISITOR_TYPE = 'ga:visitorType';
+ const DIMENSION_WEEK = 'ga:week';
+ const DIMENSION_YEAR = 'ga:year';
+
+ // D2. Campaign
+ const DIMENSION_AD_CONTENT = 'ga:adContent';
+ const DIMENSION_AD_GROUP = 'ga:adGroup';
+ const DIMENSION_AD_SLOT = 'ga:adSlot';
+ const DIMENSION_AD_SLOT_POSITION = 'ga:adSlotPosition';
+ const DIMENSION_CAMPAIGN = 'ga:campaign';
+ const DIMENSION_KEYWORD = 'ga:keyword';
+ const DIMENSION_MEDIUM = 'ga:medium';
+ const DIMENSION_REFERRAL_PATH = 'ga:referralPath';
+ const DIMENSION_SOURCE = 'ga:source';
+
+ // D3. Content
+ const DIMENSION_EXIT_PAGE_PATH = 'ga:exitPagePath';
+ const DIMENSION_LANDING_PAGE_PATH = 'ga:landingPagePath';
+ const DIMENSION_PAGE_PATH = 'ga:pagePath';
+ const DIMENSION_PAGE_TITLE = 'ga:pageTitle';
+ const DIMENSION_SECOND_PAGE_PATH = 'ga:secondPagePath';
+
+ // D4. Ecommerce
+ const DIMENSION_AFFILIATION = 'ga:affiliation';
+ const DIMENSION_DAYS_TO_TRANSACTION = 'ga:daysToTransaction';
+ const DIMENSION_PRODUCT_CATEGORY = 'ga:productCategory';
+ const DIMENSION_PRODUCT_NAME = 'ga:productName';
+ const DIMENSION_PRODUCT_SKU = 'ga:productSku';
+ const DIMENSION_TRANSACTION_ID = 'ga:transactionId';
+ const DIMENSION_VISITS_TO_TRANSACTION = 'ga:visitsToTransaction';
+
+ // D5. Internal Search
+ const DIMENSION_SEARCH_CATEGORY = 'ga:searchCategory';
+ const DIMENSION_SEARCH_DESTINATION_PAGE = 'ga:searchDestinationPage';
+ const DIMENSION_SEARCH_KEYWORD = 'ga:searchKeyword';
+ const DIMENSION_SEARCH_KEYWORD_REFINEMENT = 'ga:searchKeywordRefinement';
+ const DIMENSION_SEARCH_START_PAGE = 'ga:searchStartPage';
+ const DIMENSION_SEARCH_USED = 'ga:searchUsed';
+
+ // D6. Navigation
+ const DIMENSION_NEXT_PAGE_PATH = 'ga:nextPagePath';
+ const DIMENSION_PREV_PAGE_PATH= 'ga:previousPagePath';
+
+ // D7. Events
+ const DIMENSION_EVENT_CATEGORY = 'ga:eventCategory';
+ const DIMENSION_EVENT_ACTION = 'ga:eventAction';
+ const DIMENSION_EVENT_LABEL = 'ga:eventLabel';
+
+ // D8. Custon Variables
+ const DIMENSION_CUSTOM_VAR_NAME_1 = 'ga:customVarName1';
+ const DIMENSION_CUSTOM_VAR_NAME_2 = 'ga:customVarName2';
+ const DIMENSION_CUSTOM_VAR_NAME_3 = 'ga:customVarName3';
+ const DIMENSION_CUSTOM_VAR_NAME_4 = 'ga:customVarName4';
+ const DIMENSION_CUSTOM_VAR_NAME_5 = 'ga:customVarName5';
+ const DIMENSION_CUSTOM_VAR_VALUE_1 = 'ga:customVarValue1';
+ const DIMENSION_CUSTOM_VAR_VALUE_2 = 'ga:customVarValue2';
+ const DIMENSION_CUSTOM_VAR_VALUE_3 = 'ga:customVarValue3';
+ const DIMENSION_CUSTOM_VAR_VALUE_4 = 'ga:customVarValue4';
+ const DIMENSION_CUSTOM_VAR_VALUE_5 = 'ga:customVarValue5';
+
+ // M1. Visitor
+ const METRIC_BOUNCES = 'ga:bounces';
+ const METRIC_ENTRANCES = 'ga:entrances';
+ const METRIC_EXITS = 'ga:exits';
+ const METRIC_NEW_VISITS = 'ga:newVisits';
+ const METRIC_PAGEVIEWS = 'ga:pageviews';
+ const METRIC_TIME_ON_PAGE = 'ga:timeOnPage';
+ const METRIC_TIME_ON_SITE = 'ga:timeOnSite';
+ const METRIC_VISITORS = 'ga:visitors';
+ const METRIC_VISITS = 'ga:visits';
+
+ // M2. Campaign
+ const METRIC_AD_CLICKS = 'ga:adClicks';
+ const METRIC_AD_COST = 'ga:adCost';
+ const METRIC_CPC = 'ga:CPC';
+ const METRIC_CPM = 'ga:CPM';
+ const METRIC_CTR = 'ga:CTR';
+ const METRIC_IMPRESSIONS = 'ga:impressions';
+
+ // M3. Content
+ const METRIC_UNIQUE_PAGEVIEWS = 'ga:uniquePageviews';
+
+ // M4. Ecommerce
+ const METRIC_ITEM_REVENUE = 'ga:itemRevenue';
+ const METRIC_ITEM_QUANTITY = 'ga:itemQuantity';
+ const METRIC_TRANSACTIONS = 'ga:transactions';
+ const METRIC_TRANSACTION_REVENUE = 'ga:transactionRevenue';
+ const METRIC_TRANSACTION_SHIPPING = 'ga:transactionShipping';
+ const METRIC_TRANSACTION_TAX = 'ga:transactionTax';
+ const METRIC_UNIQUE_PURCHASES = 'ga:uniquePurchases';
+
+ // M5. Internal Search
+ const METRIC_SEARCH_DEPTH = 'ga:searchDepth';
+ const METRIC_SEARCH_DURATION = 'ga:searchDuration';
+ const METRIC_SEARCH_EXITS = 'ga:searchExits';
+ const METRIC_SEARCH_REFINEMENTS = 'ga:searchRefinements';
+ const METRIC_SEARCH_UNIQUES = 'ga:searchUniques';
+ const METRIC_SEARCH_VISIT = 'ga:searchVisits';
+
+ // M6. Goals
+ const METRIC_GOAL_COMPLETIONS_ALL = 'ga:goalCompletionsAll';
+ const METRIC_GOAL_STARTS_ALL = 'ga:goalStartsAll';
+ const METRIC_GOAL_VALUE_ALL = 'ga:goalValueAll';
+ // TODO goals 1-20
+ const METRIC_GOAL_1_COMPLETION = 'ga:goal1Completions';
+ const METRIC_GOAL_1_STARTS = 'ga:goal1Starts';
+ const METRIC_GOAL_1_VALUE = 'ga:goal1Value';
+
+ // M7. Events
+ const METRIC_TOTAL_EVENTS = 'ga:totalEvents';
+ const METRIC_UNIQUE_EVENTS = 'ga:uniqueEvents';
+ const METRIC_EVENT_VALUE = 'ga:eventValue';
+
+ // suported filter operators
+ const EQUALS = "==";
+ const EQUALS_NOT = "!=";
+ const GREATER = ">";
+ const LESS = ">";
+ const GREATER_EQUAL = ">=";
+ const LESS_EQUAL = "<=";
+ const CONTAINS = "=@";
+ const CONTAINS_NOT ="!@";
+ const REGULAR ="=~";
+ const REGULAR_NOT ="!~";
+
+ /**
+ * @var string
+ */
+ protected $_profileId;
+ /**
+ * @var array
+ */
+ protected $_dimensions = array();
+ /**
+ * @var array
+ */
+ protected $_metrics = array();
+ /**
+ * @var array
+ */
+ protected $_sort = array();
+ /**
+ * @var array
+ */
+ protected $_filters = array();
+
+ /**
+ * @param string $id
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function setProfileId($id)
+ {
+ $this->_profileId = $id;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getProfileId()
+ {
+ return $this->_profileId;
+ }
+
+ /**
+ * @param string $dimension
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function addDimension($dimension)
+ {
+ $this->_dimensions[$dimension] = true;
+ return $this;
+ }
+
+ /**
+ * @param string $metric
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function addMetric($metric)
+ {
+ $this->_metrics[$metric] = true;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getDimensions()
+ {
+ return $this->_dimensions;
+ }
+
+ /**
+ * @return array
+ */
+ public function getMetrics()
+ {
+ return $this->_metrics;
+ }
+
+ /**
+ * @param string $dimension
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function removeDimension($dimension)
+ {
+ unset($this->_dimensions[$dimension]);
+ return $this;
+ }
+ /**
+ * @param string $metric
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function removeMetric($metric)
+ {
+ unset($this->_metrics[$metric]);
+ return $this;
+ }
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function setStartDate($date)
+ {
+ $this->setParam("start-date", $date);
+ return $this;
+ }
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function setEndDate($date)
+ {
+ $this->setParam("end-date", $date);
+ return $this;
+ }
+
+ /**
+ * @param string $filter
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function addFilter($filter)
+ {
+ $this->_filters[] = array($filter, true);
+ return $this;
+ }
+
+ /**
+ * @param string $filter
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function addOrFilter($filter)
+ {
+ $this->_filters[] = array($filter, false);
+ return $this;
+ }
+
+ /**
+ * @param string $sort
+ * @param boolean[optional] $descending
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function addSort($sort, $descending=false)
+ {
+ // add to sort storage
+ $this->_sort[] = ($descending?'-':'').$sort;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function clearSort()
+ {
+ $this->_sort = array();
+ return $this;
+ }
+
+ /**
+ * @param string $segment
+ * @return Zend_Gdata_Analytics_DataQuery
+ */
+ public function setSegment($segment)
+ {
+ $this->setParam('segment', $segment);
+ return $this;
+ }
+
+ /**
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ $uri = $this->_defaultFeedUri;
+ if (isset($this->_url)) {
+ $uri = $this->_url;
+ }
+
+ $dimensions = $this->getDimensions();
+ if (!empty($dimensions)) {
+ $this->setParam('dimensions', implode(",", array_keys($dimensions)));
+ }
+
+ $metrics = $this->getMetrics();
+ if (!empty($metrics)) {
+ $this->setParam('metrics', implode(",", array_keys($metrics)));
+ }
+
+ // profile id (ga:tableId)
+ if ($this->getProfileId() != null) {
+ $this->setParam('ids', 'ga:'.ltrim($this->getProfileId(), "ga:"));
+ }
+
+ // sorting
+ if ($this->_sort) {
+ $this->setParam('sort', implode(",", $this->_sort));
+ }
+
+ // filtering
+ $filters = "";
+ foreach ($this->_filters as $filter) {
+ $filters.=($filter[1]===true?';':',').$filter[0];
+ }
+
+ if ($filters!="") {
+ $this->setParam('filters', ltrim($filters, ",;"));
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+}
diff --git a/zend/library/Zend/Gdata/Analytics/Extension/Dimension.php b/zend/library/Zend/Gdata/Analytics/Extension/Dimension.php
new file mode 100644
index 0000000..1c61728
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/Extension/Dimension.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Extension_Metric
+ */
+require_once 'Zend/Gdata/Analytics/Extension/Metric.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_Extension_Dimension
+ extends Zend_Gdata_Analytics_Extension_Metric
+{
+ protected $_rootNamespace = 'ga';
+ protected $_rootElement = 'dimension';
+ protected $_value = null;
+ protected $_name = null;
+}
diff --git a/zend/library/Zend/Gdata/Analytics/Extension/Goal.php b/zend/library/Zend/Gdata/Analytics/Extension/Goal.php
new file mode 100644
index 0000000..f1e5cb8
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/Extension/Goal.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_Goal extends Zend_Gdata_Extension
+{
+ protected $_rootNamespace = 'ga';
+ protected $_rootElement = 'goal';
+
+ public function __construct()
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Analytics::$namespaces);
+ parent::__construct();
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString()
+ {
+ $attribs = $this->getExtensionAttributes();
+ return $attribs['name']['value'];
+ }
+}
diff --git a/zend/library/Zend/Gdata/Analytics/Extension/Metric.php b/zend/library/Zend/Gdata/Analytics/Extension/Metric.php
new file mode 100644
index 0000000..6aa399c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/Extension/Metric.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Extension_Property
+ */
+require_once 'Zend/Gdata/Analytics/Extension/Property.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_Extension_Metric
+ extends Zend_Gdata_Analytics_Extension_Property
+{
+ protected $_rootNamespace = 'ga';
+ protected $_rootElement = 'metric';
+ protected $_value = null;
+ protected $_name = null;
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+}
diff --git a/zend/library/Zend/Gdata/Analytics/Extension/Property.php b/zend/library/Zend/Gdata/Analytics/Extension/Property.php
new file mode 100644
index 0000000..4788bf6
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/Extension/Property.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_Extension_Property extends Zend_Gdata_Extension
+{
+ protected $_rootNamespace = 'ga';
+ protected $_rootElement = 'property';
+ protected $_value = null;
+ protected $_name = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_Timezone object.
+ * @param string $value (optional) The text content of the element.
+ */
+ public function __construct($value = null, $name = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Analytics::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ $this->_name = $name;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $name = explode(':', $attribute->nodeValue);
+ $this->_name = end($name);
+ break;
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Analytics_Extension_Property The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * @param string $name
+ * @return Zend_Gdata_Analytics_Extension_Property
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+}
diff --git a/zend/library/Zend/Gdata/Analytics/Extension/TableId.php b/zend/library/Zend/Gdata/Analytics/Extension/TableId.php
new file mode 100644
index 0000000..f1ddad5
--- /dev/null
+++ b/zend/library/Zend/Gdata/Analytics/Extension/TableId.php
@@ -0,0 +1,112 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id$
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Analytics
+ */
+class Zend_Gdata_Analytics_Extension_TableId extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'ga';
+ protected $_rootElement = 'tableId';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_Timezone object.
+ * @param string $value (optional) The text content of the element.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Analytics::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value != null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $this->_value = $child->nodeValue;
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Timezone The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+}
diff --git a/zend/library/Zend/Gdata/App.php b/zend/library/Zend/Gdata/App.php
new file mode 100644
index 0000000..b62d95f
--- /dev/null
+++ b/zend/library/Zend/Gdata/App.php
@@ -0,0 +1,1243 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: App.php 25259 2013-02-13 17:38:12Z frosch $
+ */
+
+/**
+ * Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/App/Feed.php';
+
+/**
+ * Zend_Gdata_Http_Client
+ */
+require_once 'Zend/Http/Client.php';
+
+/**
+ * Zend_Version
+ */
+require_once 'Zend/Version.php';
+
+/**
+ * Zend_Gdata_App_MediaSource
+ */
+require_once 'Zend/Gdata/App/MediaSource.php';
+
+/**
+ * Zend_Uri/Http
+ */
+require_once 'Zend/Uri/Http.php';
+
+/**
+ * Provides Atom Publishing Protocol (APP) functionality. This class and all
+ * other components of Zend_Gdata_App are designed to work independently from
+ * other Zend_Gdata components in order to interact with generic APP services.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App
+{
+
+ /** Default major protocol version.
+ *
+ * @see _majorProtocolVersion
+ */
+ const DEFAULT_MAJOR_PROTOCOL_VERSION = 1;
+
+ /** Default minor protocol version.
+ *
+ * @see _minorProtocolVersion
+ */
+ const DEFAULT_MINOR_PROTOCOL_VERSION = null;
+
+ /**
+ * Client object used to communicate
+ *
+ * @var Zend_Http_Client
+ */
+ protected $_httpClient;
+
+ /**
+ * Client object used to communicate in static context
+ *
+ * @var Zend_Http_Client
+ */
+ protected static $_staticHttpClient = null;
+
+ /**
+ * Override HTTP PUT and DELETE request methods?
+ *
+ * @var boolean
+ */
+ protected static $_httpMethodOverride = false;
+
+ /**
+ * Enable gzipped responses?
+ *
+ * @var boolean
+ */
+ protected static $_gzipEnabled = false;
+
+ /**
+ * Use verbose exception messages. In the case of HTTP errors,
+ * use the body of the HTTP response in the exception message.
+ *
+ * @var boolean
+ */
+ protected static $_verboseExceptionMessages = true;
+
+ /**
+ * Default URI to which to POST.
+ *
+ * @var string
+ */
+ protected $_defaultPostUri = null;
+
+ /**
+ * Packages to search for classes when using magic __call method, in order.
+ *
+ * @var array
+ */
+ protected $_registeredPackages = array(
+ 'Zend_Gdata_App_Extension',
+ 'Zend_Gdata_App');
+
+ /**
+ * Maximum number of redirects to follow during HTTP operations
+ *
+ * @var int
+ */
+ protected static $_maxRedirects = 5;
+
+ /**
+ * Indicates the major protocol version that should be used.
+ * At present, recognized values are either 1 or 2. However, any integer
+ * value >= 1 is considered valid.
+ *
+ * Under most circumtances, this will be automatically set by
+ * Zend_Gdata_App subclasses.
+ *
+ * @see setMajorProtocolVersion()
+ * @see getMajorProtocolVersion()
+ */
+ protected $_majorProtocolVersion;
+
+ /**
+ * Indicates the minor protocol version that should be used. Can be set
+ * to either an integer >= 0, or NULL if no minor version should be sent
+ * to the server.
+ *
+ * At present, this field is not used by any Google services, but may be
+ * used in the future.
+ *
+ * Under most circumtances, this will be automatically set by
+ * Zend_Gdata_App subclasses.
+ *
+ * @see setMinorProtocolVersion()
+ * @see getMinorProtocolVersion()
+ */
+ protected $_minorProtocolVersion;
+
+ /**
+ * Whether we want to use XML to object mapping when fetching data.
+ *
+ * @var boolean
+ */
+ protected $_useObjectMapping = true;
+
+ /**
+ * Create Gdata object
+ *
+ * @param Zend_Http_Client $client
+ * @param string $applicationId
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->setHttpClient($client, $applicationId);
+ // Set default protocol version. Subclasses should override this as
+ // needed once a given service supports a new version.
+ $this->setMajorProtocolVersion(self::DEFAULT_MAJOR_PROTOCOL_VERSION);
+ $this->setMinorProtocolVersion(self::DEFAULT_MINOR_PROTOCOL_VERSION);
+ }
+
+ /**
+ * Adds a Zend Framework package to the $_registeredPackages array.
+ * This array is searched when using the magic __call method below
+ * to instantiante new objects.
+ *
+ * @param string $name The name of the package (eg Zend_Gdata_App)
+ * @return void
+ */
+ public function registerPackage($name)
+ {
+ array_unshift($this->_registeredPackages, $name);
+ }
+
+ /**
+ * Retrieve feed as string or object
+ *
+ * @param string $uri The uri from which to retrieve the feed
+ * @param string $className The class which is used as the return type
+ * @return string|Zend_Gdata_App_Feed Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function getFeed($uri, $className='Zend_Gdata_App_Feed')
+ {
+ return $this->importUrl($uri, $className, null);
+ }
+
+ /**
+ * Retrieve entry as string or object
+ *
+ * @param string $uri
+ * @param string $className The class which is used as the return type
+ * @return string|Zend_Gdata_App_Entry Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function getEntry($uri, $className='Zend_Gdata_App_Entry')
+ {
+ return $this->importUrl($uri, $className, null);
+ }
+
+ /**
+ * Get the Zend_Http_Client object used for communication
+ *
+ * @return Zend_Http_Client
+ */
+ public function getHttpClient()
+ {
+ return $this->_httpClient;
+ }
+
+ /**
+ * Set the Zend_Http_Client object used for communication
+ *
+ * @param Zend_Http_Client $client The client to use for communication
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Gdata_App Provides a fluent interface
+ */
+ public function setHttpClient($client,
+ $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ if ($client === null) {
+ $client = new Zend_Http_Client();
+ }
+ if (!$client instanceof Zend_Http_Client) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException(
+ 'Argument is not an instance of Zend_Http_Client.');
+ }
+ $userAgent = $applicationId . ' Zend_Framework_Gdata/' .
+ Zend_Version::VERSION;
+ $client->setHeaders('User-Agent', $userAgent);
+ $client->setConfig(array(
+ 'strictredirects' => true
+ )
+ );
+ $this->_httpClient = $client;
+ self::setStaticHttpClient($client);
+ return $this;
+ }
+
+ /**
+ * Set the static HTTP client instance
+ *
+ * Sets the static HTTP client object to use for retrieving the feed.
+ *
+ * @param Zend_Http_Client $httpClient
+ * @return void
+ */
+ public static function setStaticHttpClient(Zend_Http_Client $httpClient)
+ {
+ self::$_staticHttpClient = $httpClient;
+ }
+
+
+ /**
+ * Gets the HTTP client object. If none is set, a new Zend_Http_Client will be used.
+ *
+ * @return Zend_Http_Client
+ */
+ public static function getStaticHttpClient()
+ {
+ if (!self::$_staticHttpClient instanceof Zend_Http_Client) {
+ $client = new Zend_Http_Client();
+ $userAgent = 'Zend_Framework_Gdata/' . Zend_Version::VERSION;
+ $client->setHeaders('User-Agent', $userAgent);
+ $client->setConfig(array(
+ 'strictredirects' => true
+ )
+ );
+ self::$_staticHttpClient = $client;
+ }
+ return self::$_staticHttpClient;
+ }
+
+ /**
+ * Toggle using POST instead of PUT and DELETE HTTP methods
+ *
+ * Some feed implementations do not accept PUT and DELETE HTTP
+ * methods, or they can't be used because of proxies or other
+ * measures. This allows turning on using POST where PUT and
+ * DELETE would normally be used; in addition, an
+ * X-Method-Override header will be sent with a value of PUT or
+ * DELETE as appropriate.
+ *
+ * @param boolean $override Whether to override PUT and DELETE with POST.
+ * @return void
+ */
+ public static function setHttpMethodOverride($override = true)
+ {
+ self::$_httpMethodOverride = $override;
+ }
+
+ /**
+ * Get the HTTP override state
+ *
+ * @return boolean
+ */
+ public static function getHttpMethodOverride()
+ {
+ return self::$_httpMethodOverride;
+ }
+
+ /**
+ * Toggle requesting gzip encoded responses
+ *
+ * @param boolean $enabled Whether or not to enable gzipped responses
+ * @return void
+ */
+ public static function setGzipEnabled($enabled = false)
+ {
+ if ($enabled && !function_exists('gzinflate')) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You cannot enable gzipped responses if the zlib module ' .
+ 'is not enabled in your PHP installation.');
+
+ }
+ self::$_gzipEnabled = $enabled;
+ }
+
+ /**
+ * Get the HTTP override state
+ *
+ * @return boolean
+ */
+ public static function getGzipEnabled()
+ {
+ return self::$_gzipEnabled;
+ }
+
+ /**
+ * Get whether to use verbose exception messages
+ *
+ * In the case of HTTP errors, use the body of the HTTP response
+ * in the exception message.
+ *
+ * @return boolean
+ */
+ public static function getVerboseExceptionMessages()
+ {
+ return self::$_verboseExceptionMessages;
+ }
+
+ /**
+ * Set whether to use verbose exception messages
+ *
+ * In the case of HTTP errors, use the body of the HTTP response
+ * in the exception message.
+ *
+ * @param boolean $verbose Whether to use verbose exception messages
+ */
+ public static function setVerboseExceptionMessages($verbose)
+ {
+ self::$_verboseExceptionMessages = $verbose;
+ }
+
+ /**
+ * Set the maximum number of redirects to follow during HTTP operations
+ *
+ * @param int $maxRedirects Maximum number of redirects to follow
+ * @return void
+ */
+ public static function setMaxRedirects($maxRedirects)
+ {
+ self::$_maxRedirects = $maxRedirects;
+ }
+
+ /**
+ * Get the maximum number of redirects to follow during HTTP operations
+ *
+ * @return int Maximum number of redirects to follow
+ */
+ public static function getMaxRedirects()
+ {
+ return self::$_maxRedirects;
+ }
+
+ /**
+ * Set the major protocol version that should be used. Values < 1 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * @see _majorProtocolVersion
+ * @param int $value The major protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMajorProtocolVersion($value)
+ {
+ if (!($value >= 1)) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Major protocol version must be >= 1');
+ }
+ $this->_majorProtocolVersion = $value;
+ }
+
+ /**
+ * Get the major protocol version that is in use.
+ *
+ * @see _majorProtocolVersion
+ * @return int The major protocol version in use.
+ */
+ public function getMajorProtocolVersion()
+ {
+ return $this->_majorProtocolVersion;
+ }
+
+ /**
+ * Set the minor protocol version that should be used. If set to NULL, no
+ * minor protocol version will be sent to the server. Values < 0 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * @see _minorProtocolVersion
+ * @param (int|NULL) $value The minor protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMinorProtocolVersion($value)
+ {
+ if (!($value >= 0)) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Minor protocol version must be >= 0');
+ }
+ $this->_minorProtocolVersion = $value;
+ }
+
+ /**
+ * Get the minor protocol version that is in use.
+ *
+ * @see _minorProtocolVersion
+ * @return (int|NULL) The major protocol version in use, or NULL if no
+ * minor version is specified.
+ */
+ public function getMinorProtocolVersion()
+ {
+ return $this->_minorProtocolVersion;
+ }
+
+ /**
+ * Provides pre-processing for HTTP requests to APP services.
+ *
+ * 1. Checks the $data element and, if it's an entry, extracts the XML,
+ * multipart data, edit link (PUT,DELETE), etc.
+ * 2. If $data is a string, sets the default content-type header as
+ * 'application/atom+xml' if it's not already been set.
+ * 3. Adds a x-http-method override header and changes the HTTP method
+ * to 'POST' if necessary as per getHttpMethodOverride()
+ *
+ * @param string $method The HTTP method for the request - 'GET', 'POST',
+ * 'PUT', 'DELETE'
+ * @param string $url The URL to which this request is being performed,
+ * or null if found in $data
+ * @param array $headers An associative array of HTTP headers for this
+ * request
+ * @param mixed $data The Zend_Gdata_App_Entry or XML for the
+ * body of the request
+ * @param string $contentTypeOverride The override value for the
+ * content type of the request body
+ * @return array An associative array containing the determined
+ * 'method', 'url', 'data', 'headers', 'contentType'
+ */
+ public function prepareRequest($method,
+ $url = null,
+ $headers = array(),
+ $data = null,
+ $contentTypeOverride = null)
+ {
+ // As a convenience, if $headers is null, we'll convert it back to
+ // an empty array.
+ if ($headers === null) {
+ $headers = array();
+ }
+
+ $rawData = null;
+ $finalContentType = null;
+ if ($url == null) {
+ $url = $this->_defaultPostUri;
+ }
+
+ if (is_string($data)) {
+ $rawData = $data;
+ if ($contentTypeOverride === null) {
+ $finalContentType = 'application/atom+xml';
+ }
+ } elseif ($data instanceof Zend_Gdata_App_MediaEntry) {
+ $rawData = $data->encode();
+ if ($data->getMediaSource() !== null) {
+ $finalContentType = $rawData->getContentType();
+ $headers['MIME-version'] = '1.0';
+ $headers['Slug'] = $data->getMediaSource()->getSlug();
+ } else {
+ $finalContentType = 'application/atom+xml';
+ }
+ if ($method == 'PUT' || $method == 'DELETE') {
+ $editLink = $data->getEditLink();
+ if ($editLink != null && $url == null) {
+ $url = $editLink->getHref();
+ }
+ }
+ } elseif ($data instanceof Zend_Gdata_App_Entry) {
+ $rawData = $data->saveXML();
+ $finalContentType = 'application/atom+xml';
+ if ($method == 'PUT' || $method == 'DELETE') {
+ $editLink = $data->getEditLink();
+ if ($editLink != null) {
+ $url = $editLink->getHref();
+ }
+ }
+ } elseif ($data instanceof Zend_Gdata_App_MediaSource) {
+ $rawData = $data->encode();
+ if ($data->getSlug() !== null) {
+ $headers['Slug'] = $data->getSlug();
+ }
+ $finalContentType = $data->getContentType();
+ }
+
+ if ($method == 'DELETE') {
+ $rawData = null;
+ }
+
+ // Set an If-Match header if:
+ // - This isn't a DELETE
+ // - If this isn't a GET, the Etag isn't weak
+ // - A similar header (If-Match/If-None-Match) hasn't already been
+ // set.
+ if ($method != 'DELETE' && (
+ !array_key_exists('If-Match', $headers) &&
+ !array_key_exists('If-None-Match', $headers)
+ ) ) {
+ $allowWeak = $method == 'GET';
+ if ($ifMatchHeader = $this->generateIfMatchHeaderData(
+ $data, $allowWeak)) {
+ $headers['If-Match'] = $ifMatchHeader;
+ }
+ }
+
+ if ($method != 'POST' && $method != 'GET' && Zend_Gdata_App::getHttpMethodOverride()) {
+ $headers['x-http-method-override'] = $method;
+ $method = 'POST';
+ } else {
+ $headers['x-http-method-override'] = null;
+ }
+
+ if ($contentTypeOverride != null) {
+ $finalContentType = $contentTypeOverride;
+ }
+
+ return array('method' => $method, 'url' => $url,
+ 'data' => $rawData, 'headers' => $headers,
+ 'contentType' => $finalContentType);
+ }
+
+ /**
+ * Performs a HTTP request using the specified method
+ *
+ * @param string $method The HTTP method for the request - 'GET', 'POST',
+ * 'PUT', 'DELETE'
+ * @param string $url The URL to which this request is being performed
+ * @param array $headers An associative array of HTTP headers
+ * for this request
+ * @param string $body The body of the HTTP request
+ * @param string $contentType The value for the content type
+ * of the request body
+ * @param int $remainingRedirects Number of redirects to follow if request
+ * s results in one
+ * @return Zend_Http_Response The response object
+ */
+ public function performHttpRequest($method, $url, $headers = null,
+ $body = null, $contentType = null, $remainingRedirects = null)
+ {
+ require_once 'Zend/Http/Client/Exception.php';
+ if ($remainingRedirects === null) {
+ $remainingRedirects = self::getMaxRedirects();
+ }
+ if ($headers === null) {
+ $headers = array();
+ }
+ // Append a Gdata version header if protocol v2 or higher is in use.
+ // (Protocol v1 does not use this header.)
+ $major = $this->getMajorProtocolVersion();
+ $minor = $this->getMinorProtocolVersion();
+ if ($major >= 2) {
+ $headers['GData-Version'] = $major +
+ (($minor === null) ? '.' + $minor : '');
+ }
+
+ // check the overridden method
+ if (($method == 'POST' || $method == 'PUT') && $body === null &&
+ $headers['x-http-method-override'] != 'DELETE') {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify the data to post as either a ' .
+ 'string or a child of Zend_Gdata_App_Entry');
+ }
+ if ($url === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify an URI to which to post.');
+ }
+ $headers['Content-Type'] = $contentType;
+ if (Zend_Gdata_App::getGzipEnabled()) {
+ // some services require the word 'gzip' to be in the user-agent
+ // header in addition to the accept-encoding header
+ if (strpos($this->_httpClient->getHeader('User-Agent'),
+ 'gzip') === false) {
+ $headers['User-Agent'] =
+ $this->_httpClient->getHeader('User-Agent') . ' (gzip)';
+ }
+ $headers['Accept-encoding'] = 'gzip, deflate';
+ } else {
+ $headers['Accept-encoding'] = 'identity';
+ }
+
+ // Make sure the HTTP client object is 'clean' before making a request
+ // In addition to standard headers to reset via resetParameters(),
+ // also reset the Slug and If-Match headers
+ $this->_httpClient->resetParameters();
+ $this->_httpClient->setHeaders(array('Slug', 'If-Match'));
+
+ // Set the params for the new request to be performed
+ $this->_httpClient->setHeaders($headers);
+ require_once 'Zend/Uri/Http.php';
+ $uri = Zend_Uri_Http::fromString($url);
+ preg_match("/^(.*?)(\?.*)?$/", $url, $matches);
+ $this->_httpClient->setUri($matches[1]);
+ $queryArray = $uri->getQueryAsArray();
+ foreach ($queryArray as $name => $value) {
+ $this->_httpClient->setParameterGet($name, $value);
+ }
+
+
+ $this->_httpClient->setConfig(array('maxredirects' => 0));
+
+ // Set the proper adapter if we are handling a streaming upload
+ $usingMimeStream = false;
+ $oldHttpAdapter = null;
+
+ if ($body instanceof Zend_Gdata_MediaMimeStream) {
+ $usingMimeStream = true;
+ $this->_httpClient->setRawDataStream($body, $contentType);
+ $oldHttpAdapter = $this->_httpClient->getAdapter();
+
+ if ($oldHttpAdapter instanceof Zend_Http_Client_Adapter_Proxy) {
+ require_once 'Zend/Gdata/HttpAdapterStreamingProxy.php';
+ $newAdapter = new Zend_Gdata_HttpAdapterStreamingProxy();
+ } else {
+ require_once 'Zend/Gdata/HttpAdapterStreamingSocket.php';
+ $newAdapter = new Zend_Gdata_HttpAdapterStreamingSocket();
+ }
+ $this->_httpClient->setAdapter($newAdapter);
+ } else {
+ $this->_httpClient->setRawData($body, $contentType);
+ }
+
+ try {
+ $response = $this->_httpClient->request($method);
+ // reset adapter
+ if ($usingMimeStream) {
+ $this->_httpClient->setAdapter($oldHttpAdapter);
+ }
+ } catch (Zend_Http_Client_Exception $e) {
+ // reset adapter
+ if ($usingMimeStream) {
+ $this->_httpClient->setAdapter($oldHttpAdapter);
+ }
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+ if ($response->isRedirect() && $response->getStatus() != '304') {
+ if ($remainingRedirects > 0) {
+ $newUrl = $response->getHeader('Location');
+ $response = $this->performHttpRequest(
+ $method, $newUrl, $headers, $body,
+ $contentType, $remainingRedirects);
+ } else {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException(
+ 'Number of redirects exceeds maximum', null, $response);
+ }
+ }
+ if (!$response->isSuccessful()) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ $exceptionMessage = 'Expected response code 200, got ' .
+ $response->getStatus();
+ if (self::getVerboseExceptionMessages()) {
+ $exceptionMessage .= "\n" . $response->getBody();
+ }
+ $exception = new Zend_Gdata_App_HttpException($exceptionMessage);
+ $exception->setResponse($response);
+ throw $exception;
+ }
+ return $response;
+ }
+
+ /**
+ * Imports a feed located at $uri.
+ *
+ * @param string $uri
+ * @param Zend_Http_Client $client The client used for communication
+ * @param string $className The class which is used as the return type
+ * @param bool $useObjectMapping Enable/disable the use of XML to object mapping.
+ * @throws Zend_Gdata_App_Exception
+ * @return string|Zend_Gdata_App_Feed Returns string only if the fourth
+ * parameter ($useObjectMapping) is set
+ * to false.
+ */
+ public static function import($uri, $client = null,
+ $className='Zend_Gdata_App_Feed', $useObjectMapping = true)
+ {
+ $app = new Zend_Gdata_App($client);
+ $requestData = $app->prepareRequest('GET', $uri);
+ $response = $app->performHttpRequest(
+ $requestData['method'], $requestData['url']);
+
+ $feedContent = $response->getBody();
+ if (false === $useObjectMapping) {
+ return $feedContent;
+ }
+ $feed = self::importString($feedContent, $className);
+ if ($client != null) {
+ $feed->setHttpClient($client);
+ }
+ return $feed;
+ }
+
+ /**
+ * Imports the specified URL (non-statically).
+ *
+ * @param string $url The URL to import
+ * @param string $className The class which is used as the return type
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @throws Zend_Gdata_App_Exception
+ * @return string|Zend_Gdata_App_Feed Returns string only if the object
+ * mapping has been disabled explicitly
+ * by passing false to the
+ * useObjectMapping() function.
+ */
+ public function importUrl($url, $className='Zend_Gdata_App_Feed',
+ $extraHeaders = array())
+ {
+ $response = $this->get($url, $extraHeaders);
+
+ $feedContent = $response->getBody();
+ if (!$this->_useObjectMapping) {
+ return $feedContent;
+ }
+
+ $protocolVersionStr = $response->getHeader('GData-Version');
+ $majorProtocolVersion = null;
+ $minorProtocolVersion = null;
+ if ($protocolVersionStr !== null) {
+ // Extract protocol major and minor version from header
+ $delimiterPos = strpos($protocolVersionStr, '.');
+ $length = strlen($protocolVersionStr);
+ $major = substr($protocolVersionStr, 0, $delimiterPos);
+ $minor = substr($protocolVersionStr, $delimiterPos + 1, $length);
+ $majorProtocolVersion = $major;
+ $minorProtocolVersion = $minor;
+ }
+
+ $feed = self::importString($feedContent, $className,
+ $majorProtocolVersion, $minorProtocolVersion);
+ if ($this->getHttpClient() != null) {
+ $feed->setHttpClient($this->getHttpClient());
+ }
+ $etag = $response->getHeader('ETag');
+ if ($etag !== null) {
+ $feed->setEtag($etag);
+ }
+ return $feed;
+ }
+
+
+ /**
+ * Imports a feed represented by $string.
+ *
+ * @param string $string
+ * @param string $className The class which is used as the return type
+ * @param integer $majorProcolVersion (optional) The major protocol version
+ * of the data model object that is to be created.
+ * @param integer $minorProcolVersion (optional) The minor protocol version
+ * of the data model object that is to be created.
+ * @throws Zend_Gdata_App_Exception
+ * @return Zend_Gdata_App_Feed
+ */
+ public static function importString($string,
+ $className='Zend_Gdata_App_Feed', $majorProtocolVersion = null,
+ $minorProtocolVersion = null)
+ {
+ if (!class_exists($className, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($className);
+ }
+
+ // Load the feed as an XML DOMDocument object
+ @ini_set('track_errors', 1);
+ $doc = new DOMDocument();
+ $success = @$doc->loadXML($string);
+ @ini_restore('track_errors');
+
+ if (!$success) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "DOMDocument cannot parse XML: $php_errormsg");
+ }
+
+ $feed = new $className();
+ $feed->setMajorProtocolVersion($majorProtocolVersion);
+ $feed->setMinorProtocolVersion($minorProtocolVersion);
+ $feed->transferFromXML($string);
+ $feed->setHttpClient(self::getstaticHttpClient());
+ return $feed;
+ }
+
+
+ /**
+ * Imports a feed from a file located at $filename.
+ *
+ * @param string $filename
+ * @param string $className The class which is used as the return type
+ * @param string $useIncludePath Whether the include_path should be searched
+ * @throws Zend_Gdata_App_Exception
+ * @return Zend_Gdata_App_Feed
+ */
+ public static function importFile($filename,
+ $className='Zend_Gdata_App_Feed', $useIncludePath = false)
+ {
+ @ini_set('track_errors', 1);
+ $feed = @file_get_contents($filename, $useIncludePath);
+ @ini_restore('track_errors');
+ if ($feed === false) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "File could not be loaded: $php_errormsg");
+ }
+ return self::importString($feed, $className);
+ }
+
+ /**
+ * GET a URI using client object.
+ *
+ * @param string $uri GET URI
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Http_Response
+ */
+ public function get($uri, $extraHeaders = array())
+ {
+ $requestData = $this->prepareRequest('GET', $uri, $extraHeaders);
+ return $this->performHttpRequest(
+ $requestData['method'], $requestData['url'],
+ $requestData['headers']);
+ }
+
+ /**
+ * POST data with client object
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri POST URI
+ * @param array $headers Additional HTTP headers to insert.
+ * @param string $contentType Content-type of the data
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Http_Response
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function post($data, $uri = null, $remainingRedirects = null,
+ $contentType = null, $extraHeaders = null)
+ {
+ $requestData = $this->prepareRequest(
+ 'POST', $uri, $extraHeaders, $data, $contentType);
+ return $this->performHttpRequest(
+ $requestData['method'], $requestData['url'],
+ $requestData['headers'], $requestData['data'],
+ $requestData['contentType']);
+ }
+
+ /**
+ * PUT data with client object
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri PUT URI
+ * @param array $headers Additional HTTP headers to insert.
+ * @param string $contentType Content-type of the data
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Http_Response
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function put($data, $uri = null, $remainingRedirects = null,
+ $contentType = null, $extraHeaders = null)
+ {
+ $requestData = $this->prepareRequest(
+ 'PUT', $uri, $extraHeaders, $data, $contentType);
+ return $this->performHttpRequest(
+ $requestData['method'], $requestData['url'],
+ $requestData['headers'], $requestData['data'],
+ $requestData['contentType']);
+ }
+
+ /**
+ * DELETE entry with client object
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or URL to delete
+ * @return void
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function delete($data, $remainingRedirects = null)
+ {
+ if (is_string($data)) {
+ $requestData = $this->prepareRequest('DELETE', $data);
+ } else {
+ $headers = array();
+
+ $requestData = $this->prepareRequest(
+ 'DELETE', null, $headers, $data);
+ }
+ return $this->performHttpRequest($requestData['method'],
+ $requestData['url'],
+ $requestData['headers'],
+ '',
+ $requestData['contentType'],
+ $remainingRedirects);
+ }
+
+ /**
+ * Inserts an entry to a given URI and returns the response as a
+ * fully formed Entry.
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri POST URI
+ * @param string $className The class of entry to be returned.
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Gdata_App_Entry The entry returned by the service after
+ * insertion.
+ */
+ public function insertEntry($data, $uri, $className='Zend_Gdata_App_Entry',
+ $extraHeaders = array())
+ {
+ if (!class_exists($className, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($className);
+ }
+
+ $response = $this->post($data, $uri, null, null, $extraHeaders);
+
+ $returnEntry = new $className($response->getBody());
+ $returnEntry->setHttpClient(self::getstaticHttpClient());
+
+ $etag = $response->getHeader('ETag');
+ if ($etag !== null) {
+ $returnEntry->setEtag($etag);
+ }
+
+ return $returnEntry;
+ }
+
+ /**
+ * Update an entry
+ *
+ * @param mixed $data Zend_Gdata_App_Entry or XML (w/ID and link rel='edit')
+ * @param string|null The URI to send requests to, or null if $data
+ * contains the URI.
+ * @param string|null The name of the class that should be deserialized
+ * from the server response. If null, then 'Zend_Gdata_App_Entry'
+ * will be used.
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Gdata_App_Entry The entry returned from the server
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function updateEntry($data, $uri = null, $className = null,
+ $extraHeaders = array())
+ {
+ if ($className === null && $data instanceof Zend_Gdata_App_Entry) {
+ $className = get_class($data);
+ } elseif ($className === null) {
+ $className = 'Zend_Gdata_App_Entry';
+ }
+
+ if (!class_exists($className, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($className);
+ }
+
+ $response = $this->put($data, $uri, null, null, $extraHeaders);
+ $returnEntry = new $className($response->getBody());
+ $returnEntry->setHttpClient(self::getstaticHttpClient());
+
+ $etag = $response->getHeader('ETag');
+ if ($etag !== null) {
+ $returnEntry->setEtag($etag);
+ }
+
+ return $returnEntry;
+ }
+
+ /**
+ * Provides a magic factory method to instantiate new objects with
+ * shorter syntax than would otherwise be required by the Zend Framework
+ * naming conventions. For instance, to construct a new
+ * Zend_Gdata_Calendar_Extension_Color, a developer simply needs to do
+ * $gCal->newColor(). For this magic constructor, packages are searched
+ * in the same order as which they appear in the $_registeredPackages
+ * array
+ *
+ * @param string $method The method name being called
+ * @param array $args The arguments passed to the call
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function __call($method, $args)
+ {
+ if (preg_match('/^new(\w+)/', $method, $matches)) {
+ $class = $matches[1];
+ $foundClassName = null;
+ foreach ($this->_registeredPackages as $name) {
+ try {
+ // Autoloading disabled on next line for compatibility
+ // with magic factories. See ZF-6660.
+ if (!class_exists($name . '_' . $class, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($name . '_' . $class);
+ }
+ $foundClassName = $name . '_' . $class;
+ break;
+ } catch (Zend_Exception $e) {
+ // package wasn't here- continue searching
+ } catch (ErrorException $e) {
+ // package wasn't here- continue searching
+ // @see ZF-7013 and ZF-11959
+ }
+ }
+ if ($foundClassName != null) {
+ $reflectionObj = new ReflectionClass($foundClassName);
+ $instance = $reflectionObj->newInstanceArgs($args);
+ if ($instance instanceof Zend_Gdata_App_FeedEntryParent) {
+ $instance->setHttpClient($this->_httpClient);
+
+ // Propogate version data
+ $instance->setMajorProtocolVersion(
+ $this->_majorProtocolVersion);
+ $instance->setMinorProtocolVersion(
+ $this->_minorProtocolVersion);
+ }
+ return $instance;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "Unable to find '${class}' in registered packages");
+ }
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("No such method ${method}");
+ }
+ }
+
+ /**
+ * Retrieve all entries for a feed, iterating through pages as necessary.
+ * Be aware that calling this function on a large dataset will take a
+ * significant amount of time to complete. In some cases this may cause
+ * execution to timeout without proper precautions in place.
+ *
+ * @param object $feed The feed to iterate through.
+ * @return mixed A new feed of the same type as the one originally
+ * passed in, containing all relevent entries.
+ */
+ public function retrieveAllEntriesForFeed($feed) {
+ $feedClass = get_class($feed);
+ $reflectionObj = new ReflectionClass($feedClass);
+ $result = $reflectionObj->newInstance();
+ do {
+ foreach ($feed as $entry) {
+ $result->addEntry($entry);
+ }
+
+ $next = $feed->getLink('next');
+ if ($next !== null) {
+ $feed = $this->getFeed($next->href, $feedClass);
+ } else {
+ $feed = null;
+ }
+ }
+ while ($feed != null);
+ return $result;
+ }
+
+ /**
+ * This method enables logging of requests by changing the
+ * Zend_Http_Client_Adapter used for performing the requests.
+ * NOTE: This will not work if you have customized the adapter
+ * already to use a proxy server or other interface.
+ *
+ * @param string $logfile The logfile to use when logging the requests
+ */
+ public function enableRequestDebugLogging($logfile)
+ {
+ $this->_httpClient->setConfig(array(
+ 'adapter' => 'Zend_Gdata_App_LoggingHttpClientAdapterSocket',
+ 'logfile' => $logfile
+ ));
+ }
+
+ /**
+ * Retrieve next set of results based on a given feed.
+ *
+ * @param Zend_Gdata_App_Feed $feed The feed from which to
+ * retreive the next set of results.
+ * @param string $className (optional) The class of feed to be returned.
+ * If null, the next feed (if found) will be the same class as
+ * the feed that was given as the first argument.
+ * @return Zend_Gdata_App_Feed|null Returns a
+ * Zend_Gdata_App_Feed or null if no next set of results
+ * exists.
+ */
+ public function getNextFeed($feed, $className = null)
+ {
+ $nextLink = $feed->getNextLink();
+ if (!$nextLink) {
+ return null;
+ }
+ $nextLinkHref = $nextLink->getHref();
+
+ if ($className === null) {
+ $className = get_class($feed);
+ }
+
+ return $this->getFeed($nextLinkHref, $className);
+ }
+
+ /**
+ * Retrieve previous set of results based on a given feed.
+ *
+ * @param Zend_Gdata_App_Feed $feed The feed from which to
+ * retreive the previous set of results.
+ * @param string $className (optional) The class of feed to be returned.
+ * If null, the previous feed (if found) will be the same class as
+ * the feed that was given as the first argument.
+ * @return Zend_Gdata_App_Feed|null Returns a
+ * Zend_Gdata_App_Feed or null if no previous set of results
+ * exists.
+ */
+ public function getPreviousFeed($feed, $className = null)
+ {
+ $previousLink = $feed->getPreviousLink();
+ if (!$previousLink) {
+ return null;
+ }
+ $previousLinkHref = $previousLink->getHref();
+
+ if ($className === null) {
+ $className = get_class($feed);
+ }
+
+ return $this->getFeed($previousLinkHref, $className);
+ }
+
+ /**
+ * Returns the data for an If-Match header based on the current Etag
+ * property. If Etags are not supported by the server or cannot be
+ * extracted from the data, then null will be returned.
+ *
+ * @param boolean $allowWeak If false, then if a weak Etag is detected,
+ * then return null rather than the Etag.
+ * @return string|null $data
+ */
+ public function generateIfMatchHeaderData($data, $allowWeek)
+ {
+ $result = '';
+ // Set an If-Match header if an ETag has been set (version >= 2 only)
+ if ($this->_majorProtocolVersion >= 2 &&
+ $data instanceof Zend_Gdata_App_Entry) {
+ $etag = $data->getEtag();
+ if (($etag !== null) &&
+ ($allowWeek || substr($etag, 0, 2) != 'W/')) {
+ $result = $data->getEtag();
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Determine whether service object is using XML to object mapping.
+ *
+ * @return boolean True if service object is using XML to object mapping,
+ * false otherwise.
+ */
+ public function usingObjectMapping()
+ {
+ return $this->_useObjectMapping;
+ }
+
+ /**
+ * Enable/disable the use of XML to object mapping.
+ *
+ * @param boolean $value Pass in true to use the XML to object mapping.
+ * Pass in false or null to disable it.
+ * @return void
+ */
+ public function useObjectMapping($value)
+ {
+ if ($value === True) {
+ $this->_useObjectMapping = true;
+ } else {
+ $this->_useObjectMapping = false;
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/AuthException.php b/zend/library/Zend/Gdata/App/AuthException.php
new file mode 100644
index 0000000..58fad73
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/AuthException.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AuthException.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Exception
+ */
+require_once 'Zend/Gdata/App/Exception.php';
+
+/**
+ * Gdata exceptions
+ *
+ * Class to represent exceptions that occur during Gdata operations.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_AuthException extends Zend_Gdata_App_Exception
+{
+}
diff --git a/zend/library/Zend/Gdata/App/BadMethodCallException.php b/zend/library/Zend/Gdata/App/BadMethodCallException.php
new file mode 100644
index 0000000..784608d
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/BadMethodCallException.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: BadMethodCallException.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App_Exception
+ */
+require_once 'Zend/Gdata/App/Exception.php';
+
+/**
+ * Gdata APP exceptions
+ *
+ * Class to represent exceptions that occur during Gdata APP operations.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_BadMethodCallException extends Zend_Gdata_App_Exception
+{
+}
diff --git a/zend/library/Zend/Gdata/App/Base.php b/zend/library/Zend/Gdata/App/Base.php
new file mode 100644
index 0000000..a3ed7ce
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Base.php
@@ -0,0 +1,572 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Base.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Util
+ */
+require_once 'Zend/Gdata/App/Util.php';
+
+/**
+ * Abstract class for all XML elements
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Gdata_App_Base
+{
+
+ /**
+ * @var string The XML element name, including prefix if desired
+ */
+ protected $_rootElement = null;
+
+ /**
+ * @var string The XML namespace prefix
+ */
+ protected $_rootNamespace = 'atom';
+
+ /**
+ * @var string The XML namespace URI - takes precedence over lookup up the
+ * corresponding URI for $_rootNamespace
+ */
+ protected $_rootNamespaceURI = null;
+
+ /**
+ * @var array Leftover elements which were not handled
+ */
+ protected $_extensionElements = array();
+
+ /**
+ * @var array Leftover attributes which were not handled
+ */
+ protected $_extensionAttributes = array();
+
+ /**
+ * @var string XML child text node content
+ */
+ protected $_text = null;
+
+ /**
+ * @var array Memoized results from calls to lookupNamespace() to avoid
+ * expensive calls to getGreatestBoundedValue(). The key is in the
+ * form 'prefix-majorVersion-minorVersion', and the value is the
+ * output from getGreatestBoundedValue().
+ */
+ protected static $_namespaceLookupCache = array();
+
+ /**
+ * List of namespaces, as a three-dimensional array. The first dimension
+ * represents the namespace prefix, the second dimension represents the
+ * minimum major protocol version, and the third dimension is the minimum
+ * minor protocol version. Null keys are NOT allowed.
+ *
+ * When looking up a namespace for a given prefix, the greatest version
+ * number (both major and minor) which is less than the effective version
+ * should be used.
+ *
+ * @see lookupNamespace()
+ * @see registerNamespace()
+ * @see registerAllNamespaces()
+ * @var array
+ */
+ protected $_namespaces = array(
+ 'atom' => array(
+ 1 => array(
+ 0 => 'http://www.w3.org/2005/Atom'
+ )
+ ),
+ 'app' => array(
+ 1 => array(
+ 0 => 'http://purl.org/atom/app#'
+ ),
+ 2 => array(
+ 0 => 'http://www.w3.org/2007/app'
+ )
+ )
+ );
+
+ public function __construct()
+ {
+ }
+
+ /**
+ * Returns the child text node of this element
+ * This represents any raw text contained within the XML element
+ *
+ * @return string Child text node
+ */
+ public function getText($trim = true)
+ {
+ if ($trim) {
+ return trim($this->_text);
+ } else {
+ return $this->_text;
+ }
+ }
+
+ /**
+ * Sets the child text node of this element
+ * This represents any raw text contained within the XML element
+ *
+ * @param string $value Child text node
+ * @return Zend_Gdata_App_Base Returns an object of the same type as 'this' to provide a fluent interface.
+ */
+ public function setText($value)
+ {
+ $this->_text = $value;
+ return $this;
+ }
+
+ /**
+ * Returns an array of all elements not matched to data model classes
+ * during the parsing of the XML
+ *
+ * @return array All elements not matched to data model classes during parsing
+ */
+ public function getExtensionElements()
+ {
+ return $this->_extensionElements;
+ }
+
+ /**
+ * Sets an array of all elements not matched to data model classes
+ * during the parsing of the XML. This method can be used to add arbitrary
+ * child XML elements to any data model class.
+ *
+ * @param array $value All extension elements
+ * @return Zend_Gdata_App_Base Returns an object of the same type as 'this' to provide a fluent interface.
+ */
+ public function setExtensionElements($value)
+ {
+ $this->_extensionElements = $value;
+ return $this;
+ }
+
+ /**
+ * Returns an array of all extension attributes not transformed into data
+ * model properties during parsing of the XML. Each element of the array
+ * is a hashed array of the format:
+ * array('namespaceUri' => string, 'name' => string, 'value' => string);
+ *
+ * @return array All extension attributes
+ */
+ public function getExtensionAttributes()
+ {
+ return $this->_extensionAttributes;
+ }
+
+ /**
+ * Sets an array of all extension attributes not transformed into data
+ * model properties during parsing of the XML. Each element of the array
+ * is a hashed array of the format:
+ * array('namespaceUri' => string, 'name' => string, 'value' => string);
+ * This can be used to add arbitrary attributes to any data model element
+ *
+ * @param array $value All extension attributes
+ * @return Zend_Gdata_App_Base Returns an object of the same type as 'this' to provide a fluent interface.
+ */
+ public function setExtensionAttributes($value)
+ {
+ $this->_extensionAttributes = $value;
+ return $this;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ if ($doc === null) {
+ $doc = new DOMDocument('1.0', 'utf-8');
+ }
+ if ($this->_rootNamespaceURI != null) {
+ $element = $doc->createElementNS($this->_rootNamespaceURI, $this->_rootElement);
+ } elseif ($this->_rootNamespace !== null) {
+ if (strpos($this->_rootElement, ':') === false) {
+ $elementName = $this->_rootNamespace . ':' . $this->_rootElement;
+ } else {
+ $elementName = $this->_rootElement;
+ }
+ $element = $doc->createElementNS($this->lookupNamespace($this->_rootNamespace), $elementName);
+ } else {
+ $element = $doc->createElement($this->_rootElement);
+ }
+ if ($this->_text != null) {
+ $element->appendChild($element->ownerDocument->createTextNode($this->_text));
+ }
+ foreach ($this->_extensionElements as $extensionElement) {
+ $element->appendChild($extensionElement->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_extensionAttributes as $attribute) {
+ $element->setAttribute($attribute['name'], $attribute['value']);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a child DOMNode, tries to determine how to map the data into
+ * object instance members. If no mapping is defined, Extension_Element
+ * objects are created and stored in an array.
+ *
+ * @param DOMNode $child The DOMNode needed to be handled
+ */
+ protected function takeChildFromDOM($child)
+ {
+ if ($child->nodeType == XML_TEXT_NODE) {
+ $this->_text = $child->nodeValue;
+ } else {
+ $extensionElement = new Zend_Gdata_App_Extension_Element();
+ $extensionElement->transferFromDOM($child);
+ $this->_extensionElements[] = $extensionElement;
+ }
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ $arrayIndex = ($attribute->namespaceURI != '')?(
+ $attribute->namespaceURI . ':' . $attribute->name):
+ $attribute->name;
+ $this->_extensionAttributes[$arrayIndex] =
+ array('namespaceUri' => $attribute->namespaceURI,
+ 'name' => $attribute->localName,
+ 'value' => $attribute->nodeValue);
+ }
+
+ /**
+ * Transfers each child and attribute into member variables.
+ * This is called when XML is received over the wire and the data
+ * model needs to be built to represent this XML.
+ *
+ * @param DOMNode $node The DOMNode that represents this object's data
+ */
+ public function transferFromDOM($node)
+ {
+ foreach ($node->childNodes as $child) {
+ $this->takeChildFromDOM($child);
+ }
+ foreach ($node->attributes as $attribute) {
+ $this->takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Parses the provided XML text and generates data model classes for
+ * each know element by turning the XML text into a DOM tree and calling
+ * transferFromDOM($element). The first data model element with the same
+ * name as $this->_rootElement is used and the child elements are
+ * recursively parsed.
+ *
+ * @param string $xml The XML text to parse
+ */
+ public function transferFromXML($xml)
+ {
+ if ($xml) {
+ // Load the feed as an XML DOMDocument object
+ @ini_set('track_errors', 1);
+ $doc = new DOMDocument();
+ $success = @$doc->loadXML($xml);
+ @ini_restore('track_errors');
+ if (!$success) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("DOMDocument cannot parse XML: $php_errormsg");
+ }
+ $element = $doc->getElementsByTagName($this->_rootElement)->item(0);
+ if (!$element) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('No root <' . $this->_rootElement . '> element');
+ }
+ $this->transferFromDOM($element);
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('XML passed to transferFromXML cannot be null');
+ }
+ }
+
+ /**
+ * Converts this element and all children into XML text using getDOM()
+ *
+ * @return string XML content
+ */
+ public function saveXML()
+ {
+ $element = $this->getDOM();
+ return $element->ownerDocument->saveXML($element);
+ }
+
+ /**
+ * Alias for saveXML() returns XML content for this element and all
+ * children
+ *
+ * @return string XML content
+ */
+ public function getXML()
+ {
+ return $this->saveXML();
+ }
+
+ /**
+ * Alias for saveXML()
+ *
+ * Can be overridden by children to provide more complex representations
+ * of entries.
+ *
+ * @return string Encoded string content
+ */
+ public function encode()
+ {
+ return $this->saveXML();
+ }
+
+ /**
+ * Get the full version of a namespace prefix
+ *
+ * Looks up a prefix (atom:, etc.) in the list of registered
+ * namespaces and returns the full namespace URI if
+ * available. Returns the prefix, unmodified, if it's not
+ * registered.
+ *
+ * @param string $prefix The namespace prefix to lookup.
+ * @param integer $majorVersion The major protocol version in effect.
+ * Defaults to '1'.
+ * @param integer $minorVersion The minor protocol version in effect.
+ * Defaults to null (use latest).
+ * @return string
+ */
+ public function lookupNamespace($prefix,
+ $majorVersion = 1,
+ $minorVersion = null)
+ {
+ // Check for a memoized result
+ $key = $prefix . ' ' .
+ ($majorVersion === null ? 'NULL' : $majorVersion) .
+ ' '. ($minorVersion === null ? 'NULL' : $minorVersion);
+ if (array_key_exists($key, self::$_namespaceLookupCache))
+ return self::$_namespaceLookupCache[$key];
+ // If no match, return the prefix by default
+ $result = $prefix;
+
+ // Find tuple of keys that correspond to the namespace we should use
+ if (isset($this->_namespaces[$prefix])) {
+ // Major version search
+ $nsData = $this->_namespaces[$prefix];
+ $foundMajorV = Zend_Gdata_App_Util::findGreatestBoundedValue(
+ $majorVersion, $nsData);
+ // Minor version search
+ $nsData = $nsData[$foundMajorV];
+ $foundMinorV = Zend_Gdata_App_Util::findGreatestBoundedValue(
+ $minorVersion, $nsData);
+ // Extract NS
+ $result = $nsData[$foundMinorV];
+ }
+
+ // Memoize result
+ self::$_namespaceLookupCache[$key] = $result;
+
+ return $result;
+ }
+
+ /**
+ * Add a namespace and prefix to the registered list
+ *
+ * Takes a prefix and a full namespace URI and adds them to the
+ * list of registered namespaces for use by
+ * $this->lookupNamespace().
+ *
+ * WARNING: Currently, registering a namespace will NOT invalidate any
+ * memoized data stored in $_namespaceLookupCache. Under normal
+ * use, this behavior is acceptable. If you are adding
+ * contradictory data to the namespace lookup table, you must
+ * call flushNamespaceLookupCache().
+ *
+ * @param string $prefix The namespace prefix
+ * @param string $namespaceUri The full namespace URI
+ * @param integer $majorVersion The major protocol version in effect.
+ * Defaults to '1'.
+ * @param integer $minorVersion The minor protocol version in effect.
+ * Defaults to null (use latest).
+ * @return void
+ */
+ public function registerNamespace($prefix,
+ $namespaceUri,
+ $majorVersion = 1,
+ $minorVersion = 0)
+ {
+ $this->_namespaces[$prefix][$majorVersion][$minorVersion] =
+ $namespaceUri;
+ }
+
+ /**
+ * Flush namespace lookup cache.
+ *
+ * Empties the namespace lookup cache. Call this function if you have
+ * added data to the namespace lookup table that contradicts values that
+ * may have been cached during a previous call to lookupNamespace().
+ */
+ public static function flushNamespaceLookupCache()
+ {
+ self::$_namespaceLookupCache = array();
+ }
+
+ /**
+ * Add an array of namespaces to the registered list.
+ *
+ * Takes an array in the format of:
+ * namespace prefix, namespace URI, major protocol version,
+ * minor protocol version and adds them with calls to ->registerNamespace()
+ *
+ * @param array $namespaceArray An array of namespaces.
+ * @return void
+ */
+ public function registerAllNamespaces($namespaceArray)
+ {
+ foreach($namespaceArray as $namespace) {
+ $this->registerNamespace(
+ $namespace[0], $namespace[1], $namespace[2], $namespace[3]);
+ }
+ }
+
+
+ /**
+ * Magic getter to allow access like $entry->foo to call $entry->getFoo()
+ * Alternatively, if no getFoo() is defined, but a $_foo protected variable
+ * is defined, this is returned.
+ *
+ * TODO Remove ability to bypass getFoo() methods??
+ *
+ * @param string $name The variable name sought
+ */
+ public function __get($name)
+ {
+ $method = 'get'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method));
+ } else if (property_exists($this, "_${name}")) {
+ return $this->{'_' . $name};
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ }
+ }
+
+ /**
+ * Magic setter to allow acces like $entry->foo='bar' to call
+ * $entry->setFoo('bar') automatically.
+ *
+ * Alternatively, if no setFoo() is defined, but a $_foo protected variable
+ * is defined, this is returned.
+ *
+ * TODO Remove ability to bypass getFoo() methods??
+ *
+ * @param string $name
+ * @param string $value
+ */
+ public function __set($name, $val)
+ {
+ $method = 'set'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method), $val);
+ } else if (isset($this->{'_' . $name}) || ($this->{'_' . $name} === null)) {
+ $this->{'_' . $name} = $val;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ }
+ }
+
+ /**
+ * Magic __isset method
+ *
+ * @param string $name
+ */
+ public function __isset($name)
+ {
+ $rc = new ReflectionClass(get_class($this));
+ $privName = '_' . $name;
+ if (!($rc->hasProperty($privName))) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ } else {
+ if (isset($this->{$privName})) {
+ if (is_array($this->{$privName})) {
+ if (count($this->{$privName}) > 0) {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Magic __unset method
+ *
+ * @param string $name
+ */
+ public function __unset($name)
+ {
+ if (isset($this->{'_' . $name})) {
+ if (is_array($this->{'_' . $name})) {
+ $this->{'_' . $name} = array();
+ } else {
+ $this->{'_' . $name} = null;
+ }
+ }
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string The text representation of this object
+ */
+ public function __toString()
+ {
+ return $this->getText();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/BaseMediaSource.php b/zend/library/Zend/Gdata/App/BaseMediaSource.php
new file mode 100644
index 0000000..9190465
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/BaseMediaSource.php
@@ -0,0 +1,179 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: BaseMediaSource.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_MediaSource
+ */
+require_once 'Zend/Gdata/App/MediaSource.php';
+
+/**
+ * Concrete class to use a file handle as an attachment within a MediaEntry.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Gdata_App_BaseMediaSource implements Zend_Gdata_App_MediaSource
+{
+
+ /**
+ * The content type for the attached file (example image/png)
+ *
+ * @var string
+ */
+ protected $_contentType = null;
+
+ /**
+ * The slug header value representing the attached file title, or null if
+ * no slug should be used. The slug header is only necessary in some cases,
+ * usually when a multipart upload is not being performed.
+ *
+ * @var string
+ */
+ protected $_slug = null;
+
+ /**
+ * The content type for the attached file (example image/png)
+ *
+ * @return string The content type
+ */
+ public function getContentType()
+ {
+ return $this->_contentType;
+ }
+
+ /**
+ * Set the content type for the file attached (example image/png)
+ *
+ * @param string $value The content type
+ * @return Zend_Gdata_App_MediaFileSource Provides a fluent interface
+ */
+ public function setContentType($value)
+ {
+ $this->_contentType = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the Slug header value. Used by some services to determine the
+ * title for the uploaded file. Returns null if no slug should be used.
+ *
+ * @return string
+ */
+ public function getSlug(){
+ return $this->_slug;
+ }
+
+ /**
+ * Sets the Slug header value. Used by some services to determine the
+ * title for the uploaded file. A null value indicates no slug header.
+ *
+ * @var string The slug value
+ * @return Zend_Gdata_App_MediaSource Provides a fluent interface
+ */
+ public function setSlug($value){
+ $this->_slug = $value;
+ return $this;
+ }
+
+
+ /**
+ * Magic getter to allow acces like $source->foo to call $source->getFoo()
+ * Alternatively, if no getFoo() is defined, but a $_foo protected variable
+ * is defined, this is returned.
+ *
+ * TODO Remove ability to bypass getFoo() methods??
+ *
+ * @param string $name The variable name sought
+ */
+ public function __get($name)
+ {
+ $method = 'get'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method));
+ } else if (property_exists($this, "_${name}")) {
+ return $this->{'_' . $name};
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ }
+ }
+
+ /**
+ * Magic setter to allow acces like $source->foo='bar' to call
+ * $source->setFoo('bar') automatically.
+ *
+ * Alternatively, if no setFoo() is defined, but a $_foo protected variable
+ * is defined, this is returned.
+ *
+ * @param string $name
+ * @param string $value
+ */
+ public function __set($name, $val)
+ {
+ $method = 'set'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method), $val);
+ } else if (isset($this->{'_' . $name}) || ($this->{'_' . $name} === null)) {
+ $this->{'_' . $name} = $val;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ }
+ }
+
+ /**
+ * Magic __isset method
+ *
+ * @param string $name
+ */
+ public function __isset($name)
+ {
+ $rc = new ReflectionClass(get_class($this));
+ $privName = '_' . $name;
+ if (!($rc->hasProperty($privName))) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Property ' . $name . ' does not exist');
+ } else {
+ if (isset($this->{$privName})) {
+ if (is_array($this->{$privName})) {
+ if (count($this->{$privName}) > 0) {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/CaptchaRequiredException.php b/zend/library/Zend/Gdata/App/CaptchaRequiredException.php
new file mode 100644
index 0000000..b09e668
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/CaptchaRequiredException.php
@@ -0,0 +1,94 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CaptchaRequiredException.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_CaptchaRequiredException
+ */
+require_once 'Zend/Gdata/App/AuthException.php';
+
+/**
+ * Gdata exceptions
+ *
+ * Class to represent an exception that occurs during the use of ClientLogin.
+ * This particular exception happens when a CAPTCHA challenge is issued. This
+ * challenge is a visual puzzle presented to the user to prove that they are
+ * not an automated system.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_CaptchaRequiredException extends Zend_Gdata_App_AuthException
+{
+ /**
+ * The Google Accounts URL prefix.
+ */
+ const ACCOUNTS_URL = 'https://www.google.com/accounts/';
+
+ /**
+ * The token identifier from the server.
+ *
+ * @var string
+ */
+ private $captchaToken;
+
+ /**
+ * The URL of the CAPTCHA image.
+ *
+ * @var string
+ */
+ private $captchaUrl;
+
+ /**
+ * Constructs the exception to handle a CAPTCHA required response.
+ *
+ * @param string $captchaToken The CAPTCHA token ID provided by the server.
+ * @param string $captchaUrl The URL to the CAPTCHA challenge image.
+ */
+ public function __construct($captchaToken, $captchaUrl) {
+ $this->captchaToken = $captchaToken;
+ $this->captchaUrl = Zend_Gdata_App_CaptchaRequiredException::ACCOUNTS_URL . $captchaUrl;
+ parent::__construct('CAPTCHA challenge issued by server');
+ }
+
+ /**
+ * Retrieves the token identifier as provided by the server.
+ *
+ * @return string
+ */
+ public function getCaptchaToken() {
+ return $this->captchaToken;
+ }
+
+ /**
+ * Retrieves the URL CAPTCHA image as provided by the server.
+ *
+ * @return string
+ */
+ public function getCaptchaUrl() {
+ return $this->captchaUrl;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Entry.php b/zend/library/Zend/Gdata/App/Entry.php
new file mode 100644
index 0000000..1a24f3b
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Entry.php
@@ -0,0 +1,389 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Entry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_FeedEntryParent
+ */
+require_once 'Zend/Gdata/App/FeedEntryParent.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Content
+ */
+require_once 'Zend/Gdata/App/Extension/Content.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Edited
+ */
+require_once 'Zend/Gdata/App/Extension/Edited.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Published
+ */
+require_once 'Zend/Gdata/App/Extension/Published.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Source
+ */
+require_once 'Zend/Gdata/App/Extension/Source.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Summary
+ */
+require_once 'Zend/Gdata/App/Extension/Summary.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Control
+ */
+require_once 'Zend/Gdata/App/Extension/Control.php';
+
+/**
+ * Concrete class for working with Atom entries.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Entry extends Zend_Gdata_App_FeedEntryParent
+{
+
+ /**
+ * Root XML element for Atom entries.
+ *
+ * @var string
+ */
+ protected $_rootElement = 'entry';
+
+ /**
+ * Class name for each entry in this feed*
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_App_Entry';
+
+ /**
+ * atom:content element
+ *
+ * @var Zend_Gdata_App_Extension_Content
+ */
+ protected $_content = null;
+
+ /**
+ * atom:published element
+ *
+ * @var Zend_Gdata_App_Extension_Published
+ */
+ protected $_published = null;
+
+ /**
+ * atom:source element
+ *
+ * @var Zend_Gdata_App_Extension_Source
+ */
+ protected $_source = null;
+
+ /**
+ * atom:summary element
+ *
+ * @var Zend_Gdata_App_Extension_Summary
+ */
+ protected $_summary = null;
+
+ /**
+ * app:control element
+ *
+ * @var Zend_Gdata_App_Extension_Control
+ */
+ protected $_control = null;
+
+ /**
+ * app:edited element
+ *
+ * @var Zend_Gdata_App_Extension_Edited
+ */
+ protected $_edited = null;
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_content != null) {
+ $element->appendChild($this->_content->getDOM($element->ownerDocument));
+ }
+ if ($this->_published != null) {
+ $element->appendChild($this->_published->getDOM($element->ownerDocument));
+ }
+ if ($this->_source != null) {
+ $element->appendChild($this->_source->getDOM($element->ownerDocument));
+ }
+ if ($this->_summary != null) {
+ $element->appendChild($this->_summary->getDOM($element->ownerDocument));
+ }
+ if ($this->_control != null) {
+ $element->appendChild($this->_control->getDOM($element->ownerDocument));
+ }
+ if ($this->_edited != null) {
+ $element->appendChild($this->_edited->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'content':
+ $content = new Zend_Gdata_App_Extension_Content();
+ $content->transferFromDOM($child);
+ $this->_content = $content;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'published':
+ $published = new Zend_Gdata_App_Extension_Published();
+ $published->transferFromDOM($child);
+ $this->_published = $published;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'source':
+ $source = new Zend_Gdata_App_Extension_Source();
+ $source->transferFromDOM($child);
+ $this->_source = $source;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'summary':
+ $summary = new Zend_Gdata_App_Extension_Summary();
+ $summary->transferFromDOM($child);
+ $this->_summary = $summary;
+ break;
+ case $this->lookupNamespace('app') . ':' . 'control':
+ $control = new Zend_Gdata_App_Extension_Control();
+ $control->transferFromDOM($child);
+ $this->_control = $control;
+ break;
+ case $this->lookupNamespace('app') . ':' . 'edited':
+ $edited = new Zend_Gdata_App_Extension_Edited();
+ $edited->transferFromDOM($child);
+ $this->_edited = $edited;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Uploads changes in this entry to the server using Zend_Gdata_App
+ *
+ * @param string|null $uri The URI to send requests to, or null if $data
+ * contains the URI.
+ * @param string|null $className The name of the class that should we
+ * deserializing the server response. If null, then
+ * 'Zend_Gdata_App_Entry' will be used.
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return Zend_Gdata_App_Entry The updated entry.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function save($uri = null, $className = null, $extraHeaders = array())
+ {
+ return $this->getService()->updateEntry($this,
+ $uri,
+ $className,
+ $extraHeaders);
+ }
+
+ /**
+ * Deletes this entry to the server using the referenced
+ * Zend_Http_Client to do a HTTP DELETE to the edit link stored in this
+ * entry's link collection.
+ *
+ * @return void
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function delete()
+ {
+ $this->getService()->delete($this);
+ }
+
+ /**
+ * Reload the current entry. Returns a new copy of the entry as returned
+ * by the server, or null if no changes exist. This does not
+ * modify the current entry instance.
+ *
+ * @param string|null The URI to send requests to, or null if $data
+ * contains the URI.
+ * @param string|null The name of the class that should we deserializing
+ * the server response. If null, then 'Zend_Gdata_App_Entry' will
+ * be used.
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @return mixed A new instance of the current entry with updated data, or
+ * null if the server reports that no changes have been made.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function reload($uri = null, $className = null, $extraHeaders = array())
+ {
+ // Get URI
+ $editLink = $this->getEditLink();
+ if (($uri === null) && $editLink != null) {
+ $uri = $editLink->getHref();
+ }
+
+ // Set classname to current class, if not otherwise set
+ if ($className === null) {
+ $className = get_class($this);
+ }
+
+ // Append ETag, if present (Gdata v2 and above, only) and doesn't
+ // conflict with existing headers
+ if ($this->_etag != null
+ && !array_key_exists('If-Match', $extraHeaders)
+ && !array_key_exists('If-None-Match', $extraHeaders)) {
+ $extraHeaders['If-None-Match'] = $this->_etag;
+ }
+
+ // If an HTTP 304 status (Not Modified)is returned, then we return
+ // null.
+ $result = null;
+ try {
+ $result = $this->service->importUrl($uri, $className, $extraHeaders);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() != '304')
+ throw $e;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Gets the value of the atom:content element
+ *
+ * @return Zend_Gdata_App_Extension_Content
+ */
+ public function getContent()
+ {
+ return $this->_content;
+ }
+
+ /**
+ * Sets the value of the atom:content element
+ *
+ * @param Zend_Gdata_App_Extension_Content $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setContent($value)
+ {
+ $this->_content = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the value of the atom:published element
+ * This represents the publishing date for an entry
+ *
+ * @return Zend_Gdata_App_Extension_Published
+ */
+ public function getPublished()
+ {
+ return $this->_published;
+ }
+
+ /**
+ * Sets the value of the atom:published element
+ * This represents the publishing date for an entry
+ *
+ * @param Zend_Gdata_App_Extension_Published $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setPublished($value)
+ {
+ $this->_published = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the value of the atom:source element
+ *
+ * @return Zend_Gdata_App_Extension_Source
+ */
+ public function getSource()
+ {
+ return $this->_source;
+ }
+
+ /**
+ * Sets the value of the atom:source element
+ *
+ * @param Zend_Gdata_App_Extension_Source $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setSource($value)
+ {
+ $this->_source = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the value of the atom:summary element
+ * This represents a textual summary of this entry's content
+ *
+ * @return Zend_Gdata_App_Extension_Summary
+ */
+ public function getSummary()
+ {
+ return $this->_summary;
+ }
+
+ /**
+ * Sets the value of the atom:summary element
+ * This represents a textual summary of this entry's content
+ *
+ * @param Zend_Gdata_App_Extension_Summary $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setSummary($value)
+ {
+ $this->_summary = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the value of the app:control element
+ *
+ * @return Zend_Gdata_App_Extension_Control
+ */
+ public function getControl()
+ {
+ return $this->_control;
+ }
+
+ /**
+ * Sets the value of the app:control element
+ *
+ * @param Zend_Gdata_App_Extension_Control $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setControl($value)
+ {
+ $this->_control = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Exception.php b/zend/library/Zend/Gdata/App/Exception.php
new file mode 100644
index 0000000..bcfe255
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Exception.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+
+/**
+ * Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * Gdata App exceptions
+ *
+ * Class to represent exceptions that occur during Gdata App operations.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Exception extends Zend_Exception
+{
+}
diff --git a/zend/library/Zend/Gdata/App/Extension.php b/zend/library/Zend/Gdata/App/Extension.php
new file mode 100644
index 0000000..dd379c8
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Extension.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Base
+ */
+require_once 'Zend/Gdata/App/Base.php';
+
+/**
+ * Gdata App extensions
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Gdata_App_Extension extends Zend_Gdata_App_Base
+{
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Author.php b/zend/library/Zend/Gdata/App/Extension/Author.php
new file mode 100644
index 0000000..1354d8b
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Author.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Author.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension/Person.php';
+
+/**
+ * Represents the atom:author element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Author extends Zend_Gdata_App_Extension_Person
+{
+
+ protected $_rootElement = 'author';
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Category.php b/zend/library/Zend/Gdata/App/Extension/Category.php
new file mode 100644
index 0000000..06952bc
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Category.php
@@ -0,0 +1,140 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Category.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:category element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Category extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'category';
+ protected $_term = null;
+ protected $_scheme = null;
+ protected $_label = null;
+
+ public function __construct($term = null, $scheme = null, $label=null)
+ {
+ parent::__construct();
+ $this->_term = $term;
+ $this->_scheme = $scheme;
+ $this->_label = $label;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_term !== null) {
+ $element->setAttribute('term', $this->_term);
+ }
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ if ($this->_label !== null) {
+ $element->setAttribute('label', $this->_label);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'term':
+ $this->_term = $attribute->nodeValue;
+ break;
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ case 'label':
+ $this->_label = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getTerm()
+ {
+ return $this->_term;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Extension_Category Provides a fluent interface
+ */
+ public function setTerm($value)
+ {
+ $this->_term = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Extension_Category Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Extension_Category Provides a fluent interface
+ */
+ public function setLabel($value)
+ {
+ $this->_label = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Content.php b/zend/library/Zend/Gdata/App/Extension/Content.php
new file mode 100644
index 0000000..36ff99a
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Content.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Content.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Text
+ */
+require_once 'Zend/Gdata/App/Extension/Text.php';
+
+/**
+ * Represents the atom:content element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Content extends Zend_Gdata_App_Extension_Text
+{
+
+ protected $_rootElement = 'content';
+ protected $_src = null;
+
+ public function __construct($text = null, $type = 'text', $src = null)
+ {
+ parent::__construct($text, $type);
+ $this->_src = $src;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_src !== null) {
+ $element->setAttribute('src', $this->_src);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'src':
+ $this->_src = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getSrc()
+ {
+ return $this->_src;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setSrc($value)
+ {
+ $this->_src = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Contributor.php b/zend/library/Zend/Gdata/App/Extension/Contributor.php
new file mode 100644
index 0000000..7f5f1c5
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Contributor.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Contributor.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension/Person.php';
+
+/**
+ * Represents the atom:contributor element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Contributor extends Zend_Gdata_App_Extension_Person
+{
+
+ protected $_rootElement = 'contributor';
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Control.php b/zend/library/Zend/Gdata/App/Extension/Control.php
new file mode 100644
index 0000000..8f02b4d
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Control.php
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Control.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Draft
+ */
+require_once 'Zend/Gdata/App/Extension/Draft.php';
+
+/**
+ * Represents the app:control element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Control extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootNamespace = 'app';
+ protected $_rootElement = 'control';
+ protected $_draft = null;
+
+ public function __construct($draft = null)
+ {
+ parent::__construct();
+ $this->_draft = $draft;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_draft != null) {
+ $element->appendChild($this->_draft->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('app') . ':' . 'draft':
+ $draft = new Zend_Gdata_App_Extension_Draft();
+ $draft->transferFromDOM($child);
+ $this->_draft = $draft;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Draft
+ */
+ public function getDraft()
+ {
+ return $this->_draft;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Draft $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setDraft($value)
+ {
+ $this->_draft = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Draft.php b/zend/library/Zend/Gdata/App/Extension/Draft.php
new file mode 100644
index 0000000..62a91ea
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Draft.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Draft.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the app:draft element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Draft extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootNamespace = 'app';
+ protected $_rootElement = 'draft';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Edited.php b/zend/library/Zend/Gdata/App/Extension/Edited.php
new file mode 100644
index 0000000..1a3a74a
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Edited.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Edited.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the app:edited element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Edited extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'edited';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Element.php b/zend/library/Zend/Gdata/App/Extension/Element.php
new file mode 100644
index 0000000..f473d90
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Element.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Element.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Class that represents elements which were not handled by other parsing
+ * code in the library.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Element extends Zend_Gdata_App_Extension
+{
+
+ public function __construct($rootElement=null, $rootNamespace=null, $rootNamespaceURI=null, $text=null){
+ parent::__construct();
+ $this->_rootElement = $rootElement;
+ $this->_rootNamespace = $rootNamespace;
+ $this->_rootNamespaceURI = $rootNamespaceURI;
+ $this->_text = $text;
+ }
+
+ public function transferFromDOM($node)
+ {
+ parent::transferFromDOM($node);
+ $this->_rootNamespace = null;
+ $this->_rootNamespaceURI = $node->namespaceURI;
+ $this->_rootElement = $node->localName;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Email.php b/zend/library/Zend/Gdata/App/Extension/Email.php
new file mode 100644
index 0000000..48fdb4d
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Email.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Email.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:email element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Email extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'email';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Generator.php b/zend/library/Zend/Gdata/App/Extension/Generator.php
new file mode 100644
index 0000000..2f521d6
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Generator.php
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Generator.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:generator element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Generator extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'generator';
+ protected $_uri = null;
+ protected $_version = null;
+
+ public function __construct($text = null, $uri = null, $version = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ $this->_uri = $uri;
+ $this->_version = $version;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_uri !== null) {
+ $element->setAttribute('uri', $this->_uri);
+ }
+ if ($this->_version !== null) {
+ $element->setAttribute('version', $this->_version);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'uri':
+ $this->_uri = $attribute->nodeValue;
+ break;
+ case 'version':
+ $this->_version= $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Uri
+ */
+ public function getUri()
+ {
+ return $this->_uri;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Uri $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setUri($value)
+ {
+ $this->_uri = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Version
+ */
+ public function getVersion()
+ {
+ return $this->_version;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Version $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setVersion($value)
+ {
+ $this->_version = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Icon.php b/zend/library/Zend/Gdata/App/Extension/Icon.php
new file mode 100644
index 0000000..3e55cbb
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Icon.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Icon.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:icon element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Icon extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'icon';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Id.php b/zend/library/Zend/Gdata/App/Extension/Id.php
new file mode 100644
index 0000000..bdac0cd
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Id.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Id.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:id element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Id extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'id';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Link.php b/zend/library/Zend/Gdata/App/Extension/Link.php
new file mode 100644
index 0000000..ee76700
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Link.php
@@ -0,0 +1,219 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Link.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Data model for representing an atom:link element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Link extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'link';
+ protected $_href = null;
+ protected $_rel = null;
+ protected $_type = null;
+ protected $_hrefLang = null;
+ protected $_title = null;
+ protected $_length = null;
+
+ public function __construct($href = null, $rel = null, $type = null,
+ $hrefLang = null, $title = null, $length = null)
+ {
+ parent::__construct();
+ $this->_href = $href;
+ $this->_rel = $rel;
+ $this->_type = $type;
+ $this->_hrefLang = $hrefLang;
+ $this->_title = $title;
+ $this->_length = $length;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_href !== null) {
+ $element->setAttribute('href', $this->_href);
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ if ($this->_hrefLang !== null) {
+ $element->setAttribute('hreflang', $this->_hrefLang);
+ }
+ if ($this->_title !== null) {
+ $element->setAttribute('title', $this->_title);
+ }
+ if ($this->_length !== null) {
+ $element->setAttribute('length', $this->_length);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'href':
+ $this->_href = $attribute->nodeValue;
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ case 'hreflang':
+ $this->_hrefLang = $attribute->nodeValue;
+ break;
+ case 'title':
+ $this->_title = $attribute->nodeValue;
+ break;
+ case 'length':
+ $this->_length = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getHref()
+ {
+ return $this->_href;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setHref($value)
+ {
+ $this->_href = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getHrefLang()
+ {
+ return $this->_hrefLang;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setHrefLang($value)
+ {
+ $this->_hrefLang = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setTitle($value)
+ {
+ $this->_title = $value;
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getLength()
+ {
+ return $this->_length;
+ }
+
+ /**
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setLength($value)
+ {
+ $this->_length = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Logo.php b/zend/library/Zend/Gdata/App/Extension/Logo.php
new file mode 100644
index 0000000..956f2f4
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Logo.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Logo.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:logo element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Logo extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'logo';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Name.php b/zend/library/Zend/Gdata/App/Extension/Name.php
new file mode 100644
index 0000000..c851028
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Name.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Name.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:name element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Name extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'name';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Person.php b/zend/library/Zend/Gdata/App/Extension/Person.php
new file mode 100644
index 0000000..7f5c2bf
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Person.php
@@ -0,0 +1,163 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Person.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Name
+ */
+require_once 'Zend/Gdata/App/Extension/Name.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Email
+ */
+require_once 'Zend/Gdata/App/Extension/Email.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Uri
+ */
+require_once 'Zend/Gdata/App/Extension/Uri.php';
+
+/**
+ * Base class for people (currently used by atom:author, atom:contributor)
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Gdata_App_Extension_Person extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = null;
+ protected $_name = null;
+ protected $_email = null;
+ protected $_uri = null;
+
+ public function __construct($name = null, $email = null, $uri = null)
+ {
+ parent::__construct();
+ $this->_name = $name;
+ $this->_email = $email;
+ $this->_uri = $uri;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name != null) {
+ $element->appendChild($this->_name->getDOM($element->ownerDocument));
+ }
+ if ($this->_email != null) {
+ $element->appendChild($this->_email->getDOM($element->ownerDocument));
+ }
+ if ($this->_uri != null) {
+ $element->appendChild($this->_uri->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'name':
+ $name = new Zend_Gdata_App_Extension_Name();
+ $name->transferFromDOM($child);
+ $this->_name = $name;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'email':
+ $email = new Zend_Gdata_App_Extension_Email();
+ $email->transferFromDOM($child);
+ $this->_email = $email;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'uri':
+ $uri = new Zend_Gdata_App_Extension_Uri();
+ $uri->transferFromDOM($child);
+ $this->_uri = $uri;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Name
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Name $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Email
+ */
+ public function getEmail()
+ {
+ return $this->_email;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Email $value
+ * @return Zend_Gdata_App_Extension_Person Provides a fluent interface
+ */
+ public function setEmail($value)
+ {
+ $this->_email = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Uri
+ */
+ public function getUri()
+ {
+ return $this->_uri;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Uri $value
+ * @return Zend_Gdata_App_Extension_Person Provides a fluent interface
+ */
+ public function setUri($value)
+ {
+ $this->_uri = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Published.php b/zend/library/Zend/Gdata/App/Extension/Published.php
new file mode 100644
index 0000000..2442284
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Published.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Published.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:published element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Published extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'published';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Rights.php b/zend/library/Zend/Gdata/App/Extension/Rights.php
new file mode 100644
index 0000000..d8a5a39
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Rights.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Rights.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Text
+ */
+require_once 'Zend/Gdata/App/Extension/Text.php';
+
+/**
+ * Represents the atom:rights element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Rights extends Zend_Gdata_App_Extension_Text
+{
+
+ protected $_rootElement = 'rights';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Source.php b/zend/library/Zend/Gdata/App/Extension/Source.php
new file mode 100644
index 0000000..1779c17
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Source.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Source.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Entry
+ */
+require_once 'Zend/Gdata/App/Entry.php';
+
+/**
+ * @see Zend_Gdata_App_FeedSourceParent
+ */
+require_once 'Zend/Gdata/App/FeedSourceParent.php';
+
+/**
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Source extends Zend_Gdata_App_FeedSourceParent
+{
+
+ protected $_rootElement = 'source';
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Subtitle.php b/zend/library/Zend/Gdata/App/Extension/Subtitle.php
new file mode 100644
index 0000000..ff8ee18
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Subtitle.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Subtitle.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Text
+ */
+require_once 'Zend/Gdata/App/Extension/Text.php';
+
+/**
+ * Represents the atom:subtitle element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Subtitle extends Zend_Gdata_App_Extension_Text
+{
+
+ protected $_rootElement = 'subtitle';
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Summary.php b/zend/library/Zend/Gdata/App/Extension/Summary.php
new file mode 100644
index 0000000..98b9339
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Summary.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Summary.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Text
+ */
+require_once 'Zend/Gdata/App/Extension/Text.php';
+
+/**
+ * Represents the atom:summary element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Summary extends Zend_Gdata_App_Extension_Text
+{
+
+ protected $_rootElement = 'summary';
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Text.php b/zend/library/Zend/Gdata/App/Extension/Text.php
new file mode 100644
index 0000000..9fc0c5d
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Text.php
@@ -0,0 +1,90 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Text.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Abstract class for data models that require only text and type-- such as:
+ * title, summary, etc.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Gdata_App_Extension_Text extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = null;
+ protected $_type = 'text';
+
+ public function __construct($text = null, $type = 'text')
+ {
+ parent::__construct();
+ $this->_text = $text;
+ $this->_type = $type;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /*
+ * @return Zend_Gdata_App_Extension_Type
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /*
+ * @param string $value
+ * @return Zend_Gdata_App_Extension_Text Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Title.php b/zend/library/Zend/Gdata/App/Extension/Title.php
new file mode 100644
index 0000000..69899bb
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Title.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Title.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Text
+ */
+require_once 'Zend/Gdata/App/Extension/Text.php';
+
+/**
+ * Represents the atom:title element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Title extends Zend_Gdata_App_Extension_Text
+{
+
+ protected $_rootElement = 'title';
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Updated.php b/zend/library/Zend/Gdata/App/Extension/Updated.php
new file mode 100644
index 0000000..af378df
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Updated.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Updated.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:updated element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Updated extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'updated';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Extension/Uri.php b/zend/library/Zend/Gdata/App/Extension/Uri.php
new file mode 100644
index 0000000..2168b1a
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Extension/Uri.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an uri
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Uri.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the atom:uri element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Extension_Uri extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootElement = 'uri';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/Feed.php b/zend/library/Zend/Gdata/App/Feed.php
new file mode 100755
index 0000000..1f8ef84
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Feed.php
@@ -0,0 +1,352 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Feed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Entry
+ */
+require_once 'Zend/Gdata/App/Entry.php';
+
+/**
+ * @see Zend_Gdata_App_FeedSourceParent
+ */
+require_once 'Zend/Gdata/App/FeedSourceParent.php';
+
+/**
+ * Atom feed class
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Feed extends Zend_Gdata_App_FeedSourceParent
+ implements Iterator, ArrayAccess, Countable
+{
+
+ /**
+ * The root xml element of this data element
+ *
+ * @var string
+ */
+ protected $_rootElement = 'feed';
+
+ /**
+ * Cache of feed entries.
+ *
+ * @var array
+ */
+ protected $_entry = array();
+
+ /**
+ * Current location in $_entry array
+ *
+ * @var int
+ */
+ protected $_entryIndex = 0;
+
+ /**
+ * Make accessing some individual elements of the feed easier.
+ *
+ * Special accessors 'entry' and 'entries' are provided so that if
+ * you wish to iterate over an Atom feed's entries, you can do so
+ * using foreach ($feed->entries as $entry) or foreach
+ * ($feed->entry as $entry).
+ *
+ * @param string $var The property to get.
+ * @return mixed
+ */
+ public function __get($var)
+ {
+ switch ($var) {
+ case 'entries':
+ return $this;
+ default:
+ return parent::__get($var);
+ }
+ }
+
+ /**
+ * Retrieves the DOM model representing this object and all children
+ *
+ * @param DOMDocument $doc
+ * @return DOMElement
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ foreach ($this->_entry as $entry) {
+ $element->appendChild($entry->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'entry':
+ $newEntry = new $this->_entryClassName($child);
+ $newEntry->setHttpClient($this->getHttpClient());
+ $newEntry->setMajorProtocolVersion($this->getMajorProtocolVersion());
+ $newEntry->setMinorProtocolVersion($this->getMinorProtocolVersion());
+ $this->_entry[] = $newEntry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the number of entries in this feed object.
+ *
+ * @return integer Entry count.
+ */
+ public function count()
+ {
+ return count($this->_entry);
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return void
+ */
+ public function rewind()
+ {
+ $this->_entryIndex = 0;
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return mixed The current row, or null if no rows.
+ */
+ public function current()
+ {
+ return $this->_entry[$this->_entryIndex];
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return mixed The current row number (starts at 0), or NULL if no rows
+ */
+ public function key()
+ {
+ return $this->_entryIndex;
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return mixed The next row, or null if no more rows.
+ */
+ public function next()
+ {
+ ++$this->_entryIndex;
+ }
+
+ /**
+ * Required by the Iterator interface.
+ *
+ * @return boolean Whether the iteration is valid
+ */
+ public function valid()
+ {
+ return 0 <= $this->_entryIndex && $this->_entryIndex < $this->count();
+ }
+
+ /**
+ * Gets the array of atom:entry elements contained within this
+ * atom:feed representation
+ *
+ * @return array Zend_Gdata_App_Entry array
+ */
+ public function getEntry()
+ {
+ return $this->_entry;
+ }
+
+ /**
+ * Sets the array of atom:entry elements contained within this
+ * atom:feed representation
+ *
+ * @param array $value The array of Zend_Gdata_App_Entry elements
+ * @return Zend_Gdata_App_Feed Provides a fluent interface
+ */
+ public function setEntry($value)
+ {
+ $this->_entry = $value;
+ return $this;
+ }
+
+ /**
+ * Adds an entry representation to the array of entries
+ * contained within this feed
+ *
+ * @param Zend_Gdata_App_Entry An individual entry to add.
+ * @return Zend_Gdata_App_Feed Provides a fluent interface
+ */
+ public function addEntry($value)
+ {
+ $this->_entry[] = $value;
+ return $this;
+ }
+
+ /**
+ * Required by the ArrayAccess interface
+ *
+ * @param int $key The index to set
+ * @param Zend_Gdata_App_Entry $value The value to set
+ * @return void
+ */
+ public function offsetSet($key, $value)
+ {
+ $this->_entry[$key] = $value;
+ }
+
+ /**
+ * Required by the ArrayAccess interface
+ *
+ * @param int $key The index to get
+ * @param Zend_Gdata_App_Entry $value The value to set
+ */
+ public function offsetGet($key)
+ {
+ if (array_key_exists($key, $this->_entry)) {
+ return $this->_entry[$key];
+ }
+ }
+
+ /**
+ * Required by the ArrayAccess interface
+ *
+ * @param int $key The index to set
+ * @param Zend_Gdata_App_Entry $value The value to set
+ */
+ public function offsetUnset($key)
+ {
+ if (array_key_exists($key, $this->_entry)) {
+ unset($this->_entry[$key]);
+ }
+ }
+
+ /**
+ * Required by the ArrayAccess interface
+ *
+ * @param int $key The index to check for existence
+ * @return boolean
+ */
+ public function offsetExists($key)
+ {
+ return (array_key_exists($key, $this->_entry));
+ }
+
+ /**
+ * Retrieve the next set of results from this feed.
+ *
+ * @throws Zend_Gdata_App_Exception
+ * @return mixed|null Returns the next set of results as a feed of the same
+ * class as this feed, or null if no results exist.
+ */
+ public function getNextFeed()
+ {
+ $nextLink = $this->getNextLink();
+ if (!$nextLink) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_Exception('No link to next set ' .
+ 'of results found.');
+ }
+ $nextLinkHref = $nextLink->getHref();
+ $service = new Zend_Gdata_App($this->getHttpClient());
+
+ return $service->getFeed($nextLinkHref, get_class($this));
+ }
+
+ /**
+ * Retrieve the previous set of results from this feed.
+ *
+ * @throws Zend_Gdata_App_Exception
+ * @return mixed|null Returns the previous set of results as a feed of
+ * the same class as this feed, or null if no results exist.
+ */
+ public function getPreviousFeed()
+ {
+ $previousLink = $this->getPreviousLink();
+ if (!$previousLink) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_Exception('No link to previous set ' .
+ 'of results found.');
+ }
+ $previousLinkHref = $previousLink->getHref();
+ $service = new Zend_Gdata_App($this->getHttpClient());
+
+ return $service->getFeed($previousLinkHref, get_class($this));
+ }
+
+ /**
+ * Set the major protocol version that should be used. Values < 1 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * This value will be propogated to all child entries.
+ *
+ * @see _majorProtocolVersion
+ * @param (int|NULL) $value The major protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMajorProtocolVersion($value)
+ {
+ parent::setMajorProtocolVersion($value);
+ foreach ($this->entries as $entry) {
+ $entry->setMajorProtocolVersion($value);
+ }
+ }
+
+ /**
+ * Set the minor protocol version that should be used. If set to NULL, no
+ * minor protocol version will be sent to the server. Values < 0 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * This value will be propogated to all child entries.
+ *
+ * @see _minorProtocolVersion
+ * @param (int|NULL) $value The minor protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMinorProtocolVersion($value)
+ {
+ parent::setMinorProtocolVersion($value);
+ foreach ($this->entries as $entry) {
+ $entry->setMinorProtocolVersion($value);
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/FeedEntryParent.php b/zend/library/Zend/Gdata/App/FeedEntryParent.php
new file mode 100755
index 0000000..51ff913
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/FeedEntryParent.php
@@ -0,0 +1,681 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: FeedEntryParent.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Element
+*/
+require_once 'Zend/Gdata/App/Extension/Element.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Author
+*/
+require_once 'Zend/Gdata/App/Extension/Author.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Category
+*/
+require_once 'Zend/Gdata/App/Extension/Category.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Contributor
+*/
+require_once 'Zend/Gdata/App/Extension/Contributor.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Id
+ */
+require_once 'Zend/Gdata/App/Extension/Id.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Link
+ */
+require_once 'Zend/Gdata/App/Extension/Link.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Rights
+ */
+require_once 'Zend/Gdata/App/Extension/Rights.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Title
+ */
+require_once 'Zend/Gdata/App/Extension/Title.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Updated
+ */
+require_once 'Zend/Gdata/App/Extension/Updated.php';
+
+/**
+ * Zend_Version
+ */
+require_once 'Zend/Version.php';
+
+/**
+ * Abstract class for common functionality in entries and feeds
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Gdata_App_FeedEntryParent extends Zend_Gdata_App_Base
+{
+ /**
+ * Service instance used to make network requests.
+ *
+ * @see setService(), getService()
+ */
+ protected $_service = null;
+
+ /**
+ * The HTTP ETag associated with this entry. Used for optimistic
+ * concurrency in protoco v2 or greater.
+ *
+ * @var string|null
+ */
+ protected $_etag = NULL;
+
+ protected $_author = array();
+ protected $_category = array();
+ protected $_contributor = array();
+ protected $_id = null;
+ protected $_link = array();
+ protected $_rights = null;
+ protected $_title = null;
+ protected $_updated = null;
+
+ /**
+ * Indicates the major protocol version that should be used.
+ * At present, recognized values are either 1 or 2. However, any integer
+ * value >= 1 is considered valid.
+ *
+ * @see setMajorProtocolVersion()
+ * @see getMajorProtocolVersion()
+ */
+ protected $_majorProtocolVersion = 1;
+
+ /**
+ * Indicates the minor protocol version that should be used. Can be set
+ * to either an integer >= 0, or NULL if no minor version should be sent
+ * to the server.
+ *
+ * @see setMinorProtocolVersion()
+ * @see getMinorProtocolVersion()
+ */
+ protected $_minorProtocolVersion = null;
+
+ /**
+ * Constructs a Feed or Entry
+ */
+ public function __construct($element = null)
+ {
+ if (!($element instanceof DOMElement)) {
+ if ($element) {
+ $this->transferFromXML($element);
+ }
+ } else {
+ $this->transferFromDOM($element);
+ }
+ }
+
+ /**
+ * Set the HTTP client instance
+ *
+ * Sets the HTTP client object to use for retrieving the feed.
+ *
+ * @deprecated Deprecated as of Zend Framework 1.7. Use
+ * setService() instead.
+ * @param Zend_Http_Client $httpClient
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setHttpClient(Zend_Http_Client $httpClient)
+ {
+ if (!$this->_service) {
+ $this->_service = new Zend_Gdata_App();
+ }
+ $this->_service->setHttpClient($httpClient);
+ return $this;
+ }
+
+ /**
+ * Gets the HTTP client object. If none is set, a new Zend_Http_Client
+ * will be used.
+ *
+ * @deprecated Deprecated as of Zend Framework 1.7. Use
+ * getService() instead.
+ * @return Zend_Http_Client_Abstract
+ */
+ public function getHttpClient()
+ {
+ if (!$this->_service) {
+ $this->_service = new Zend_Gdata_App();
+ }
+ $client = $this->_service->getHttpClient();
+ return $client;
+ }
+
+ /**
+ * Set the active service instance for this object. This will be used to
+ * perform network requests, such as when calling save() and delete().
+ *
+ * @param Zend_Gdata_App $instance The new service instance.
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface.
+ */
+ public function setService($instance)
+ {
+ $this->_service = $instance;
+ return $this;
+ }
+
+ /**
+ * Get the active service instance for this object. This will be used to
+ * perform network requests, such as when calling save() and delete().
+ *
+ * @return Zend_Gdata_App|null The current service instance, or null if
+ * not set.
+ */
+ public function getService()
+ {
+ return $this->_service;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ foreach ($this->_author as $author) {
+ $element->appendChild($author->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_category as $category) {
+ $element->appendChild($category->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_contributor as $contributor) {
+ $element->appendChild($contributor->getDOM($element->ownerDocument));
+ }
+ if ($this->_id != null) {
+ $element->appendChild($this->_id->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_link as $link) {
+ $element->appendChild($link->getDOM($element->ownerDocument));
+ }
+ if ($this->_rights != null) {
+ $element->appendChild($this->_rights->getDOM($element->ownerDocument));
+ }
+ if ($this->_title != null) {
+ $element->appendChild($this->_title->getDOM($element->ownerDocument));
+ }
+ if ($this->_updated != null) {
+ $element->appendChild($this->_updated->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'author':
+ $author = new Zend_Gdata_App_Extension_Author();
+ $author->transferFromDOM($child);
+ $this->_author[] = $author;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'category':
+ $category = new Zend_Gdata_App_Extension_Category();
+ $category->transferFromDOM($child);
+ $this->_category[] = $category;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'contributor':
+ $contributor = new Zend_Gdata_App_Extension_Contributor();
+ $contributor->transferFromDOM($child);
+ $this->_contributor[] = $contributor;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'id':
+ $id = new Zend_Gdata_App_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_id = $id;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'link':
+ $link = new Zend_Gdata_App_Extension_Link();
+ $link->transferFromDOM($child);
+ $this->_link[] = $link;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'rights':
+ $rights = new Zend_Gdata_App_Extension_Rights();
+ $rights->transferFromDOM($child);
+ $this->_rights = $rights;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'title':
+ $title = new Zend_Gdata_App_Extension_Title();
+ $title->transferFromDOM($child);
+ $this->_title = $title;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'updated':
+ $updated = new Zend_Gdata_App_Extension_Updated();
+ $updated->transferFromDOM($child);
+ $this->_updated = $updated;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Author
+ */
+ public function getAuthor()
+ {
+ return $this->_author;
+ }
+
+ /**
+ * Sets the list of the authors of this feed/entry. In an atom feed, each
+ * author is represented by an atom:author element
+ *
+ * @param array $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setAuthor($value)
+ {
+ $this->_author = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the array of categories that classify this feed/entry. Each
+ * category is represented in an atom feed by an atom:category element.
+ *
+ * @return array Array of Zend_Gdata_App_Extension_Category
+ */
+ public function getCategory()
+ {
+ return $this->_category;
+ }
+
+ /**
+ * Sets the array of categories that classify this feed/entry. Each
+ * category is represented in an atom feed by an atom:category element.
+ *
+ * @param array $value Array of Zend_Gdata_App_Extension_Category
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setCategory($value)
+ {
+ $this->_category = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the array of contributors to this feed/entry. Each contributor
+ * is represented in an atom feed by an atom:contributor XML element
+ *
+ * @return array An array of Zend_Gdata_App_Extension_Contributor
+ */
+ public function getContributor()
+ {
+ return $this->_contributor;
+ }
+
+ /**
+ * Sets the array of contributors to this feed/entry. Each contributor
+ * is represented in an atom feed by an atom:contributor XML element
+ *
+ * @param array $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setContributor($value)
+ {
+ $this->_contributor = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Id
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Id $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setId($value)
+ {
+ $this->_id = $value;
+ return $this;
+ }
+
+ /**
+ * Given a particular 'rel' value, this method returns a matching
+ * Zend_Gdata_App_Extension_Link element. If the 'rel' value
+ * is not provided, the full array of Zend_Gdata_App_Extension_Link
+ * elements is returned. In an atom feed, each link is represented
+ * by an atom:link element. The 'rel' value passed to this function
+ * is the atom:link/@rel attribute. Example rel values include 'self',
+ * 'edit', and 'alternate'.
+ *
+ * @param string $rel The rel value of the link to be found. If null,
+ * the array of Zend_Gdata_App_Extension_link elements is returned
+ * @return mixed Either a single Zend_Gdata_App_Extension_link element,
+ * an array of the same or null is returned depending on the rel value
+ * supplied as the argument to this function
+ */
+ public function getLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_link;
+ } else {
+ foreach ($this->_link as $link) {
+ if ($link->rel == $rel) {
+ return $link;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL used to edit this resource. This link is in the atom feed/entry
+ * as an atom:link with a rel attribute value of 'edit'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getEditLink()
+ {
+ return $this->getLink('edit');
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL used to retrieve the next chunk of results when paging through
+ * a feed. This link is in the atom feed as an atom:link with a
+ * rel attribute value of 'next'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getNextLink()
+ {
+ return $this->getLink('next');
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL used to retrieve the previous chunk of results when paging
+ * through a feed. This link is in the atom feed as an atom:link with a
+ * rel attribute value of 'previous'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getPreviousLink()
+ {
+ return $this->getLink('previous');
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Link
+ */
+ public function getLicenseLink()
+ {
+ return $this->getLink('license');
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL used to retrieve the entry or feed represented by this object
+ * This link is in the atom feed/entry as an atom:link with a
+ * rel attribute value of 'self'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getSelfLink()
+ {
+ return $this->getLink('self');
+ }
+
+ /**
+ * Returns the Zend_Gdata_App_Extension_Link element which represents
+ * the URL for an alternate view of the data represented by this feed or
+ * entry. This alternate view is commonly a user-facing webpage, blog
+ * post, etc. The MIME type for the data at the URL is available from the
+ * returned Zend_Gdata_App_Extension_Link element.
+ * This link is in the atom feed/entry as an atom:link with a
+ * rel attribute value of 'self'.
+ *
+ * @return Zend_Gdata_App_Extension_Link The link, or null if not found
+ */
+ public function getAlternateLink()
+ {
+ return $this->getLink('alternate');
+ }
+
+ /**
+ * @param array $value The array of Zend_Gdata_App_Extension_Link elements
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setLink($value)
+ {
+ $this->_link = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_Rights
+ */
+ public function getRights()
+ {
+ return $this->_rights;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Rights $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setRights($value)
+ {
+ $this->_rights = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the title of this feed or entry. The title is an extremely
+ * short textual representation of this resource and is found as
+ * an atom:title element in a feed or entry
+ *
+ * @return Zend_Gdata_App_Extension_Title
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+
+ /**
+ * Returns a string representation of the title of this feed or entry.
+ * The title is an extremely short textual representation of this
+ * resource and is found as an atom:title element in a feed or entry
+ *
+ * @return string
+ */
+ public function getTitleValue()
+ {
+ if (($titleObj = $this->getTitle()) != null) {
+ return $titleObj->getText();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the title of this feed or entry. The title is an extremely
+ * short textual representation of this resource and is found as
+ * an atom:title element in a feed or entry
+ *
+ * @param Zend_Gdata_App_Extension_Title $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setTitle($value)
+ {
+ $this->_title = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_App_Extension_Updated
+ */
+ public function getUpdated()
+ {
+ return $this->_updated;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Updated $value
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface
+ */
+ public function setUpdated($value)
+ {
+ $this->_updated = $value;
+ return $this;
+ }
+
+ /**
+ * Set the Etag for the current entry to $value. Setting $value to null
+ * unsets the Etag.
+ *
+ * @param string|null $value
+ * @return Zend_Gdata_App_Entry Provides a fluent interface
+ */
+ public function setEtag($value) {
+ $this->_etag = $value;
+ return $this;
+ }
+
+ /**
+ * Return the Etag for the current entry, or null if not set.
+ *
+ * @return string|null
+ */
+ public function getEtag() {
+ return $this->_etag;
+ }
+
+ /**
+ * Set the major protocol version that should be used. Values < 1
+ * (excluding NULL) will cause a Zend_Gdata_App_InvalidArgumentException
+ * to be thrown.
+ *
+ * @see _majorProtocolVersion
+ * @param (int|NULL) $value The major protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMajorProtocolVersion($value)
+ {
+ if (!($value >= 1) && ($value !== null)) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Major protocol version must be >= 1');
+ }
+ $this->_majorProtocolVersion = $value;
+ }
+
+ /**
+ * Get the major protocol version that is in use.
+ *
+ * @see _majorProtocolVersion
+ * @return (int|NULL) The major protocol version in use.
+ */
+ public function getMajorProtocolVersion()
+ {
+ return $this->_majorProtocolVersion;
+ }
+
+ /**
+ * Set the minor protocol version that should be used. If set to NULL, no
+ * minor protocol version will be sent to the server. Values < 0 will
+ * cause a Zend_Gdata_App_InvalidArgumentException to be thrown.
+ *
+ * @see _minorProtocolVersion
+ * @param (int|NULL) $value The minor protocol version to use.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setMinorProtocolVersion($value)
+ {
+ if (!($value >= 0)) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Minor protocol version must be >= 0 or null');
+ }
+ $this->_minorProtocolVersion = $value;
+ }
+
+ /**
+ * Get the minor protocol version that is in use.
+ *
+ * @see _minorProtocolVersion
+ * @return (int|NULL) The major protocol version in use, or NULL if no
+ * minor version is specified.
+ */
+ public function getMinorProtocolVersion()
+ {
+ return $this->_minorProtocolVersion;
+ }
+
+ /**
+ * Get the full version of a namespace prefix
+ *
+ * Looks up a prefix (atom:, etc.) in the list of registered
+ * namespaces and returns the full namespace URI if
+ * available. Returns the prefix, unmodified, if it's not
+ * registered.
+ *
+ * The current entry or feed's version will be used when performing the
+ * namespace lookup unless overridden using $majorVersion and
+ * $minorVersion. If the entry/fee has a null version, then the latest
+ * protocol version will be used by default.
+ *
+ * @param string $prefix The namespace prefix to lookup.
+ * @param integer $majorVersion The major protocol version in effect.
+ * Defaults to null (auto-select).
+ * @param integer $minorVersion The minor protocol version in effect.
+ * Defaults to null (auto-select).
+ * @return string
+ */
+ public function lookupNamespace($prefix,
+ $majorVersion = null,
+ $minorVersion = null)
+ {
+ // Auto-select current version
+ if ($majorVersion === null) {
+ $majorVersion = $this->getMajorProtocolVersion();
+ }
+ if ($minorVersion === null) {
+ $minorVersion = $this->getMinorProtocolVersion();
+ }
+
+ // Perform lookup
+ return parent::lookupNamespace($prefix, $majorVersion, $minorVersion);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/FeedSourceParent.php b/zend/library/Zend/Gdata/App/FeedSourceParent.php
new file mode 100644
index 0000000..e61e41d
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/FeedSourceParent.php
@@ -0,0 +1,267 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: FeedSourceParent.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Entry
+ */
+require_once 'Zend/Gdata/App/Entry.php';
+
+/**
+ * @see Zend_Gdata_App_FeedSourceParent
+ */
+require_once 'Zend/Gdata/App/FeedEntryParent.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Generator
+ */
+require_once 'Zend/Gdata/App/Extension/Generator.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Icon
+ */
+require_once 'Zend/Gdata/App/Extension/Icon.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Logo
+ */
+require_once 'Zend/Gdata/App/Extension/Logo.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Subtitle
+ */
+require_once 'Zend/Gdata/App/Extension/Subtitle.php';
+
+/**
+ * Atom feed class
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Gdata_App_FeedSourceParent extends Zend_Gdata_App_FeedEntryParent
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_App_Entry';
+
+ /**
+ * Root XML element for Atom entries.
+ *
+ * @var string
+ */
+ protected $_rootElement = null;
+
+ protected $_generator = null;
+ protected $_icon = null;
+ protected $_logo = null;
+ protected $_subtitle = null;
+
+ /**
+ * Set the HTTP client instance
+ *
+ * Sets the HTTP client object to use for retrieving the feed.
+ *
+ * @deprecated Deprecated as of Zend Framework 1.7. Use
+ * setService() instead.
+ * @param Zend_Http_Client $httpClient
+ * @return Zend_Gdata_App_FeedSourceParent Provides a fluent interface
+ */
+ public function setHttpClient(Zend_Http_Client $httpClient)
+ {
+ parent::setHttpClient($httpClient);
+ foreach ($this->_entry as $entry) {
+ $entry->setHttpClient($httpClient);
+ }
+ return $this;
+ }
+
+ /**
+ * Set the active service instance for this feed and all enclosed entries.
+ * This will be used to perform network requests, such as when calling
+ * save() and delete().
+ *
+ * @param Zend_Gdata_App $instance The new service instance.
+ * @return Zend_Gdata_App_FeedEntryParent Provides a fluent interface.
+ */
+ public function setService($instance)
+ {
+ parent::setService($instance);
+ foreach ($this->_entry as $entry) {
+ $entry->setService($instance);
+ }
+ return $this;
+ }
+
+ /**
+ * Make accessing some individual elements of the feed easier.
+ *
+ * Special accessors 'entry' and 'entries' are provided so that if
+ * you wish to iterate over an Atom feed's entries, you can do so
+ * using foreach ($feed->entries as $entry) or foreach
+ * ($feed->entry as $entry).
+ *
+ * @param string $var The property to access.
+ * @return mixed
+ */
+ public function __get($var)
+ {
+ switch ($var) {
+ default:
+ return parent::__get($var);
+ }
+ }
+
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_generator != null) {
+ $element->appendChild($this->_generator->getDOM($element->ownerDocument));
+ }
+ if ($this->_icon != null) {
+ $element->appendChild($this->_icon->getDOM($element->ownerDocument));
+ }
+ if ($this->_logo != null) {
+ $element->appendChild($this->_logo->getDOM($element->ownerDocument));
+ }
+ if ($this->_subtitle != null) {
+ $element->appendChild($this->_subtitle->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'generator':
+ $generator = new Zend_Gdata_App_Extension_Generator();
+ $generator->transferFromDOM($child);
+ $this->_generator = $generator;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'icon':
+ $icon = new Zend_Gdata_App_Extension_Icon();
+ $icon->transferFromDOM($child);
+ $this->_icon = $icon;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'logo':
+ $logo = new Zend_Gdata_App_Extension_Logo();
+ $logo->transferFromDOM($child);
+ $this->_logo = $logo;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'subtitle':
+ $subtitle = new Zend_Gdata_App_Extension_Subtitle();
+ $subtitle->transferFromDOM($child);
+ $this->_subtitle = $subtitle;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_Generator
+ */
+ public function getGenerator()
+ {
+ return $this->_generator;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Generator $value
+ * @return Zend_Gdata_App_FeedSourceParent Provides a fluent interface
+ */
+ public function setGenerator($value)
+ {
+ $this->_generator = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_Icon
+ */
+ public function getIcon()
+ {
+ return $this->_icon;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Icon $value
+ * @return Zend_Gdata_App_FeedSourceParent Provides a fluent interface
+ */
+ public function setIcon($value)
+ {
+ $this->_icon = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_logo
+ */
+ public function getlogo()
+ {
+ return $this->_logo;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_logo $value
+ * @return Zend_Gdata_App_FeedSourceParent Provides a fluent interface
+ */
+ public function setlogo($value)
+ {
+ $this->_logo = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_AppExtension_Subtitle
+ */
+ public function getSubtitle()
+ {
+ return $this->_subtitle;
+ }
+
+ /**
+ * @param Zend_Gdata_App_Extension_Subtitle $value
+ * @return Zend_Gdata_App_FeedSourceParent Provides a fluent interface
+ */
+ public function setSubtitle($value)
+ {
+ $this->_subtitle = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/HttpException.php b/zend/library/Zend/Gdata/App/HttpException.php
new file mode 100644
index 0000000..4ea6147
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/HttpException.php
@@ -0,0 +1,121 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: HttpException.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App_Exception
+ */
+require_once 'Zend/Gdata/App/Exception.php';
+
+/**
+ * Zend_Http_Client_Exception
+ */
+require_once 'Zend/Http/Client/Exception.php';
+
+/**
+ * Gdata exceptions
+ *
+ * Class to represent exceptions that occur during Gdata operations.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_HttpException extends Zend_Gdata_App_Exception
+{
+
+ protected $_httpClientException = null;
+ protected $_response = null;
+
+ /**
+ * Create a new Zend_Gdata_App_HttpException
+ *
+ * @param string $message Optionally set a message
+ * @param Zend_Http_Client_Exception Optionally pass in a Zend_Http_Client_Exception
+ * @param Zend_Http_Response Optionally pass in a Zend_Http_Response
+ */
+ public function __construct($message = null, $e = null, $response = null)
+ {
+ $this->_httpClientException = $e;
+ $this->_response = $response;
+ parent::__construct($message);
+ }
+
+ /**
+ * Get the Zend_Http_Client_Exception.
+ *
+ * @return Zend_Http_Client_Exception
+ */
+ public function getHttpClientException()
+ {
+ return $this->_httpClientException;
+ }
+
+ /**
+ * Set the Zend_Http_Client_Exception.
+ *
+ * @param Zend_Http_Client_Exception $value
+ */
+ public function setHttpClientException($value)
+ {
+ $this->_httpClientException = $value;
+ return $this;
+ }
+
+ /**
+ * Set the Zend_Http_Response.
+ *
+ * @param Zend_Http_Response $response
+ */
+ public function setResponse($response)
+ {
+ $this->_response = $response;
+ return $this;
+ }
+
+ /**
+ * Get the Zend_Http_Response.
+ *
+ * @return Zend_Http_Response
+ */
+ public function getResponse()
+ {
+ return $this->_response;
+ }
+
+ /**
+ * Get the body of the Zend_Http_Response
+ *
+ * @return string
+ */
+ public function getRawResponseBody()
+ {
+ if ($this->getResponse()) {
+ $response = $this->getResponse();
+ return $response->getRawBody();
+ }
+ return null;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/IOException.php b/zend/library/Zend/Gdata/App/IOException.php
new file mode 100644
index 0000000..6fe1a62
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/IOException.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: IOException.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+
+/**
+ * Zend_Gdata_App_Exception
+ */
+require_once 'Zend/Gdata/App/Exception.php';
+
+/**
+ * Gdata App IO exceptions.
+ *
+ * Class to represent IO exceptions that occur during Gdata App operations.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_IOException extends Zend_Gdata_App_Exception
+{
+}
diff --git a/zend/library/Zend/Gdata/App/InvalidArgumentException.php b/zend/library/Zend/Gdata/App/InvalidArgumentException.php
new file mode 100644
index 0000000..b48777e
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/InvalidArgumentException.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: InvalidArgumentException.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App_Exception
+ */
+require_once 'Zend/Gdata/App/Exception.php';
+
+/**
+ * Gdata exceptions
+ *
+ * Class to represent exceptions that occur during Gdata operations.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_InvalidArgumentException extends Zend_Gdata_App_Exception
+{
+}
diff --git a/zend/library/Zend/Gdata/App/LoggingHttpClientAdapterSocket.php b/zend/library/Zend/Gdata/App/LoggingHttpClientAdapterSocket.php
new file mode 100644
index 0000000..b7c7aa5
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/LoggingHttpClientAdapterSocket.php
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @version $Id: LoggingHttpClientAdapterSocket.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Http_Client_Adapter_Socket
+ */
+require_once 'Zend/Http/Client/Adapter/Socket.php';
+
+/**
+ * Overrides the traditional socket-based adapter class for Zend_Http_Client to
+ * enable logging of requests. All requests are logged to a location specified
+ * in the config as $config['logfile']. Requests and responses are logged after
+ * they are sent and received/processed, thus an error could prevent logging.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_LoggingHttpClientAdapterSocket extends Zend_Http_Client_Adapter_Socket
+{
+
+ /**
+ * The file handle for writing logs
+ *
+ * @var resource|null
+ */
+ protected $log_handle = null;
+
+ /**
+ * Log the given message to the log file. The log file is configured
+ * as the config param 'logfile'. This method opens the file for
+ * writing if necessary.
+ *
+ * @param string $message The message to log
+ */
+ protected function log($message)
+ {
+ if ($this->log_handle == null) {
+ $this->log_handle = fopen($this->config['logfile'], 'a');
+ }
+ fwrite($this->log_handle, $message);
+ }
+
+ /**
+ * Connect to the remote server
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ * @param int $timeout
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ $this->log("Connecting to: ${host}:${port}");
+ return parent::connect($host, $port, $secure);
+ }
+
+ /**
+ * Send request to the remote server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ */
+ public function write($method, $uri, $http_ver = '1.1', $headers = array(), $body = '')
+ {
+ $request = parent::write($method, $uri, $http_ver, $headers, $body);
+ $this->log("\n\n" . $request);
+ return $request;
+ }
+
+ /**
+ * Read response from server
+ *
+ * @return string
+ */
+ public function read()
+ {
+ $response = parent::read();
+ $this->log("${response}\n\n");
+ return $response;
+ }
+
+ /**
+ * Close the connection to the server
+ *
+ */
+ public function close()
+ {
+ $this->log("Closing socket\n\n");
+ parent::close();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/MediaEntry.php b/zend/library/Zend/Gdata/App/MediaEntry.php
new file mode 100644
index 0000000..68b47b1
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/MediaEntry.php
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Entry
+ */
+require_once 'Zend/Gdata/App/Entry.php';
+
+/**
+ * @see Zend_Gdata_App_MediaSource
+ */
+require_once 'Zend/Gdata/App/MediaSource.php';
+
+/**
+ * @see Zend_Gdata_MediaMimeStream
+ */
+require_once 'Zend/Gdata/MediaMimeStream.php';
+
+/**
+ * Concrete class for working with Atom entries containing multi-part data.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_MediaEntry extends Zend_Gdata_App_Entry
+{
+ /**
+ * The attached MediaSource/file
+ *
+ * @var Zend_Gdata_App_MediaSource
+ */
+ protected $_mediaSource = null;
+
+ /**
+ * Constructs a new MediaEntry, representing XML data and optional
+ * file to upload
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null, $mediaSource = null)
+ {
+ parent::__construct($element);
+ $this->_mediaSource = $mediaSource;
+ }
+
+ /**
+ * Return the MIME multipart representation of this MediaEntry.
+ *
+ * @return string|Zend_Gdata_MediaMimeStream The MIME multipart
+ * representation of this MediaEntry. If the entry consisted only
+ * of XML, a string is returned.
+ */
+ public function encode()
+ {
+ $xmlData = $this->saveXML();
+ $mediaSource = $this->getMediaSource();
+ if ($mediaSource === null) {
+ // No attachment, just send XML for entry
+ return $xmlData;
+ } else {
+ return new Zend_Gdata_MediaMimeStream($xmlData,
+ $mediaSource->getFilename(), $mediaSource->getContentType());
+ }
+ }
+
+ /**
+ * Return the MediaSource object representing the file attached to this
+ * MediaEntry.
+ *
+ * @return Zend_Gdata_App_MediaSource The attached MediaSource/file
+ */
+ public function getMediaSource()
+ {
+ return $this->_mediaSource;
+ }
+
+ /**
+ * Set the MediaSource object (file) for this MediaEntry
+ *
+ * @param Zend_Gdata_App_MediaSource $value The attached MediaSource/file
+ * @return Zend_Gdata_App_MediaEntry Provides a fluent interface
+ */
+ public function setMediaSource($value)
+ {
+ if ($value instanceof Zend_Gdata_App_MediaSource) {
+ $this->_mediaSource = $value;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must specify the media data as a class that conforms to Zend_Gdata_App_MediaSource.');
+ }
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/MediaFileSource.php b/zend/library/Zend/Gdata/App/MediaFileSource.php
new file mode 100644
index 0000000..e37bd75
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/MediaFileSource.php
@@ -0,0 +1,146 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaFileSource.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_MediaData
+ */
+require_once 'Zend/Gdata/App/BaseMediaSource.php';
+
+/**
+ * Concrete class to use a file handle as an attachment within a MediaEntry.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_MediaFileSource extends Zend_Gdata_App_BaseMediaSource
+{
+ /**
+ * The filename which is represented
+ *
+ * @var string
+ */
+ protected $_filename = null;
+
+ /**
+ * The content type for the file attached (example image/png)
+ *
+ * @var string
+ */
+ protected $_contentType = null;
+
+ /**
+ * Create a new Zend_Gdata_App_MediaFileSource object.
+ *
+ * @param string $filename The name of the file to read from.
+ */
+ public function __construct($filename)
+ {
+ $this->setFilename($filename);
+ }
+
+ /**
+ * Return the MIME multipart representation of this MediaEntry.
+ *
+ * @return string
+ * @throws Zend_Gdata_App_IOException
+ */
+ public function encode()
+ {
+ if ($this->getFilename() !== null &&
+ is_readable($this->getFilename())) {
+
+ // Retrieves the file, using the include path
+ $fileHandle = fopen($this->getFilename(), 'r', true);
+ $result = fread($fileHandle, filesize($this->getFilename()));
+ if ($result === false) {
+ require_once 'Zend/Gdata/App/IOException.php';
+ throw new Zend_Gdata_App_IOException("Error reading file - " .
+ $this->getFilename() . '. Read failed.');
+ }
+ fclose($fileHandle);
+ return $result;
+ } else {
+ require_once 'Zend/Gdata/App/IOException.php';
+ throw new Zend_Gdata_App_IOException("Error reading file - " .
+ $this->getFilename() . '. File is not readable.');
+ }
+ }
+
+ /**
+ * Get the filename associated with this reader.
+ *
+ * @return string
+ */
+ public function getFilename()
+ {
+ return $this->_filename;
+ }
+
+ /**
+ * Set the filename which is to be read.
+ *
+ * @param string $value The desired file handle.
+ * @return Zend_Gdata_App_MediaFileSource Provides a fluent interface.
+ */
+ public function setFilename($value)
+ {
+ $this->_filename = $value;
+ return $this;
+ }
+
+ /**
+ * The content type for the file attached (example image/png)
+ *
+ * @return string The content type
+ */
+ public function getContentType()
+ {
+ return $this->_contentType;
+ }
+
+ /**
+ * Set the content type for the file attached (example image/png)
+ *
+ * @param string $value The content type
+ * @return Zend_Gdata_App_MediaFileSource Provides a fluent interface
+ */
+ public function setContentType($value)
+ {
+ $this->_contentType = $value;
+ return $this;
+ }
+
+ /**
+ * Alias for getFilename().
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getFilename();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/MediaSource.php b/zend/library/Zend/Gdata/App/MediaSource.php
new file mode 100644
index 0000000..b99a939
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/MediaSource.php
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaSource.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Interface for defining data that can be encoded and sent over the network.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+interface Zend_Gdata_App_MediaSource
+{
+ /**
+ * Return a byte stream representation of this object.
+ *
+ * @return string
+ */
+ public function encode();
+
+ /**
+ * Set the content type for the file attached (example image/png)
+ *
+ * @param string $value The content type
+ * @return Zend_Gdata_App_MediaFileSource Provides a fluent interface
+ */
+ public function setContentType($value);
+
+ /**
+ * The content type for the file attached (example image/png)
+ *
+ * @return string The content type
+ */
+ public function getContentType();
+
+ /**
+ * Sets the Slug header value. Used by some services to determine the
+ * title for the uploaded file. A null value indicates no slug header.
+ *
+ * @var string The slug value
+ * @return Zend_Gdata_App_MediaSource Provides a fluent interface
+ */
+ public function setSlug($value);
+
+ /**
+ * Returns the Slug header value. Used by some services to determine the
+ * title for the uploaded file. Returns null if no slug should be used.
+ *
+ * @return string The slug value
+ */
+ public function getSlug();
+}
diff --git a/zend/library/Zend/Gdata/App/Util.php b/zend/library/Zend/Gdata/App/Util.php
new file mode 100644
index 0000000..145895a
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/Util.php
@@ -0,0 +1,112 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Util.php 24643 2012-02-25 21:35:32Z adamlundrigan $
+ */
+
+/**
+ * Utility class for static functions needed by Zend_Gdata_App
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_Util
+{
+
+ /**
+ * Convert timestamp into RFC 3339 date string.
+ * 2005-04-19T15:30:00
+ *
+ * @param int $timestamp
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public static function formatTimestamp($timestamp)
+ {
+ $rfc3339 = '/^(\d{4})\-?(\d{2})\-?(\d{2})((T|t)(\d{2})\:?(\d{2})' .
+ '\:?(\d{2})(\.\d{1,})?((Z|z)|([\+\-])(\d{2})\:?(\d{2})))?$/';
+
+ if (ctype_digit((string)$timestamp)) {
+ return gmdate('Y-m-d\TH:i:sP', $timestamp);
+ } elseif (preg_match($rfc3339, $timestamp) > 0) {
+ // timestamp is already properly formatted
+ return $timestamp;
+ } else {
+ $ts = strtotime($timestamp);
+ if ($ts === false) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException("Invalid timestamp: $timestamp.");
+ }
+ return date('Y-m-d\TH:i:s', $ts);
+ }
+ }
+
+ /** Find the greatest key that is less than or equal to a given upper
+ * bound, and return the value associated with that key.
+ *
+ * @param integer|null $maximumKey The upper bound for keys. If null, the
+ * maxiumum valued key will be found.
+ * @param array $collection An two-dimensional array of key/value pairs
+ * to search through.
+ * @returns mixed The value corresponding to the located key.
+ * @throws Zend_Gdata_App_Exception Thrown if $collection is empty.
+ */
+ public static function findGreatestBoundedValue($maximumKey, $collection)
+ {
+ $found = false;
+ $foundKey = $maximumKey;
+
+ // Sanity check: Make sure that the collection isn't empty
+ if (sizeof($collection) == 0) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("Empty namespace collection encountered.");
+ }
+
+ if ($maximumKey === null) {
+ // If the key is null, then we return the maximum available
+ $keys = array_keys($collection);
+ sort($keys);
+ $found = true;
+ $foundKey = end($keys);
+ } else {
+ // Otherwise, we optimistically guess that the current version
+ // will have a matching namespce. If that fails, we decrement the
+ // version until we find a match.
+ while (!$found && $foundKey >= 0) {
+ if (array_key_exists($foundKey, $collection))
+ $found = true;
+ else
+ $foundKey--;
+ }
+ }
+
+ // Guard: A namespace wasn't found. Either none were registered, or
+ // the current protcol version is lower than the maximum namespace.
+ if (!$found) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("Namespace compatible with current protocol not found.");
+ }
+
+ return $foundKey;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/App/VersionException.php b/zend/library/Zend/Gdata/App/VersionException.php
new file mode 100644
index 0000000..4212b9e
--- /dev/null
+++ b/zend/library/Zend/Gdata/App/VersionException.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: VersionException.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App_Exception
+ */
+require_once 'Zend/Gdata/App/Exception.php';
+
+/**
+ * Gdata APP exceptions
+ *
+ * Class to represent version exceptions that occur during Gdata APP operations.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage App
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_App_VersionException extends Zend_Gdata_App_Exception
+{
+}
diff --git a/zend/library/Zend/Gdata/AuthSub.php b/zend/library/Zend/Gdata/AuthSub.php
new file mode 100644
index 0000000..878c31c
--- /dev/null
+++ b/zend/library/Zend/Gdata/AuthSub.php
@@ -0,0 +1,248 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AuthSub.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_HttpClient
+ */
+require_once 'Zend/Gdata/HttpClient.php';
+
+/**
+ * Zend_Version
+ */
+require_once 'Zend/Version.php';
+
+/**
+ * Wrapper around Zend_Http_Client to facilitate Google's "Account Authentication
+ * Proxy for Web-Based Applications".
+ *
+ * @see http://code.google.com/apis/accounts/AuthForWebApps.html
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_AuthSub
+{
+
+ const AUTHSUB_REQUEST_URI = 'https://www.google.com/accounts/AuthSubRequest';
+
+ const AUTHSUB_SESSION_TOKEN_URI = 'https://www.google.com/accounts/AuthSubSessionToken';
+
+ const AUTHSUB_REVOKE_TOKEN_URI = 'https://www.google.com/accounts/AuthSubRevokeToken';
+
+ const AUTHSUB_TOKEN_INFO_URI = 'https://www.google.com/accounts/AuthSubTokenInfo';
+
+ /**
+ * Creates a URI to request a single-use AuthSub token.
+ *
+ * @param string $next (required) URL identifying the service to be
+ * accessed.
+ * The resulting token will enable access to the specified service only.
+ * Some services may limit scope further, such as read-only access.
+ * @param string $scope (required) URL identifying the service to be
+ * accessed. The resulting token will enable
+ * access to the specified service only.
+ * Some services may limit scope further, such
+ * as read-only access.
+ * @param int $secure (optional) Boolean flag indicating whether the
+ * authentication transaction should issue a secure
+ * token (1) or a non-secure token (0). Secure tokens
+ * are available to registered applications only.
+ * @param int $session (optional) Boolean flag indicating whether
+ * the one-time-use token may be exchanged for
+ * a session token (1) or not (0).
+ * @param string $request_uri (optional) URI to which to direct the
+ * authentication request.
+ */
+ public static function getAuthSubTokenUri($next, $scope, $secure=0, $session=0,
+ $request_uri = self::AUTHSUB_REQUEST_URI)
+ {
+ $querystring = '?next=' . urlencode($next)
+ . '&scope=' . urldecode($scope)
+ . '&secure=' . urlencode($secure)
+ . '&session=' . urlencode($session);
+ return $request_uri . $querystring;
+ }
+
+
+ /**
+ * Upgrades a single use token to a session token
+ *
+ * @param string $token The single use token which is to be upgraded
+ * @param Zend_Http_Client $client (optional) HTTP client to use to
+ * make the request
+ * @param string $request_uri (optional) URI to which to direct
+ * the session token upgrade
+ * @return string The upgraded token value
+ * @throws Zend_Gdata_App_AuthException
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public static function getAuthSubSessionToken(
+ $token, $client = null,
+ $request_uri = self::AUTHSUB_SESSION_TOKEN_URI)
+ {
+ $client = self::getHttpClient($token, $client);
+
+ if ($client instanceof Zend_Gdata_HttpClient) {
+ $filterResult = $client->filterHttpRequest('GET', $request_uri);
+ $url = $filterResult['url'];
+ $headers = $filterResult['headers'];
+ $client->setHeaders($headers);
+ $client->setUri($url);
+ } else {
+ $client->setUri($request_uri);
+ }
+
+ try {
+ $response = $client->request('GET');
+ } catch (Zend_Http_Client_Exception $e) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+
+ // Parse Google's response
+ if ($response->isSuccessful()) {
+ $goog_resp = array();
+ foreach (explode("\n", $response->getBody()) as $l) {
+ $l = chop($l);
+ if ($l) {
+ list($key, $val) = explode('=', chop($l), 2);
+ $goog_resp[$key] = $val;
+ }
+ }
+ return $goog_resp['Token'];
+ } else {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException(
+ 'Token upgrade failed. Reason: ' . $response->getBody());
+ }
+ }
+
+ /**
+ * Revoke a token
+ *
+ * @param string $token The token to revoke
+ * @param Zend_Http_Client $client (optional) HTTP client to use to make the request
+ * @param string $request_uri (optional) URI to which to direct the revokation request
+ * @return boolean Whether the revokation was successful
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public static function AuthSubRevokeToken($token, $client = null,
+ $request_uri = self::AUTHSUB_REVOKE_TOKEN_URI)
+ {
+ $client = self::getHttpClient($token, $client);
+
+ if ($client instanceof Zend_Gdata_HttpClient) {
+ $filterResult = $client->filterHttpRequest('GET', $request_uri);
+ $url = $filterResult['url'];
+ $headers = $filterResult['headers'];
+ $client->setHeaders($headers);
+ $client->setUri($url);
+ $client->resetParameters();
+ } else {
+ $client->setUri($request_uri);
+ }
+
+ ob_start();
+ try {
+ $response = $client->request('GET');
+ } catch (Zend_Http_Client_Exception $e) {
+ ob_end_clean();
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+ ob_end_clean();
+ // Parse Google's response
+ if ($response->isSuccessful()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ /**
+ * get token information
+ *
+ * @param string $token The token to retrieve information about
+ * @param Zend_Http_Client $client (optional) HTTP client to use to
+ * make the request
+ * @param string $request_uri (optional) URI to which to direct
+ * the information request
+ */
+ public static function getAuthSubTokenInfo(
+ $token, $client = null, $request_uri = self::AUTHSUB_TOKEN_INFO_URI)
+ {
+ $client = self::getHttpClient($token, $client);
+
+ if ($client instanceof Zend_Gdata_HttpClient) {
+ $filterResult = $client->filterHttpRequest('GET', $request_uri);
+ $url = $filterResult['url'];
+ $headers = $filterResult['headers'];
+ $client->setHeaders($headers);
+ $client->setUri($url);
+ } else {
+ $client->setUri($request_uri);
+ }
+
+ ob_start();
+ try {
+ $response = $client->request('GET');
+ } catch (Zend_Http_Client_Exception $e) {
+ ob_end_clean();
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+ ob_end_clean();
+ return $response->getBody();
+ }
+
+ /**
+ * Retrieve a HTTP client object with AuthSub credentials attached
+ * as the Authorization header
+ *
+ * @param string $token The token to retrieve information about
+ * @param Zend_Gdata_HttpClient $client (optional) HTTP client to use to make the request
+ */
+ public static function getHttpClient($token, $client = null)
+ {
+ if ($client == null) {
+ $client = new Zend_Gdata_HttpClient();
+ }
+ if (!$client instanceof Zend_Gdata_HttpClient) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException('Client is not an instance of Zend_Gdata_HttpClient.');
+ }
+ $useragent = 'Zend_Framework_Gdata/' . Zend_Version::VERSION;
+ $client->setConfig(array(
+ 'strictredirects' => true,
+ 'useragent' => $useragent
+ )
+ );
+ $client->setAuthSubToken($token);
+ return $client;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Books.php b/zend/library/Zend/Gdata/Books.php
new file mode 100755
index 0000000..d65fb29
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books.php
@@ -0,0 +1,204 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Books.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * @see Zend_Gdata_DublinCore
+ */
+require_once 'Zend/Gdata/DublinCore.php';
+
+/**
+ * @see Zend_Gdata_Books_CollectionEntry
+ */
+require_once 'Zend/Gdata/Books/CollectionEntry.php';
+
+/**
+ * @see Zend_Gdata_Books_CollectionFeed
+ */
+require_once 'Zend/Gdata/Books/CollectionFeed.php';
+
+/**
+ * @see Zend_Gdata_Books_VolumeEntry
+ */
+require_once 'Zend/Gdata/Books/VolumeEntry.php';
+
+/**
+ * @see Zend_Gdata_Books_VolumeFeed
+ */
+require_once 'Zend/Gdata/Books/VolumeFeed.php';
+
+/**
+ * Service class for interacting with the Books service
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books extends Zend_Gdata
+{
+ const VOLUME_FEED_URI = 'https://books.google.com/books/feeds/volumes';
+ const MY_LIBRARY_FEED_URI = 'https://books.google.com/books/feeds/users/me/collections/library/volumes';
+ const MY_ANNOTATION_FEED_URI = 'https://books.google.com/books/feeds/users/me/volumes';
+ const AUTH_SERVICE_NAME = 'print';
+
+ /**
+ * Namespaces used for Zend_Gdata_Books
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('gbs', 'http://schemas.google.com/books/2008', 1, 0),
+ array('dc', 'http://purl.org/dc/terms', 1, 0)
+ );
+
+ /**
+ * Create Zend_Gdata_Books object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Books');
+ $this->registerPackage('Zend_Gdata_Books_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Retrieves a feed of volumes.
+ *
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query or a Zend_Gdata_Query object from which a URL can be
+ * determined.
+ * @return Zend_Gdata_Books_VolumeFeed The feed of volumes found at the
+ * specified URL.
+ */
+ public function getVolumeFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::VOLUME_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Books_VolumeFeed');
+ }
+
+ /**
+ * Retrieves a specific volume entry.
+ *
+ * @param string|null $volumeId The volumeId of interest.
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query or a Zend_Gdata_Query object from which a URL can be
+ * determined.
+ * @return Zend_Gdata_Books_VolumeEntry The feed of volumes found at the
+ * specified URL.
+ */
+ public function getVolumeEntry($volumeId = null, $location = null)
+ {
+ if ($volumeId !== null) {
+ $uri = self::VOLUME_FEED_URI . "/" . $volumeId;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Books_VolumeEntry');
+ }
+
+ /**
+ * Retrieves a feed of volumes, by default the User library feed.
+ *
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query.
+ * @return Zend_Gdata_Books_VolumeFeed The feed of volumes found at the
+ * specified URL.
+ */
+ public function getUserLibraryFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::MY_LIBRARY_FEED_URI;
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Books_VolumeFeed');
+ }
+
+ /**
+ * Retrieves a feed of volumes, by default the User annotation feed
+ *
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query.
+ * @return Zend_Gdata_Books_VolumeFeed The feed of volumes found at the
+ * specified URL.
+ */
+ public function getUserAnnotationFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::MY_ANNOTATION_FEED_URI;
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Books_VolumeFeed');
+ }
+
+ /**
+ * Insert a Volume / Annotation
+ *
+ * @param Zend_Gdata_Books_VolumeEntry $entry
+ * @param Zend_Gdata_Query|string|null $location (optional) The URL to
+ * query
+ * @return Zend_Gdata_Books_VolumeEntry The inserted volume entry.
+ */
+ public function insertVolume($entry, $location = null)
+ {
+ if ($location == null) {
+ $uri = self::MY_LIBRARY_FEED_URI;
+ } else {
+ $uri = $location;
+ }
+ return parent::insertEntry(
+ $entry, $uri, 'Zend_Gdata_Books_VolumeEntry');
+ }
+
+ /**
+ * Delete a Volume
+ *
+ * @param Zend_Gdata_Books_VolumeEntry $entry
+ * @return void
+ */
+ public function deleteVolume($entry)
+ {
+ $entry->delete();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Books/CollectionEntry.php b/zend/library/Zend/Gdata/Books/CollectionEntry.php
new file mode 100644
index 0000000..76197d7
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/CollectionEntry.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CollectionEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * Describes an entry in a feed of collections
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_CollectionEntry extends Zend_Gdata_Entry
+{
+
+ /**
+ * Constructor for Zend_Gdata_Books_CollectionEntry which
+ * Describes an entry in a feed of collections
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($element);
+ }
+
+
+}
+
diff --git a/zend/library/Zend/Gdata/Books/CollectionFeed.php b/zend/library/Zend/Gdata/Books/CollectionFeed.php
new file mode 100644
index 0000000..85efe35
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/CollectionFeed.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CollectionFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * Describes a Book Search collection feed
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_CollectionFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * Constructor for Zend_Gdata_Books_CollectionFeed which
+ * Describes a Book Search collection feed
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Books_CollectionEntry';
+
+}
+
diff --git a/zend/library/Zend/Gdata/Books/Extension/AnnotationLink.php b/zend/library/Zend/Gdata/Books/Extension/AnnotationLink.php
new file mode 100644
index 0000000..8c4f530
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/Extension/AnnotationLink.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AnnotationLink.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Books_Extension_BooksLink
+ */
+require_once 'Zend/Gdata/Books/Extension/BooksLink.php';
+
+/**
+ * Describes an annotation link
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_Extension_AnnotationLink extends
+ Zend_Gdata_Books_Extension_BooksLink
+{
+
+ /**
+ * Constructor for Zend_Gdata_Books_Extension_AnnotationLink which
+ * Describes an annotation link
+ *
+ * @param string|null $href Linked resource URI
+ * @param string|null $rel Forward relationship
+ * @param string|null $type Resource MIME type
+ * @param string|null $hrefLang Resource language
+ * @param string|null $title Human-readable resource title
+ * @param string|null $length Resource length in octets
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($href = null, $rel = null, $type = null,
+ $hrefLang = null, $title = null, $length = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Books/Extension/BooksCategory.php b/zend/library/Zend/Gdata/Books/Extension/BooksCategory.php
new file mode 100644
index 0000000..3520e9a
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/Extension/BooksCategory.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: BooksCategory.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Category
+ */
+require_once 'Zend/Gdata/App/Extension/Category.php';
+
+/**
+ * Describes a books category
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_Extension_BooksCategory extends
+ Zend_Gdata_App_Extension_Category
+{
+
+ /**
+ * Constructor for Zend_Gdata_Books_Extension_BooksCategory which
+ * Describes a books category
+ *
+ * @param string|null $term An identifier representing the category within
+ * the categorization scheme.
+ * @param string|null $scheme A string containing a URI identifying the
+ * categorization scheme.
+ * @param string|null $label A human-readable label for display in
+ * end-user applications.
+ */
+ public function __construct($term = null, $scheme = null, $label = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($term, $scheme, $label);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Books/Extension/BooksLink.php b/zend/library/Zend/Gdata/Books/Extension/BooksLink.php
new file mode 100644
index 0000000..32ca572
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/Extension/BooksLink.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: BooksLink.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Link
+ */
+require_once 'Zend/Gdata/App/Extension/Link.php';
+
+/**
+ * Extends the base Link class with Books extensions
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_Extension_BooksLink extends Zend_Gdata_App_Extension_Link
+{
+
+ /**
+ * Constructor for Zend_Gdata_Books_Extension_BooksLink which
+ * Extends the base Link class with Books extensions
+ *
+ * @param string|null $href Linked resource URI
+ * @param string|null $rel Forward relationship
+ * @param string|null $type Resource MIME type
+ * @param string|null $hrefLang Resource language
+ * @param string|null $title Human-readable resource title
+ * @param string|null $length Resource length in octets
+ */
+ public function __construct($href = null, $rel = null, $type = null,
+ $hrefLang = null, $title = null, $length = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+
+}
+
diff --git a/zend/library/Zend/Gdata/Books/Extension/Embeddability.php b/zend/library/Zend/Gdata/Books/Extension/Embeddability.php
new file mode 100644
index 0000000..b8a8e7b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/Extension/Embeddability.php
@@ -0,0 +1,122 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Embeddability.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Describes an embeddability
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_Extension_Embeddability extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gbs';
+ protected $_rootElement = 'embeddability';
+ protected $_value = null;
+
+ /**
+ * Constructor for Zend_Gdata_Books_Extension_Embeddability which
+ * Describes an embeddability.
+ *
+ * @param string|null $value A programmatic value representing the book's
+ * embeddability.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves DOMElement which corresponds to this element and all
+ * child properties. This is used to build this object back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistance.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Extracts XML attributes from the DOM and converts them to the
+ * appropriate object members.
+ *
+ * @param DOMNode $attribute The DOMNode attribute to be handled.
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the programmatic value that describes the embeddability of a
+ * volume in Google Book Search
+ *
+ * @return string|null The value
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Sets the programmatic value that describes the embeddability of a
+ * volume in Google Book Search
+ *
+ * @param string|null $value Programmatic value that describes the
+ * embeddability of a volume in Google Book Search
+ * @return Zend_Gdata_Books_Extension_Embeddability Provides a fluent
+ * interface
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Books/Extension/InfoLink.php b/zend/library/Zend/Gdata/Books/Extension/InfoLink.php
new file mode 100644
index 0000000..8cc911f
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/Extension/InfoLink.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: InfoLink.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Books_Extension_BooksLink
+ */
+require_once 'Zend/Gdata/Books/Extension/BooksLink.php';
+
+/**
+ * Describes an info link
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_Extension_InfoLink extends
+ Zend_Gdata_Books_Extension_BooksLink
+{
+
+ /**
+ * Constructor for Zend_Gdata_Books_Extension_InfoLink which
+ * Describes an info link
+ *
+ * @param string|null $href Linked resource URI
+ * @param string|null $rel Forward relationship
+ * @param string|null $type Resource MIME type
+ * @param string|null $hrefLang Resource language
+ * @param string|null $title Human-readable resource title
+ * @param string|null $length Resource length in octets
+ */
+ public function __construct($href = null, $rel = null, $type = null,
+ $hrefLang = null, $title = null, $length = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Books/Extension/PreviewLink.php b/zend/library/Zend/Gdata/Books/Extension/PreviewLink.php
new file mode 100644
index 0000000..a5cb107
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/Extension/PreviewLink.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PreviewLink.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Books_Extension_BooksLink
+ */
+require_once 'Zend/Gdata/Books/Extension/BooksLink.php';
+
+/**
+ * Describes a preview link
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_Extension_PreviewLink extends
+ Zend_Gdata_Books_Extension_BooksLink
+{
+
+ /**
+ * Constructor for Zend_Gdata_Books_Extension_PreviewLink which
+ * Describes a preview link
+ *
+ * @param string|null $href Linked resource URI
+ * @param string|null $rel Forward relationship
+ * @param string|null $type Resource MIME type
+ * @param string|null $hrefLang Resource language
+ * @param string|null $title Human-readable resource title
+ * @param string|null $length Resource length in octets
+ */
+ public function __construct($href = null, $rel = null, $type = null,
+ $hrefLang = null, $title = null, $length = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Books/Extension/Review.php b/zend/library/Zend/Gdata/Books/Extension/Review.php
new file mode 100644
index 0000000..04e31d5
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/Extension/Review.php
@@ -0,0 +1,152 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Review.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * User-provided review
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_Extension_Review extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gbs';
+ protected $_rootElement = 'review';
+ protected $_lang = null;
+ protected $_type = null;
+
+ /**
+ * Constructor for Zend_Gdata_Books_Extension_Review which
+ * User-provided review
+ *
+ * @param string|null $lang Review language.
+ * @param string|null $type Type of text construct (typically text, html,
+ * or xhtml).
+ * @param string|null $value Text content of the review.
+ */
+ public function __construct($lang = null, $type = null, $value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct();
+ $this->_lang = $lang;
+ $this->_type = $type;
+ $this->_text = $value;
+ }
+
+ /**
+ * Retrieves DOMElement which corresponds to this element and all
+ * child properties. This is used to build this object back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistance.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc);
+ if ($this->_lang !== null) {
+ $element->setAttribute('lang', $this->_lang);
+ }
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ /**
+ * Extracts XML attributes from the DOM and converts them to the
+ * appropriate object members.
+ *
+ * @param DOMNode $attribute The DOMNode attribute to be handled.
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'lang':
+ $this->_lang = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the language of link title
+ *
+ * @return string The lang
+ */
+ public function getLang()
+ {
+ return $this->_lang;
+ }
+
+ /**
+ * Returns the type of text construct (typically 'text', 'html' or 'xhtml')
+ *
+ * @return string The type
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * Sets the language of link title
+ *
+ * @param string $lang language of link title
+ * @return Zend_Gdata_Books_Extension_Review Provides a fluent interface
+ */
+ public function setLang($lang)
+ {
+ $this->_lang = $lang;
+ return $this;
+ }
+
+ /**
+ * Sets the type of text construct (typically 'text', 'html' or 'xhtml')
+ *
+ * @param string $type type of text construct (typically 'text', 'html' or 'xhtml')
+ * @return Zend_Gdata_Books_Extension_Review Provides a fluent interface
+ */
+ public function setType($type)
+ {
+ $this->_type = $type;
+ return $this;
+ }
+
+
+}
+
diff --git a/zend/library/Zend/Gdata/Books/Extension/ThumbnailLink.php b/zend/library/Zend/Gdata/Books/Extension/ThumbnailLink.php
new file mode 100644
index 0000000..3012788
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/Extension/ThumbnailLink.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ThumbnailLink.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Books_Extension_BooksLink
+ */
+require_once 'Zend/Gdata/Books/Extension/BooksLink.php';
+
+/**
+ * Describes a thumbnail link
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_Extension_ThumbnailLink extends
+ Zend_Gdata_Books_Extension_BooksLink
+{
+
+ /**
+ * Constructor for Zend_Gdata_Books_Extension_ThumbnailLink which
+ * Describes a thumbnail link
+ *
+ * @param string|null $href Linked resource URI
+ * @param string|null $rel Forward relationship
+ * @param string|null $type Resource MIME type
+ * @param string|null $hrefLang Resource language
+ * @param string|null $title Human-readable resource title
+ * @param string|null $length Resource length in octets
+ */
+ public function __construct($href = null, $rel = null, $type = null,
+ $hrefLang = null, $title = null, $length = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Books/Extension/Viewability.php b/zend/library/Zend/Gdata/Books/Extension/Viewability.php
new file mode 100644
index 0000000..bd4a16c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/Extension/Viewability.php
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Viewability.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Describes a viewability
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_Extension_Viewability extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gbs';
+ protected $_rootElement = 'viewability';
+ protected $_value = null;
+
+ /**
+ * Constructor for Zend_Gdata_Books_Extension_Viewability which
+ * Describes a viewability
+ *
+ * @param string|null $value A programmatic value representing the book's
+ * viewability mode.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves DOMElement which corresponds to this element and all
+ * child properties. This is used to build this object back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistance.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Extracts XML attributes from the DOM and converts them to the
+ * appropriate object members.
+ *
+ * @param DOMNode $attribute The DOMNode attribute to be handled.
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the programmatic value that describes the viewability of a volume
+ * in Google Book Search
+ *
+ * @return string The value
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Sets the programmatic value that describes the viewability of a volume in
+ * Google Book Search
+ *
+ * @param string $value programmatic value that describes the viewability
+ * of a volume in Googl eBook Search
+ * @return Zend_Gdata_Books_Extension_Viewability Provides a fluent
+ * interface
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+
+}
+
diff --git a/zend/library/Zend/Gdata/Books/VolumeEntry.php b/zend/library/Zend/Gdata/Books/VolumeEntry.php
new file mode 100644
index 0000000..8de59c0
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/VolumeEntry.php
@@ -0,0 +1,687 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: VolumeEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension_Comments
+ */
+require_once 'Zend/Gdata/Extension/Comments.php';
+
+/**
+ * @see Zend_Gdata_DublinCore_Extension_Creator
+ */
+require_once 'Zend/Gdata/DublinCore/Extension/Creator.php';
+
+/**
+ * @see Zend_Gdata_DublinCore_Extension_Date
+ */
+require_once 'Zend/Gdata/DublinCore/Extension/Date.php';
+
+/**
+ * @see Zend_Gdata_DublinCore_Extension_Description
+ */
+require_once 'Zend/Gdata/DublinCore/Extension/Description.php';
+
+/**
+ * @see Zend_Gdata_Books_Extension_Embeddability
+ */
+require_once 'Zend/Gdata/Books/Extension/Embeddability.php';
+
+/**
+ * @see Zend_Gdata_DublinCore_Extension_Format
+ */
+require_once 'Zend/Gdata/DublinCore/Extension/Format.php';
+
+/**
+ * @see Zend_Gdata_DublinCore_Extension_Identifier
+ */
+require_once 'Zend/Gdata/DublinCore/Extension/Identifier.php';
+
+/**
+ * @see Zend_Gdata_DublinCore_Extension_Language
+ */
+require_once 'Zend/Gdata/DublinCore/Extension/Language.php';
+
+/**
+ * @see Zend_Gdata_DublinCore_Extension_Publisher
+ */
+require_once 'Zend/Gdata/DublinCore/Extension/Publisher.php';
+
+/**
+ * @see Zend_Gdata_Extension_Rating
+ */
+require_once 'Zend/Gdata/Extension/Rating.php';
+
+/**
+ * @see Zend_Gdata_Books_Extension_Review
+ */
+require_once 'Zend/Gdata/Books/Extension/Review.php';
+
+/**
+ * @see Zend_Gdata_DublinCore_Extension_Subject
+ */
+require_once 'Zend/Gdata/DublinCore/Extension/Subject.php';
+
+/**
+ * @see Zend_Gdata_DublinCore_Extension_Title
+ */
+require_once 'Zend/Gdata/DublinCore/Extension/Title.php';
+
+/**
+ * @see Zend_Gdata_Books_Extension_Viewability
+ */
+require_once 'Zend/Gdata/Books/Extension/Viewability.php';
+
+/**
+ * Describes an entry in a feed of Book Search volumes
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_VolumeEntry extends Zend_Gdata_Entry
+{
+
+ const THUMBNAIL_LINK_REL = 'http://schemas.google.com/books/2008/thumbnail';
+ const PREVIEW_LINK_REL = 'http://schemas.google.com/books/2008/preview';
+ const INFO_LINK_REL = 'http://schemas.google.com/books/2008/info';
+ const ANNOTATION_LINK_REL = 'http://schemas.google.com/books/2008/annotation';
+
+ protected $_comments = null;
+ protected $_creators = array();
+ protected $_dates = array();
+ protected $_descriptions = array();
+ protected $_embeddability = null;
+ protected $_formats = array();
+ protected $_identifiers = array();
+ protected $_languages = array();
+ protected $_publishers = array();
+ protected $_rating = null;
+ protected $_review = null;
+ protected $_subjects = array();
+ protected $_titles = array();
+ protected $_viewability = null;
+
+ /**
+ * Constructor for Zend_Gdata_Books_VolumeEntry which
+ * Describes an entry in a feed of Book Search volumes
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves DOMElement which corresponds to this element and all
+ * child properties. This is used to build this object back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistance.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc);
+ if ($this->_creators !== null) {
+ foreach ($this->_creators as $creators) {
+ $element->appendChild($creators->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_dates !== null) {
+ foreach ($this->_dates as $dates) {
+ $element->appendChild($dates->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_descriptions !== null) {
+ foreach ($this->_descriptions as $descriptions) {
+ $element->appendChild($descriptions->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_formats !== null) {
+ foreach ($this->_formats as $formats) {
+ $element->appendChild($formats->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_identifiers !== null) {
+ foreach ($this->_identifiers as $identifiers) {
+ $element->appendChild($identifiers->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_languages !== null) {
+ foreach ($this->_languages as $languages) {
+ $element->appendChild($languages->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_publishers !== null) {
+ foreach ($this->_publishers as $publishers) {
+ $element->appendChild($publishers->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_subjects !== null) {
+ foreach ($this->_subjects as $subjects) {
+ $element->appendChild($subjects->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_titles !== null) {
+ foreach ($this->_titles as $titles) {
+ $element->appendChild($titles->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_comments !== null) {
+ $element->appendChild($this->_comments->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_embeddability !== null) {
+ $element->appendChild($this->_embeddability->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_rating !== null) {
+ $element->appendChild($this->_rating->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_review !== null) {
+ $element->appendChild($this->_review->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_viewability !== null) {
+ $element->appendChild($this->_viewability->getDOM(
+ $element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual objects of the appropriate type and stores
+ * them in this object based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process.
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('dc') . ':' . 'creator':
+ $creators = new Zend_Gdata_DublinCore_Extension_Creator();
+ $creators->transferFromDOM($child);
+ $this->_creators[] = $creators;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'date':
+ $dates = new Zend_Gdata_DublinCore_Extension_Date();
+ $dates->transferFromDOM($child);
+ $this->_dates[] = $dates;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'description':
+ $descriptions = new Zend_Gdata_DublinCore_Extension_Description();
+ $descriptions->transferFromDOM($child);
+ $this->_descriptions[] = $descriptions;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'format':
+ $formats = new Zend_Gdata_DublinCore_Extension_Format();
+ $formats->transferFromDOM($child);
+ $this->_formats[] = $formats;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'identifier':
+ $identifiers = new Zend_Gdata_DublinCore_Extension_Identifier();
+ $identifiers->transferFromDOM($child);
+ $this->_identifiers[] = $identifiers;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'language':
+ $languages = new Zend_Gdata_DublinCore_Extension_Language();
+ $languages->transferFromDOM($child);
+ $this->_languages[] = $languages;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'publisher':
+ $publishers = new Zend_Gdata_DublinCore_Extension_Publisher();
+ $publishers->transferFromDOM($child);
+ $this->_publishers[] = $publishers;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'subject':
+ $subjects = new Zend_Gdata_DublinCore_Extension_Subject();
+ $subjects->transferFromDOM($child);
+ $this->_subjects[] = $subjects;
+ break;
+ case $this->lookupNamespace('dc') . ':' . 'title':
+ $titles = new Zend_Gdata_DublinCore_Extension_Title();
+ $titles->transferFromDOM($child);
+ $this->_titles[] = $titles;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'comments':
+ $comments = new Zend_Gdata_Extension_Comments();
+ $comments->transferFromDOM($child);
+ $this->_comments = $comments;
+ break;
+ case $this->lookupNamespace('gbs') . ':' . 'embeddability':
+ $embeddability = new Zend_Gdata_Books_Extension_Embeddability();
+ $embeddability->transferFromDOM($child);
+ $this->_embeddability = $embeddability;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'rating':
+ $rating = new Zend_Gdata_Extension_Rating();
+ $rating->transferFromDOM($child);
+ $this->_rating = $rating;
+ break;
+ case $this->lookupNamespace('gbs') . ':' . 'review':
+ $review = new Zend_Gdata_Books_Extension_Review();
+ $review->transferFromDOM($child);
+ $this->_review = $review;
+ break;
+ case $this->lookupNamespace('gbs') . ':' . 'viewability':
+ $viewability = new Zend_Gdata_Books_Extension_Viewability();
+ $viewability->transferFromDOM($child);
+ $this->_viewability = $viewability;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns the Comments class
+ *
+ * @return Zend_Gdata_Extension_Comments|null The comments
+ */
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * Returns the creators
+ *
+ * @return array The creators
+ */
+ public function getCreators()
+ {
+ return $this->_creators;
+ }
+
+ /**
+ * Returns the dates
+ *
+ * @return array The dates
+ */
+ public function getDates()
+ {
+ return $this->_dates;
+ }
+
+ /**
+ * Returns the descriptions
+ *
+ * @return array The descriptions
+ */
+ public function getDescriptions()
+ {
+ return $this->_descriptions;
+ }
+
+ /**
+ * Returns the embeddability
+ *
+ * @return Zend_Gdata_Books_Extension_Embeddability|null The embeddability
+ */
+ public function getEmbeddability()
+ {
+ return $this->_embeddability;
+ }
+
+ /**
+ * Returns the formats
+ *
+ * @return array The formats
+ */
+ public function getFormats()
+ {
+ return $this->_formats;
+ }
+
+ /**
+ * Returns the identifiers
+ *
+ * @return array The identifiers
+ */
+ public function getIdentifiers()
+ {
+ return $this->_identifiers;
+ }
+
+ /**
+ * Returns the languages
+ *
+ * @return array The languages
+ */
+ public function getLanguages()
+ {
+ return $this->_languages;
+ }
+
+ /**
+ * Returns the publishers
+ *
+ * @return array The publishers
+ */
+ public function getPublishers()
+ {
+ return $this->_publishers;
+ }
+
+ /**
+ * Returns the rating
+ *
+ * @return Zend_Gdata_Extension_Rating|null The rating
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * Returns the review
+ *
+ * @return Zend_Gdata_Books_Extension_Review|null The review
+ */
+ public function getReview()
+ {
+ return $this->_review;
+ }
+
+ /**
+ * Returns the subjects
+ *
+ * @return array The subjects
+ */
+ public function getSubjects()
+ {
+ return $this->_subjects;
+ }
+
+ /**
+ * Returns the titles
+ *
+ * @return array The titles
+ */
+ public function getTitles()
+ {
+ return $this->_titles;
+ }
+
+ /**
+ * Returns the viewability
+ *
+ * @return Zend_Gdata_Books_Extension_Viewability|null The viewability
+ */
+ public function getViewability()
+ {
+ return $this->_viewability;
+ }
+
+ /**
+ * Sets the Comments class
+ *
+ * @param Zend_Gdata_Extension_Comments|null $comments Comments class
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setComments($comments)
+ {
+ $this->_comments = $comments;
+ return $this;
+ }
+
+ /**
+ * Sets the creators
+ *
+ * @param array $creators Creators|null
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setCreators($creators)
+ {
+ $this->_creators = $creators;
+ return $this;
+ }
+
+ /**
+ * Sets the dates
+ *
+ * @param array $dates dates
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setDates($dates)
+ {
+ $this->_dates = $dates;
+ return $this;
+ }
+
+ /**
+ * Sets the descriptions
+ *
+ * @param array $descriptions descriptions
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setDescriptions($descriptions)
+ {
+ $this->_descriptions = $descriptions;
+ return $this;
+ }
+
+ /**
+ * Sets the embeddability
+ *
+ * @param Zend_Gdata_Books_Extension_Embeddability|null $embeddability
+ * embeddability
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setEmbeddability($embeddability)
+ {
+ $this->_embeddability = $embeddability;
+ return $this;
+ }
+
+ /**
+ * Sets the formats
+ *
+ * @param array $formats formats
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setFormats($formats)
+ {
+ $this->_formats = $formats;
+ return $this;
+ }
+
+ /**
+ * Sets the identifiers
+ *
+ * @param array $identifiers identifiers
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setIdentifiers($identifiers)
+ {
+ $this->_identifiers = $identifiers;
+ return $this;
+ }
+
+ /**
+ * Sets the languages
+ *
+ * @param array $languages languages
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setLanguages($languages)
+ {
+ $this->_languages = $languages;
+ return $this;
+ }
+
+ /**
+ * Sets the publishers
+ *
+ * @param array $publishers publishers
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setPublishers($publishers)
+ {
+ $this->_publishers = $publishers;
+ return $this;
+ }
+
+ /**
+ * Sets the rating
+ *
+ * @param Zend_Gdata_Extension_Rating|null $rating rating
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setRating($rating)
+ {
+ $this->_rating = $rating;
+ return $this;
+ }
+
+ /**
+ * Sets the review
+ *
+ * @param Zend_Gdata_Books_Extension_Review|null $review review
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setReview($review)
+ {
+ $this->_review = $review;
+ return $this;
+ }
+
+ /**
+ * Sets the subjects
+ *
+ * @param array $subjects subjects
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setSubjects($subjects)
+ {
+ $this->_subjects = $subjects;
+ return $this;
+ }
+
+ /**
+ * Sets the titles
+ *
+ * @param array $titles titles
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setTitles($titles)
+ {
+ $this->_titles = $titles;
+ return $this;
+ }
+
+ /**
+ * Sets the viewability
+ *
+ * @param Zend_Gdata_Books_Extension_Viewability|null $viewability
+ * viewability
+ * @return Zend_Gdata_Books_VolumeEntry Provides a fluent interface
+ */
+ public function setViewability($viewability)
+ {
+ $this->_viewability = $viewability;
+ return $this;
+ }
+
+
+ /**
+ * Gets the volume ID based upon the atom:id value
+ *
+ * @return string The volume ID
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function getVolumeId()
+ {
+ $fullId = $this->getId()->getText();
+ $position = strrpos($fullId, '/');
+ if ($position === false) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Slash not found in atom:id');
+ } else {
+ return substr($fullId, strrpos($fullId,'/') + 1);
+ }
+ }
+
+ /**
+ * Gets the thumbnail link
+ *
+ * @return Zend_Gdata_App_Extension_link|null The thumbnail link
+ */
+ public function getThumbnailLink()
+ {
+ return $this->getLink(self::THUMBNAIL_LINK_REL);
+ }
+
+ /**
+ * Gets the preview link
+ *
+ * @return Zend_Gdata_App_Extension_Link|null The preview link
+ */
+ public function getPreviewLink()
+ {
+ return $this->getLink(self::PREVIEW_LINK_REL);
+ }
+
+ /**
+ * Gets the info link
+ *
+ * @return Zend_Gdata_App_Extension_Link|null The info link
+ */
+ public function getInfoLink()
+ {
+ return $this->getLink(self::INFO_LINK_REL);
+ }
+
+ /**
+ * Gets the annotations link
+ *
+ * @return Zend_Gdata_App_Extension_Link|null The annotations link
+ */
+ public function getAnnotationLink()
+ {
+ return $this->getLink(self::ANNOTATION_LINK_REL);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Books/VolumeFeed.php b/zend/library/Zend/Gdata/Books/VolumeFeed.php
new file mode 100644
index 0000000..57c259b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/VolumeFeed.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: VolumeFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * Describes a Book Search volume feed
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_VolumeFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * Constructor for Zend_Gdata_Books_VolumeFeed which
+ * Describes a Book Search volume feed
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Books::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Books_VolumeEntry';
+
+}
+
diff --git a/zend/library/Zend/Gdata/Books/VolumeQuery.php b/zend/library/Zend/Gdata/Books/VolumeQuery.php
new file mode 100755
index 0000000..6d57aa4
--- /dev/null
+++ b/zend/library/Zend/Gdata/Books/VolumeQuery.php
@@ -0,0 +1,112 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: VolumeQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_Books
+ */
+require_once('Zend/Gdata/Books.php');
+
+/**
+ * Zend_Gdata_Query
+ */
+require_once('Zend/Gdata/Query.php');
+
+/**
+ * Assists in constructing queries for Books volumes
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Books
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Books_VolumeQuery extends Zend_Gdata_Query
+{
+
+ /**
+ * Create Gdata_Books_VolumeQuery object
+ *
+ * @param string|null $url If non-null, pre-initializes the instance to
+ * use a given URL.
+ */
+ public function __construct($url = null)
+ {
+ parent::__construct($url);
+ }
+
+ /**
+ * Sets the minimum level of viewability of volumes to return in the search results
+ *
+ * @param string|null $value The minimum viewability - 'full' or 'partial'
+ * @return Zend_Gdata_Books_VolumeQuery Provides a fluent interface
+ */
+ public function setMinViewability($value = null)
+ {
+ switch ($value) {
+ case 'full_view':
+ $this->_params['min-viewability'] = 'full';
+ break;
+ case 'partial_view':
+ $this->_params['min-viewability'] = 'partial';
+ break;
+ case null:
+ unset($this->_params['min-viewability']);
+ break;
+ }
+ return $this;
+ }
+
+ /**
+ * Minimum viewability of volumes to include in search results
+ *
+ * @return string|null min-viewability
+ */
+ public function getMinViewability()
+ {
+ if (array_key_exists('min-viewability', $this->_params)) {
+ return $this->_params['min-viewability'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the generated full query URL
+ *
+ * @return string The URL
+ */
+ public function getQueryUrl()
+ {
+ if (isset($this->_url)) {
+ $url = $this->_url;
+ } else {
+ $url = Zend_Gdata_Books::VOLUME_FEED_URI;
+ }
+ if ($this->getCategory() !== null) {
+ $url .= '/-/' . $this->getCategory();
+ }
+ $url = $url . $this->getQueryString();
+ return $url;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar.php b/zend/library/Zend/Gdata/Calendar.php
new file mode 100644
index 0000000..d7ca897
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar.php
@@ -0,0 +1,169 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Calendar.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * @see Zend_Gdata_Calendar_EventFeed
+ */
+require_once 'Zend/Gdata/Calendar/EventFeed.php';
+
+/**
+ * @see Zend_Gdata_Calendar_EventEntry
+ */
+require_once 'Zend/Gdata/Calendar/EventEntry.php';
+
+/**
+ * @see Zend_Gdata_Calendar_ListFeed
+ */
+require_once 'Zend/Gdata/Calendar/ListFeed.php';
+
+/**
+ * @see Zend_Gdata_Calendar_ListEntry
+ */
+require_once 'Zend/Gdata/Calendar/ListEntry.php';
+
+/**
+ * Service class for interacting with the Google Calendar data API
+ * @link http://code.google.com/apis/gdata/calendar.html
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar extends Zend_Gdata
+{
+
+ const CALENDAR_FEED_URI = 'https://www.google.com/calendar/feeds';
+ const CALENDAR_EVENT_FEED_URI = 'https://www.google.com/calendar/feeds/default/private/full';
+ const AUTH_SERVICE_NAME = 'cl';
+
+ protected $_defaultPostUri = self::CALENDAR_EVENT_FEED_URI;
+
+ /**
+ * Namespaces used for Zend_Gdata_Calendar
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('gCal', 'http://schemas.google.com/gCal/2005', 1, 0)
+ );
+
+ /**
+ * Create Gdata_Calendar object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Calendar');
+ $this->registerPackage('Zend_Gdata_Calendar_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Retreive feed object
+ *
+ * @param mixed $location The location for the feed, as a URL or Query
+ * @return Zend_Gdata_Calendar_EventFeed
+ */
+ public function getCalendarEventFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::CALENDAR_EVENT_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Calendar_EventFeed');
+ }
+
+ /**
+ * Retreive entry object
+ *
+ * @return Zend_Gdata_Calendar_EventEntry
+ */
+ public function getCalendarEventEntry($location = null)
+ {
+ if ($location == null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Calendar_EventEntry');
+ }
+
+
+ /**
+ * Retrieve feed object
+ *
+ * @return Zend_Gdata_Calendar_ListFeed
+ */
+ public function getCalendarListFeed()
+ {
+ $uri = self::CALENDAR_FEED_URI . '/default';
+ return parent::getFeed($uri,'Zend_Gdata_Calendar_ListFeed');
+ }
+
+ /**
+ * Retreive entryobject
+ *
+ * @return Zend_Gdata_Calendar_ListEntry
+ */
+ public function getCalendarListEntry($location = null)
+ {
+ if ($location == null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri,'Zend_Gdata_Calendar_ListEntry');
+ }
+
+ public function insertEvent($event, $uri=null)
+ {
+ if ($uri == null) {
+ $uri = $this->_defaultPostUri;
+ }
+ $newEvent = $this->insertEntry($event, $uri, 'Zend_Gdata_Calendar_EventEntry');
+ return $newEvent;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/EventEntry.php b/zend/library/Zend/Gdata/Calendar/EventEntry.php
new file mode 100644
index 0000000..00544d6
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/EventEntry.php
@@ -0,0 +1,164 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EventEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Kind_EventEntry
+ */
+require_once 'Zend/Gdata/Kind/EventEntry.php';
+
+/**
+ * @see Zend_Gdata_Calendar_Extension_SendEventNotifications
+ */
+require_once 'Zend/Gdata/Calendar/Extension/SendEventNotifications.php';
+
+/**
+ * @see Zend_Gdata_Calendar_Extension_Timezone
+ */
+require_once 'Zend/Gdata/Calendar/Extension/Timezone.php';
+
+/**
+ * @see Zend_Gdata_Calendar_Extension_Link
+ */
+require_once 'Zend/Gdata/Calendar/Extension/Link.php';
+
+/**
+ * @see Zend_Gdata_Calendar_Extension_QuickAdd
+ */
+require_once 'Zend/Gdata/Calendar/Extension/QuickAdd.php';
+
+/**
+ * Data model class for a Google Calendar Event Entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_EventEntry extends Zend_Gdata_Kind_EventEntry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Calendar_EventEntry';
+ protected $_sendEventNotifications = null;
+ protected $_timezone = null;
+ protected $_quickadd = null;
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_sendEventNotifications != null) {
+ $element->appendChild($this->_sendEventNotifications->getDOM($element->ownerDocument));
+ }
+ if ($this->_timezone != null) {
+ $element->appendChild($this->_timezone->getDOM($element->ownerDocument));
+ }
+ if ($this->_quickadd != null) {
+ $element->appendChild($this->_quickadd->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'sendEventNotifications';
+ $sendEventNotifications = new Zend_Gdata_Calendar_Extension_SendEventNotifications();
+ $sendEventNotifications->transferFromDOM($child);
+ $this->_sendEventNotifications = $sendEventNotifications;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'timezone';
+ $timezone = new Zend_Gdata_Calendar_Extension_Timezone();
+ $timezone->transferFromDOM($child);
+ $this->_timezone = $timezone;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'link';
+ $link = new Zend_Gdata_Calendar_Extension_Link();
+ $link->transferFromDOM($child);
+ $this->_link[] = $link;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'quickadd';
+ $quickadd = new Zend_Gdata_Calendar_Extension_QuickAdd();
+ $quickadd->transferFromDOM($child);
+ $this->_quickadd = $quickadd;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getSendEventNotifications()
+ {
+ return $this->_sendEventNotifications;
+ }
+
+ public function setSendEventNotifications($value)
+ {
+ $this->_sendEventNotifications = $value;
+ return $this;
+ }
+
+ public function getTimezone()
+ {
+ return $this->_timezone;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Timezone $value
+ * @return Zend_Gdata_Extension_EventEntry Provides a fluent interface
+ */
+ public function setTimezone($value)
+ {
+ $this->_timezone = $value;
+ return $this;
+ }
+
+ public function getQuickAdd()
+ {
+ return $this->_quickadd;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_QuickAdd $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setQuickAdd($value)
+ {
+ $this->_quickadd = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/EventFeed.php b/zend/library/Zend/Gdata/Calendar/EventFeed.php
new file mode 100644
index 0000000..8aad167
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/EventFeed.php
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EventFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Extension_Timezone
+ */
+require_once 'Zend/Gdata/Calendar/Extension/Timezone.php';
+
+/**
+ * Data model for a Google Calendar feed of events
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_EventFeed extends Zend_Gdata_Feed
+{
+
+ protected $_timezone = null;
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Calendar_EventEntry';
+
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Calendar_EventFeed';
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_timezone != null) {
+ $element->appendChild($this->_timezone->getDOM($element->ownerDocument));
+ }
+
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'timezone';
+ $timezone = new Zend_Gdata_Calendar_Extension_Timezone();
+ $timezone->transferFromDOM($child);
+ $this->_timezone = $timezone;
+ break;
+
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getTimezone()
+ {
+ return $this->_timezone;
+ }
+
+ public function setTimezone($value)
+ {
+ $this->_timezone = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/EventQuery.php b/zend/library/Zend/Gdata/Calendar/EventQuery.php
new file mode 100644
index 0000000..c965e0c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/EventQuery.php
@@ -0,0 +1,491 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EventQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App_util
+ */
+require_once('Zend/Gdata/App/Util.php');
+
+/**
+ * Zend_Gdata_Query
+ */
+require_once('Zend/Gdata/Query.php');
+
+/**
+ * Assists in constructing queries for Google Calendar events
+ *
+ * @link http://code.google.com/apis/gdata/calendar/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_EventQuery extends Zend_Gdata_Query
+{
+
+ const CALENDAR_FEED_URI = 'https://www.google.com/calendar/feeds';
+
+ /**
+ * The default URI used for feeds.
+ */
+ protected $_defaultFeedUri = self::CALENDAR_FEED_URI;
+
+ /**
+ * The comment ID to retrieve. If null, no specific comment will be
+ * retrieved unless already included in the query URI. The event ID
+ * ($_event) must be set, otherwise this property is ignored.
+ */
+ protected $_comments = null;
+
+ /**
+ * The calendar address to be requested by queries. This may be an email
+ * address if requesting the primary calendar for a user. Defaults to
+ * "default" (the currently authenticated user). A null value should be
+ * used when the calendar address has already been set as part of the
+ * query URI.
+ */
+ protected $_user = 'default';
+
+ /*
+ * The visibility to be requested by queries. Defaults to "public". A
+ * null value should be used when the calendar address has already been
+ * set as part of the query URI.
+ */
+ protected $_visibility = 'public';
+
+ /**
+ * Projection to be requested by queries. Defaults to "full". A null value
+ * should be used when the calendar address has already been set as part
+ * of the query URI.
+ */
+ protected $_projection = 'full';
+
+ /**
+ * The event ID to retrieve. If null, no specific event will be retrieved
+ * unless already included in the query URI.
+ */
+ protected $_event = null;
+
+ /**
+ * Create Gdata_Calendar_EventQuery object. If a URL is provided,
+ * it becomes the base URL, and additional URL components may be
+ * appended. For instance, if $url is 'https://www.google.com/calendar',
+ * the default URL constructed will be
+ * 'https://www.google.com/calendar/default/public/full'.
+ *
+ * If the URL already contains a calendar ID, projection, visibility,
+ * event ID, or comment ID, you will need to set these fields to null
+ * to prevent them from being inserted. See this class's properties for
+ * more information.
+ *
+ * @param string $url The URL to use as the base path for requests
+ */
+ public function __construct($url = null)
+ {
+ parent::__construct($url);
+ }
+
+ /**
+ * @see $_comments
+ * @param string $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setComments($value)
+ {
+ $this->_comments = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_event
+ * @param string $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setEvent($value)
+ {
+ $this->_event = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_projection
+ * @param string $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_user
+ * @param string $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setUser($value)
+ {
+ $this->_user = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_visibility
+ * @param bool $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * @see $_comments;
+ * @return string comments
+ */
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * @see $_event;
+ * @return string event
+ */
+ public function getEvent()
+ {
+ return $this->_event;
+ }
+
+ /**
+ * @see $_projection
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * @see $_user
+ * @return string user
+ */
+ public function getUser()
+ {
+ return $this->_user;
+ }
+
+ /**
+ * @see $_visibility
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setStartMax($value)
+ {
+ if ($value != null) {
+ $this->_params['start-max'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['start-max']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setStartMin($value)
+ {
+ if ($value != null) {
+ $this->_params['start-min'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['start-min']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setOrderBy($value)
+ {
+ if ($value != null) {
+ $this->_params['orderby'] = $value;
+ } else {
+ unset($this->_params['orderby']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return int start-max
+ */
+ public function getStartMax()
+ {
+ if (array_key_exists('start-max', $this->_params)) {
+ return $this->_params['start-max'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return int start-min
+ */
+ public function getStartMin()
+ {
+ if (array_key_exists('start-min', $this->_params)) {
+ return $this->_params['start-min'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string orderby
+ */
+ public function getOrderBy()
+ {
+ if (array_key_exists('orderby', $this->_params)) {
+ return $this->_params['orderby'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string sortorder
+ */
+ public function getSortOrder()
+ {
+ if (array_key_exists('sortorder', $this->_params)) {
+ return $this->_params['sortorder'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string sortorder
+ */
+ public function setSortOrder($value)
+ {
+ if ($value != null) {
+ $this->_params['sortorder'] = $value;
+ } else {
+ unset($this->_params['sortorder']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return string recurrence-expansion-start
+ */
+ public function getRecurrenceExpansionStart()
+ {
+ if (array_key_exists('recurrence-expansion-start', $this->_params)) {
+ return $this->_params['recurrence-expansion-start'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string recurrence-expansion-start
+ */
+ public function setRecurrenceExpansionStart($value)
+ {
+ if ($value != null) {
+ $this->_params['recurrence-expansion-start'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['recurrence-expansion-start']);
+ }
+ return $this;
+ }
+
+
+ /**
+ * @return string recurrence-expansion-end
+ */
+ public function getRecurrenceExpansionEnd()
+ {
+ if (array_key_exists('recurrence-expansion-end', $this->_params)) {
+ return $this->_params['recurrence-expansion-end'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string recurrence-expansion-end
+ */
+ public function setRecurrenceExpansionEnd($value)
+ {
+ if ($value != null) {
+ $this->_params['recurrence-expansion-end'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['recurrence-expansion-end']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value Also accepts bools.
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function getSingleEvents()
+ {
+ if (array_key_exists('singleevents', $this->_params)) {
+ $value = $this->_params['singleevents'];
+ switch ($value) {
+ case 'true':
+ return true;
+ break;
+ case 'false':
+ return false;
+ break;
+ default:
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Invalid query param value for futureevents: ' .
+ $value . ' It must be a boolean.');
+ }
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param string $value Also accepts bools. If using a string, must be either "true" or "false".
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setSingleEvents($value)
+ {
+ if ($value !== null) {
+ if (is_bool($value)) {
+ $this->_params['singleevents'] = ($value?'true':'false');
+ } elseif ($value == 'true' | $value == 'false') {
+ $this->_params['singleevents'] = $value;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Invalid query param value for futureevents: ' .
+ $value . ' It must be a boolean.');
+ }
+ } else {
+ unset($this->_params['singleevents']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return string futureevents
+ */
+ public function getFutureEvents()
+ {
+ if (array_key_exists('futureevents', $this->_params)) {
+ $value = $this->_params['futureevents'];
+ switch ($value) {
+ case 'true':
+ return true;
+ break;
+ case 'false':
+ return false;
+ break;
+ default:
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Invalid query param value for futureevents: ' .
+ $value . ' It must be a boolean.');
+ }
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param string $value Also accepts bools. If using a string, must be either "true" or "false" or
+ * an exception will be thrown on retrieval.
+ * @return Zend_Gdata_Calendar_EventQuery Provides a fluent interface
+ */
+ public function setFutureEvents($value)
+ {
+ if ($value !== null) {
+ if (is_bool($value)) {
+ $this->_params['futureevents'] = ($value?'true':'false');
+ } elseif ($value == 'true' | $value == 'false') {
+ $this->_params['futureevents'] = $value;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Invalid query param value for futureevents: ' .
+ $value . ' It must be a boolean.');
+ }
+ } else {
+ unset($this->_params['futureevents']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ if (isset($this->_url)) {
+ $uri = $this->_url;
+ } else {
+ $uri = $this->_defaultFeedUri;
+ }
+ if ($this->getUser() != null) {
+ $uri .= '/' . $this->getUser();
+ }
+ if ($this->getVisibility() != null) {
+ $uri .= '/' . $this->getVisibility();
+ }
+ if ($this->getProjection() != null) {
+ $uri .= '/' . $this->getProjection();
+ }
+ if ($this->getEvent() != null) {
+ $uri .= '/' . $this->getEvent();
+ if ($this->getComments() != null) {
+ $uri .= '/comments/' . $this->getComments();
+ }
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/Extension/AccessLevel.php b/zend/library/Zend/Gdata/Calendar/Extension/AccessLevel.php
new file mode 100644
index 0000000..1c734de
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/Extension/AccessLevel.php
@@ -0,0 +1,125 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AccessLevel.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the gCal:accessLevel element used by the Calendar data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_Extension_AccessLevel extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gCal';
+ protected $_rootElement = 'accesslevel';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_AccessLevel object.
+ * @param string $value (optional) The text content of the element.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value != null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The attribute being modified.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Selected The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/Extension/Color.php b/zend/library/Zend/Gdata/Calendar/Extension/Color.php
new file mode 100644
index 0000000..601667e
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/Extension/Color.php
@@ -0,0 +1,125 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Color.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the gCal:color element used by the Calendar data API
+ * to define the color of a calendar in the UI.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_Extension_Color extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gCal';
+ protected $_rootElement = 'color';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_Color object.
+ * @param string $value (optional) The text content of the element.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value != null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Color The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->_value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/Extension/Hidden.php b/zend/library/Zend/Gdata/Calendar/Extension/Hidden.php
new file mode 100644
index 0000000..0973008
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/Extension/Hidden.php
@@ -0,0 +1,134 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Hidden.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the gCal:hidden element used by the Calendar data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_Extension_Hidden extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gCal';
+ protected $_rootElement = 'hidden';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_Hidden object.
+ * @param bool $value (optional) The value of the element.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', ($this->_value ? "true" : "false"));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ if ($attribute->nodeValue == "true") {
+ $this->_value = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_value = false;
+ }
+ else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Hidden The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->_value;
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Calendar/Extension/Link.php b/zend/library/Zend/Gdata/Calendar/Extension/Link.php
new file mode 100644
index 0000000..f297323
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/Extension/Link.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Link.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/App/Extension/Link.php';
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Calendar/Extension/WebContent.php';
+
+
+/**
+ * Specialized Link class for use with Calendar. Enables use of gCal extension elements.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_Extension_Link extends Zend_Gdata_App_Extension_Link
+{
+
+ protected $_webContent = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_Link object.
+ * @see Zend_Gdata_App_Extension_Link#__construct
+ * @param Zend_Gdata_Calendar_Extension_Webcontent $webContent
+ */
+ public function __construct($href = null, $rel = null, $type = null,
+ $hrefLang = null, $title = null, $length = null, $webContent = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ $this->_webContent = $webContent;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_webContent != null) {
+ $element->appendChild($this->_webContent->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'webContent':
+ $webContent = new Zend_Gdata_Calendar_Extension_WebContent();
+ $webContent->transferFromDOM($child);
+ $this->_webContent = $webContent;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's WebContent attribute.
+ *
+ * @return Zend_Gdata_Calendar_Extension_Webcontent The WebContent value
+ */
+ public function getWebContent()
+ {
+ return $this->_webContent;
+ }
+
+ /**
+ * Set the value for this element's WebContent attribute.
+ *
+ * @param Zend_Gdata_Calendar_Extension_WebContent $value The desired value for this attribute.
+ * @return Zend_Calendar_Extension_Link The element being modified. Provides a fluent interface.
+ */
+ public function setWebContent($value)
+ {
+ $this->_webContent = $value;
+ return $this;
+ }
+
+
+}
+
diff --git a/zend/library/Zend/Gdata/Calendar/Extension/QuickAdd.php b/zend/library/Zend/Gdata/Calendar/Extension/QuickAdd.php
new file mode 100644
index 0000000..ce095f3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/Extension/QuickAdd.php
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: QuickAdd.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the gCal:quickAdd element used by the Calendar data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_Extension_QuickAdd extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gCal';
+ protected $_rootElement = 'quickadd';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_QuickAdd object.
+ * @param string $value (optional) The text content of the element.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', ($this->_value ? "true" : "false"));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ if ($attribute->nodeValue == "true") {
+ $this->_value = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_value = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_QuickAdd The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/Extension/Selected.php b/zend/library/Zend/Gdata/Calendar/Extension/Selected.php
new file mode 100644
index 0000000..44e66ac
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/Extension/Selected.php
@@ -0,0 +1,133 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Selected.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the gCal:selected element used by the Calendar data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_Extension_Selected extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gCal';
+ protected $_rootElement = 'selected';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_Selected object.
+ * @param bool $value (optional) The value of the element.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', ($this->_value ? "true" : "false"));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ if ($attribute->nodeValue == "true") {
+ $this->_value = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_value = false;
+ }
+ else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return bool The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Selected The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->_value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/Extension/SendEventNotifications.php b/zend/library/Zend/Gdata/Calendar/Extension/SendEventNotifications.php
new file mode 100644
index 0000000..453559d
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/Extension/SendEventNotifications.php
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: SendEventNotifications.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Data model class to represent an entry's sendEventNotifications
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_Extension_SendEventNotifications extends Zend_Gdata_Extension
+{
+ protected $_rootNamespace = 'gCal';
+ protected $_rootElement = 'sendEventNotifications';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Extension_SendEventNotifications object.
+ * @param bool $value (optional) SendEventNotifications value as URI.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', ($this->_value ? "true" : "false"));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ if ($attribute->nodeValue == "true") {
+ $this->_value = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_value = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_SendEventNotifications The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Calendar/Extension/Timezone.php b/zend/library/Zend/Gdata/Calendar/Extension/Timezone.php
new file mode 100644
index 0000000..7cc2fad
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/Extension/Timezone.php
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Timezone.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the gCal:timezone element used by the Calendar data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_Extension_Timezone extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gCal';
+ protected $_rootElement = 'timezone';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_Timezone object.
+ * @param string $value (optional) The text content of the element.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value != null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return string The value associated with this attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_Timezone The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/Extension/WebContent.php b/zend/library/Zend/Gdata/Calendar/Extension/WebContent.php
new file mode 100644
index 0000000..cb33999
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/Extension/WebContent.php
@@ -0,0 +1,177 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: WebContent.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the gCal:webContent element used by the Calendar data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_Extension_WebContent extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootNamespace = 'gCal';
+ protected $_rootElement = 'webContent';
+ protected $_url = null;
+ protected $_height = null;
+ protected $_width = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_WebContent object.
+ * @param string $url (optional) The value for this element's URL attribute.
+ * @param string $height (optional) The value for this element's height attribute.
+ * @param string $width (optional) The value for this element's width attribute.
+ */
+ public function __construct($url = null, $height = null, $width = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct();
+ $this->_url = $url;
+ $this->_height = $height;
+ $this->_width = $width;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->url != null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ if ($this->height != null) {
+ $element->setAttribute('height', $this->_height);
+ }
+ if ($this->width != null) {
+ $element->setAttribute('width', $this->_width);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ case 'height':
+ $this->_height = $attribute->nodeValue;
+ break;
+ case 'width':
+ $this->_width = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's URL attribute.
+ *
+ * @return string The desired value for this attribute.
+ */
+ public function getURL()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * Set the value for this element's URL attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_WebContent The element being modified.
+ */
+ public function setURL($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's height attribute.
+ *
+ * @return int The desired value for this attribute.
+ */
+ public function getHeight()
+ {
+ return $this->_height;
+ }
+
+ /**
+ * Set the value for this element's height attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_WebContent The element being modified.
+ */
+ public function setHeight($value)
+ {
+ $this->_height = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's height attribute.
+ *
+ * @return int The desired value for this attribute.
+ */
+ public function getWidth()
+ {
+ return $this->_width;
+ }
+
+ /**
+ * Set the value for this element's height attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_Calendar_Extension_WebContent The element being modified.
+ */
+ public function setWidth($value)
+ {
+ $this->_width = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/ListEntry.php b/zend/library/Zend/Gdata/Calendar/ListEntry.php
new file mode 100644
index 0000000..eb7ecab
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/ListEntry.php
@@ -0,0 +1,246 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ListEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Calendar_Extension_AccessLevel
+ */
+require_once 'Zend/Gdata/Calendar/Extension/AccessLevel.php';
+
+/**
+ * @see Zend_Calendar_Extension_Color
+ */
+require_once 'Zend/Gdata/Calendar/Extension/Color.php';
+
+/**
+ * @see Zend_Calendar_Extension_Hidden
+ */
+require_once 'Zend/Gdata/Calendar/Extension/Hidden.php';
+
+/**
+ * @see Zend_Calendar_Extension_Selected
+ */
+require_once 'Zend/Gdata/Calendar/Extension/Selected.php';
+
+/**
+ * @see Zend_Gdata_Extension_EventStatus
+ */
+require_once 'Zend/Gdata/Extension/EventStatus.php';
+
+/**
+ * @see Zend_Gdata_Extension_Visibility
+ */
+require_once 'Zend/Gdata/Extension/Visibility.php';
+
+
+/**
+ * @see Zend_Extension_Where
+ */
+require_once 'Zend/Gdata/Extension/Where.php';
+
+/**
+ * Represents a Calendar entry in the Calendar data API meta feed of a user's
+ * calendars.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_ListEntry extends Zend_Gdata_Entry
+{
+
+ protected $_color = null;
+ protected $_accessLevel = null;
+ protected $_hidden = null;
+ protected $_selected = null;
+ protected $_timezone = null;
+ protected $_where = array();
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_accessLevel != null) {
+ $element->appendChild($this->_accessLevel->getDOM($element->ownerDocument));
+ }
+ if ($this->_color != null) {
+ $element->appendChild($this->_color->getDOM($element->ownerDocument));
+ }
+ if ($this->_hidden != null) {
+ $element->appendChild($this->_hidden->getDOM($element->ownerDocument));
+ }
+ if ($this->_selected != null) {
+ $element->appendChild($this->_selected->getDOM($element->ownerDocument));
+ }
+ if ($this->_timezone != null) {
+ $element->appendChild($this->_timezone->getDOM($element->ownerDocument));
+ }
+ if ($this->_where != null) {
+ foreach ($this->_where as $where) {
+ $element->appendChild($where->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'accesslevel';
+ $accessLevel = new Zend_Gdata_Calendar_Extension_AccessLevel();
+ $accessLevel->transferFromDOM($child);
+ $this->_accessLevel = $accessLevel;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'color';
+ $color = new Zend_Gdata_Calendar_Extension_Color();
+ $color->transferFromDOM($child);
+ $this->_color = $color;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'hidden';
+ $hidden = new Zend_Gdata_Calendar_Extension_Hidden();
+ $hidden->transferFromDOM($child);
+ $this->_hidden = $hidden;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'selected';
+ $selected = new Zend_Gdata_Calendar_Extension_Selected();
+ $selected->transferFromDOM($child);
+ $this->_selected = $selected;
+ break;
+ case $this->lookupNamespace('gCal') . ':' . 'timezone';
+ $timezone = new Zend_Gdata_Calendar_Extension_Timezone();
+ $timezone->transferFromDOM($child);
+ $this->_timezone = $timezone;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'where';
+ $where = new Zend_Gdata_Extension_Where();
+ $where->transferFromDOM($child);
+ $this->_where[] = $where;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getAccessLevel()
+ {
+ return $this->_accessLevel;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_AccessLevel $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setAccessLevel($value)
+ {
+ $this->_accessLevel = $value;
+ return $this;
+ }
+ public function getColor()
+ {
+ return $this->_color;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Color $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setColor($value)
+ {
+ $this->_color = $value;
+ return $this;
+ }
+
+ public function getHidden()
+ {
+ return $this->_hidden;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Hidden $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setHidden($value)
+ {
+ $this->_hidden = $value;
+ return $this;
+ }
+
+ public function getSelected()
+ {
+ return $this->_selected;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Selected $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setSelected($value)
+ {
+ $this->_selected = $value;
+ return $this;
+ }
+
+ public function getTimezone()
+ {
+ return $this->_timezone;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Timezone $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setTimezone($value)
+ {
+ $this->_timezone = $value;
+ return $this;
+ }
+
+ public function getWhere()
+ {
+ return $this->_where;
+ }
+
+ /**
+ * @param Zend_Gdata_Extension_Where $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setWhere($value)
+ {
+ $this->_where = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Calendar/ListFeed.php b/zend/library/Zend/Gdata/Calendar/ListFeed.php
new file mode 100644
index 0000000..a9aa0f0
--- /dev/null
+++ b/zend/library/Zend/Gdata/Calendar/ListFeed.php
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ListFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Extension_Timezone
+ */
+require_once 'Zend/Gdata/Calendar/Extension/Timezone.php';
+
+/**
+ * Represents the meta-feed list of calendars
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Calendar
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Calendar_ListFeed extends Zend_Gdata_Feed
+{
+ protected $_timezone = null;
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Calendar_ListEntry';
+
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Calendar_ListFeed';
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Calendar::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_timezone != null) {
+ $element->appendChild($this->_timezone->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gCal') . ':' . 'timezone';
+ $timezone = new Zend_Gdata_Calendar_Extension_Timezone();
+ $timezone->transferFromDOM($child);
+ $this->_timezone = $timezone;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getTimezone()
+ {
+ return $this->_timezone;
+ }
+
+ /**
+ * @param Zend_Gdata_Calendar_Extension_Timezone $value
+ * @return Zend_Gdata_Extension_ListEntry Provides a fluent interface
+ */
+ public function setTimezone($value)
+ {
+ $this->_timezone = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/ClientLogin.php b/zend/library/Zend/Gdata/ClientLogin.php
new file mode 100644
index 0000000..2c8fbc2
--- /dev/null
+++ b/zend/library/Zend/Gdata/ClientLogin.php
@@ -0,0 +1,182 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ClientLogin.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_HttpClient
+ */
+require_once 'Zend/Gdata/HttpClient.php';
+
+/**
+ * Zend_Version
+ */
+require_once 'Zend/Version.php';
+
+/**
+ * Class to facilitate Google's "Account Authentication
+ * for Installed Applications" also known as "ClientLogin".
+ * @see http://code.google.com/apis/accounts/AuthForInstalledApps.html
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_ClientLogin
+{
+
+ /**
+ * The Google client login URI
+ *
+ */
+ const CLIENTLOGIN_URI = 'https://www.google.com/accounts/ClientLogin';
+
+ /**
+ * The default 'source' parameter to send to Google
+ *
+ */
+ const DEFAULT_SOURCE = 'Zend-ZendFramework';
+
+ /**
+ * Set Google authentication credentials.
+ * Must be done before trying to do any Google Data operations that
+ * require authentication.
+ * For example, viewing private data, or posting or deleting entries.
+ *
+ * @param string $email
+ * @param string $password
+ * @param string $service
+ * @param Zend_Gdata_HttpClient $client
+ * @param string $source
+ * @param string $loginToken The token identifier as provided by the server.
+ * @param string $loginCaptcha The user's response to the CAPTCHA challenge.
+ * @param string $accountType An optional string to identify whether the
+ * account to be authenticated is a google or a hosted account. Defaults to
+ * 'HOSTED_OR_GOOGLE'. See: http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html#Request
+ * @throws Zend_Gdata_App_AuthException
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_CaptchaRequiredException
+ * @return Zend_Gdata_HttpClient
+ */
+ public static function getHttpClient($email, $password, $service = 'xapi',
+ $client = null,
+ $source = self::DEFAULT_SOURCE,
+ $loginToken = null,
+ $loginCaptcha = null,
+ $loginUri = self::CLIENTLOGIN_URI,
+ $accountType = 'HOSTED_OR_GOOGLE')
+ {
+ if (! ($email && $password)) {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException(
+ 'Please set your Google credentials before trying to ' .
+ 'authenticate');
+ }
+
+ if ($client == null) {
+ $client = new Zend_Gdata_HttpClient();
+ }
+ if (!$client instanceof Zend_Http_Client) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException(
+ 'Client is not an instance of Zend_Http_Client.');
+ }
+
+ // Build the HTTP client for authentication
+ $client->setUri($loginUri);
+ $useragent = $source . ' Zend_Framework_Gdata/' . Zend_Version::VERSION;
+ $client->setConfig(array(
+ 'maxredirects' => 0,
+ 'strictredirects' => true,
+ 'useragent' => $useragent
+ )
+ );
+ $client->setParameterPost('accountType', $accountType);
+ $client->setParameterPost('Email', (string) $email);
+ $client->setParameterPost('Passwd', (string) $password);
+ $client->setParameterPost('service', (string) $service);
+ $client->setParameterPost('source', (string) $source);
+ if ($loginToken || $loginCaptcha) {
+ if($loginToken && $loginCaptcha) {
+ $client->setParameterPost('logintoken', (string) $loginToken);
+ $client->setParameterPost('logincaptcha',
+ (string) $loginCaptcha);
+ }
+ else {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException(
+ 'Please provide both a token ID and a user\'s response ' .
+ 'to the CAPTCHA challenge.');
+ }
+ }
+
+ // Send the authentication request
+ // For some reason Google's server causes an SSL error. We use the
+ // output buffer to supress an error from being shown. Ugly - but works!
+ ob_start();
+ try {
+ $response = $client->request('POST');
+ } catch (Zend_Http_Client_Exception $e) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException($e->getMessage(), $e);
+ }
+ ob_end_clean();
+
+ // Parse Google's response
+ $goog_resp = array();
+ foreach (explode("\n", $response->getBody()) as $l) {
+ $l = chop($l);
+ if ($l) {
+ list($key, $val) = explode('=', chop($l), 2);
+ $goog_resp[$key] = $val;
+ }
+ }
+
+ if ($response->getStatus() == 200) {
+ $client->setClientLoginToken($goog_resp['Auth']);
+ $useragent = $source . ' Zend_Framework_Gdata/' . Zend_Version::VERSION;
+ $client->setConfig(array(
+ 'strictredirects' => true,
+ 'useragent' => $useragent
+ )
+ );
+ return $client;
+
+ } elseif ($response->getStatus() == 403) {
+ // Check if the server asked for a CAPTCHA
+ if (array_key_exists('Error', $goog_resp) &&
+ $goog_resp['Error'] == 'CaptchaRequired') {
+ require_once 'Zend/Gdata/App/CaptchaRequiredException.php';
+ throw new Zend_Gdata_App_CaptchaRequiredException(
+ $goog_resp['CaptchaToken'], $goog_resp['CaptchaUrl']);
+ }
+ else {
+ require_once 'Zend/Gdata/App/AuthException.php';
+ throw new Zend_Gdata_App_AuthException('Authentication with Google failed. Reason: ' .
+ (isset($goog_resp['Error']) ? $goog_resp['Error'] : 'Unspecified.'));
+ }
+ }
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Docs.php b/zend/library/Zend/Gdata/Docs.php
new file mode 100755
index 0000000..8c78efa
--- /dev/null
+++ b/zend/library/Zend/Gdata/Docs.php
@@ -0,0 +1,303 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Docs.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * @see Zend_Gdata_Docs_DocumentListFeed
+ */
+require_once 'Zend/Gdata/Docs/DocumentListFeed.php';
+
+/**
+ * @see Zend_Gdata_Docs_DocumentListEntry
+ */
+require_once 'Zend/Gdata/Docs/DocumentListEntry.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Category
+ */
+require_once 'Zend/Gdata/App/Extension/Category.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Title
+ */
+require_once 'Zend/Gdata/App/Extension/Title.php';
+
+/**
+ * Service class for interacting with the Google Document List data API
+ * @link http://code.google.com/apis/documents/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Docs extends Zend_Gdata
+{
+
+ const DOCUMENTS_LIST_FEED_URI = 'https://docs.google.com/feeds/documents/private/full';
+ const DOCUMENTS_FOLDER_FEED_URI = 'https://docs.google.com/feeds/folders/private/full';
+ const DOCUMENTS_CATEGORY_SCHEMA = 'http://schemas.google.com/g/2005#kind';
+ const DOCUMENTS_CATEGORY_TERM = 'http://schemas.google.com/docs/2007#folder';
+ const AUTH_SERVICE_NAME = 'writely';
+
+ protected $_defaultPostUri = self::DOCUMENTS_LIST_FEED_URI;
+
+ private static $SUPPORTED_FILETYPES = array(
+ 'TXT'=>'text/plain',
+ 'CSV'=>'text/csv',
+ 'TSV'=>'text/tab-separated-values',
+ 'TAB'=>'text/tab-separated-values',
+ 'HTML'=>'text/html',
+ 'HTM'=>'text/html',
+ 'DOC'=>'application/msword',
+ 'ODS'=>'application/vnd.oasis.opendocument.spreadsheet',
+ 'ODT'=>'application/vnd.oasis.opendocument.text',
+ 'RTF'=>'application/rtf',
+ 'SXW'=>'application/vnd.sun.xml.writer',
+ 'XLS'=>'application/vnd.ms-excel',
+ 'XLSX'=>'application/vnd.ms-excel',
+ 'PPT'=>'application/vnd.ms-powerpoint',
+ 'PPS'=>'application/vnd.ms-powerpoint');
+
+ /**
+ * Create Gdata_Docs object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Docs');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Looks up the mime type based on the file name extension. For example,
+ * calling this method with 'csv' would return
+ * 'text/comma-separated-values'. The Mime type is sent as a header in
+ * the upload HTTP POST request.
+ *
+ * @param string $fileExtension
+ * @return string The mime type to be sent to the server to tell it how the
+ * multipart mime data should be interpreted.
+ */
+ public static function lookupMimeType($fileExtension) {
+ return self::$SUPPORTED_FILETYPES[strtoupper($fileExtension)];
+ }
+
+ /**
+ * Retreive feed object containing entries for the user's documents.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query
+ * @return Zend_Gdata_Docs_DocumentListFeed
+ */
+ public function getDocumentListFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = self::DOCUMENTS_LIST_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Docs_DocumentListFeed');
+ }
+
+ /**
+ * Retreive entry object representing a single document.
+ *
+ * @param mixed $location The location for the entry, as a URL or Query
+ * @return Zend_Gdata_Docs_DocumentListEntry
+ */
+ public function getDocumentListEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Docs_DocumentListEntry');
+ }
+
+ /**
+ * Retreive entry object representing a single document.
+ *
+ * This method builds the URL where this item is stored using the type
+ * and the id of the document.
+ * @param string $docId The URL key for the document. Examples:
+ * dcmg89gw_62hfjj8m, pKq0CzjiF3YmGd0AIlHKqeg
+ * @param string $docType The type of the document as used in the Google
+ * Document List URLs. Examples: document, spreadsheet, presentation
+ * @return Zend_Gdata_Docs_DocumentListEntry
+ */
+ public function getDoc($docId, $docType) {
+ $location = 'https://docs.google.com/feeds/documents/private/full/' .
+ $docType . '%3A' . $docId;
+ return $this->getDocumentListEntry($location);
+ }
+
+ /**
+ * Retreive entry object for the desired word processing document.
+ *
+ * @param string $id The URL id for the document. Example:
+ * dcmg89gw_62hfjj8m
+ */
+ public function getDocument($id) {
+ return $this->getDoc($id, 'document');
+ }
+
+ /**
+ * Retreive entry object for the desired spreadsheet.
+ *
+ * @param string $id The URL id for the document. Example:
+ * pKq0CzjiF3YmGd0AIlHKqeg
+ */
+ public function getSpreadsheet($id) {
+ return $this->getDoc($id, 'spreadsheet');
+ }
+
+ /**
+ * Retreive entry object for the desired presentation.
+ *
+ * @param string $id The URL id for the document. Example:
+ * dcmg89gw_21gtrjcn
+ */
+ public function getPresentation($id) {
+ return $this->getDoc($id, 'presentation');
+ }
+
+ /**
+ * Upload a local file to create a new Google Document entry.
+ *
+ * @param string $fileLocation The full or relative path of the file to
+ * be uploaded.
+ * @param string $title The name that this document should have on the
+ * server. If set, the title is used as the slug header in the
+ * POST request. If no title is provided, the location of the
+ * file will be used as the slug header in the request. If no
+ * mimeType is provided, this method attempts to determine the
+ * mime type based on the slugHeader by looking for .doc,
+ * .csv, .txt, etc. at the end of the file name.
+ * Example value: 'test.doc'.
+ * @param string $mimeType Describes the type of data which is being sent
+ * to the server. This must be one of the accepted mime types
+ * which are enumerated in SUPPORTED_FILETYPES.
+ * @param string $uri (optional) The URL to which the upload should be
+ * made.
+ * Example: 'https://docs.google.com/feeds/documents/private/full'.
+ * @return Zend_Gdata_Docs_DocumentListEntry The entry for the newly
+ * created Google Document.
+ */
+ public function uploadFile($fileLocation, $title=null, $mimeType=null,
+ $uri=null)
+ {
+ // Set the URI to which the file will be uploaded.
+ if ($uri === null) {
+ $uri = $this->_defaultPostUri;
+ }
+
+ // Create the media source which describes the file.
+ $fs = $this->newMediaFileSource($fileLocation);
+ if ($title !== null) {
+ $slugHeader = $title;
+ } else {
+ $slugHeader = $fileLocation;
+ }
+
+ // Set the slug header to tell the Google Documents server what the
+ // title of the document should be and what the file extension was
+ // for the original file.
+ $fs->setSlug($slugHeader);
+
+ // Set the mime type of the data.
+ if ($mimeType === null) {
+ $filenameParts = explode('.', $fileLocation);
+ $fileExtension = end($filenameParts);
+ $mimeType = self::lookupMimeType($fileExtension);
+ }
+
+ // Set the mime type for the upload request.
+ $fs->setContentType($mimeType);
+
+ // Send the data to the server.
+ return $this->insertDocument($fs, $uri);
+ }
+
+ /**
+ * Creates a new folder in Google Docs
+ *
+ * @param string $folderName The folder name to create
+ * @param string|null $folderResourceId The parent folder to create it in
+ * ("folder%3Amy_parent_folder")
+ * @return Zend_Gdata_Entry The folder entry created.
+ * @todo ZF-8732: This should return a *subclass* of Zend_Gdata_Entry, but
+ * the appropriate type doesn't exist yet.
+ */
+ public function createFolder($folderName, $folderResourceId=null) {
+ $category = new Zend_Gdata_App_Extension_Category(self::DOCUMENTS_CATEGORY_TERM,
+ self::DOCUMENTS_CATEGORY_SCHEMA);
+ $title = new Zend_Gdata_App_Extension_Title($folderName);
+ $entry = new Zend_Gdata_Entry();
+
+ $entry->setCategory(array($category));
+ $entry->setTitle($title);
+
+ $uri = self::DOCUMENTS_LIST_FEED_URI;
+ if ($folderResourceId != null) {
+ $uri = self::DOCUMENTS_FOLDER_FEED_URI . '/' . $folderResourceId;
+ }
+
+ return $this->insertEntry($entry, $uri);
+ }
+
+ /**
+ * Inserts an entry to a given URI and returns the response as an Entry.
+ *
+ * @param mixed $data The Zend_Gdata_Docs_DocumentListEntry or media
+ * source to post. If it is a DocumentListEntry, the mediaSource
+ * should already have been set. If $data is a mediaSource, it
+ * should have the correct slug header and mime type.
+ * @param string $uri POST URI
+ * @param string $className (optional) The class of entry to be returned.
+ * The default is a 'Zend_Gdata_Docs_DocumentListEntry'.
+ * @return Zend_Gdata_Docs_DocumentListEntry The entry returned by the
+ * service after insertion.
+ */
+ public function insertDocument($data, $uri,
+ $className='Zend_Gdata_Docs_DocumentListEntry')
+ {
+ return $this->insertEntry($data, $uri, $className);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Docs/DocumentListEntry.php b/zend/library/Zend/Gdata/Docs/DocumentListEntry.php
new file mode 100755
index 0000000..4169c52
--- /dev/null
+++ b/zend/library/Zend/Gdata/Docs/DocumentListEntry.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: DocumentListEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_EntryAtom
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * Represents a Documents List entry in the Documents List data API meta feed
+ * of a user's documents.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Docs_DocumentListEntry extends Zend_Gdata_Entry
+{
+
+ /**
+ * Create a new instance of an entry representing a document.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Docs::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Docs/DocumentListFeed.php b/zend/library/Zend/Gdata/Docs/DocumentListFeed.php
new file mode 100755
index 0000000..f68505f
--- /dev/null
+++ b/zend/library/Zend/Gdata/Docs/DocumentListFeed.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: DocumentListFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+
+/**
+ * Data model for a Google Documents List feed of documents
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Docs_DocumentListFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Docs_DocumentListEntry';
+
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Docs_DocumentListFeed';
+
+ /**
+ * Create a new instance of a feed for a list of documents.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Docs::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Docs/Query.php b/zend/library/Zend/Gdata/Docs/Query.php
new file mode 100755
index 0000000..15ce4c9
--- /dev/null
+++ b/zend/library/Zend/Gdata/Docs/Query.php
@@ -0,0 +1,222 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Query.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_Query
+ */
+require_once('Zend/Gdata/Query.php');
+
+/**
+ * Assists in constructing queries for Google Document List documents
+ *
+ * @link http://code.google.com/apis/gdata/spreadsheets/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Docs_Query extends Zend_Gdata_Query
+{
+
+ /**
+ * The base URL for retrieving a document list
+ *
+ * @var string
+ */
+ const DOCUMENTS_LIST_FEED_URI = 'https://docs.google.com/feeds/documents';
+
+ /**
+ * The generic base URL used by some inherited methods
+ *
+ * @var string
+ */
+ protected $_defaultFeedUri = self::DOCUMENTS_LIST_FEED_URI;
+
+ /**
+ * The visibility to be used when querying for the feed. A request for a
+ * feed with private visbility requires the user to be authenricated.
+ * Private is the only avilable visibility for the documents list.
+ *
+ * @var string
+ */
+ protected $_visibility = 'private';
+
+ /**
+ * The projection determines how much detail should be given in the
+ * result of the query. Full is the only valid projection for the
+ * documents list.
+ *
+ * @var string
+ */
+ protected $_projection = 'full';
+
+ /**
+ * Constructs a new instance of a Zend_Gdata_Docs_Query object.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ /**
+ * Sets the projection for this query. Common values for projection
+ * include 'full'.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Docs_Query Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the visibility for this query. Common values for visibility
+ * include 'private'.
+ *
+ * @return Zend_Gdata_Docs_Query Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the projection for this query.
+ *
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Gets the visibility for this query.
+ *
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * Sets the title attribute for this query. The title parameter is used
+ * to restrict the results to documents whose titles either contain or
+ * completely match the title.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Docs_Query Provides a fluent interface
+ */
+ public function setTitle($value)
+ {
+ if ($value !== null) {
+ $this->_params['title'] = $value;
+ } else {
+ unset($this->_params['title']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the title attribute for this query.
+ *
+ * @return string title
+ */
+ public function getTitle()
+ {
+ if (array_key_exists('title', $this->_params)) {
+ return $this->_params['title'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the title-exact attribute for this query.
+ * If title-exact is set to true, the title query parameter will be used
+ * in an exact match. Only documents with a title identical to the
+ * title parameter will be returned.
+ *
+ * @param boolean $value Use either true or false
+ * @return Zend_Gdata_Docs_Query Provides a fluent interface
+ */
+ public function setTitleExact($value)
+ {
+ if ($value) {
+ $this->_params['title-exact'] = $value;
+ } else {
+ unset($this->_params['title-exact']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the title-exact attribute for this query.
+ *
+ * @return string title-exact
+ */
+ public function getTitleExact()
+ {
+ if (array_key_exists('title-exact', $this->_params)) {
+ return $this->_params['title-exact'];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Gets the full query URL for this query.
+ *
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ $uri = $this->_defaultFeedUri;
+
+ if ($this->_visibility !== null) {
+ $uri .= '/' . $this->_visibility;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'A visibility must be provided for cell queries.');
+ }
+
+ if ($this->_projection !== null) {
+ $uri .= '/' . $this->_projection;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'A projection must be provided for cell queries.');
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore.php b/zend/library/Zend/Gdata/DublinCore.php
new file mode 100755
index 0000000..1985eab
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: DublinCore.php 25024 2012-07-30 15:08:15Z rob $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * Service class for interacting with the services which use the
+ * DublinCore extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore extends Zend_Gdata
+{
+
+ /**
+ * Namespaces used for Zend_Gdata_DublinCore
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('dc', 'http://purl.org/dc/terms', 1, 0)
+ );
+
+ /**
+ * Create Zend_Gdata_DublinCore object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_DublinCore');
+ $this->registerPackage('Zend_Gdata_DublinCore_Extension');
+ parent::__construct($client, $applicationId);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Creator.php b/zend/library/Zend/Gdata/DublinCore/Extension/Creator.php
new file mode 100644
index 0000000..2c04df1
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Creator.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Creator.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Entity primarily responsible for making the resource
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Creator extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'creator';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Creator which
+ * Entity primarily responsible for making the resource
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Date.php b/zend/library/Zend/Gdata/DublinCore/Extension/Date.php
new file mode 100644
index 0000000..841840d
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Date.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Date.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Point or period of time associated with an event in the lifecycle of the
+ * resource
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Date extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'date';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Date which
+ * Point or period of time associated with an event in the lifecycle of the
+ * resource
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Description.php b/zend/library/Zend/Gdata/DublinCore/Extension/Description.php
new file mode 100644
index 0000000..05b7ea1
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Description.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Description.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Account of the resource
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Description extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'description';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Description which
+ * Account of the resource
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Format.php b/zend/library/Zend/Gdata/DublinCore/Extension/Format.php
new file mode 100644
index 0000000..8a71efd
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Format.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Format.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * File format, physical medium, or dimensions of the resource
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Format extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'format';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Format which
+ * File format, physical medium, or dimensions of the resource
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Identifier.php b/zend/library/Zend/Gdata/DublinCore/Extension/Identifier.php
new file mode 100644
index 0000000..f69e38f
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Identifier.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Identifier.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * An unambiguous reference to the resource within a given context
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Identifier extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'identifier';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Identifier which
+ * An unambiguous reference to the resource within a given context
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Language.php b/zend/library/Zend/Gdata/DublinCore/Extension/Language.php
new file mode 100644
index 0000000..fab4382
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Language.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Language.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Language of the resource
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Language extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'language';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Language which
+ * Language of the resource
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Publisher.php b/zend/library/Zend/Gdata/DublinCore/Extension/Publisher.php
new file mode 100644
index 0000000..c614572
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Publisher.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Publisher.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Entity responsible for making the resource available
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Publisher extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'publisher';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Publisher which
+ * Entity responsible for making the resource available
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Rights.php b/zend/library/Zend/Gdata/DublinCore/Extension/Rights.php
new file mode 100644
index 0000000..2a5789a
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Rights.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Rights.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Information about rights held in and over the resource
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Rights extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'rights';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Rights which
+ * Information about rights held in and over the resource
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Subject.php b/zend/library/Zend/Gdata/DublinCore/Extension/Subject.php
new file mode 100644
index 0000000..e1ab11e
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Subject.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Subject.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Topic of the resource
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Subject extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'subject';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Subject which
+ * Topic of the resource
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/DublinCore/Extension/Title.php b/zend/library/Zend/Gdata/DublinCore/Extension/Title.php
new file mode 100644
index 0000000..acdad7c
--- /dev/null
+++ b/zend/library/Zend/Gdata/DublinCore/Extension/Title.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Title.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Name given to the resource
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage DublinCore
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_DublinCore_Extension_Title extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'dc';
+ protected $_rootElement = 'title';
+
+ /**
+ * Constructor for Zend_Gdata_DublinCore_Extension_Title which
+ * Name given to the resource
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_DublinCore::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Entry.php b/zend/library/Zend/Gdata/Entry.php
new file mode 100644
index 0000000..fec1fe4
--- /dev/null
+++ b/zend/library/Zend/Gdata/Entry.php
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Entry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * @see Zend_Gdata_App_MediaEntry
+ */
+require_once 'Zend/Gdata/App/MediaEntry.php';
+
+/**
+ * Represents the Gdata flavor of an Atom entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Entry extends Zend_Gdata_App_MediaEntry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Entry';
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ // ETags are special. We only support them in protocol >= 2.X.
+ // This will be duplicated by the HTTP ETag header.
+ if ($majorVersion >= 2) {
+ if ($this->_etag != null) {
+ $element->setAttributeNS($this->lookupNamespace('gd'),
+ 'gd:etag',
+ $this->_etag);
+ }
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'content':
+ $content = new Zend_Gdata_App_Extension_Content();
+ $content->transferFromDOM($child);
+ $this->_content = $content;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'published':
+ $published = new Zend_Gdata_App_Extension_Published();
+ $published->transferFromDOM($child);
+ $this->_published = $published;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'source':
+ $source = new Zend_Gdata_App_Extension_Source();
+ $source->transferFromDOM($child);
+ $this->_source = $source;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'summary':
+ $summary = new Zend_Gdata_App_Extension_Summary();
+ $summary->transferFromDOM($child);
+ $this->_summary = $summary;
+ break;
+ case $this->lookupNamespace('app') . ':' . 'control':
+ $control = new Zend_Gdata_App_Extension_Control();
+ $control->transferFromDOM($child);
+ $this->_control = $control;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'etag':
+ // ETags are special, since they can be conveyed by either the
+ // HTTP ETag header or as an XML attribute.
+ $etag = $attribute->nodeValue;
+ if ($this->_etag === null) {
+ $this->_etag = $etag;
+ }
+ elseif ($this->_etag != $etag) {
+ require_once('Zend/Gdata/App/IOException.php');
+ throw new Zend_Gdata_App_IOException("ETag mismatch");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ break;
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif.php b/zend/library/Zend/Gdata/Exif.php
new file mode 100755
index 0000000..f972e99
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Exif.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * Service class for interacting with the services which use the EXIF extensions
+ * @link http://code.google.com/apis/picasaweb/reference.html#exif_reference
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif extends Zend_Gdata
+{
+
+ /**
+ * Namespaces used for Zend_Gdata_Exif
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('exif', 'http://schemas.google.com/photos/exif/2007', 1, 0)
+ );
+
+ /**
+ * Create Zend_Gdata_Exif object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Exif');
+ $this->registerPackage('Zend_Gdata_Exif_Extension');
+ parent::__construct($client, $applicationId);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Entry.php b/zend/library/Zend/Gdata/Exif/Entry.php
new file mode 100755
index 0000000..fd8ebb4
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Entry.php
@@ -0,0 +1,145 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Entry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_Tags
+ */
+require_once 'Zend/Gdata/Exif/Extension/Tags.php';
+
+/**
+ * An Atom entry containing EXIF metadata.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Entry extends Zend_Gdata_Entry
+{
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Exif_Entry';
+
+ /**
+ * The tags that belong to the Exif group.
+ *
+ * @var string
+ */
+ protected $_tags = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_tags != null) {
+ $element->appendChild($this->_tags->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('exif') . ':' . 'tags':
+ $tags = new Zend_Gdata_Exif_Extension_Tags();
+ $tags->transferFromDOM($child);
+ $this->_tags = $tags;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Retrieve the tags for this entry.
+ *
+ * @see setTags
+ * @return Zend_Gdata_Exif_Extension_Tags The requested object
+ * or null if not set.
+ */
+ public function getTags()
+ {
+ return $this->_tags;
+ }
+
+ /**
+ * Set the tags property for this entry. This property contains
+ * various Exif data.
+ *
+ * This corresponds to the <exif:tags> property in the Google Data
+ * protocol.
+ *
+ * @param Zend_Gdata_Exif_Extension_Tags $value The desired value
+ * this element, or null to unset.
+ * @return Zend_Gdata_Exif_Entry Provides a fluent interface
+ */
+ public function setTags($value)
+ {
+ $this->_tags = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/Distance.php b/zend/library/Zend/Gdata/Exif/Extension/Distance.php
new file mode 100755
index 0000000..5f20753
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/Distance.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Distance.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:distance element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_Distance extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'distance';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_Distance object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/Exposure.php b/zend/library/Zend/Gdata/Exif/Extension/Exposure.php
new file mode 100755
index 0000000..f025985
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/Exposure.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Exposure.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:exposure element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_Exposure extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'exposure';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_Exposure object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/FStop.php b/zend/library/Zend/Gdata/Exif/Extension/FStop.php
new file mode 100755
index 0000000..3fcabbd
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/FStop.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: FStop.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:fStop element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_FStop extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'fstop';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_FStop object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/Flash.php b/zend/library/Zend/Gdata/Exif/Extension/Flash.php
new file mode 100755
index 0000000..c8485c3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/Flash.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Flash.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:flash element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_Flash extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'flash';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_Flash object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/FocalLength.php b/zend/library/Zend/Gdata/Exif/Extension/FocalLength.php
new file mode 100755
index 0000000..caf95a5
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/FocalLength.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: FocalLength.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:focalLength element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_FocalLength extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'focallength';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_FocalLength object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/ImageUniqueId.php b/zend/library/Zend/Gdata/Exif/Extension/ImageUniqueId.php
new file mode 100755
index 0000000..0d0a24e
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/ImageUniqueId.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ImageUniqueId.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:imageUniqueId element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_ImageUniqueId extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'imageUniqueID';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_ImageUniqueId object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/Iso.php b/zend/library/Zend/Gdata/Exif/Extension/Iso.php
new file mode 100755
index 0000000..5fecca3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/Iso.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Iso.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:iso element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_Iso extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'iso';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_Iso object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/Make.php b/zend/library/Zend/Gdata/Exif/Extension/Make.php
new file mode 100755
index 0000000..b8a332b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/Make.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Make.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:make element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_Make extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'make';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_Make object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/Model.php b/zend/library/Zend/Gdata/Exif/Extension/Model.php
new file mode 100755
index 0000000..f801ea5
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/Model.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Model.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:model element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_Model extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'model';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_Model object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/Tags.php b/zend/library/Zend/Gdata/Exif/Extension/Tags.php
new file mode 100755
index 0000000..2547d42
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/Tags.php
@@ -0,0 +1,549 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Tags.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_Distance
+ */
+require_once 'Zend/Gdata/Exif/Extension/Distance.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_Exposure
+ */
+require_once 'Zend/Gdata/Exif/Extension/Exposure.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_Flash
+ */
+require_once 'Zend/Gdata/Exif/Extension/Flash.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_FocalLength
+ */
+require_once 'Zend/Gdata/Exif/Extension/FocalLength.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_FStop
+ */
+require_once 'Zend/Gdata/Exif/Extension/FStop.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_ImageUniqueId
+ */
+require_once 'Zend/Gdata/Exif/Extension/ImageUniqueId.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_Iso
+ */
+require_once 'Zend/Gdata/Exif/Extension/Iso.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_Make
+ */
+require_once 'Zend/Gdata/Exif/Extension/Make.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_Model
+ */
+require_once 'Zend/Gdata/Exif/Extension/Model.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_Time
+ */
+require_once 'Zend/Gdata/Exif/Extension/Time.php';
+
+/**
+ * Represents the exif:tags element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_Tags extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'tags';
+
+ /**
+ * exif:distance value
+ *
+ * @var Zend_Gdata_Exif_Extension_Distance
+ */
+ protected $_distance = null;
+
+ /**
+ * exif:exposure value
+ *
+ * @var Zend_Gdata_Exif_Extension_Exposure
+ */
+ protected $_exposure = null;
+
+ /**
+ * exif:flash value
+ *
+ * @var Zend_Gdata_Exif_Extension_Flash
+ */
+ protected $_flash = null;
+
+ /**
+ * exif:focalLength value
+ *
+ * @var Zend_Gdata_Exif_Extension_FocalLength
+ */
+ protected $_focalLength = null;
+
+ /**
+ * exif:fStop value
+ *
+ * @var Zend_Gdata_Exif_Extension_FStop
+ */
+ protected $_fStop = null;
+
+ /**
+ * exif:imageUniqueID value
+ *
+ * @var Zend_Gdata_Exif_Extension_ImageUniqueId
+ */
+ protected $_imageUniqueId = null;
+
+ /**
+ * exif:iso value
+ *
+ * @var Zend_Gdata_Exif_Extension_Iso
+ */
+ protected $_iso = null;
+
+ /**
+ * exif:make value
+ *
+ * @var Zend_Gdata_Exif_Extension_Make
+ */
+ protected $_make = null;
+
+ /**
+ * exif:model value
+ *
+ * @var Zend_Gdata_Exif_Extension_Model
+ */
+ protected $_model = null;
+
+ /**
+ * exif:time value
+ *
+ * @var Zend_Gdata_Exif_Extension_Time
+ */
+ protected $_time = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_Tags object.
+ *
+ * @param Zend_Gdata_Exif_Extension_Distance $distance (optional) The exif:distance
+ * value to be set in the constructed object.
+ * @param Zend_Gdata_Exif_Extension_Exposure $exposure (optional) The exif:exposure
+ * value to be set in the constructed object.
+ * @param Zend_Gdata_Exif_Extension_Flash $flash (optional) The exif:flash
+ * value to be set in the constructed object.
+ * @param Zend_Gdata_Exif_Extension_FocalLength$focalLength (optional) The exif:focallength
+ * value to be set in the constructed object.
+ * @param Zend_Gdata_Exif_Extension_FStop $fStop (optional) The exif:fstop
+ * value to be set in the constructed object.
+ * @param Zend_Gdata_Exif_Extension_ImageUniqueId $imageUniqueId (optional) The exif:imageUniqueID
+ * value to be set in the constructed object.
+ * @param Zend_Gdata_Exif_Extension_Iso $iso (optional) The exif:iso
+ * value to be set in the constructed object.
+ * @param Zend_Gdata_Exif_Extension_Make $make (optional) The exif:make
+ * value to be set in the constructed object.
+ * @param Zend_Gdata_Exif_Extension_Model $model (optional) The exif:model
+ * value to be set in the constructed object.
+ * @param Zend_Gdata_Exif_Extension_Time $time (optional) The exif:time
+ * value to be set in the constructed object.
+ */
+ public function __construct($distance = null, $exposure = null,
+ $flash = null, $focalLength = null, $fStop = null,
+ $imageUniqueId = null, $iso = null, $make = null,
+ $model = null, $time = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setDistance($distance);
+ $this->setExposure($exposure);
+ $this->setFlash($flash);
+ $this->setFocalLength($focalLength);
+ $this->setFStop($fStop);
+ $this->setImageUniqueId($imageUniqueId);
+ $this->setIso($iso);
+ $this->setMake($make);
+ $this->setModel($model);
+ $this->setTime($time);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_distance !== null) {
+ $element->appendChild($this->_distance->getDOM($element->ownerDocument));
+ }
+ if ($this->_exposure !== null) {
+ $element->appendChild($this->_exposure->getDOM($element->ownerDocument));
+ }
+ if ($this->_flash !== null) {
+ $element->appendChild($this->_flash->getDOM($element->ownerDocument));
+ }
+ if ($this->_focalLength !== null) {
+ $element->appendChild($this->_focalLength->getDOM($element->ownerDocument));
+ }
+ if ($this->_fStop !== null) {
+ $element->appendChild($this->_fStop->getDOM($element->ownerDocument));
+ }
+ if ($this->_imageUniqueId !== null) {
+ $element->appendChild($this->_imageUniqueId->getDOM($element->ownerDocument));
+ }
+ if ($this->_iso !== null) {
+ $element->appendChild($this->_iso->getDOM($element->ownerDocument));
+ }
+ if ($this->_make !== null) {
+ $element->appendChild($this->_make->getDOM($element->ownerDocument));
+ }
+ if ($this->_model !== null) {
+ $element->appendChild($this->_model->getDOM($element->ownerDocument));
+ }
+ if ($this->_time !== null) {
+ $element->appendChild($this->_time->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('exif') . ':' . 'distance';
+ $distance = new Zend_Gdata_Exif_Extension_Distance();
+ $distance->transferFromDOM($child);
+ $this->_distance = $distance;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'exposure';
+ $exposure = new Zend_Gdata_Exif_Extension_Exposure();
+ $exposure->transferFromDOM($child);
+ $this->_exposure = $exposure;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'flash';
+ $flash = new Zend_Gdata_Exif_Extension_Flash();
+ $flash->transferFromDOM($child);
+ $this->_flash = $flash;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'focallength';
+ $focalLength = new Zend_Gdata_Exif_Extension_FocalLength();
+ $focalLength->transferFromDOM($child);
+ $this->_focalLength = $focalLength;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'fstop';
+ $fStop = new Zend_Gdata_Exif_Extension_FStop();
+ $fStop->transferFromDOM($child);
+ $this->_fStop = $fStop;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'imageUniqueID';
+ $imageUniqueId = new Zend_Gdata_Exif_Extension_ImageUniqueId();
+ $imageUniqueId->transferFromDOM($child);
+ $this->_imageUniqueId = $imageUniqueId;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'iso';
+ $iso = new Zend_Gdata_Exif_Extension_Iso();
+ $iso->transferFromDOM($child);
+ $this->_iso = $iso;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'make';
+ $make = new Zend_Gdata_Exif_Extension_Make();
+ $make->transferFromDOM($child);
+ $this->_make = $make;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'model';
+ $model = new Zend_Gdata_Exif_Extension_Model();
+ $model->transferFromDOM($child);
+ $this->_model = $model;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'time';
+ $time = new Zend_Gdata_Exif_Extension_Time();
+ $time->transferFromDOM($child);
+ $this->_time = $time;
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's distance attribute.
+ *
+ * @see setDistance
+ * @return Zend_Gdata_Exif_Extension_Distance The requested attribute.
+ */
+ public function getDistance()
+ {
+ return $this->_distance;
+ }
+
+ /**
+ * Set the value for this element's distance attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Distance $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setDistance($value)
+ {
+ $this->_distance = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's exposure attribute.
+ *
+ * @see setExposure
+ * @return Zend_Gdata_Exif_Extension_Exposure The requested attribute.
+ */
+ public function getExposure()
+ {
+ return $this->_exposure;
+ }
+
+ /**
+ * Set the value for this element's exposure attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Exposure $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setExposure($value)
+ {
+ $this->_exposure = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's flash attribute.
+ *
+ * @see setFlash
+ * @return Zend_Gdata_Exif_Extension_Flash The requested attribute.
+ */
+ public function getFlash()
+ {
+ return $this->_flash;
+ }
+
+ /**
+ * Set the value for this element's flash attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Flash $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setFlash($value)
+ {
+ $this->_flash = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @see setFocalLength
+ * @return Zend_Gdata_Exif_Extension_FocalLength The requested attribute.
+ */
+ public function getFocalLength()
+ {
+ return $this->_focalLength;
+ }
+
+ /**
+ * Set the value for this element's focalLength attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_FocalLength $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setFocalLength($value)
+ {
+ $this->_focalLength = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's fStop attribute.
+ *
+ * @see setFStop
+ * @return Zend_Gdata_Exif_Extension_FStop The requested attribute.
+ */
+ public function getFStop()
+ {
+ return $this->_fStop;
+ }
+
+ /**
+ * Set the value for this element's fStop attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_FStop $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setFStop($value)
+ {
+ $this->_fStop = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's imageUniqueId attribute.
+ *
+ * @see setImageUniqueId
+ * @return Zend_Gdata_Exif_Extension_ImageUniqueId The requested attribute.
+ */
+ public function getImageUniqueId()
+ {
+ return $this->_imageUniqueId;
+ }
+
+ /**
+ * Set the value for this element's imageUniqueId attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_ImageUniqueId $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setImageUniqueId($value)
+ {
+ $this->_imageUniqueId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's iso attribute.
+ *
+ * @see setIso
+ * @return Zend_Gdata_Exif_Extension_Iso The requested attribute.
+ */
+ public function getIso()
+ {
+ return $this->_iso;
+ }
+
+ /**
+ * Set the value for this element's iso attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Iso $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setIso($value)
+ {
+ $this->_iso = $value;
+ return $this;
+ }
+ /**
+ * Get the value for this element's make attribute.
+ *
+ * @see setMake
+ * @return Zend_Gdata_Exif_Extension_Make The requested attribute.
+ */
+ public function getMake()
+ {
+ return $this->_make;
+ }
+
+ /**
+ * Set the value for this element's make attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Make $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setMake($value)
+ {
+ $this->_make = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's model attribute.
+ *
+ * @see setModel
+ * @return Zend_Gdata_Exif_Extension_Model The requested attribute.
+ */
+ public function getModel()
+ {
+ return $this->_model;
+ }
+
+ /**
+ * Set the value for this element's model attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Model $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setModel($value)
+ {
+ $this->_model = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's time attribute.
+ *
+ * @see setTime
+ * @return Zend_Gdata_Exif_Extension_Time The requested attribute.
+ */
+ public function getTime()
+ {
+ return $this->_time;
+ }
+
+ /**
+ * Set the value for this element's time attribute.
+ *
+ * @param Zend_Gdata_Exif_Extension_Time $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags Provides a fluent interface
+ */
+ public function setTime($value)
+ {
+ $this->_time = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Extension/Time.php b/zend/library/Zend/Gdata/Exif/Extension/Time.php
new file mode 100755
index 0000000..a82d715
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Extension/Time.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Time.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * Represents the exif:time element used by the Gdata Exif extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Extension_Time extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'exif';
+ protected $_rootElement = 'time';
+
+ /**
+ * Constructs a new Zend_Gdata_Exif_Extension_Time object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Exif/Feed.php b/zend/library/Zend/Gdata/Exif/Feed.php
new file mode 100755
index 0000000..e4ad20b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Exif/Feed.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Feed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_eed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Exif
+ */
+require_once 'Zend/Gdata/Exif.php';
+
+/**
+ * @see Zend_Gdata_Exif_Entry
+ */
+require_once 'Zend/Gdata/Exif/Entry.php';
+
+/**
+ * Feed for Gdata EXIF data entries.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Exif
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Exif_Feed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Exif_Entry';
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Exif::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension.php b/zend/library/Zend/Gdata/Extension.php
new file mode 100644
index 0000000..efc3010
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Extension.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents a Gdata extension
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootNamespace = 'gd';
+
+ public function __construct()
+ {
+ /* NOTE: namespaces must be registered before calling parent */
+ $this->registerNamespace('gd',
+ 'http://schemas.google.com/g/2005');
+ $this->registerNamespace('openSearch',
+ 'http://a9.com/-/spec/opensearchrss/1.0/', 1, 0);
+ $this->registerNamespace('openSearch',
+ 'http://a9.com/-/spec/opensearch/1.1/', 2, 0);
+ $this->registerNamespace('rss',
+ 'http://blogs.law.harvard.edu/tech/rss');
+
+ parent::__construct();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/AttendeeStatus.php b/zend/library/Zend/Gdata/Extension/AttendeeStatus.php
new file mode 100644
index 0000000..3772902
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/AttendeeStatus.php
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AttendeeStatus.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Data model class to represent an attendee's status (gd:attendeeStatus)
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_AttendeeStatus extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'attendeeStatus';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Extension_AttendeeStatus object.
+ * @param string $value (optional) Visibility value as URI.
+ */
+ public function __construct($value = null)
+ {
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Visibility The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Extension/AttendeeType.php b/zend/library/Zend/Gdata/Extension/AttendeeType.php
new file mode 100644
index 0000000..9a18ac0
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/AttendeeType.php
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AttendeeType.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Data model class to represent an attendee's type (gd:attendeeType)
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_AttendeeType extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'attendeeType';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Extension_AttendeeType object.
+ * @param string $value (optional) This entry's 'value' attribute.
+ */
+ public function __construct($value = null)
+ {
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Visibility The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Extension/Comments.php b/zend/library/Zend/Gdata/Extension/Comments.php
new file mode 100644
index 0000000..d9b5fd0
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/Comments.php
@@ -0,0 +1,117 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Comments.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Extension_FeedLink
+ */
+require_once 'Zend/Gdata/Extension/FeedLink.php';
+
+/**
+ * Represents the gd:comments element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_Comments extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'comments';
+ protected $_rel = null;
+ protected $_feedLink = null;
+
+ public function __construct($rel = null, $feedLink = null)
+ {
+ parent::__construct();
+ $this->_rel = $rel;
+ $this->_feedLink = $feedLink;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_feedLink !== null) {
+ $element->appendChild($this->_feedLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'feedLink';
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ public function getFeedLink()
+ {
+ return $this->_feedLink;
+ }
+
+ public function setFeedLink($value)
+ {
+ $this->_feedLink = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/EntryLink.php b/zend/library/Zend/Gdata/Extension/EntryLink.php
new file mode 100644
index 0000000..59705c1
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/EntryLink.php
@@ -0,0 +1,167 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EntryLink.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * Represents the gd:entryLink element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_EntryLink extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'entryLink';
+ protected $_href = null;
+ protected $_readOnly = null;
+ protected $_rel = null;
+ protected $_entry = null;
+
+ public function __construct($href = null, $rel = null,
+ $readOnly = null, $entry = null)
+ {
+ parent::__construct();
+ $this->_href = $href;
+ $this->_readOnly = $readOnly;
+ $this->_rel = $rel;
+ $this->_entry = $entry;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_href !== null) {
+ $element->setAttribute('href', $this->_href);
+ }
+ if ($this->_readOnly !== null) {
+ $element->setAttribute('readOnly', ($this->_readOnly ? "true" : "false"));
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_entry !== null) {
+ $element->appendChild($this->_entry->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'entry';
+ $entry = new Zend_Gdata_Entry();
+ $entry->transferFromDOM($child);
+ $this->_entry = $entry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'href':
+ $this->_href = $attribute->nodeValue;
+ break;
+ case 'readOnly':
+ if ($attribute->nodeValue == "true") {
+ $this->_readOnly = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_readOnly = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getHref()
+ {
+ return $this->_href;
+ }
+
+ public function setHref($value)
+ {
+ $this->_href = $value;
+ return $this;
+ }
+
+ public function getReadOnly()
+ {
+ return $this->_readOnly;
+ }
+
+ public function setReadOnly($value)
+ {
+ $this->_readOnly = $value;
+ return $this;
+ }
+
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ public function getEntry()
+ {
+ return $this->_entry;
+ }
+
+ public function setEntry($value)
+ {
+ $this->_entry = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/EventStatus.php b/zend/library/Zend/Gdata/Extension/EventStatus.php
new file mode 100644
index 0000000..8b1953c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/EventStatus.php
@@ -0,0 +1,101 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EventStatus.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the gd:eventStatus element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_EventStatus extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'eventStatus';
+ protected $_value = null;
+
+ public function __construct($value = null)
+ {
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Visibility The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/ExtendedProperty.php b/zend/library/Zend/Gdata/Extension/ExtendedProperty.php
new file mode 100644
index 0000000..5df6a47
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/ExtendedProperty.php
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ExtendedProperty.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Data model for gd:extendedProperty element, used by some Gdata
+ * services to implement arbitrary name/value pair storage
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_ExtendedProperty extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'extendedProperty';
+ protected $_name = null;
+ protected $_value = null;
+
+ public function __construct($name = null, $value = null)
+ {
+ parent::__construct();
+ $this->_name = $name;
+ $this->_value = $value;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ public function __toString()
+ {
+ return $this->getName() . '=' . $this->getValue();
+ }
+
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/FeedLink.php b/zend/library/Zend/Gdata/Extension/FeedLink.php
new file mode 100644
index 0000000..2fb4b86
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/FeedLink.php
@@ -0,0 +1,175 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: FeedLink.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * Represents the gd:feedLink element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_FeedLink extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'feedLink';
+ protected $_countHint = null;
+ protected $_href = null;
+ protected $_readOnly = null;
+ protected $_rel = null;
+ protected $_feed = null;
+
+ public function __construct($href = null, $rel = null,
+ $countHint = null, $readOnly = null, $feed = null)
+ {
+ parent::__construct();
+ $this->_countHint = $countHint;
+ $this->_href = $href;
+ $this->_readOnly = $readOnly;
+ $this->_rel = $rel;
+ $this->_feed = $feed;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_countHint !== null) {
+ $element->setAttribute('countHint', $this->_countHint);
+ }
+ if ($this->_href !== null) {
+ $element->setAttribute('href', $this->_href);
+ }
+ if ($this->_readOnly !== null) {
+ $element->setAttribute('readOnly', ($this->_readOnly ? "true" : "false"));
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_feed !== null) {
+ $element->appendChild($this->_feed->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('atom') . ':' . 'feed';
+ $feed = new Zend_Gdata_Feed();
+ $feed->transferFromDOM($child);
+ $this->_feed = $feed;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'countHint':
+ $this->_countHint = $attribute->nodeValue;
+ break;
+ case 'href':
+ $this->_href = $attribute->nodeValue;
+ break;
+ case 'readOnly':
+ if ($attribute->nodeValue == "true") {
+ $this->_readOnly = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_readOnly = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getHref()
+ {
+ return $this->_href;
+ }
+
+ public function setHref($value)
+ {
+ $this->_href = $value;
+ return $this;
+ }
+
+ public function getReadOnly()
+ {
+ return $this->_readOnly;
+ }
+
+ public function setReadOnly($value)
+ {
+ $this->_readOnly = $value;
+ return $this;
+ }
+
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ public function getFeed()
+ {
+ return $this->_feed;
+ }
+
+ public function setFeed($value)
+ {
+ $this->_feed = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/OpenSearchItemsPerPage.php b/zend/library/Zend/Gdata/Extension/OpenSearchItemsPerPage.php
new file mode 100644
index 0000000..1cbba9c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/OpenSearchItemsPerPage.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: OpenSearchItemsPerPage.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the openSearch:itemsPerPage element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_OpenSearchItemsPerPage extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'itemsPerPage';
+ protected $_rootNamespace = 'openSearch';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/OpenSearchStartIndex.php b/zend/library/Zend/Gdata/Extension/OpenSearchStartIndex.php
new file mode 100644
index 0000000..eb61bab
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/OpenSearchStartIndex.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: OpenSearchStartIndex.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the openSeach:startIndex element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_OpenSearchStartIndex extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'startIndex';
+ protected $_rootNamespace = 'openSearch';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/OpenSearchTotalResults.php b/zend/library/Zend/Gdata/Extension/OpenSearchTotalResults.php
new file mode 100644
index 0000000..a50c073
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/OpenSearchTotalResults.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: OpenSearchTotalResults.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the openSearch:totalResults element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_OpenSearchTotalResults extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'totalResults';
+ protected $_rootNamespace = 'openSearch';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/OriginalEvent.php b/zend/library/Zend/Gdata/Extension/OriginalEvent.php
new file mode 100644
index 0000000..30af10c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/OriginalEvent.php
@@ -0,0 +1,142 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: OriginalEvent.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_When
+ */
+require_once 'Zend/Gdata/Extension/When.php';
+
+/**
+ * Represents the gd:originalEvent element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_OriginalEvent extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'originalEvent';
+ protected $_id = null;
+ protected $_href = null;
+ protected $_when = null;
+
+ public function __construct($id = null, $href = null, $when = null)
+ {
+ parent::__construct();
+ $this->_id = $id;
+ $this->_href = $href;
+ $this->_when = $when;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_id !== null) {
+ $element->setAttribute('id', $this->_id);
+ }
+ if ($this->_href !== null) {
+ $element->setAttribute('href', $this->_href);
+ }
+ if ($this->_when !== null) {
+ $element->appendChild($this->_when->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'id':
+ $this->_id = $attribute->nodeValue;
+ break;
+ case 'href':
+ $this->_href = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'when';
+ $when = new Zend_Gdata_Extension_When();
+ $when->transferFromDOM($child);
+ $this->_when = $when;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ public function setId($value)
+ {
+ $this->_id = $value;
+ return $this;
+ }
+
+ public function getHref()
+ {
+ return $this->_href;
+ }
+
+ public function setHref($value)
+ {
+ $this->_href = $value;
+ return $this;
+ }
+
+ public function getWhen()
+ {
+ return $this->_when;
+ }
+
+ public function setWhen($value)
+ {
+ $this->_when = $value;
+ return $this;
+ }
+
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/Rating.php b/zend/library/Zend/Gdata/Extension/Rating.php
new file mode 100644
index 0000000..ef2f842
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/Rating.php
@@ -0,0 +1,240 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Rating.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Implements the gd:rating element
+ *
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_Rating extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'rating';
+ protected $_min = null;
+ protected $_max = null;
+ protected $_numRaters = null;
+ protected $_average = null;
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Extension_Rating object.
+ *
+ * @param integer $average (optional) Average rating.
+ * @param integer $min (optional) Minimum rating.
+ * @param integer $max (optional) Maximum rating.
+ * @param integer $numRaters (optional) Number of raters.
+ * @param integer $value (optional) The value of the rating.
+ */
+ public function __construct($average = null, $min = null,
+ $max = null, $numRaters = null, $value = null)
+ {
+ parent::__construct();
+ $this->_average = $average;
+ $this->_min = $min;
+ $this->_max = $max;
+ $this->_numRaters = $numRaters;
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_min !== null) {
+ $element->setAttribute('min', $this->_min);
+ }
+ if ($this->_max !== null) {
+ $element->setAttribute('max', $this->_max);
+ }
+ if ($this->_numRaters !== null) {
+ $element->setAttribute('numRaters', $this->_numRaters);
+ }
+ if ($this->_average !== null) {
+ $element->setAttribute('average', $this->_average);
+ }
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'min':
+ $this->_min = $attribute->nodeValue;
+ break;
+ case 'max':
+ $this->_max = $attribute->nodeValue;
+ break;
+ case 'numRaters':
+ $this->_numRaters = $attribute->nodeValue;
+ break;
+ case 'average':
+ $this->_average = $attribute->nodeValue;
+ break;
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's min attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getMin()
+ {
+ return $this->_min;
+ }
+
+ /**
+ * Set the value for this element's min attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setMin($value)
+ {
+ $this->_min = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's numRaters attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getNumRaters()
+ {
+ return $this->_numRaters;
+ }
+
+ /**
+ * Set the value for this element's numRaters attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setNumRaters($value)
+ {
+ $this->_numRaters = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's average attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getAverage()
+ {
+ return $this->_average;
+ }
+
+ /**
+ * Set the value for this element's average attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setAverage($value)
+ {
+ $this->_average = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's max attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getMax()
+ {
+ return $this->_max;
+ }
+
+ /**
+ * Set the value for this element's max attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setMax($value)
+ {
+ $this->_max = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @return integer The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Rating The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/Recurrence.php b/zend/library/Zend/Gdata/Extension/Recurrence.php
new file mode 100644
index 0000000..e42893f
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/Recurrence.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Recurrence.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the gd:recurrence element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_Recurrence extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'recurrence';
+
+ public function __construct($text = null)
+ {
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/RecurrenceException.php b/zend/library/Zend/Gdata/Extension/RecurrenceException.php
new file mode 100644
index 0000000..f207aea
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/RecurrenceException.php
@@ -0,0 +1,215 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: RecurrenceException.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Extension_EntryLink
+ */
+require_once 'Zend/Gdata/Extension/EntryLink.php';
+
+/**
+ * @see Zend_Gdata_Extension_OriginalEvent
+ */
+require_once 'Zend/Gdata/Extension/OriginalEvent.php';
+
+/**
+ * Data model class to represent an entry's recurrenceException
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_RecurrenceException extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'recurrenceException';
+ protected $_specialized = null;
+ protected $_entryLink = null;
+ protected $_originalEvent = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Extension_RecurrenceException object.
+ * @param bool $specialized (optional) Whether this is a specialized exception or not.
+ * @param Zend_Gdata_EntryLink (optional) An Event entry with details about the exception.
+ * @param Zend_Gdata_OriginalEvent (optional) The origianl recurrent event this is an exeption to.
+ */
+ public function __construct($specialized = null, $entryLink = null,
+ $originalEvent = null)
+ {
+ parent::__construct();
+ $this->_specialized = $specialized;
+ $this->_entryLink = $entryLink;
+ $this->_originalEvent = $originalEvent;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_specialized !== null) {
+ $element->setAttribute('specialized', ($this->_specialized ? "true" : "false"));
+ }
+ if ($this->_entryLink !== null) {
+ $element->appendChild($this->_entryLink->getDOM($element->ownerDocument));
+ }
+ if ($this->_originalEvent !== null) {
+ $element->appendChild($this->_originalEvent->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'specialized':
+ if ($attribute->nodeValue == "true") {
+ $this->_specialized = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_specialized = false;
+ }
+ else {
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for gCal:selected#value.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'entryLink':
+ $entryLink = new Zend_Gdata_Extension_EntryLink();
+ $entryLink->transferFromDOM($child);
+ $this->_entryLink = $entryLink;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'originalEvent':
+ $originalEvent = new Zend_Gdata_Extension_OriginalEvent();
+ $originalEvent->transferFromDOM($child);
+ $this->_originalEvent = $originalEvent;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's Specialized attribute.
+ *
+ * @return bool The requested attribute.
+ */
+ public function getSpecialized()
+ {
+ return $this->_specialized;
+ }
+
+ /**
+ * Set the value for this element's Specialized attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_RecurrenceException The element being modified.
+ */
+ public function setSpecialized($value)
+ {
+ $this->_specialized = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's EntryLink attribute.
+ *
+ * @return Zend_Gdata_Extension_EntryLink The requested attribute.
+ */
+ public function getEntryLink()
+ {
+ return $this->_entryLink;
+ }
+
+ /**
+ * Set the value for this element's EntryLink attribute.
+ *
+ * @param Zend_Gdata_Extension_EntryLink $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_RecurrenceException The element being modified.
+ */
+ public function setEntryLink($value)
+ {
+ $this->_entryLink = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's Specialized attribute.
+ *
+ * @return Zend_Gdata_Extension_OriginalEvent The requested attribute.
+ */
+ public function getOriginalEvent()
+ {
+ return $this->_originalEvent;
+ }
+
+ /**
+ * Set the value for this element's Specialized attribute.
+ *
+ * @param Zend_Gdata_Extension_OriginalEvent $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_RecurrenceException The element being modified.
+ */
+ public function setOriginalEvent($value)
+ {
+ $this->_originalEvent = $value;
+ return $this;
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Extension/Reminder.php b/zend/library/Zend/Gdata/Extension/Reminder.php
new file mode 100644
index 0000000..cee65ea
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/Reminder.php
@@ -0,0 +1,171 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Reminder.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Implements the gd:reminder element used to set/retrieve notifications
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_Reminder extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'reminder';
+ protected $_absoluteTime = null;
+ protected $_method = null;
+ protected $_days = null;
+ protected $_hours = null;
+ protected $_minutes = null;
+
+ public function __construct($absoluteTime = null, $method = null, $days = null,
+ $hours = null, $minutes = null)
+ {
+ parent::__construct();
+ $this->_absoluteTime = $absoluteTime;
+ $this->_method = $method;
+ $this->_days = $days;
+ $this->_hours = $hours;
+ $this->_minutes = $minutes;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_absoluteTime !== null) {
+ $element->setAttribute('absoluteTime', $this->_absoluteTime);
+ }
+ if ($this->_method !== null) {
+ $element->setAttribute('method', $this->_method);
+ }
+ if ($this->_days !== null) {
+ $element->setAttribute('days', $this->_days);
+ }
+ if ($this->_hours !== null) {
+ $element->setAttribute('hours', $this->_hours);
+ }
+ if ($this->_minutes !== null) {
+ $element->setAttribute('minutes', $this->_minutes);
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'absoluteTime':
+ $this->_absoluteTime = $attribute->nodeValue;
+ break;
+ case 'method':
+ $this->_method = $attribute->nodeValue;
+ break;
+ case 'days':
+ $this->_days = $attribute->nodeValue;
+ break;
+ case 'hours':
+ $this->_hours = $attribute->nodeValue;
+ break;
+ case 'minutes':
+ $this->_minutes = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ public function __toString()
+ {
+ $s = '';
+ if ($this->_absoluteTime)
+ $s = " at " . $this->_absoluteTime;
+ else if ($this->_days)
+ $s = " in " . $this->_days . " days";
+ else if ($this->_hours)
+ $s = " in " . $this->_hours . " hours";
+ else if ($this->_minutes)
+ $s = " in " . $this->_minutes . " minutes";
+ return $this->_method . $s;
+ }
+
+ public function getAbsoluteTime()
+ {
+ return $this->_absoluteTime;
+ }
+
+ public function setAbsoluteTime($value)
+ {
+ $this->_absoluteTime = $value;
+ return $this;
+ }
+
+ public function getDays()
+ {
+ return $this->_days;
+ }
+
+ public function setDays($value)
+ {
+ $this->_days = $value;
+ return $this;
+ }
+ public function getHours()
+ {
+ return $this->_hours;
+ }
+
+ public function setHours($value)
+ {
+ $this->_hours = $value;
+ return $this;
+ }
+
+ public function getMinutes()
+ {
+ return $this->_minutes;
+ }
+
+ public function setMinutes($value)
+ {
+ $this->_minutes = $value;
+ return $this;
+ }
+
+ public function getMethod()
+ {
+ return $this->_method;
+ }
+
+ public function setMethod($value)
+ {
+ $this->_method = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/Transparency.php b/zend/library/Zend/Gdata/Extension/Transparency.php
new file mode 100644
index 0000000..a4efe84
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/Transparency.php
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Transparency.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Data model class to represent an entry's transparency
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_Transparency extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'transparency';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Extension_Transparency object.
+ * @param bool $value (optional) Transparency value as URI
+ */
+ public function __construct($value = null)
+ {
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return bool The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Transparency The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Extension/Visibility.php b/zend/library/Zend/Gdata/Extension/Visibility.php
new file mode 100644
index 0000000..720c8e1
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/Visibility.php
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Visibility.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Data model class to represent an entry's visibility
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_Visibility extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'visibility';
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Extension_Visibility object.
+ * @param bool $value (optional) Visibility value as URI.
+ */
+ public function __construct($value = null)
+ {
+ parent::__construct();
+ $this->_value = $value;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's Value attribute.
+ *
+ * @return bool The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's Value attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Visibility The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Extension/When.php b/zend/library/Zend/Gdata/Extension/When.php
new file mode 100644
index 0000000..415f895
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/When.php
@@ -0,0 +1,169 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: When.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Extension_Reminder
+ */
+require_once 'Zend/Gdata/Extension/Reminder.php';
+
+/**
+ * Represents the gd:when element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_When extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'when';
+ protected $_reminders = array();
+ protected $_startTime = null;
+ protected $_valueString = null;
+ protected $_endTime = null;
+
+ public function __construct($startTime = null, $endTime = null,
+ $valueString = null, $reminders = null)
+ {
+ parent::__construct();
+ $this->_startTime = $startTime;
+ $this->_endTime = $endTime;
+ $this->_valueString = $valueString;
+ $this->_reminders = $reminders;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_startTime !== null) {
+ $element->setAttribute('startTime', $this->_startTime);
+ }
+ if ($this->_endTime !== null) {
+ $element->setAttribute('endTime', $this->_endTime);
+ }
+ if ($this->_valueString !== null) {
+ $element->setAttribute('valueString', $this->_valueString);
+ }
+ if ($this->_reminders !== null) {
+ foreach ($this->_reminders as $reminder) {
+ $element->appendChild(
+ $reminder->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'reminder';
+ $reminder = new Zend_Gdata_Extension_Reminder();
+ $reminder->transferFromDOM($child);
+ $this->_reminders[] = $reminder;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'startTime':
+ $this->_startTime = $attribute->nodeValue;
+ break;
+ case 'endTime':
+ $this->_endTime = $attribute->nodeValue;
+ break;
+ case 'valueString':
+ $this->_valueString = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ public function __toString()
+ {
+ if ($this->_valueString)
+ return $this->_valueString;
+ else {
+ return 'Starts: ' . $this->getStartTime() . ' ' .
+ 'Ends: ' . $this->getEndTime();
+ }
+ }
+
+ public function getStartTime()
+ {
+ return $this->_startTime;
+ }
+
+ public function setStartTime($value)
+ {
+ $this->_startTime = $value;
+ return $this;
+ }
+
+ public function getEndTime()
+ {
+ return $this->_endTime;
+ }
+
+ public function setEndTime($value)
+ {
+ $this->_endTime = $value;
+ return $this;
+ }
+
+ public function getValueString()
+ {
+ return $this->_valueString;
+ }
+
+ public function setValueString($value)
+ {
+ $this->_valueString = $value;
+ return $this;
+ }
+
+ public function getReminders()
+ {
+ return $this->_reminders;
+ }
+
+ public function setReminders($value)
+ {
+ $this->_reminders = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/Where.php b/zend/library/Zend/Gdata/Extension/Where.php
new file mode 100644
index 0000000..a2d6dde
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/Where.php
@@ -0,0 +1,171 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Where.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Extension_EntryLink
+ */
+require_once 'Zend/Gdata/Extension/EntryLink.php';
+
+/**
+ * Data model class to represent a location (gd:where element)
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_Where extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'where';
+ protected $_label = null;
+ protected $_rel = null;
+ protected $_valueString = null;
+ protected $_entryLink = null;
+
+ public function __construct($valueString = null, $label = null, $rel = null, $entryLink = null)
+ {
+ parent::__construct();
+ $this->_valueString = $valueString;
+ $this->_label = $label;
+ $this->_rel = $rel;
+ $this->_entryLink = $entryLink;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_label !== null) {
+ $element->setAttribute('label', $this->_label);
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_valueString !== null) {
+ $element->setAttribute('valueString', $this->_valueString);
+ }
+ if ($this->entryLink !== null) {
+ $element->appendChild($this->_entryLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'label':
+ $this->_label = $attribute->nodeValue;
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ case 'valueString':
+ $this->_valueString = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'entryLink':
+ $entryLink = new Zend_Gdata_Extension_EntryLink();
+ $entryLink->transferFromDOM($child);
+ $this->_entryLink = $entryLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function __toString()
+ {
+ if ($this->_valueString != null) {
+ return $this->_valueString;
+ }
+ else {
+ return parent::__toString();
+ }
+ }
+
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ public function setLabel($value)
+ {
+ $this->_label = $value;
+ return $this;
+ }
+
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ public function getValueString()
+ {
+ return $this->_valueString;
+ }
+
+ public function setValueString($value)
+ {
+ $this->_valueString = $value;
+ return $this;
+ }
+
+ public function getEntryLink()
+ {
+ return $this->_entryLink;
+ }
+
+ public function setEntryLink($value)
+ {
+ $this->_entryLink = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Extension/Who.php b/zend/library/Zend/Gdata/Extension/Who.php
new file mode 100644
index 0000000..89c01d4
--- /dev/null
+++ b/zend/library/Zend/Gdata/Extension/Who.php
@@ -0,0 +1,299 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Who.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Extension_AttendeeStatus
+ */
+require_once 'Zend/Gdata/Extension/AttendeeStatus.php';
+
+/**
+ * @see Zend_Gdata_Extension_AttendeeType
+ */
+require_once 'Zend/Gdata/Extension/AttendeeType.php';
+
+/**
+ * @see Zend_Gdata_Extension_EntryLink
+ */
+require_once 'Zend/Gdata/Extension/EntryLink.php';
+
+/**
+ * Data model class to represent a participant
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Extension_Who extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'who';
+ protected $_email = null;
+ protected $_rel = null;
+ protected $_valueString = null;
+ protected $_attendeeStatus = null;
+ protected $_attendeeType = null;
+ protected $_entryLink = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Extension_Who object.
+ * @param string $email (optional) Email address.
+ * @param string $rel (optional) Relationship description.
+ * @param string $valueString (optional) Simple string describing this person.
+ * @param Zend_Gdata_Extension_AttendeeStatus $attendeeStatus (optional) The status of the attendee.
+ * @param Zend_Gdata_Extension_AttendeeType $attendeeType (optional) The type of the attendee.
+ * @param string $entryLink URL pointing to an associated entry (Contact kind) describing this person.
+ */
+ public function __construct($email = null, $rel = null, $valueString = null,
+ $attendeeStatus = null, $attendeeType = null, $entryLink = null)
+ {
+ parent::__construct();
+ $this->_email = $email;
+ $this->_rel = $rel;
+ $this->_valueString = $valueString;
+ $this->_attendeeStatus = $attendeeStatus;
+ $this->_attendeeType = $attendeeType;
+ $this->_entryLink = $entryLink;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_email !== null) {
+ $element->setAttribute('email', $this->_email);
+ }
+ if ($this->_rel !== null) {
+ $element->setAttribute('rel', $this->_rel);
+ }
+ if ($this->_valueString !== null) {
+ $element->setAttribute('valueString', $this->_valueString);
+ }
+ if ($this->_attendeeStatus !== null) {
+ $element->appendChild($this->_attendeeStatus->getDOM($element->ownerDocument));
+ }
+ if ($this->_attendeeType !== null) {
+ $element->appendChild($this->_attendeeType->getDOM($element->ownerDocument));
+ }
+ if ($this->_entryLink !== null) {
+ $element->appendChild($this->_entryLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'email':
+ $this->_email = $attribute->nodeValue;
+ break;
+ case 'rel':
+ $this->_rel = $attribute->nodeValue;
+ break;
+ case 'valueString':
+ $this->_valueString = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'attendeeStatus':
+ $attendeeStatus = new Zend_Gdata_Extension_AttendeeStatus();
+ $attendeeStatus->transferFromDOM($child);
+ $this->_attendeeStatus = $attendeeStatus;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'attendeeType':
+ $attendeeType = new Zend_Gdata_Extension_AttendeeType();
+ $attendeeType->transferFromDOM($child);
+ $this->_attendeeType = $attendeeType;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'entryLink':
+ $entryLink = new Zend_Gdata_Extension_EntryLink();
+ $entryLink->transferFromDOM($child);
+ $this->_entryLink = $entryLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Retrieves a human readable string describing this attribute's value.
+ *
+ * @return string The attribute value.
+ */
+ public function __toString()
+ {
+ if ($this->_valueString != null) {
+ return $this->_valueString;
+ }
+ else {
+ return parent::__toString();
+ }
+ }
+
+ /**
+ * Get the value for this element's ValueString attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getValueString()
+ {
+ return $this->_valueString;
+ }
+
+ /**
+ * Set the value for this element's ValueString attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setValueString($value)
+ {
+ $this->_valueString = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's Email attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getEmail()
+ {
+ return $this->_email;
+ }
+
+ /**
+ * Set the value for this element's Email attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setEmail($value)
+ {
+ $this->_email = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's Rel attribute.
+ *
+ * @return string The requested attribute.
+ */
+ public function getRel()
+ {
+ return $this->_rel;
+ }
+
+ /**
+ * Set the value for this element's Rel attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setRel($value)
+ {
+ $this->_rel = $value;
+ return $this;
+ }
+
+ /**
+ * Get this entry's AttendeeStatus element.
+ *
+ * @return Zend_Gdata_Extension_AttendeeStatus The requested entry.
+ */
+ public function getAttendeeStatus()
+ {
+ return $this->_attendeeStatus;
+ }
+
+ /**
+ * Set the child's AttendeeStatus element.
+ *
+ * @param Zend_Gdata_Extension_AttendeeStatus $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setAttendeeStatus($value)
+ {
+ $this->_attendeeStatus = $value;
+ return $this;
+ }
+
+ /**
+ * Get this entry's AttendeeType element.
+ *
+ * @return Zend_Gdata_Extension_AttendeeType The requested entry.
+ */
+ public function getAttendeeType()
+ {
+ return $this->_attendeeType;
+ }
+
+ /**
+ * Set the child's AttendeeType element.
+ *
+ * @param Zend_Gdata_Extension_AttendeeType $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setAttendeeType($value)
+ {
+ $this->_attendeeType = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Feed.php b/zend/library/Zend/Gdata/Feed.php
new file mode 100644
index 0000000..5d09d19
--- /dev/null
+++ b/zend/library/Zend/Gdata/Feed.php
@@ -0,0 +1,251 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Feed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * @see Zend_Gdata_App_Feed
+ */
+require_once 'Zend/Gdata/App/Feed.php';
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension_OpenSearchTotalResults
+ */
+require_once 'Zend/Gdata/Extension/OpenSearchTotalResults.php';
+
+/**
+ * @see Zend_Gdata_Extension_OpenSearchStartIndex
+ */
+require_once 'Zend/Gdata/Extension/OpenSearchStartIndex.php';
+
+/**
+ * @see Zend_Gdata_Extension_OpenSearchItemsPerPage
+ */
+require_once 'Zend/Gdata/Extension/OpenSearchItemsPerPage.php';
+
+/**
+ * The Gdata flavor of an Atom Feed
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Feed extends Zend_Gdata_App_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Entry';
+
+ /**
+ * The openSearch:totalResults element
+ *
+ * @var Zend_Gdata_Extension_OpenSearchTotalResults|null
+ */
+ protected $_totalResults = null;
+
+ /**
+ * The openSearch:startIndex element
+ *
+ * @var Zend_Gdata_Extension_OpenSearchStartIndex|null
+ */
+ protected $_startIndex = null;
+
+ /**
+ * The openSearch:itemsPerPage element
+ *
+ * @var Zend_Gdata_Extension_OpenSearchItemsPerPage|null
+ */
+ protected $_itemsPerPage = null;
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_totalResults != null) {
+ $element->appendChild($this->_totalResults->getDOM($element->ownerDocument));
+ }
+ if ($this->_startIndex != null) {
+ $element->appendChild($this->_startIndex->getDOM($element->ownerDocument));
+ }
+ if ($this->_itemsPerPage != null) {
+ $element->appendChild($this->_itemsPerPage->getDOM($element->ownerDocument));
+ }
+
+ // ETags are special. We only support them in protocol >= 2.X.
+ // This will be duplicated by the HTTP ETag header.
+ if ($majorVersion >= 2) {
+ if ($this->_etag != null) {
+ $element->setAttributeNS($this->lookupNamespace('gd'),
+ 'gd:etag',
+ $this->_etag);
+ }
+ }
+
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('openSearch') . ':' . 'totalResults':
+ $totalResults = new Zend_Gdata_Extension_OpenSearchTotalResults();
+ $totalResults->transferFromDOM($child);
+ $this->_totalResults = $totalResults;
+ break;
+ case $this->lookupNamespace('openSearch') . ':' . 'startIndex':
+ $startIndex = new Zend_Gdata_Extension_OpenSearchStartIndex();
+ $startIndex->transferFromDOM($child);
+ $this->_startIndex = $startIndex;
+ break;
+ case $this->lookupNamespace('openSearch') . ':' . 'itemsPerPage':
+ $itemsPerPage = new Zend_Gdata_Extension_OpenSearchItemsPerPage();
+ $itemsPerPage->transferFromDOM($child);
+ $this->_itemsPerPage = $itemsPerPage;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'etag':
+ // ETags are special, since they can be conveyed by either the
+ // HTTP ETag header or as an XML attribute.
+ $etag = $attribute->nodeValue;
+ if ($this->_etag === null) {
+ $this->_etag = $etag;
+ }
+ elseif ($this->_etag != $etag) {
+ require_once('Zend/Gdata/App/IOException.php');
+ throw new Zend_Gdata_App_IOException("ETag mismatch");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ break;
+ }
+ }
+
+ /**
+ * Set the value of the totalResults property.
+ *
+ * @param Zend_Gdata_Extension_OpenSearchTotalResults|null $value The
+ * value of the totalResults property. Use null to unset.
+ * @return Zend_Gdata_Feed Provides a fluent interface.
+ */
+ function setTotalResults($value) {
+ $this->_totalResults = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the totalResults property.
+ *
+ * @return Zend_Gdata_Extension_OpenSearchTotalResults|null The value of
+ * the totalResults property, or null if unset.
+ */
+ function getTotalResults() {
+ return $this->_totalResults;
+ }
+
+ /**
+ * Set the start index property for feed paging.
+ *
+ * @param Zend_Gdata_Extension_OpenSearchStartIndex|null $value The value
+ * for the startIndex property. Use null to unset.
+ * @return Zend_Gdata_Feed Provides a fluent interface.
+ */
+ function setStartIndex($value) {
+ $this->_startIndex = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the startIndex property.
+ *
+ * @return Zend_Gdata_Extension_OpenSearchStartIndex|null The value of the
+ * startIndex property, or null if unset.
+ */
+ function getStartIndex() {
+ return $this->_startIndex;
+ }
+
+ /**
+ * Set the itemsPerPage property.
+ *
+ * @param Zend_Gdata_Extension_OpenSearchItemsPerPage|null $value The
+ * value for the itemsPerPage property. Use nul to unset.
+ * @return Zend_Gdata_Feed Provides a fluent interface.
+ */
+ function setItemsPerPage($value) {
+ $this->_itemsPerPage = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the itemsPerPage property.
+ *
+ * @return Zend_Gdata_Extension_OpenSearchItemsPerPage|null The value of
+ * the itemsPerPage property, or null if unset.
+ */
+ function getItemsPerPage() {
+ return $this->_itemsPerPage;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps.php b/zend/library/Zend/Gdata/Gapps.php
new file mode 100644
index 0000000..91f214b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps.php
@@ -0,0 +1,1683 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Gapps.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * @see Zend_Gdata_Gapps_UserFeed
+ */
+require_once 'Zend/Gdata/Gapps/UserFeed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_NicknameFeed
+ */
+require_once 'Zend/Gdata/Gapps/NicknameFeed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_GroupFeed
+ */
+require_once 'Zend/Gdata/Gapps/GroupFeed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_MemberFeed
+ */
+require_once 'Zend/Gdata/Gapps/MemberFeed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_OwnerFeed
+ */
+require_once 'Zend/Gdata/Gapps/OwnerFeed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_EmailListFeed
+ */
+require_once 'Zend/Gdata/Gapps/EmailListFeed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_EmailListRecipientFeed
+ */
+require_once 'Zend/Gdata/Gapps/EmailListRecipientFeed.php';
+
+
+/**
+ * Service class for interacting with the Google Apps Provisioning API.
+ *
+ * Like other service classes in this module, this class provides access via
+ * an HTTP client to Google servers for working with entries and feeds.
+ *
+ * Because of the nature of this API, all access must occur over an
+ * authenticated connection.
+ *
+ * @link http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps extends Zend_Gdata
+{
+
+ const APPS_BASE_FEED_URI = 'https://apps-apis.google.com/a/feeds';
+ const AUTH_SERVICE_NAME = 'apps';
+
+ /**
+ * Path to user feeds on the Google Apps server.
+ */
+ const APPS_USER_PATH = '/user/2.0';
+
+ /**
+ * Path to nickname feeds on the Google Apps server.
+ */
+ const APPS_NICKNAME_PATH = '/nickname/2.0';
+
+ /**
+ * Path to group feeds on the Google Apps server.
+ */
+ const APPS_GROUP_PATH = '/group/2.0';
+
+ /**
+ * Path to email list feeds on the Google Apps server.
+ */
+ const APPS_EMAIL_LIST_PATH = '/emailList/2.0';
+
+ /**
+ * Path to email list recipient feeds on the Google Apps server.
+ */
+ const APPS_EMAIL_LIST_RECIPIENT_POSTFIX = '/recipient';
+
+ /**
+ * The domain which is being administered via the Provisioning API.
+ *
+ * @var string
+ */
+ protected $_domain = null;
+
+ /**
+ * Namespaces used for Zend_Gdata_Gapps
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('apps', 'http://schemas.google.com/apps/2006', 1, 0)
+ );
+
+ /**
+ * Create Gdata_Gapps object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google Apps servers.
+ * @param string $domain (optional) The Google Apps domain which is to be
+ * accessed.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $domain = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Gapps');
+ $this->registerPackage('Zend_Gdata_Gapps_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ $this->_domain = $domain;
+ }
+
+ /**
+ * Convert an exception to an ServiceException if an AppsForYourDomain
+ * XML document is contained within the original exception's HTTP
+ * response. If conversion fails, throw the original error.
+ *
+ * @param Zend_Gdata_Exception $e The exception to convert.
+ * @throws Zend_Gdata_Gapps_ServiceException
+ * @throws mixed
+ */
+ public static function throwServiceExceptionIfDetected($e) {
+ // Check to make sure that there actually response!
+ // This can happen if the connection dies before the request
+ // completes. (See ZF-5949)
+ $response = $e->getResponse();
+ if (!$response) {
+ require_once('Zend/Gdata/App/IOException.php');
+ throw new Zend_Gdata_App_IOException('No HTTP response received (possible connection failure)');
+ }
+
+ try {
+ // Check to see if there is an AppsForYourDomainErrors
+ // datastructure in the response. If so, convert it to
+ // an exception and throw it.
+ require_once 'Zend/Gdata/Gapps/ServiceException.php';
+ $error = new Zend_Gdata_Gapps_ServiceException();
+ $error->importFromString($response->getBody());
+ throw $error;
+ } catch (Zend_Gdata_App_Exception $e2) {
+ // Unable to convert the response to a ServiceException,
+ // most likely because the server didn't return an
+ // AppsForYourDomainErrors document. Throw the original
+ // exception.
+ throw $e;
+ }
+ }
+
+ /**
+ * Imports a feed located at $uri.
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param string $uri
+ * @param Zend_Http_Client $client (optional) The client used for
+ * communication
+ * @param string $className (optional) The class which is used as the
+ * return type
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ * @return Zend_Gdata_App_Feed
+ */
+ public static function import($uri, $client = null, $className='Zend_Gdata_App_Feed')
+ {
+ try {
+ return parent::import($uri, $client, $className);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * GET a URI using client object.
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param string $uri GET URI
+ * @param array $extraHeaders Extra headers to add to the request, as an
+ * array of string-based key/value pairs.
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ * @return Zend_Http_Response
+ */
+ public function get($uri, $extraHeaders = array())
+ {
+ try {
+ return parent::get($uri, $extraHeaders);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * POST data with client object.
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri (optional) POST URI
+ * @param integer $remainingRedirects (optional)
+ * @param string $contentType Content-type of the data
+ * @param array $extraHaders Extra headers to add tot he request
+ * @return Zend_Http_Response
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function post($data, $uri = null, $remainingRedirects = null,
+ $contentType = null, $extraHeaders = null)
+ {
+ try {
+ return parent::post($data, $uri, $remainingRedirects, $contentType, $extraHeaders);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * PUT data with client object
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or XML to post
+ * @param string $uri (optional) PUT URI
+ * @param integer $remainingRedirects (optional)
+ * @param string $contentType Content-type of the data
+ * @param array $extraHaders Extra headers to add tot he request
+ * @return Zend_Http_Response
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function put($data, $uri = null, $remainingRedirects = null,
+ $contentType = null, $extraHeaders = null)
+ {
+ try {
+ return parent::put($data, $uri, $remainingRedirects, $contentType, $extraHeaders);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * DELETE entry with client object
+ * This method overrides the default behavior of Zend_Gdata_App,
+ * providing support for Zend_Gdata_Gapps_ServiceException.
+ *
+ * @param mixed $data The Zend_Gdata_App_Entry or URL to delete
+ * @param integer $remainingRedirects (optional)
+ * @return void
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function delete($data, $remainingRedirects = null)
+ {
+ try {
+ return parent::delete($data, $remainingRedirects);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ self::throwServiceExceptionIfDetected($e);
+ }
+ }
+
+ /**
+ * Set domain for this service instance. This should be a fully qualified
+ * domain, such as 'foo.example.com'.
+ *
+ * This value is used when calculating URLs for retrieving and posting
+ * entries. If no value is specified, a URL will have to be manually
+ * constructed prior to using any methods which interact with the Google
+ * Apps provisioning service.
+ *
+ * @param string $value The domain to be used for this session.
+ */
+ public function setDomain($value)
+ {
+ $this->_domain = $value;
+ }
+
+ /**
+ * Get domain for this service instance. This should be a fully qualified
+ * domain, such as 'foo.example.com'. If no domain is set, null will be
+ * returned.
+ *
+ * @return string The domain to be used for this session, or null if not
+ * set.
+ */
+ public function getDomain()
+ {
+ return $this->_domain;
+ }
+
+ /**
+ * Returns the base URL used to access the Google Apps service, based
+ * on the current domain. The current domain can be temporarily
+ * overridden by providing a fully qualified domain as $domain.
+ *
+ * @param string $domain (optional) A fully-qualified domain to use
+ * instead of the default domain for this service instance.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getBaseUrl($domain = null)
+ {
+ if ($domain !== null) {
+ return self::APPS_BASE_FEED_URI . '/' . $domain;
+ } else if ($this->_domain !== null) {
+ return self::APPS_BASE_FEED_URI . '/' . $this->_domain;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Domain must be specified.');
+ }
+ }
+
+ /**
+ * Retrieve a UserFeed containing multiple UserEntry objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_UserFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getUserFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = $this->getBaseUrl() . self::APPS_USER_PATH;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_UserFeed');
+ }
+
+ /**
+ * Retreive NicknameFeed object containing multiple NicknameEntry objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_NicknameFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getNicknameFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = $this->getBaseUrl() . self::APPS_NICKNAME_PATH;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_NicknameFeed');
+ }
+
+ /**
+ * Retreive GroupFeed object containing multiple GroupEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_GroupFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getGroupFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_GroupFeed');
+ }
+
+ /**
+ * Retreive MemberFeed object containing multiple MemberEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_MemberFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getMemberFeed($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_MemberFeed');
+ }
+
+ /**
+ * Retreive OwnerFeed object containing multiple OwnerEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_OwnerFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getOwnerFeed($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_OwnerFeed');
+ }
+
+ /**
+ * Retreive EmailListFeed object containing multiple EmailListEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query.
+ * @return Zend_Gdata_Gapps_EmailListFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getEmailListFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = $this->getBaseUrl() . self::APPS_NICKNAME_PATH;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_EmailListFeed');
+ }
+
+ /**
+ * Retreive EmailListRecipientFeed object containing multiple
+ * EmailListRecipientEntry objects.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_EmailListRecipientFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getEmailListRecipientFeed($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Gapps_EmailListRecipientFeed');
+ }
+
+ /**
+ * Retreive a single UserEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_UserEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getUserEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_UserEntry');
+ }
+
+ /**
+ * Retreive a single NicknameEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_NicknameEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getNicknameEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_NicknameEntry');
+ }
+
+ /**
+ * Retreive a single GroupEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_GroupEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getGroupEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_GroupEntry');
+ }
+
+ /**
+ * Retreive a single MemberEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_MemberEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getMemberEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_MemberEntry');
+ }
+
+ /**
+ * Retreive a single OwnerEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_OwnerEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getOwnerEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_OwnerEntry');
+ }
+
+ /**
+ * Retreive a single EmailListEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_EmailListEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getEmailListEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_EmailListEntry');
+ }
+
+ /**
+ * Retreive a single EmailListRecipientEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Gapps_EmailListRecipientEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function getEmailListRecipientEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Gapps_EmailListRecipientEntry');
+ }
+
+ /**
+ * Create a new user from a UserEntry.
+ *
+ * @param Zend_Gdata_Gapps_UserEntry $user The user entry to insert.
+ * @param string $uri (optional) The URI where the user should be
+ * uploaded to. If null, the default user creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_UserEntry The inserted user entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertUser($user, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = $this->getBaseUrl() . self::APPS_USER_PATH;
+ }
+ $newEntry = $this->insertEntry($user, $uri, 'Zend_Gdata_Gapps_UserEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new nickname from a NicknameEntry.
+ *
+ * @param Zend_Gdata_Gapps_NicknameEntry $nickname The nickname entry to
+ * insert.
+ * @param string $uri (optional) The URI where the nickname should be
+ * uploaded to. If null, the default nickname creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_NicknameEntry The inserted nickname entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertNickname($nickname, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = $this->getBaseUrl() . self::APPS_NICKNAME_PATH;
+ }
+ $newEntry = $this->insertEntry($nickname, $uri, 'Zend_Gdata_Gapps_NicknameEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new group from a GroupEntry.
+ *
+ * @param Zend_Gdata_Gapps_GroupEntry $group The group entry to insert.
+ * @param string $uri (optional) The URI where the group should be
+ * uploaded to. If null, the default user creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_GroupEntry The inserted group entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertGroup($group, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain();
+ }
+ $newEntry = $this->insertEntry($group, $uri, 'Zend_Gdata_Gapps_GroupEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new member from a MemberEntry.
+ *
+ * @param Zend_Gdata_Gapps_MemberEntry $member The member entry to insert.
+ * @param string $uri (optional) The URI where the group should be
+ * uploaded to. If null, the default user creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_MemberEntry The inserted member entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertMember($member, $uri = null)
+ {
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($member, $uri, 'Zend_Gdata_Gapps_MemberEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new group from a OwnerEntry.
+ *
+ * @param Zend_Gdata_Gapps_OwnerEntry $owner The owner entry to insert.
+ * @param string $uri (optional) The URI where the owner should be
+ * uploaded to. If null, the default user creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_OwnerEntry The inserted owner entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertOwner($owner, $uri = null)
+ {
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($owner, $uri, 'Zend_Gdata_Gapps_OwnerEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new email list from an EmailListEntry.
+ *
+ * @param Zend_Gdata_Gapps_EmailListEntry $emailList The email list entry
+ * to insert.
+ * @param string $uri (optional) The URI where the email list should be
+ * uploaded to. If null, the default email list creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_EmailListEntry The inserted email list entry
+ * as returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertEmailList($emailList, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = $this->getBaseUrl() . self::APPS_EMAIL_LIST_PATH;
+ }
+ $newEntry = $this->insertEntry($emailList, $uri, 'Zend_Gdata_Gapps_EmailListEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new email list recipient from an EmailListRecipientEntry.
+ *
+ * @param Zend_Gdata_Gapps_EmailListRecipientEntry $recipient The recipient
+ * entry to insert.
+ * @param string $uri (optional) The URI where the recipient should be
+ * uploaded to. If null, the default recipient creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Gapps_EmailListRecipientEntry The inserted
+ * recipient entry as returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function insertEmailListRecipient($recipient, $uri = null)
+ {
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ } elseif ($uri instanceof Zend_Gdata_Gapps_EmailListEntry) {
+ $uri = $uri->getLink('edit')->href;
+ }
+ $newEntry = $this->insertEntry($recipient, $uri, 'Zend_Gdata_Gapps_EmailListRecipientEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Provides a magic factory method to instantiate new objects with
+ * shorter syntax than would otherwise be required by the Zend Framework
+ * naming conventions. For more information, see Zend_Gdata_App::__call().
+ *
+ * This overrides the default behavior of __call() so that query classes
+ * do not need to have their domain manually set when created with
+ * a magic factory method.
+ *
+ * @see Zend_Gdata_App::__call()
+ * @param string $method The method name being called
+ * @param array $args The arguments passed to the call
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function __call($method, $args) {
+ if (preg_match('/^new(\w+Query)/', $method, $matches)) {
+ $class = $matches[1];
+ $foundClassName = null;
+ foreach ($this->_registeredPackages as $name) {
+ try {
+ // Autoloading disabled on next line for compatibility
+ // with magic factories. See ZF-6660.
+ if (!class_exists($name . '_' . $class, false)) {
+ require_once 'Zend/Loader.php';
+ @Zend_Loader::loadClass($name . '_' . $class);
+ }
+ $foundClassName = $name . '_' . $class;
+ break;
+ } catch (Zend_Exception $e) {
+ // package wasn't here- continue searching
+ }
+ }
+ if ($foundClassName != null) {
+ $reflectionObj = new ReflectionClass($foundClassName);
+ // Prepend the domain to the query
+ $args = array_merge(array($this->getDomain()), $args);
+ return $reflectionObj->newInstanceArgs($args);
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "Unable to find '${class}' in registered packages");
+ }
+ } else {
+ return parent::__call($method, $args);
+ }
+
+ }
+
+ // Convenience methods
+ // Specified at http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html#appendix_e
+
+ /**
+ * Create a new user entry and send it to the Google Apps servers.
+ *
+ * @param string $username The username for the new user.
+ * @param string $givenName The given name for the new user.
+ * @param string $familyName The family name for the new user.
+ * @param string $password The password for the new user as a plaintext string
+ * (if $passwordHashFunction is null) or a SHA-1 hashed
+ * value (if $passwordHashFunction = 'SHA-1').
+ * @param string $quotaLimitInMB (optional) The quota limit for the new user in MB.
+ * @return Zend_Gdata_Gapps_UserEntry (optional) The new user entry as returned by
+ * server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function createUser ($username, $givenName, $familyName, $password,
+ $passwordHashFunction = null, $quotaLimitInMB = null) {
+ $user = $this->newUserEntry();
+ $user->login = $this->newLogin();
+ $user->login->username = $username;
+ $user->login->password = $password;
+ $user->login->hashFunctionName = $passwordHashFunction;
+ $user->name = $this->newName();
+ $user->name->givenName = $givenName;
+ $user->name->familyName = $familyName;
+ if ($quotaLimitInMB !== null) {
+ $user->quota = $this->newQuota();
+ $user->quota->limit = $quotaLimitInMB;
+ }
+ return $this->insertUser($user);
+ }
+
+ /**
+ * Retrieve a user based on their username.
+ *
+ * @param string $username The username to search for.
+ * @return Zend_Gdata_Gapps_UserEntry The username to search for, or null
+ * if no match found.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function retrieveUser ($username) {
+ $query = $this->newUserQuery($username);
+ try {
+ $user = $this->getUserEntry($query);
+ } catch (Zend_Gdata_Gapps_ServiceException $e) {
+ // Set the user to null if not found
+ if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
+ $user = null;
+ } else {
+ throw $e;
+ }
+ }
+ return $user;
+ }
+
+ /**
+ * Retrieve a page of users in alphabetical order, starting with the
+ * provided username.
+ *
+ * @param string $startUsername (optional) The first username to retrieve.
+ * If null or not declared, the page will begin with the first
+ * user in the domain.
+ * @return Zend_Gdata_Gapps_UserFeed Collection of Zend_Gdata_UserEntry
+ * objects representing all users in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfUsers ($startUsername = null) {
+ $query = $this->newUserQuery();
+ $query->setStartUsername($startUsername);
+ return $this->getUserFeed($query);
+ }
+
+ /**
+ * Retrieve all users in the current domain. Be aware that
+ * calling this function on a domain with many users will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @return Zend_Gdata_Gapps_UserFeed Collection of Zend_Gdata_UserEntry
+ * objects representing all users in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveAllUsers () {
+ return $this->retrieveAllEntriesForFeed($this->retrievePageOfUsers());
+ }
+
+ /**
+ * Overwrite a specified username with the provided UserEntry. The
+ * UserEntry does not need to contain an edit link.
+ *
+ * This method is provided for compliance with the Google Apps
+ * Provisioning API specification. Normally users will instead want to
+ * call UserEntry::save() instead.
+ *
+ * @see Zend_Gdata_App_Entry::save
+ * @param string $username The username whose data will be overwritten.
+ * @param Zend_Gdata_Gapps_UserEntry $userEntry The user entry which
+ * will be overwritten.
+ * @return Zend_Gdata_Gapps_UserEntry The UserEntry returned by the
+ * server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function updateUser($username, $userEntry) {
+ return $this->updateEntry($userEntry, $this->getBaseUrl() .
+ self::APPS_USER_PATH . '/' . $username);
+ }
+
+ /**
+ * Mark a given user as suspended.
+ *
+ * @param string $username The username associated with the user who
+ * should be suspended.
+ * @return Zend_Gdata_Gapps_UserEntry The UserEntry for the modified
+ * user.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function suspendUser($username) {
+ $user = $this->retrieveUser($username);
+ $user->login->suspended = true;
+ return $user->save();
+ }
+
+ /**
+ * Mark a given user as not suspended.
+ *
+ * @param string $username The username associated with the user who
+ * should be restored.
+ * @return Zend_Gdata_Gapps_UserEntry The UserEntry for the modified
+ * user.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function restoreUser($username) {
+ $user = $this->retrieveUser($username);
+ $user->login->suspended = false;
+ return $user->save();
+ }
+
+ /**
+ * Delete a user by username.
+ *
+ * @param string $username The username associated with the user who
+ * should be deleted.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function deleteUser($username) {
+ $this->delete($this->getBaseUrl() . self::APPS_USER_PATH . '/' .
+ $username);
+ }
+
+ /**
+ * Create a nickname for a given user.
+ *
+ * @param string $username The username to which the new nickname should
+ * be associated.
+ * @param string $nickname The new nickname to be created.
+ * @return Zend_Gdata_Gapps_NicknameEntry The nickname entry which was
+ * created by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function createNickname($username, $nickname) {
+ $entry = $this->newNicknameEntry();
+ $nickname = $this->newNickname($nickname);
+ $login = $this->newLogin($username);
+ $entry->nickname = $nickname;
+ $entry->login = $login;
+ return $this->insertNickname($entry);
+ }
+
+ /**
+ * Retrieve the entry for a specified nickname.
+ *
+ * @param string $nickname The nickname to be retrieved.
+ * @return Zend_Gdata_Gapps_NicknameEntry The requested nickname entry.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveNickname($nickname) {
+ $query = $this->newNicknameQuery();
+ $query->setNickname($nickname);
+ try {
+ $nickname = $this->getNicknameEntry($query);
+ } catch (Zend_Gdata_Gapps_ServiceException $e) {
+ // Set the nickname to null if not found
+ if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
+ $nickname = null;
+ } else {
+ throw $e;
+ }
+ }
+ return $nickname;
+ }
+
+ /**
+ * Retrieve all nicknames associated with a specific username.
+ *
+ * @param string $username The username whose nicknames should be
+ * returned.
+ * @return Zend_Gdata_Gapps_NicknameFeed A feed containing all nicknames
+ * for the given user, or null if
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveNicknames($username) {
+ $query = $this->newNicknameQuery();
+ $query->setUsername($username);
+ $nicknameFeed = $this->retrieveAllEntriesForFeed(
+ $this->getNicknameFeed($query));
+ return $nicknameFeed;
+ }
+
+ /**
+ * Retrieve a page of nicknames in alphabetical order, starting with the
+ * provided nickname.
+ *
+ * @param string $startNickname (optional) The first nickname to
+ * retrieve. If null or not declared, the page will begin with
+ * the first nickname in the domain.
+ * @return Zend_Gdata_Gapps_NicknameFeed Collection of Zend_Gdata_NicknameEntry
+ * objects representing all nicknames in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfNicknames ($startNickname = null) {
+ $query = $this->newNicknameQuery();
+ $query->setStartNickname($startNickname);
+ return $this->getNicknameFeed($query);
+ }
+
+ /**
+ * Retrieve all nicknames in the current domain. Be aware that
+ * calling this function on a domain with many nicknames will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @return Zend_Gdata_Gapps_NicknameFeed Collection of Zend_Gdata_NicknameEntry
+ * objects representing all nicknames in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveAllNicknames () {
+ return $this->retrieveAllEntriesForFeed($this->retrievePageOfNicknames());
+ }
+
+ /**
+ * Delete a specified nickname.
+ *
+ * @param string $nickname The name of the nickname to be deleted.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function deleteNickname($nickname) {
+ $this->delete($this->getBaseUrl() . self::APPS_NICKNAME_PATH . '/' . $nickname);
+ }
+
+ /**
+ * Create a new group.
+ *
+ * @param string $groupId A unique identifier for the group
+ * @param string $groupName The name of the group
+ * @param string $description A description of the group
+ * @param string $emailPermission The subscription permission of the group
+ * @return Zend_Gdata_Gapps_GroupEntry The group entry as created on the server.
+ */
+ public function createGroup($groupId, $groupName, $description = null, $emailPermission = null)
+ {
+ $i = 0;
+ $group = $this->newGroupEntry();
+
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'groupId';
+ $properties[$i]->value = $groupId;
+ $i++;
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'groupName';
+ $properties[$i]->value = $groupName;
+ $i++;
+
+ if($description != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'description';
+ $properties[$i]->value = $description;
+ $i++;
+ }
+
+ if($emailPermission != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'emailPermission';
+ $properties[$i]->value = $emailPermission;
+ $i++;
+ }
+
+ $group->property = $properties;
+
+ return $this->insertGroup($group);
+ }
+
+ /**
+ * Retrieves a group based on group id
+ *
+ * @param string $groupId The unique identifier for the group
+ * @return Zend_Gdata_Gapps_GroupEntry The group entry as returned by the server.
+ */
+ public function retrieveGroup($groupId)
+ {
+ $query = $this->newGroupQuery($groupId);
+ //$query->setGroupId($groupId);
+
+ try {
+ $group = $this->getGroupEntry($query);
+ } catch (Zend_Gdata_Gapps_ServiceException $e) {
+ // Set the group to null if not found
+ if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
+ $group = null;
+ } else {
+ throw $e;
+ }
+ }
+ return $group;
+ }
+
+ /**
+ * Retrieve all groups in the current domain. Be aware that
+ * calling this function on a domain with many groups will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @return Zend_Gdata_Gapps_GroupFeed Collection of Zend_Gdata_GroupEntry objects
+ * representing all groups apart of the domain.
+ */
+ public function retrieveAllGroups()
+ {
+ return $this->retrieveAllEntriesForFeed($this->retrievePageOfGroups());
+ }
+
+ /**
+ * Delete a group
+ *
+ * @param string $groupId The unique identifier for the group
+ */
+ public function deleteGroup($groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId;
+
+ $this->delete($uri);
+ }
+
+ /**
+ * Check to see if a member id or group id is a member of group
+ *
+ * @param string $memberId Member id or group group id
+ * @param string $groupId Group to be checked for
+ * @return bool True, if given entity is a member
+ */
+ public function isMember($memberId, $groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/member/' . $memberId;
+
+ //if the enitiy is not a member, an exception is thrown
+ try {
+ $results = $this->get($uri);
+ } catch (Exception $e) {
+ $results = false;
+ }
+
+ if($results) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+
+ /**
+ * Add an email address to a group as a member
+ *
+ * @param string $recipientAddress Email address, member id, or group id
+ * @param string $groupId The unique id of the group
+ * @return Zend_Gdata_Gapps_MemberEntry The member entry returned by the server
+ */
+ public function addMemberToGroup($recipientAddress, $groupId)
+ {
+ $member = $this->newMemberEntry();
+
+ $properties[] = $this->newProperty();
+ $properties[0]->name = 'memberId';
+ $properties[0]->value = $recipientAddress;
+
+ $member->property = $properties;
+
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/member';
+
+ return $this->insertMember($member, $uri);
+ }
+
+ /**
+ * Remove a member id from a group
+ *
+ * @param string $memberId Member id or group id
+ * @param string $groupId The unique id of the group
+ */
+ public function removeMemberFromGroup($memberId, $groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/member/' . $memberId;
+
+ return $this->delete($uri);
+ }
+
+ /**
+ * Retrieves all the members of a group
+ *
+ * @param string $groupId The unique id of the group
+ * @return Zend_Gdata_Gapps_MemberFeed Collection of MemberEntry objects
+ * representing all members apart of the group.
+ */
+ public function retrieveAllMembers($groupId)
+ {
+ return $this->retrieveAllEntriesForFeed(
+ $this->retrievePageOfMembers($groupId));
+ }
+
+ /**
+ * Add an email as an owner of a group
+ *
+ * @param string $email Owner's email
+ * @param string $groupId Group ownership to be checked for
+ * @return Zend_Gdata_Gapps_OwnerEntry The OwnerEntry returned by the server
+ */
+ public function addOwnerToGroup($email, $groupId)
+ {
+ $owner = $this->newOwnerEntry();
+
+ $properties[] = $this->newProperty();
+ $properties[0]->name = 'email';
+ $properties[0]->value = $email;
+
+ $owner->property = $properties;
+
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/owner';
+
+ return $this->insertOwner($owner, $uri);
+ }
+
+ /**
+ * Retrieves all the owners of a group
+ *
+ * @param string $groupId The unique identifier for the group
+ * @return Zend_Gdata_Gapps_OwnerFeed Collection of Zend_Gdata_OwnerEntry
+ * objects representing all owners apart of the group.
+ */
+ public function retrieveGroupOwners($groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/owner';
+
+ return $this->getOwnerFeed($uri);
+ }
+
+ /**
+ * Checks to see if an email is an owner of a group
+ *
+ * @param string $email Owner's email
+ * @param string $groupId Group ownership to be checked for
+ * @return bool True, if given entity is an owner
+ */
+ public function isOwner($email, $groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/owner/' . $email;
+
+ //if the enitiy is not an owner of the group, an exception is thrown
+ try {
+ $results = $this->get($uri);
+ } catch (Exception $e) {
+ $results = false;
+ }
+
+ if($results) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+
+ /**
+ * Remove email as an owner of a group
+ *
+ * @param string $email Owner's email
+ * @param string $groupId The unique identifier for the group
+ */
+ public function removeOwnerFromGroup($email, $groupId)
+ {
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId . '/owner/' . $email;
+
+ return $this->delete($uri);
+ }
+
+ /**
+ * Update group properties with new values. any property not defined will not
+ * be updated
+ *
+ * @param string $groupId A unique identifier for the group
+ * @param string $groupName The name of the group
+ * @param string $description A description of the group
+ * @param string $emailPermission The subscription permission of the group
+ * @return Zend_Gdata_Gapps_GroupEntry The group entry as updated on the server.
+ */
+ public function updateGroup($groupId, $groupName = null, $description = null,
+ $emailPermission = null)
+ {
+ $i = 0;
+ $group = $this->newGroupEntry();
+
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'groupId';
+ $properties[$i]->value = $groupId;
+ $i++;
+
+ if($groupName != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'groupName';
+ $properties[$i]->value = $groupName;
+ $i++;
+ }
+
+ if($description != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'description';
+ $properties[$i]->value = $description;
+ $i++;
+ }
+
+ if($emailPermission != null) {
+ $properties[$i] = $this->newProperty();
+ $properties[$i]->name = 'emailPermission';
+ $properties[$i]->value = $emailPermission;
+ $i++;
+ }
+
+ $group->property = $properties;
+
+ $uri = self::APPS_BASE_FEED_URI . self::APPS_GROUP_PATH . '/';
+ $uri .= $this->getDomain() . '/' . $groupId;
+
+ return $this->updateEntry($group, $uri, 'Zend_Gdata_Gapps_GroupEntry');
+ }
+
+ /**
+ * Retrieve all of the groups that a user is a member of
+ *
+ * @param string $memberId Member username
+ * @param bool $directOnly (Optional) If true, members with direct association
+ * only will be considered
+ * @return Zend_Gdata_Gapps_GroupFeed Collection of Zend_Gdata_GroupEntry
+ * objects representing all groups member is apart of in the domain.
+ */
+ public function retrieveGroups($memberId, $directOnly = null)
+ {
+ $query = $this->newGroupQuery();
+ $query->setMember($memberId);
+ if($directOnly != null) {
+ $query->setDirectOnly($directOnly);
+ }
+ return $this->getGroupFeed($query);
+ }
+
+ /**
+ * Retrieve a page of groups in alphabetical order, starting with the
+ * provided group.
+ *
+ * @param string $startGroup (optional) The first group to
+ * retrieve. If null or not defined, the page will begin
+ * with the first group in the domain.
+ * @return Zend_Gdata_Gapps_GroupFeed Collection of Zend_Gdata_GroupEntry
+ * objects representing the groups in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfGroups ($startGroup = null)
+ {
+ $query = $this->newGroupQuery();
+ $query->setStartGroupId($startGroup);
+ return $this->getGroupFeed($query);
+ }
+
+ /**
+ * Gets page of Members
+ *
+ * @param string $groupId The group id which should be searched.
+ * @param string $startMember (optinal) The address of the first member,
+ * or null to start with the first member in the list.
+ * @return Zend_Gdata_Gapps_MemberFeed Collection of Zend_Gdata_MemberEntry
+ * objects
+ */
+ public function retrievePageOfMembers($groupId, $startMember = null)
+ {
+ $query = $this->newMemberQuery($groupId);
+ $query->setStartMemberId($startMember);
+ return $this->getMemberFeed($query);
+ }
+
+ /**
+ * Create a new email list.
+ *
+ * @param string $emailList The name of the email list to be created.
+ * @return Zend_Gdata_Gapps_EmailListEntry The email list entry
+ * as created on the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function createEmailList($emailList) {
+ $entry = $this->newEmailListEntry();
+ $list = $this->newEmailList();
+ $list->name = $emailList;
+ $entry->emailList = $list;
+ return $this->insertEmailList($entry);
+ }
+
+ /**
+ * Retrieve all email lists associated with a recipient.
+ *
+ * @param string $username The recipient whose associated email lists
+ * should be returned.
+ * @return Zend_Gdata_Gapps_EmailListFeed The list of email lists found as
+ * Zend_Gdata_EmailListEntry objects.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveEmailLists($recipient) {
+ $query = $this->newEmailListQuery();
+ $query->recipient = $recipient;
+ return $this->getEmailListFeed($query);
+ }
+
+ /**
+ * Retrieve a page of email lists in alphabetical order, starting with the
+ * provided email list.
+ *
+ * @param string $startEmailListName (optional) The first list to
+ * retrieve. If null or not defined, the page will begin
+ * with the first email list in the domain.
+ * @return Zend_Gdata_Gapps_EmailListFeed Collection of Zend_Gdata_EmailListEntry
+ * objects representing all nicknames in the domain.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfEmailLists ($startNickname = null) {
+ $query = $this->newEmailListQuery();
+ $query->setStartEmailListName($startNickname);
+ return $this->getEmailListFeed($query);
+ }
+
+ /**
+ * Retrieve all email lists associated with the curent domain. Be aware that
+ * calling this function on a domain with many email lists will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @return Zend_Gdata_Gapps_EmailListFeed The list of email lists found
+ * as Zend_Gdata_Gapps_EmailListEntry objects.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveAllEmailLists() {
+ return $this->retrieveAllEntriesForFeed($this->retrievePageOfEmailLists());
+ }
+
+ /**
+ * Delete a specified email list.
+ *
+ * @param string $emailList The name of the emailList to be deleted.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function deleteEmailList($emailList) {
+ $this->delete($this->getBaseUrl() . self::APPS_EMAIL_LIST_PATH . '/'
+ . $emailList);
+ }
+
+ /**
+ * Add a specified recipient to an existing emailList.
+ *
+ * @param string $recipientAddress The address of the recipient to be
+ * added to the email list.
+ * @param string $emailList The name of the email address to which the
+ * recipient should be added.
+ * @return Zend_Gdata_Gapps_EmailListRecipientEntry The recipient entry
+ * created by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function addRecipientToEmailList($recipientAddress, $emailList) {
+ $entry = $this->newEmailListRecipientEntry();
+ $who = $this->newWho();
+ $who->email = $recipientAddress;
+ $entry->who = $who;
+ $address = $this->getBaseUrl() . self::APPS_EMAIL_LIST_PATH . '/' .
+ $emailList . self::APPS_EMAIL_LIST_RECIPIENT_POSTFIX . '/';
+ return $this->insertEmailListRecipient($entry, $address);
+ }
+
+ /**
+ * Retrieve a page of email list recipients in alphabetical order,
+ * starting with the provided email list recipient.
+ *
+ * @param string $emaiList The email list which should be searched.
+ * @param string $startRecipient (optinal) The address of the first
+ * recipient, or null to start with the first recipient in
+ * the list.
+ * @return Zend_Gdata_Gapps_EmailListRecipientFeed Collection of
+ * Zend_Gdata_EmailListRecipientEntry objects representing all
+ * recpients in the specified list.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrievePageOfRecipients ($emailList,
+ $startRecipient = null) {
+ $query = $this->newEmailListRecipientQuery();
+ $query->setEmailListName($emailList);
+ $query->setStartRecipient($startRecipient);
+ return $this->getEmailListRecipientFeed($query);
+ }
+
+ /**
+ * Retrieve all recipients associated with an email list. Be aware that
+ * calling this function on a domain with many email lists will take a
+ * signifigant amount of time to complete. On larger domains this may
+ * may cause execution to timeout without proper precautions in place.
+ *
+ * @param string $emaiList The email list which should be searched.
+ * @return Zend_Gdata_Gapps_EmailListRecipientFeed The list of email lists
+ * found as Zend_Gdata_Gapps_EmailListRecipientEntry objects.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function retrieveAllRecipients($emailList) {
+ return $this->retrieveAllEntriesForFeed(
+ $this->retrievePageOfRecipients($emailList));
+ }
+
+ /**
+ * Remove a specified recipient from an email list.
+ *
+ * @param string $recipientAddress The recipient to be removed.
+ * @param string $emailList The list from which the recipient should
+ * be removed.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ * @throws Zend_Gdata_Gapps_ServiceException
+ */
+ public function removeRecipientFromEmailList($recipientAddress, $emailList) {
+ $this->delete($this->getBaseUrl() . self::APPS_EMAIL_LIST_PATH . '/'
+ . $emailList . self::APPS_EMAIL_LIST_RECIPIENT_POSTFIX . '/'
+ . $recipientAddress);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/EmailListEntry.php b/zend/library/Zend/Gdata/Gapps/EmailListEntry.php
new file mode 100644
index 0000000..b31e43f
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/EmailListEntry.php
@@ -0,0 +1,214 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EmailListEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension_FeedLink
+ */
+require_once 'Zend/Gdata/Extension/FeedLink.php';
+
+/**
+ * @see Zend_Gdata_Gapps_Extension_EmailList
+ */
+require_once 'Zend/Gdata/Gapps/Extension/EmailList.php';
+
+/**
+ * Data model class for a Google Apps Email List Entry.
+ *
+ * Each email list entry describes a single email list within a Google Apps
+ * hosted domain. Email lists may contain multiple recipients, as
+ * described by instances of Zend_Gdata_Gapps_EmailListRecipient. Multiple
+ * entries are contained within instances of Zend_Gdata_Gapps_EmailListFeed.
+ *
+ * To transfer email list entries to and from the Google Apps servers,
+ * including creating new entries, refer to the Google Apps service class,
+ * Zend_Gdata_Gapps.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_EmailListEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_EmailListEntry';
+
+ /**
+ * <apps:emailList> child element containing general information about
+ * this email list.
+ *
+ * @var Zend_Gdata_Gapps_Extension_EmailList
+ */
+ protected $_emailList = null;
+
+ /**
+ * <gd:feedLink> element containing information about other feeds
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Extension_FeedLink
+ */
+ protected $_feedLink = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_emailList !== null) {
+ $element->appendChild($this->_emailList->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('apps') . ':' . 'emailList';
+ $emailList = new Zend_Gdata_Gapps_Extension_EmailList();
+ $emailList->transferFromDOM($child);
+ $this->_emailList = $emailList;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink';
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Retrieve the email list property for this entry.
+ *
+ * @see setEmailList
+ * @return Zend_Gdata_Gapps_Extension_EmailList The requested object
+ * or null if not set.
+ */
+ public function getEmailList()
+ {
+ return $this->_emailList;
+ }
+
+ /**
+ * Set the email list property for this entry. This property contains
+ * information such as the name of this email list.
+ *
+ * This corresponds to the <apps:emailList> property in the Google Data
+ * protocol.
+ *
+ * @param Zend_Gdata_Gapps_Extension_EmailList $value The desired value
+ * this element, or null to unset.
+ * @return Zend_Gdata_Gapps_EventEntry Provides a fluent interface
+ */
+ public function setEmailList($value)
+ {
+ $this->_emailList = $value;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the feed link property for this entry. Feed links provide
+ * information about other feeds associated with this entry.
+ *
+ * This corresponds to the <gd:feedLink> property in the Google Data
+ * protocol.
+ *
+ * @param array $value A collection of Zend_Gdata_Gapps_Extension_FeedLink
+ * instances representing all feed links for this entry, or
+ * null to unset.
+ * @return Zend_Gdata_Gapps_EventEntry Provides a fluent interface
+ */
+ public function setFeedLink($value)
+ {
+ $this->_feedLink = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/EmailListFeed.php b/zend/library/Zend/Gdata/Gapps/EmailListFeed.php
new file mode 100644
index 0000000..92fde8b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/EmailListFeed.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EmailListFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_EmailListEntry
+ */
+require_once 'Zend/Gdata/Gapps/EmailListEntry.php';
+
+/**
+ * Data model for a collection of Google Apps email list entries, usually
+ * provided by the Google Apps servers.
+ *
+ * For information on requesting this feed from a server, see the Google
+ * Apps service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_EmailListFeed extends Zend_Gdata_Feed
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_EmailListEntry';
+ protected $_feedClassName = 'Zend_Gdata_Gapps_EmailListFeed';
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/EmailListQuery.php b/zend/library/Zend/Gdata/Gapps/EmailListQuery.php
new file mode 100644
index 0000000..2502824
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/EmailListQuery.php
@@ -0,0 +1,187 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EmailListQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Gapps_Query
+ */
+require_once('Zend/Gdata/Gapps/Query.php');
+
+/**
+ * Assists in constructing queries for Google Apps email list entries.
+ * Instances of this class can be provided in many places where a URL is
+ * required.
+ *
+ * For information on submitting queries to a server, see the Google Apps
+ * service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_EmailListQuery extends Zend_Gdata_Gapps_Query
+{
+
+ /**
+ * A string which, if not null, indicates which email list should
+ * be retrieved by this query.
+ *
+ * @var string
+ */
+ protected $_emailListName = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param string $domain (optional) The Google Apps-hosted domain to use
+ * when constructing query URIs.
+ * @param string $emailListName (optional) Value for the emailListName
+ * property.
+ * @param string $recipient (optional) Value for the recipient
+ * property.
+ * @param string $startEmailListName (optional) Value for the
+ * startEmailListName property.
+ */
+ public function __construct($domain = null, $emailListName = null,
+ $recipient = null, $startEmailListName = null)
+ {
+ parent::__construct($domain);
+ $this->setEmailListName($emailListName);
+ $this->setRecipient($recipient);
+ $this->setStartEmailListName($startEmailListName);
+ }
+
+ /**
+ * Set the email list name to query for. When set, only lists with a name
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by list name.
+ *
+ * @param string $value The email list name to filter search results by,
+ * or null to disable.
+ */
+ public function setEmailListName($value)
+ {
+ $this->_emailListName = $value;
+ }
+
+ /**
+ * Get the email list name to query for. If no name is set, null will be
+ * returned.
+ *
+ * @see setEmailListName
+ * @return string The email list name to filter search results by, or null
+ * if disabled.
+ */
+ public function getEmailListName()
+ {
+ return $this->_emailListName;
+ }
+
+ /**
+ * Set the recipient to query for. When set, only subscribers with an
+ * email address matching this value will be returned in search results.
+ * Set to null to disable filtering by username.
+ *
+ * @param string $value The recipient email address to filter search
+ * results by, or null to disable.
+ */
+ public function setRecipient($value)
+ {
+ if ($value !== null) {
+ $this->_params['recipient'] = $value;
+ }
+ else {
+ unset($this->_params['recipient']);
+ }
+ }
+
+ /**
+ * Get the recipient email address to query for. If no recipient is set,
+ * null will be returned.
+ *
+ * @see setRecipient
+ * @return string The recipient email address to filter search results by,
+ * or null if disabled.
+ */
+ public function getRecipient()
+ {
+ if (array_key_exists('recipient', $this->_params)) {
+ return $this->_params['recipient'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the first email list which should be displayed when retrieving
+ * a list of email lists.
+ *
+ * @param string $value The first email list to be returned, or null to
+ * disable.
+ */
+ public function setStartEmailListName($value)
+ {
+ if ($value !== null) {
+ $this->_params['startEmailListName'] = $value;
+ } else {
+ unset($this->_params['startEmailListName']);
+ }
+ }
+
+ /**
+ * Get the first email list which should be displayed when retrieving
+ * a list of email lists.
+ *
+ * @return string The first email list to be returned, or null to
+ * disable.
+ */
+ public function getStartEmailListName()
+ {
+ if (array_key_exists('startEmailListName', $this->_params)) {
+ return $this->_params['startEmailListName'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = $this->getBaseUrl();
+ $uri .= Zend_Gdata_Gapps::APPS_EMAIL_LIST_PATH;
+ if ($this->_emailListName !== null) {
+ $uri .= '/' . $this->_emailListName;
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/EmailListRecipientEntry.php b/zend/library/Zend/Gdata/Gapps/EmailListRecipientEntry.php
new file mode 100644
index 0000000..961afd0
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/EmailListRecipientEntry.php
@@ -0,0 +1,146 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EmailListRecipientEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension_Who
+ */
+require_once 'Zend/Gdata/Extension/Who.php';
+
+/**
+ * Data model class for a Google Apps Email List Recipient Entry.
+ *
+ * Each instance of this class represents a recipient of an email list
+ * hosted on a Google Apps domain. Each email list may contain multiple
+ * recipients. Email lists themselves are described by
+ * Zend_Gdata_EmailListEntry. Multiple recipient entries are contained within
+ * instances of Zend_Gdata_Gapps_EmailListRecipientFeed.
+ *
+ * To transfer email list recipients to and from the Google Apps servers,
+ * including creating new recipients, refer to the Google Apps service class,
+ * Zend_Gdata_Gapps.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_EmailListRecipientEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_EmailListRecipientEntry';
+
+ /**
+ * <gd:who> element used to store the email address of the current
+ * recipient. Only the email property of this element should be
+ * populated.
+ *
+ * @var Zend_Gdata_Extension_Who
+ */
+ protected $_who = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_who !== null) {
+ $element->appendChild($this->_who->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'who';
+ $who = new Zend_Gdata_Extension_Who();
+ $who->transferFromDOM($child);
+ $this->_who = $who;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value of the who property for this object.
+ *
+ * @see setWho
+ * @return Zend_Gdata_Extension_Who The requested object.
+ */
+ public function getWho()
+ {
+ return $this->_who;
+ }
+
+ /**
+ * Set the value of the who property for this object. This property
+ * is used to store the email address of the current recipient.
+ *
+ * @param Zend_Gdata_Extension_Who $value The desired value for this
+ * instance's who property.
+ * @return Zend_Gdata_Gapps_EventEntry Provides a fluent interface.
+ */
+ public function setWho($value)
+ {
+ $this->_who = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/EmailListRecipientFeed.php b/zend/library/Zend/Gdata/Gapps/EmailListRecipientFeed.php
new file mode 100644
index 0000000..8f17984
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/EmailListRecipientFeed.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EmailListRecipientFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_EmailListRecipientEntry
+ */
+require_once 'Zend/Gdata/Gapps/EmailListRecipientEntry.php';
+
+/**
+ * Data model for a collection of Google Apps email list recipient entries,
+ * usually provided by the Google Apps servers.
+ *
+ * For information on requesting this feed from a server, see the Google
+ * Apps service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_EmailListRecipientFeed extends Zend_Gdata_Feed
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_EmailListRecipientEntry';
+ protected $_feedClassName = 'Zend_Gdata_Gapps_EmailListRecipientFeed';
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/EmailListRecipientQuery.php b/zend/library/Zend/Gdata/Gapps/EmailListRecipientQuery.php
new file mode 100644
index 0000000..94ad16c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/EmailListRecipientQuery.php
@@ -0,0 +1,153 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EmailListRecipientQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Gapps_Query
+ */
+require_once('Zend/Gdata/Gapps/Query.php');
+
+/**
+ * Assists in constructing queries for Google Apps email list recipient
+ * entries. Instances of this class can be provided in many places where a
+ * URL is required.
+ *
+ * For information on submitting queries to a server, see the Google Apps
+ * service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_EmailListRecipientQuery extends Zend_Gdata_Gapps_Query
+{
+
+ /**
+ * If not null, specifies the name of the email list which
+ * should be requested by this query.
+ *
+ * @var string
+ */
+ protected $_emailListName = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param string $domain (optional) The Google Apps-hosted domain to use
+ * when constructing query URIs.
+ * @param string $emailListName (optional) Value for the emailListName
+ * property.
+ * @param string $startRecipient (optional) Value for the
+ * startRecipient property.
+ */
+ public function __construct($domain = null, $emailListName = null,
+ $startRecipient = null)
+ {
+ parent::__construct($domain);
+ $this->setEmailListName($emailListName);
+ $this->setStartRecipient($startRecipient);
+ }
+
+ /**
+ * Set the email list name to query for. When set, only lists with a name
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by list name.
+ *
+ * @param string $value The email list name to filter search results by,
+ * or null to disable.
+ */
+ public function setEmailListName($value)
+ {
+ $this->_emailListName = $value;
+ }
+
+ /**
+ * Get the email list name to query for. If no name is set, null will be
+ * returned.
+ *
+ * @param string $value The email list name to filter search results by,
+ * or null if disabled.
+ */
+ public function getEmailListName()
+ {
+ return $this->_emailListName;
+ }
+
+ /**
+ * Set the first recipient which should be displayed when retrieving
+ * a list of email list recipients.
+ *
+ * @param string $value The first recipient to be returned, or null to
+ * disable.
+ */
+ public function setStartRecipient($value)
+ {
+ if ($value !== null) {
+ $this->_params['startRecipient'] = $value;
+ } else {
+ unset($this->_params['startRecipient']);
+ }
+ }
+
+ /**
+ * Get the first recipient which should be displayed when retrieving
+ * a list of email list recipients.
+ *
+ * @return string The first recipient to be returned, or null if
+ * disabled.
+ */
+ public function getStartRecipient()
+ {
+ if (array_key_exists('startRecipient', $this->_params)) {
+ return $this->_params['startRecipient'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = $this->getBaseUrl();
+ $uri .= Zend_Gdata_Gapps::APPS_EMAIL_LIST_PATH;
+ if ($this->_emailListName !== null) {
+ $uri .= '/' . $this->_emailListName;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'EmailListName must not be null');
+ }
+ $uri .= Zend_Gdata_Gapps::APPS_EMAIL_LIST_RECIPIENT_POSTFIX . '/';
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/Error.php b/zend/library/Zend/Gdata/Gapps/Error.php
new file mode 100644
index 0000000..7a7a73f
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/Error.php
@@ -0,0 +1,233 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Error.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+
+/**
+ * Zend_Gdata_App_Base
+ */
+require_once 'Zend/Gdata/App/Base.php';
+
+/**
+ * Gdata Gapps Error class. This class is used to represent errors returned
+ * within an AppsForYourDomainErrors message received from the Google Apps
+ * servers.
+ *
+ * Several different errors may be represented by this class, determined by
+ * the error code returned by the server. For a list of error codes
+ * available at the time of this writing, see getErrorCode.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_Error extends Zend_Gdata_App_Base
+{
+
+ // Error codes as defined at
+ // http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html#appendix_d
+
+ const UNKNOWN_ERROR = 1000;
+ const USER_DELETED_RECENTLY = 1100;
+ const USER_SUSPENDED = 1101;
+ const DOMAIN_USER_LIMIT_EXCEEDED = 1200;
+ const DOMAIN_ALIAS_LIMIT_EXCEEDED = 1201;
+ const DOMAIN_SUSPENDED = 1202;
+ const DOMAIN_FEATURE_UNAVAILABLE = 1203;
+ const ENTITY_EXISTS = 1300;
+ const ENTITY_DOES_NOT_EXIST = 1301;
+ const ENTITY_NAME_IS_RESERVED = 1302;
+ const ENTITY_NAME_NOT_VALID = 1303;
+ const INVALID_GIVEN_NAME = 1400;
+ const INVALID_FAMILY_NAME = 1401;
+ const INVALID_PASSWORD = 1402;
+ const INVALID_USERNAME = 1403;
+ const INVALID_HASH_FUNCTION_NAME = 1404;
+ const INVALID_HASH_DIGEST_LENGTH = 1405;
+ const INVALID_EMAIL_ADDRESS = 1406;
+ const INVALID_QUERY_PARAMETER_VALUE = 1407;
+ const TOO_MANY_RECIPIENTS_ON_EMAIL_LIST = 1500;
+
+ protected $_errorCode = null;
+ protected $_reason = null;
+ protected $_invalidInput = null;
+
+ public function __construct($errorCode = null, $reason = null,
+ $invalidInput = null) {
+ parent::__construct("Google Apps error received: $errorCode ($reason)");
+ $this->_errorCode = $errorCode;
+ $this->_reason = $reason;
+ $this->_invalidInput = $invalidInput;
+ }
+
+ /**
+ * Set the error code for this exception. For more information about
+ * error codes, see getErrorCode.
+ *
+ * @see getErrorCode
+ * @param integer $value The new value for the error code.
+ */
+ public function setErrorCode($value) {
+ $this->_errorCode = $value;
+ }
+
+ /**
+ * Get the error code for this exception. Currently valid values are
+ * available as constants within this class. These values are:
+ *
+ * UNKNOWN_ERROR (1000)
+ * USER_DELETED_RECENTLY (1100)
+ * USER_SUSPENDED (1101)
+ * DOMAIN_USER_LIMIT_EXCEEDED (1200)
+ * DOMAIN_ALIAS_LIMIT_EXCEEDED (1201)
+ * DOMAIN_SUSPENDED (1202)
+ * DOMAIN_FEATURE_UNAVAILABLE (1203)
+ * ENTITY_EXISTS (1300)
+ * ENTITY_DOES_NOT_EXIST (1301)
+ * ENTITY_NAME_IS_RESERVED (1302)
+ * ENTITY_NAME_NOT_VALID (1303)
+ * INVALID_GIVEN_NAME (1400)
+ * INVALID_FAMILY_NAME (1401)
+ * INVALID_PASSWORD (1402)
+ * INVALID_USERNAME (1403)
+ * INVALID_HASH_FUNCTION_NAME (1404)
+ * INVALID_HASH_DIGEST_LENGTH (1405)
+ * INVALID_EMAIL_ADDRESS (1406)
+ * INVALID_QUERY_PARAMETER_VALUE (1407)
+ * TOO_MANY_RECIPIENTS_ON_EMAIL_LIST (1500)
+ *
+ * Numbers in parenthesis indicate the actual integer value of the
+ * constant. This list should not be treated as exhaustive, as additional
+ * error codes may be added at any time.
+ *
+ * For more information about these codes and their meaning, please
+ * see Appendix D of the Google Apps Provisioning API Reference.
+ *
+ * @link http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html#appendix_d Google Apps Provisioning API Reference: Appendix D - Gdata Error Codes
+ * @see setErrorCode
+ * @return integer The error code returned by the Google Apps server.
+ */
+ public function getErrorCode() {
+ return $this->_errorCode;
+ }
+
+ /**
+ * Set human-readable text describing the reason this exception occurred.
+ *
+ * @see getReason
+ * @param string $value The reason this exception occurred.
+ */
+ public function setReason($value) {
+ $this->_reason = $value;
+ }
+
+ /**
+ * Get human-readable text describing the reason this exception occurred.
+ *
+ * @see setReason
+ * @return string The reason this exception occurred.
+ */
+ public function getReason() {
+ return $this->_reason;
+ }
+
+ /**
+ * Set the invalid input which caused this exception.
+ *
+ * @see getInvalidInput
+ * @param string $value The invalid input that triggered this exception.
+ */
+ public function setInvalidInput($value) {
+ $this->_invalidInput = $value;
+ }
+
+ /**
+ * Set the invalid input which caused this exception.
+ *
+ * @see setInvalidInput
+ * @return string The reason this exception occurred.
+ */
+ public function getInvalidInput() {
+ return $this->_invalidInput;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_errorCode !== null) {
+ $element->setAttribute('errorCode', $this->_errorCode);
+ }
+ if ($this->_reason !== null) {
+ $element->setAttribute('reason', $this->_reason);
+ }
+ if ($this->_invalidInput !== null) {
+ $element->setAttribute('invalidInput', $this->_invalidInput);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'errorCode':
+ $this->_errorCode = $attribute->nodeValue;
+ break;
+ case 'reason':
+ $this->_reason = $attribute->nodeValue;
+ break;
+ case 'invalidInput':
+ $this->_invalidInput = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get a human readable version of this exception.
+ *
+ * @return string
+ */
+ public function __toString() {
+ return "Error " . $this->getErrorCode() . ": " . $this->getReason() .
+ "\n\tInvalid Input: \"" . $this->getInvalidInput() . "\"";
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/Extension/EmailList.php b/zend/library/Zend/Gdata/Gapps/Extension/EmailList.php
new file mode 100644
index 0000000..0fa1bdf
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/Extension/EmailList.php
@@ -0,0 +1,144 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EmailList.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Gapps
+ */
+require_once 'Zend/Gdata/Gapps.php';
+
+/**
+ * Represents the apps:emailList element used by the Apps data API. This
+ * class represents properties of an email list and is usually contained
+ * within an instance of Zend_Gdata_Gapps_EmailListEntry.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_Extension_EmailList extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'apps';
+ protected $_rootElement = 'emailList';
+
+ /**
+ * The name of the email list. This name is used as the email address
+ * for this list.
+ *
+ * @var string
+ */
+ protected $_name = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Gapps_Extension_EmailList object.
+ *
+ * @param string $name (optional) The name to be used for this email list.
+ */
+ public function __construct($name = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_name = $name;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @see setName
+ * @return string The requested attribute.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value for this element's name attribute. This is the unique
+ * name which will be used to identify this email list within this
+ * domain, and will be used to form this email list's email address.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_EmailList The element being modified.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getName();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/Extension/Login.php b/zend/library/Zend/Gdata/Gapps/Extension/Login.php
new file mode 100644
index 0000000..f958581
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/Extension/Login.php
@@ -0,0 +1,485 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Login.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Gapps
+ */
+require_once 'Zend/Gdata/Gapps.php';
+
+/**
+ * Represents the apps:login element used by the Apps data API. This
+ * class is used to describe properties of a user, and is usually contained
+ * within instances of Zene_Gdata_Gapps_UserEntry or any other class
+ * which is linked to a particular username.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_Extension_Login extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'apps';
+ protected $_rootElement = 'login';
+
+ /**
+ * The username for this user. This is used as the user's email address
+ * and when logging in to Google Apps-hosted services.
+ *
+ * @var string
+ */
+ protected $_username = null;
+
+ /**
+ * The password for the user. May be in cleartext or as an SHA-1
+ * digest, depending on the value of _hashFunctionName.
+ *
+ * @var string
+ */
+ protected $_password = null;
+
+ /**
+ * Specifies whether the password stored in _password is in cleartext
+ * or is an SHA-1 digest of a password. If the password is cleartext,
+ * then this should be null. If the password is an SHA-1 digest, then
+ * this should be set to 'SHA-1'.
+ *
+ * At the time of writing, no other hash functions are supported
+ *
+ * @var string
+ */
+ protected $_hashFunctionName = null;
+
+ /**
+ * True if the user has administrative rights for this domain, false
+ * otherwise.
+ *
+ * @var boolean
+ */
+ protected $_admin = null;
+
+ /**
+ * True if the user has agreed to the terms of service for Google Apps,
+ * false otherwise.
+ *
+ * @var boolean.
+ */
+ protected $_agreedToTerms = null;
+
+ /**
+ * True if this user has been suspended, false otherwise.
+ *
+ * @var boolean
+ */
+ protected $_suspended = null;
+
+ /**
+ * True if the user will be required to change their password at
+ * their next login, false otherwise.
+ *
+ * @var boolean
+ */
+ protected $_changePasswordAtNextLogin = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Gapps_Extension_Login object.
+ *
+ * @param string $username (optional) The username to be used for this
+ * login.
+ * @param string $password (optional) The password to be used for this
+ * login.
+ * @param string $hashFunctionName (optional) The name of the hash
+ * function used to protect the password, or null if no
+ * has function has been applied. As of this writing,
+ * the only valid values are 'SHA-1' or null.
+ * @param boolean $admin (optional) Whether the user is an administrator
+ * or not.
+ * @param boolean $suspended (optional) Whether this login is suspended or not.
+ * @param boolean $changePasswordAtNextLogin (optional) Whether
+ * the user is required to change their password at their
+ * next login.
+ * @param boolean $agreedToTerms (optional) Whether the user has
+ * agreed to the terms of service.
+ */
+ public function __construct($username = null, $password = null,
+ $hashFunctionName = null, $admin = null, $suspended = null,
+ $changePasswordAtNextLogin = null, $agreedToTerms = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_username = $username;
+ $this->_password = $password;
+ $this->_hashFunctionName = $hashFunctionName;
+ $this->_admin = $admin;
+ $this->_agreedToTerms = $agreedToTerms;
+ $this->_suspended = $suspended;
+ $this->_changePasswordAtNextLogin = $changePasswordAtNextLogin;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_username !== null) {
+ $element->setAttribute('userName', $this->_username);
+ }
+ if ($this->_password !== null) {
+ $element->setAttribute('password', $this->_password);
+ }
+ if ($this->_hashFunctionName !== null) {
+ $element->setAttribute('hashFunctionName', $this->_hashFunctionName);
+ }
+ if ($this->_admin !== null) {
+ $element->setAttribute('admin', ($this->_admin ? "true" : "false"));
+ }
+ if ($this->_agreedToTerms !== null) {
+ $element->setAttribute('agreedToTerms', ($this->_agreedToTerms ? "true" : "false"));
+ }
+ if ($this->_suspended !== null) {
+ $element->setAttribute('suspended', ($this->_suspended ? "true" : "false"));
+ }
+ if ($this->_changePasswordAtNextLogin !== null) {
+ $element->setAttribute('changePasswordAtNextLogin', ($this->_changePasswordAtNextLogin ? "true" : "false"));
+ }
+
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'userName':
+ $this->_username = $attribute->nodeValue;
+ break;
+ case 'password':
+ $this->_password = $attribute->nodeValue;
+ break;
+ case 'hashFunctionName':
+ $this->_hashFunctionName = $attribute->nodeValue;
+ break;
+ case 'admin':
+ if ($attribute->nodeValue == "true") {
+ $this->_admin = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_admin = false;
+ }
+ else {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for apps:login#admin.");
+ }
+ break;
+ case 'agreedToTerms':
+ if ($attribute->nodeValue == "true") {
+ $this->_agreedToTerms = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_agreedToTerms = false;
+ }
+ else {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for apps:login#agreedToTerms.");
+ }
+ break;
+ case 'suspended':
+ if ($attribute->nodeValue == "true") {
+ $this->_suspended = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_suspended = false;
+ }
+ else {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for apps:login#suspended.");
+ }
+ break;
+ case 'changePasswordAtNextLogin':
+ if ($attribute->nodeValue == "true") {
+ $this->_changePasswordAtNextLogin = true;
+ }
+ else if ($attribute->nodeValue == "false") {
+ $this->_changePasswordAtNextLogin = false;
+ }
+ else {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException("Expected 'true' or 'false' for apps:login#changePasswordAtNextLogin.");
+ }
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's username attribute.
+ *
+ * @see setUsername
+ * @return string The attribute being modified.
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Set the value for this element's username attribute. This string
+ * is used to uniquely identify the user in this domian and is used
+ * to form this user's email address.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ */
+ public function setUsername($value)
+ {
+ $this->_username = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's password attribute.
+ *
+ * @see setPassword
+ * @return string The requested attribute.
+ */
+ public function getPassword()
+ {
+ return $this->_password;
+ }
+
+ /**
+ * Set the value for this element's password attribute. As of this
+ * writing, this can be either be provided as plaintext or hashed using
+ * the SHA-1 algorithm for protection. If using a hash function,
+ * this must be indicated by calling setHashFunctionName().
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ */
+ public function setPassword($value)
+ {
+ $this->_password = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's hashFunctionName attribute.
+ *
+ * @see setHashFunctionName
+ * @return string The requested attribute.
+ */
+ public function getHashFunctionName()
+ {
+ return $this->_hashFunctionName;
+ }
+
+ /**
+ * Set the value for this element's hashFunctionName attribute. This
+ * indicates whether the password supplied with setPassword() is in
+ * plaintext or has had a hash function applied to it. If null,
+ * plaintext is assumed. As of this writing, the only valid hash
+ * function is 'SHA-1'.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ */
+ public function setHashFunctionName($value)
+ {
+ $this->_hashFunctionName = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's admin attribute.
+ *
+ * @see setAdmin
+ * @return boolean The requested attribute.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getAdmin()
+ {
+ if (!(is_bool($this->_admin))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for admin.');
+ }
+ return $this->_admin;
+ }
+
+ /**
+ * Set the value for this element's admin attribute. This indicates
+ * whether this user is an administrator for this domain.
+ *
+ * @param boolean $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setAdmin($value)
+ {
+ if (!(is_bool($value))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for $value.');
+ }
+ $this->_admin = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's agreedToTerms attribute.
+ *
+ * @see setAgreedToTerms
+ * @return boolean The requested attribute.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getAgreedToTerms()
+ {
+ if (!(is_bool($this->_agreedToTerms))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for agreedToTerms.');
+ }
+ return $this->_agreedToTerms;
+ }
+
+ /**
+ * Set the value for this element's agreedToTerms attribute. This
+ * indicates whether this user has agreed to the terms of service.
+ *
+ * @param boolean $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setAgreedToTerms($value)
+ {
+ if (!(is_bool($value))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for $value.');
+ }
+ $this->_agreedToTerms = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's suspended attribute.
+ *
+ * @see setSuspended
+ * @return boolean The requested attribute.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getSuspended()
+ {
+ if (!(is_bool($this->_suspended))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for suspended.');
+ }
+ return $this->_suspended;
+ }
+
+ /**
+ * Set the value for this element's suspended attribute. If true, the
+ * user will not be able to login to this domain until unsuspended.
+ *
+ * @param boolean $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setSuspended($value)
+ {
+ if (!(is_bool($value))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for $value.');
+ }
+ $this->_suspended = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's changePasswordAtNextLogin attribute.
+ *
+ * @see setChangePasswordAtNextLogin
+ * @return boolean The requested attribute.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getChangePasswordAtNextLogin()
+ {
+ if (!(is_bool($this->_changePasswordAtNextLogin))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for changePasswordAtNextLogin.');
+ }
+ return $this->_changePasswordAtNextLogin;
+ }
+
+ /**
+ * Set the value for this element's changePasswordAtNextLogin attribute.
+ * If true, the user will be forced to set a new password the next
+ * time they login.
+ *
+ * @param boolean $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Login Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function setChangePasswordAtNextLogin($value)
+ {
+ if (!(is_bool($value))) {
+ require_once('Zend/Gdata/App/InvalidArgumentException.php');
+ throw new Zend_Gdata_App_InvalidArgumentException('Expected boolean for $value.');
+ }
+ $this->_changePasswordAtNextLogin = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return "Username: " . $this->getUsername() .
+ "\nPassword: " . (($this->getPassword() === null) ? "NOT SET" : "SET") .
+ "\nPassword Hash Function: " . $this->getHashFunctionName() .
+ "\nAdministrator: " . ($this->getAdmin() ? "Yes" : "No") .
+ "\nAgreed To Terms: " . ($this->getAgreedToTerms() ? "Yes" : "No") .
+ "\nSuspended: " . ($this->getSuspended() ? "Yes" : "No");
+ }
+}
diff --git a/zend/library/Zend/Gdata/Gapps/Extension/Name.php b/zend/library/Zend/Gdata/Gapps/Extension/Name.php
new file mode 100644
index 0000000..54a17ff
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/Extension/Name.php
@@ -0,0 +1,181 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Name.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Gapps
+ */
+require_once 'Zend/Gdata/Gapps.php';
+
+/**
+ * Represents the apps:name element used by the Apps data API. This is used
+ * to represent a user's full name. This class is usually contained within
+ * instances of Zend_Gdata_Gapps_UserEntry.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_Extension_Name extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'apps';
+ protected $_rootElement = 'name';
+
+ /**
+ * The associated user's family name.
+ *
+ * @var string
+ */
+ protected $_familyName = null;
+
+ /**
+ * The associated user's given name.
+ *
+ * @var string
+ */
+ protected $_givenName = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Gapps_Extension_Name object.
+ *
+ * @param string $familyName (optional) The familyName to be set for this
+ * object.
+ * @param string $givenName (optional) The givenName to be set for this
+ * object.
+ */
+ public function __construct($familyName = null, $givenName = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_familyName = $familyName;
+ $this->_givenName = $givenName;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_familyName !== null) {
+ $element->setAttribute('familyName', $this->_familyName);
+ }
+ if ($this->_givenName !== null) {
+ $element->setAttribute('givenName', $this->_givenName);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'familyName':
+ $this->_familyName = $attribute->nodeValue;
+ break;
+ case 'givenName':
+ $this->_givenName = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's familyName attribute.
+ *
+ * @see setFamilyName
+ * @return string The requested attribute.
+ */
+ public function getFamilyName()
+ {
+ return $this->_familyName;
+ }
+
+ /**
+ * Set the value for this element's familyName attribute. This
+ * represents a user's family name.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Name Provides a fluent interface..
+ */
+ public function setFamilyName($value)
+ {
+ $this->_familyName = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's givenName attribute.
+ *
+ * @see setGivenName
+ * @return string The requested attribute.
+ */
+ public function getGivenName()
+ {
+ return $this->_givenName;
+ }
+
+ /**
+ * Set the value for this element's givenName attribute. This
+ * represents a user's given name.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Name Provides a fluent interface.
+ */
+ public function setGivenName($value)
+ {
+ $this->_givenName = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getGivenName() . ' ' . $this->getFamilyName();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/Extension/Nickname.php b/zend/library/Zend/Gdata/Gapps/Extension/Nickname.php
new file mode 100644
index 0000000..c321074
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/Extension/Nickname.php
@@ -0,0 +1,142 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Nickname.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Gapps
+ */
+require_once 'Zend/Gdata/Gapps.php';
+
+/**
+ * Represents the apps:nickname element used by the Apps data API. This
+ * is used to describe a nickname's properties, and is usually contained
+ * within instances of Zend_Gdata_Gapps_NicknameEntry.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_Extension_Nickname extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'apps';
+ protected $_rootElement = 'nickname';
+
+ /**
+ * The name of the nickname. This name is used as the email address
+ * for this nickname.
+ *
+ * @var string
+ */
+ protected $_name = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Gapps_Extension_Nickname object.
+ * @param string $name (optional) The nickname being represented.
+ */
+ public function __construct($name = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_name = $name;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @see setName
+ * @return string The requested attribute.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value for this element's name attribute. This name uniquely
+ * describes this nickname within the domain. Emails addressed to this
+ * name will be delivered to the user who owns this nickname.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Nickname Provides a fluent
+ * interface.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getName();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/Extension/Property.php b/zend/library/Zend/Gdata/Gapps/Extension/Property.php
new file mode 100644
index 0000000..546c511
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/Extension/Property.php
@@ -0,0 +1,179 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EmailList.php 20096 2010-01-06 02:05:09Z bkarwin $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Gapps
+ */
+require_once 'Zend/Gdata/Gapps.php';
+
+/**
+ * Represents the apps:Property element used by the Apps data API.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_Extension_Property extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'apps';
+ protected $_rootElement = 'property';
+
+ /**
+ * The name of the property
+ *
+ * @var string
+ */
+ protected $_name = null;
+
+ /**
+ * The value of the property
+ * @var string
+ */
+ protected $_value = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Gapps_Extension_Property object.
+ *
+ * @param string $name The name of the property
+ * @param string $value The value of the property
+ */
+ public function __construct($name = null, $value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_name = $name;
+ $this->_value = $value;
+
+ }
+
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ if ($this->_value !== null) {
+ $element->setAttribute('value', $this->_value);
+ }
+
+ return $element;
+
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ case 'value':
+ $this->_value = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @see setName
+ * @return string The requested attribute.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value for this element's name attribute.
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Property The element being modified.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's value attribute.
+ *
+ * @see setName
+ * @return string The requested attribute.
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+
+ /**
+ * Set the value for this element's value attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Property The element being modified.
+ */
+ public function setValue($value)
+ {
+ $this->_value = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return "Property Name: " . $this->getName() .
+ "\nProperty Value: " . $this->getValue();
+ }
+}
diff --git a/zend/library/Zend/Gdata/Gapps/Extension/Quota.php b/zend/library/Zend/Gdata/Gapps/Extension/Quota.php
new file mode 100644
index 0000000..95ee0bc
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/Extension/Quota.php
@@ -0,0 +1,142 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Quota.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Gapps
+ */
+require_once 'Zend/Gdata/Gapps.php';
+
+/**
+ * Represents the apps:quota element used by the Apps data API. This is
+ * used to indicate the amount of storage space available to a user. Quotas
+ * may not be able to be set, depending on the domain used. This class
+ * is usually contained within an instance of Zend_Gdata_Gapps_UserEntry.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_Extension_Quota extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'apps';
+ protected $_rootElement = 'quota';
+
+ /**
+ * The amount of storage space available to the user in megabytes.
+ *
+ * @var integer
+ */
+ protected $_limit = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Gapps_Extension_Quota object.
+ *
+ * @param string $limit (optional) The limit, in bytes, for this quota.
+ */
+ public function __construct($limit = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct();
+ $this->_limit = $limit;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_limit !== null) {
+ $element->setAttribute('limit', $this->_limit);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'limit':
+ $this->_limit = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's limit attribute.
+ *
+ * @see setLimit
+ * @return string The requested attribute.
+ */
+ public function getLimit()
+ {
+ return $this->_limit;
+ }
+
+ /**
+ * Set the value for this element's limit attribute. This is the amount
+ * of storage space, in bytes, that should be made available to
+ * the associated user.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Gapps_Extension_Quota Provides a fluent interface.
+ */
+ public function setLimit($value)
+ {
+ $this->_limit = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->getLimit();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/GroupEntry.php b/zend/library/Zend/Gdata/Gapps/GroupEntry.php
new file mode 100644
index 0000000..e8e86d9
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/GroupEntry.php
@@ -0,0 +1,158 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id:$
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Gapps_Extension_Property
+ */
+require_once 'Zend/Gdata/Gapps/Extension/Property.php';
+
+/**
+ * Data model class for a Google Apps Group Entry.
+ *
+ * Each group entry describes a single group within a Google Apps hosted
+ * domain.
+ *
+ * To transfer group entries to and from the Google Apps servers, including
+ * creating new entries, refer to the Google Apps service class,
+ * Zend_Gdata_Gapps.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_GroupEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_GroupEntry';
+
+ /**
+ * <apps:property> element containing information about other items
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Property
+ */
+ protected $_property = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+
+ foreach ($this->_property as $p) {
+ $element->appendChild($p->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+
+ case $this->lookupNamespace('apps') . ':' . 'property';
+ $property = new Zend_Gdata_Gapps_Extension_Property();
+ $property->transferFromDOM($child);
+ $this->_property[] = $property;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns all property tags for this entry
+ *
+ * @param string $rel The rel value of the property to be found. If null,
+ * the array of properties is returned instead.
+ * @return mixed Either an array of Zend_Gdata_Gapps_Extension_Property
+ * objects if $rel is null, a single
+ * Zend_Gdata_Gapps_Extension_Property object if $rel is specified
+ * and a matching feed link is found, or null if $rel is
+ * specified and no matching property is found.
+ */
+ public function getProperty($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_property;
+ } else {
+ foreach ($this->_property as $p) {
+ if ($p->rel == $rel) {
+ return $p;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the value of the property property for this object.
+ *
+ * @param array $value A collection of
+ * Zend_Gdata_Gapps_Extension_Property objects.
+ * @return Zend_Gdata_Gapps_GroupEntry Provides a fluent interface.
+ */
+ public function setProperty($value)
+ {
+ $this->_property = $value;
+ return $this;
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Gapps/GroupFeed.php b/zend/library/Zend/Gdata/Gapps/GroupFeed.php
new file mode 100644
index 0000000..eea9e08
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/GroupFeed.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id:$
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_GroupEntry
+ */
+require_once 'Zend/Gdata/Gapps/GroupEntry.php';
+
+/**
+ * Data model for a collection of Google Apps group entries, usually
+ * provided by the Google Apps servers.
+ *
+ * For information on requesting this feed from a server, see the Google
+ * Apps service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_GroupFeed extends Zend_Gdata_Feed
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_GroupEntry';
+ protected $_feedClassName = 'Zend_Gdata_Gapps_GroupFeed';
+
+} \ No newline at end of file
diff --git a/zend/library/Zend/Gdata/Gapps/GroupQuery.php b/zend/library/Zend/Gdata/Gapps/GroupQuery.php
new file mode 100644
index 0000000..d11e43c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/GroupQuery.php
@@ -0,0 +1,226 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id:$
+ */
+
+/**
+ * @see Zend_Gdata_Gapps_Query
+ */
+require_once('Zend/Gdata/Gapps/Query.php');
+
+/**
+ * Assists in constructing queries for Google Apps group entries.
+ * Instances of this class can be provided in many places where a URL is
+ * required.
+ *
+ * For information on submitting queries to a server, see the Google Apps
+ * service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_GroupQuery extends Zend_Gdata_Gapps_Query
+{
+
+ /**
+ * If not null, specifies the group id of the group who should be
+ * retrieved by this query.
+ *
+ * @var string
+ */
+ protected $_groupId = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param string $domain (optional) The Google Apps-hosted domain to use
+ * when constructing query URIs.
+ * @param string $groupId (optional) Value for the groupId property.
+ * @param string $startGroupName (optional) Value for the
+ * startGroupName property.
+ */
+ public function __construct($domain = null, $groupId = null,
+ $startGroupId = null)
+ {
+ parent::__construct($domain);
+ $this->setGroupId($groupId);
+ $this->setStartGroupId($startGroupId);
+ }
+
+ /**
+ * Set the group id to query for. When set, only groups with a group id
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by group id.
+ *
+ * @see getGroupId
+ * @param string $value The group id to filter search results by, or null to
+ * disable.
+ */
+ public function setGroupId($value)
+ {
+ $this->_groupId = $value;
+ }
+
+ /**
+ * Get the group id to query for. If no group id is set, null will be
+ * returned.
+ *
+ * @param string $value The group id to filter search results by, or
+ * null if disabled.
+ */
+ public function getGroupId()
+ {
+ return $this->_groupId;
+ }
+
+ /**
+ * Set the member to query for. When set, only subscribers with an
+ * email address matching this value will be returned in search results.
+ * Set to null to disable filtering by username.
+ *
+ * @param string $value The member email address to filter search
+ * results by, or null to disable.
+ */
+ public function setMember($value)
+ {
+ if ($value !== null) {
+ $this->_params['member'] = $value;
+ }
+ else {
+ unset($this->_params['member']);
+ }
+ }
+
+ /**
+ * Get the member email address to query for. If no member is set,
+ * null will be returned.
+ *
+ * @see setMember
+ * @return string The member email address to filter search
+ * results by, or null if disabled.
+ */
+ public function getMember()
+ {
+ if (array_key_exists('member', $this->_params)) {
+ return $this->_params['member'];
+ } else {
+ return null;
+ }
+ }
+
+
+ /**
+ * Sets the query parameter directOnly
+ * @param bool $value
+ */
+ public function setDirectOnly($value)
+ {
+ if ($value !== null) {
+ if($value == true) {
+ $this->_params['directOnly'] = 'true';
+ } else {
+ $this->_params['directOnly'] = 'false';
+ }
+ } else {
+ unset($this->_params['directOnly']);
+ }
+ }
+
+ /**
+ *
+ * @see setDirectOnly
+ * @return bool
+ */
+ public function getDirectOnly()
+ {
+ if (array_key_exists('directOnly', $this->_params)) {
+
+ if($this->_params['directOnly'] == 'true') {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the first group id which should be displayed when retrieving
+ * a list of groups.
+ *
+ * @param string $value The first group id to be returned, or null to
+ * disable.
+ */
+ public function setStartGroupId($value)
+ {
+ if ($value !== null) {
+ $this->_params['start'] = $value;
+ } else {
+ unset($this->_params['start']);
+ }
+ }
+
+ /**
+ * Get the first group id which should be displayed when retrieving
+ * a list of groups.
+ *
+ * @see setStartGroupId
+ * @return string The first group id to be returned, or null if
+ * disabled.
+ */
+ public function getStartGroupId()
+ {
+ if (array_key_exists('start', $this->_params)) {
+ return $this->_params['start'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the query URL generated by this query instance.
+ *
+ * @return string The query URL for this instance.
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = Zend_Gdata_Gapps::APPS_BASE_FEED_URI;
+ $uri .= Zend_Gdata_Gapps::APPS_GROUP_PATH;
+ $uri .= '/' . $this->_domain;
+
+ if ($this->_groupId !== null) {
+ $uri .= '/' . $this->_groupId;
+ }
+
+ if(array_key_exists('member', $this->_params)) {
+ $uri .= '/';
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/MemberEntry.php b/zend/library/Zend/Gdata/Gapps/MemberEntry.php
new file mode 100644
index 0000000..3777d7f
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/MemberEntry.php
@@ -0,0 +1,159 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id:$
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Gapps_Extension_Property
+ */
+require_once 'Zend/Gdata/Gapps/Extension/Property.php';
+
+/**
+ * Data model class for a Google Apps Member Entry.
+ *
+ * Each member entry describes a single member within a Google Apps hosted
+ * domain.
+ *
+ * To transfer member entries to and from the Google Apps servers, including
+ * creating new entries, refer to the Google Apps service class,
+ * Zend_Gdata_Gapps.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_MemberEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_MemberEntry';
+
+ /**
+ * <apps:property> element containing information about other items
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Property
+ */
+ protected $_property = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+
+ foreach ($this->_property as $p) {
+ $element->appendChild($p->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+
+ case $this->lookupNamespace('apps') . ':' . 'property';
+ $property = new Zend_Gdata_Gapps_Extension_Property();
+ $property->transferFromDOM($child);
+ $this->_property[] = $property;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns all property tags for this entry
+ *
+ * @param string $rel The rel value of the property to be found. If null,
+ * the array of properties is returned instead.
+ * @return mixed Either an array of Zend_Gdata_Gapps_Extension_Property
+ * objects if $rel is null, a single
+ * Zend_Gdata_Gapps_Extension_Property object if $rel is specified
+ * and a matching feed link is found, or null if $rel is
+ * specified and no matching property is found.
+ */
+ public function getProperty($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_property;
+ } else {
+ foreach ($this->_property as $p) {
+ if ($p->rel == $rel) {
+ return $p;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the value of the property property for this object.
+ *
+ * @param array $value A collection of
+ * Zend_Gdata_Gapps_Extension_Property objects.
+ * @return Zend_Gdata_Gapps_MemberEntry Provides a fluent interface.
+ */
+ public function setProperty($value)
+ {
+ $this->_property = $value;
+ return $this;
+ }
+
+}
+
+
diff --git a/zend/library/Zend/Gdata/Gapps/MemberFeed.php b/zend/library/Zend/Gdata/Gapps/MemberFeed.php
new file mode 100644
index 0000000..dc8d404
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/MemberFeed.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id:$
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_MemberEntry
+ */
+require_once 'Zend/Gdata/Gapps/MemberEntry.php';
+
+/**
+ * Data model for a collection of Google Apps member entries, usually
+ * provided by the Google Apps servers.
+ *
+ * For information on requesting this feed from a server, see the Google
+ * Apps service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_MemberFeed extends Zend_Gdata_Feed
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_MemberEntry';
+ protected $_feedClassName = 'Zend_Gdata_Gapps_MemberFeed';
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/MemberQuery.php b/zend/library/Zend/Gdata/Gapps/MemberQuery.php
new file mode 100644
index 0000000..87a0472
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/MemberQuery.php
@@ -0,0 +1,194 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id:$
+ */
+
+/**
+ * @see Zend_Gdata_Gapps_Query
+ */
+require_once('Zend/Gdata/Gapps/Query.php');
+
+/**
+ * Assists in constructing queries for Google Apps member entries.
+ * Instances of this class can be provided in many places where a URL is
+ * required.
+ *
+ * For information on submitting queries to a server, see the Google Apps
+ * service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_MemberQuery extends Zend_Gdata_Gapps_Query
+{
+
+ /**
+ * If not null, specifies the group id
+ *
+ * @var string
+ */
+ protected $_groupId = null;
+
+ /**
+ * If not null, specifies the member id of the user who should be
+ * retrieved by this query.
+ *
+ * @var string
+ */
+ protected $_memberId = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param string $domain (optional) The Google Apps-hosted domain to use
+ * when constructing query URIs.
+ * @param string $groupId (optional) Value for the groupId property.
+ * @param string $memberId (optional) Value for the memberId property.
+ * @param string $startMemberId (optional) Value for the
+ * startMemberId property.
+ */
+ public function __construct($domain = null, $groupId = null, $memberId = null,
+ $startMemberId = null)
+ {
+ parent::__construct($domain);
+ $this->setGroupId($groupId);
+ $this->setMemberId($memberId);
+ $this->setStartMemberId($startMemberId);
+ }
+
+ /**
+ * Set the group id to query for.
+ *
+ * @see getGroupId
+ * @param string $value The group id to filter search results by, or null to
+ * disable.
+ */
+ public function setGroupId($value)
+ {
+ $this->_groupId = $value;
+ }
+
+ /**
+ * Get the group id to query for. If no group id is set, null will be
+ * returned.
+ *
+ * @param string $value The group id to filter search results by, or
+ * null if disabled.
+ * @return string The group id
+ */
+ public function getGroupId()
+ {
+ return $this->_groupId;
+ }
+
+
+ /**
+ * Set the member id to query for. When set, only users with a member id
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by member id.
+ *
+ * @see getMemberId
+ * @param string $value The member id to filter search results by, or null to
+ * disable.
+ */
+ public function setMemberId($value)
+ {
+ $this->_memberId = $value;
+ }
+
+ /**
+ * Get the member id to query for. If no member id is set, null will be
+ * returned.
+ *
+ * @param string $value The member id to filter search results by, or
+ * null if disabled.
+ * @return The member id
+ */
+ public function getMemberId()
+ {
+ return $this->_memberId;
+ }
+
+ /**
+ * Set the first member id which should be displayed when retrieving
+ * a list of members.
+ *
+ * @param string $value The first member id to be returned, or null to
+ * disable.
+ */
+ public function setStartMemberId($value)
+ {
+ if ($value !== null) {
+ $this->_params['start'] = $value;
+ } else {
+ unset($this->_params['start']);
+ }
+ }
+
+ /**
+ * Get the first username which should be displayed when retrieving
+ * a list of users.
+ *
+ * @see setStartUsername
+ * @return string The first username to be returned, or null if
+ * disabled.
+ */
+ public function getStartMemberId()
+ {
+ if (array_key_exists('start', $this->_params)) {
+ return $this->_params['start'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the query URL generated by this query instance.
+ *
+ * @return string The query URL for this instance.
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = Zend_Gdata_Gapps::APPS_BASE_FEED_URI;
+ $uri .= Zend_Gdata_Gapps::APPS_GROUP_PATH;
+ $uri .= '/' . $this->_domain;
+ if ($this->_groupId !== null) {
+ $uri .= '/' . $this->_groupId;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'groupId must not be null');
+ }
+
+ $uri .= '/member';
+
+ if ($this->_memberId !== null) {
+ $uri .= '/' . $this->_memberId;
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/NicknameEntry.php b/zend/library/Zend/Gdata/Gapps/NicknameEntry.php
new file mode 100644
index 0000000..0a65ffa
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/NicknameEntry.php
@@ -0,0 +1,189 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: NicknameEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Gapps_Extension_Login
+ */
+require_once 'Zend/Gdata/Gapps/Extension/Login.php';
+
+/**
+ * @see Zend_Gdata_Gapps_Extension_Nickname
+ */
+require_once 'Zend/Gdata/Gapps/Extension/Nickname.php';
+
+/**
+ * Data model class for a Google Apps Nickname Entry.
+ *
+ * Each nickname entry describes a single nickname within a Google Apps
+ * hosted domain. Each user may own several nicknames, but each nickname may
+ * only belong to one user. Multiple entries are contained within instances
+ * of Zend_Gdata_Gapps_NicknameFeed.
+ *
+ * To transfer nickname entries to and from the Google Apps servers,
+ * including creating new entries, refer to the Google Apps service class,
+ * Zend_Gdata_Gapps.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_NicknameEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_NicknameEntry';
+
+ /**
+ * <apps:login> element used to hold information about the owner
+ * of this nickname, including their username.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Login
+ */
+ protected $_login = null;
+
+ /**
+ * <apps:nickname> element used to hold the name of this nickname.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Nickname
+ */
+ protected $_nickname = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_login !== null) {
+ $element->appendChild($this->_login->getDOM($element->ownerDocument));
+ }
+ if ($this->_nickname !== null) {
+ $element->appendChild($this->_nickname->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('apps') . ':' . 'login';
+ $login = new Zend_Gdata_Gapps_Extension_Login();
+ $login->transferFromDOM($child);
+ $this->_login = $login;
+ break;
+ case $this->lookupNamespace('apps') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Gapps_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_nickname = $nickname;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value of the login property for this object.
+ *
+ * @see setLogin
+ * @return Zend_Gdata_Gapps_Extension_Login The requested object.
+ */
+ public function getLogin()
+ {
+ return $this->_login;
+ }
+
+ /**
+ * Set the value of the login property for this object. This property
+ * is used to store the username address of the current user.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Login $value The desired value for
+ * this instance's login property.
+ * @return Zend_Gdata_Gapps_NicknameEntry Provides a fluent interface.
+ */
+ public function setLogin($value)
+ {
+ $this->_login = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the nickname property for this object.
+ *
+ * @see setNickname
+ * @return Zend_Gdata_Gapps_Extension_Nickname The requested object.
+ */
+ public function getNickname()
+ {
+ return $this->_nickname;
+ }
+
+ /**
+ * Set the value of the nickname property for this object. This property
+ * is used to store the the name of the current nickname.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Nickname $value The desired value for
+ * this instance's nickname property.
+ * @return Zend_Gdata_Gapps_NicknameEntry Provides a fluent interface.
+ */
+ public function setNickname($value)
+ {
+ $this->_nickname = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/NicknameFeed.php b/zend/library/Zend/Gdata/Gapps/NicknameFeed.php
new file mode 100644
index 0000000..ee9b983
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/NicknameFeed.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: NicknameFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_NicknameEntry
+ */
+require_once 'Zend/Gdata/Gapps/NicknameEntry.php';
+
+/**
+ * Data model for a collection of Google Apps nickname entries, usually
+ * provided by the Google Apps servers.
+ *
+ * For information on requesting this feed from a server, see the Google
+ * Apps service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_NicknameFeed extends Zend_Gdata_Feed
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_NicknameEntry';
+ protected $_feedClassName = 'Zend_Gdata_Gapps_NicknameFeed';
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/NicknameQuery.php b/zend/library/Zend/Gdata/Gapps/NicknameQuery.php
new file mode 100644
index 0000000..5ea9c48
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/NicknameQuery.php
@@ -0,0 +1,186 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: NicknameQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Gapps_Query
+ */
+require_once('Zend/Gdata/Gapps/Query.php');
+
+/**
+ * Assists in constructing queries for Google Apps nickname entries.
+ * Instances of this class can be provided in many places where a URL is
+ * required.
+ *
+ * For information on submitting queries to a server, see the Google Apps
+ * service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_NicknameQuery extends Zend_Gdata_Gapps_Query
+{
+
+ /**
+ * If not null, indicates the name of the nickname entry which
+ * should be returned by this query.
+ *
+ * @var string
+ */
+ protected $_nickname = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param string $domain (optional) The Google Apps-hosted domain to use
+ * when constructing query URIs.
+ * @param string $nickname (optional) Value for the nickname
+ * property.
+ * @param string $username (optional) Value for the username
+ * property.
+ * @param string $startNickname (optional) Value for the
+ * startNickname property.
+ */
+ public function __construct($domain = null, $nickname = null,
+ $username = null, $startNickname = null)
+ {
+ parent::__construct($domain);
+ $this->setNickname($nickname);
+ $this->setUsername($username);
+ $this->setStartNickname($startNickname);
+ }
+
+ /**
+ * Set the nickname to query for. When set, only users with a nickname
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by username.
+ *
+ * @param string $value The nickname to filter search results by, or null
+ * to disable.
+ */
+ public function setNickname($value)
+ {
+ $this->_nickname = $value;
+ }
+
+ /**
+ * Get the nickname to query for. If no nickname is set, null will be
+ * returned.
+ *
+ * @see setNickname
+ * @return string The nickname to filter search results by, or null if
+ * disabled.
+ */
+ public function getNickname()
+ {
+ return $this->_nickname;
+ }
+
+ /**
+ * Set the username to query for. When set, only users with a username
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by username.
+ *
+ * @param string $value The username to filter search results by, or null
+ * to disable.
+ */
+ public function setUsername($value)
+ {
+ if ($value !== null) {
+ $this->_params['username'] = $value;
+ }
+ else {
+ unset($this->_params['username']);
+ }
+ }
+
+ /**
+ * Get the username to query for. If no username is set, null will be
+ * returned.
+ *
+ * @see setUsername
+ * @return string The username to filter search results by, or null if
+ * disabled.
+ */
+ public function getUsername()
+ {
+ if (array_key_exists('username', $this->_params)) {
+ return $this->_params['username'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the first nickname which should be displayed when retrieving
+ * a list of nicknames.
+ *
+ * @param string $value The first nickname to be returned, or null to
+ * disable.
+ */
+ public function setStartNickname($value)
+ {
+ if ($value !== null) {
+ $this->_params['startNickname'] = $value;
+ } else {
+ unset($this->_params['startNickname']);
+ }
+ }
+
+ /**
+ * Get the first nickname which should be displayed when retrieving
+ * a list of nicknames.
+ *
+ * @return string The first nickname to be returned, or null to
+ * disable.
+ */
+ public function getStartNickname()
+ {
+ if (array_key_exists('startNickname', $this->_params)) {
+ return $this->_params['startNickname'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = $this->getBaseUrl();
+ $uri .= Zend_Gdata_Gapps::APPS_NICKNAME_PATH;
+ if ($this->_nickname !== null) {
+ $uri .= '/' . $this->_nickname;
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/OwnerEntry.php b/zend/library/Zend/Gdata/Gapps/OwnerEntry.php
new file mode 100644
index 0000000..adb1a36
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/OwnerEntry.php
@@ -0,0 +1,158 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id:$
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Gapps_Extension_Property
+ */
+require_once 'Zend/Gdata/Gapps/Extension/Property.php';
+
+/**
+ * Data model class for a Google Apps Owner Entry.
+ *
+ * Each owner entry describes a single owner within a Google Apps hosted
+ * domain.
+ *
+ * To transfer owner entries to and from the Google Apps servers, including
+ * creating new entries, refer to the Google Apps service class,
+ * Zend_Gdata_Gapps.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_OwnerEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_OwnerEntry';
+
+ /**
+ * <apps:property> element containing information about other items
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Property
+ */
+ protected $_property = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+
+ foreach ($this->_property as $p) {
+ $element->appendChild($p->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as owners of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+
+ case $this->lookupNamespace('apps') . ':' . 'property';
+ $property = new Zend_Gdata_Gapps_Extension_Property();
+ $property->transferFromDOM($child);
+ $this->_property[] = $property;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns all property tags for this entry
+ *
+ * @param string $rel The rel value of the property to be found. If null,
+ * the array of properties is returned instead.
+ * @return mixed Either an array of Zend_Gdata_Gapps_Extension_Property
+ * objects if $rel is null, a single
+ * Zend_Gdata_Gapps_Extension_Property object if $rel is specified
+ * and a matching feed link is found, or null if $rel is
+ * specified and no matching property is found.
+ */
+ public function getProperty($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_property;
+ } else {
+ foreach ($this->_property as $p) {
+ if ($p->rel == $rel) {
+ return $p;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the value of the property property for this object.
+ *
+ * @param array $value A collection of
+ * Zend_Gdata_Gapps_Extension_Property objects.
+ * @return Zend_Gdata_Gapps_OwnerEntry Provides a fluent interface.
+ */
+ public function setProperty($value)
+ {
+ $this->_property = $value;
+ return $this;
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/Gapps/OwnerFeed.php b/zend/library/Zend/Gdata/Gapps/OwnerFeed.php
new file mode 100644
index 0000000..97b74df
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/OwnerFeed.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id:$
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_OwnerEntry
+ */
+require_once 'Zend/Gdata/Gapps/OwnerEntry.php';
+
+/**
+ * Data model for a collection of Google Apps owner entries, usually
+ * provided by the Google Apps servers.
+ *
+ * For information on requesting this feed from a server, see the Google
+ * Apps service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_OwnerFeed extends Zend_Gdata_Feed
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_OwnerEntry';
+ protected $_feedClassName = 'Zend_Gdata_Gapps_OwnerFeed';
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/OwnerQuery.php b/zend/library/Zend/Gdata/Gapps/OwnerQuery.php
new file mode 100644
index 0000000..4f424d2
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/OwnerQuery.php
@@ -0,0 +1,147 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id:$
+ */
+
+/**
+ * @see Zend_Gdata_Gapps_Query
+ */
+require_once('Zend/Gdata/Gapps/Query.php');
+
+/**
+ * Assists in constructing queries for Google Apps owner entries.
+ * Instances of this class can be provided in many places where a URL is
+ * required.
+ *
+ * For information on submitting queries to a server, see the Google Apps
+ * service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_OwnerQuery extends Zend_Gdata_Gapps_Query
+{
+
+ /**
+ * Group owner is refering to
+ *
+ * @var string
+ */
+ protected $_groupId = null;
+
+ /**
+ * The email of the owner
+ *
+ * @var string
+ */
+ protected $_ownerEmail = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param string $domain (optional) The Google Apps-hosted domain to use
+ * when constructing query URIs.
+ * @param string $groupId (optional) Value for the groupId property.
+ * @param string $ownerEmail (optional) Value for the OwnerEmail property.
+ */
+ public function __construct($domain = null, $groupId = null, $ownerEmail = null)
+ {
+ parent::__construct($domain);
+ $this->setGroupId($groupId);
+ $this->setOwnerEmail($ownerEmail);
+ }
+
+ /**
+ * Set the group id to query for.
+ *
+ * @see getGroupId
+ * @param string $value
+ */
+ public function setGroupId($value)
+ {
+ $this->_groupId = $value;
+ }
+
+ /**
+ * Get the group id to query for.
+ *
+ * @return string
+ *
+ */
+ public function getGroupId()
+ {
+ return $this->_groupId;
+ }
+
+ /**
+ * Set the owner email to query for.
+ *
+ * @see getOwnerEmail
+ * @param string $value
+ */
+ public function setOwnerEmail($value)
+ {
+ $this->_ownerEmail = $value;
+ }
+
+ /**
+ * Get the owner email to query for.
+ *
+ * @return string
+ *
+ */
+ public function getOwnerEmail()
+ {
+ return $this->_ownerEmail;
+ }
+
+ /**
+ * Returns the query URL generated by this query instance.
+ *
+ * @return string The query URL for this instance.
+ */
+ public function getQueryUrl()
+ {
+ $uri = Zend_Gdata_Gapps::APPS_BASE_FEED_URI;
+ $uri .= Zend_Gdata_Gapps::APPS_GROUP_PATH;
+ $uri .= '/' . $this->_domain;
+ if ($this->_groupId !== null) {
+ $uri .= '/' . $this->_groupId;
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'groupId must not be null');
+ }
+
+ $uri .= '/owner';
+
+ if ($this->_ownerEmail !== null) {
+ $uri .= '/' . $this->_ownerEmail;
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/Query.php b/zend/library/Zend/Gdata/Gapps/Query.php
new file mode 100644
index 0000000..ddd7409
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/Query.php
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Query.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_Query
+ */
+require_once('Zend/Gdata/Query.php');
+
+/**
+ * Zend_Gdata_Gapps
+ */
+require_once('Zend/Gdata/Gapps.php');
+
+/**
+ * Assists in constructing queries for Google Apps entries. This class
+ * provides common methods used by all other Google Apps query classes.
+ *
+ * This class should never be instantiated directly. Instead, instantiate a
+ * class which inherits from this class.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Gdata_Gapps_Query extends Zend_Gdata_Query
+{
+
+ /**
+ * The domain which is being administered via the Provisioning API.
+ *
+ * @var string
+ */
+ protected $_domain = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param string $domain (optional) The Google Apps-hosted domain to use
+ * when constructing query URIs.
+ */
+ public function __construct($domain = null)
+ {
+ parent::__construct();
+ $this->_domain = $domain;
+ }
+
+ /**
+ * Set domain for this service instance. This should be a fully qualified
+ * domain, such as 'foo.example.com'.
+ *
+ * This value is used when calculating URLs for retrieving and posting
+ * entries. If no value is specified, a URL will have to be manually
+ * constructed prior to using any methods which interact with the Google
+ * Apps provisioning service.
+ *
+ * @param string $value The domain to be used for this session.
+ */
+ public function setDomain($value)
+ {
+ $this->_domain = $value;
+ }
+
+ /**
+ * Get domain for this service instance. This should be a fully qualified
+ * domain, such as 'foo.example.com'. If no domain is set, null will be
+ * returned.
+ *
+ * @see setDomain
+ * @return string The domain to be used for this session, or null if not
+ * set.
+ */
+ public function getDomain()
+ {
+ return $this->_domain;
+ }
+
+ /**
+ * Returns the base URL used to access the Google Apps service, based
+ * on the current domain. The current domain can be temporarily
+ * overridden by providing a fully qualified domain as $domain.
+ *
+ * @see setDomain
+ * @param string $domain (optional) A fully-qualified domain to use
+ * instead of the default domain for this service instance.
+ */
+ public function getBaseUrl($domain = null)
+ {
+ if ($domain !== null) {
+ return Zend_Gdata_Gapps::APPS_BASE_FEED_URI . '/' . $domain;
+ }
+ else if ($this->_domain !== null) {
+ return Zend_Gdata_Gapps::APPS_BASE_FEED_URI . '/' . $this->_domain;
+ }
+ else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Domain must be specified.');
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/ServiceException.php b/zend/library/Zend/Gdata/Gapps/ServiceException.php
new file mode 100644
index 0000000..e776df9
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/ServiceException.php
@@ -0,0 +1,208 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ServiceException.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+
+/**
+ * Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * Zend_Gdata_Gapps_Error
+ */
+require_once 'Zend/Gdata/Gapps/Error.php';
+
+/**
+ * Gdata Gapps Exception class. This is thrown when an
+ * AppsForYourDomainErrors message is received from the Google Apps
+ * servers.
+ *
+ * Several different errors may be represented by this exception. For a list
+ * of error codes available, see getErrorCode.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_ServiceException extends Zend_Exception
+{
+
+ protected $_rootElement = "AppsForYourDomainErrors";
+
+ /**
+ * Array of Zend_Gdata_Error objects indexed by error code.
+ *
+ * @var array
+ */
+ protected $_errors = array();
+
+ /**
+ * Create a new ServiceException.
+ *
+ * @return array An array containing a collection of
+ * Zend_Gdata_Gapps_Error objects.
+ */
+ public function __construct($errors = null) {
+ parent::__construct("Server errors encountered");
+ if ($errors !== null) {
+ $this->setErrors($errors);
+ }
+ }
+
+ /**
+ * Add a single Error object to the list of errors received by the
+ * server.
+ *
+ * @param Zend_Gdata_Gapps_Error $error An instance of an error returned
+ * by the server. The error's errorCode must be set.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function addError($error) {
+ // Make sure that we don't try to index an error that doesn't
+ // contain an index value.
+ if ($error->getErrorCode() == null) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception("Error encountered without corresponding error code.");
+ }
+
+ $this->_errors[$error->getErrorCode()] = $error;
+ }
+
+ /**
+ * Set the list of errors as sent by the server inside of an
+ * AppsForYourDomainErrors tag.
+ *
+ * @param array $array An associative array containing a collection of
+ * Zend_Gdata_Gapps_Error objects. All errors must have their
+ * errorCode value set.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function setErrors($array) {
+ $this->_errors = array();
+ foreach ($array as $error) {
+ $this->addError($error);
+ }
+ }
+
+ /**
+ * Get the list of errors as sent by the server inside of an
+ * AppsForYourDomainErrors tag.
+ *
+ * @return array An associative array containing a collection of
+ * Zend_Gdata_Gapps_Error objects, indexed by error code.
+ */
+ public function getErrors() {
+ return $this->_errors;
+ }
+
+ /**
+ * Return the Error object associated with a specific error code.
+ *
+ * @return Zend_Gdata_Gapps_Error The Error object requested, or null
+ * if not found.
+ */
+ public function getError($errorCode) {
+ if (array_key_exists($errorCode, $this->_errors)) {
+ $result = $this->_errors[$errorCode];
+ return $result;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Check whether or not a particular error code was returned by the
+ * server.
+ *
+ * @param integer $errorCode The error code to check against.
+ * @return boolean Whether or not the supplied error code was returned
+ * by the server.
+ */
+ public function hasError($errorCode) {
+ return array_key_exists($errorCode, $this->_errors);
+ }
+
+ /**
+ * Import an AppsForYourDomain error from XML.
+ *
+ * @param string $string The XML data to be imported
+ * @return Zend_Gdata_Gapps_ServiceException Provides a fluent interface.
+ * @throws Zend_Gdata_App_Exception
+ */
+ public function importFromString($string) {
+ if ($string) {
+ // Check to see if an AppsForYourDomainError exists
+ //
+ // track_errors is temporarily enabled so that if an error
+ // occurs while parsing the XML we can append it to an
+ // exception by referencing $php_errormsg
+ @ini_set('track_errors', 1);
+ $doc = new DOMDocument();
+ $success = @$doc->loadXML($string);
+ @ini_restore('track_errors');
+
+ if (!$success) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ // $php_errormsg is automatically generated by PHP if
+ // an error occurs while calling loadXML(), above.
+ throw new Zend_Gdata_App_Exception("DOMDocument cannot parse XML: $php_errormsg");
+ }
+
+ // Ensure that the outermost node is an AppsForYourDomain error.
+ // If it isn't, something has gone horribly wrong.
+ $rootElement = $doc->getElementsByTagName($this->_rootElement)->item(0);
+ if (!$rootElement) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('No root <' . $this->_rootElement . '> element found, cannot parse feed.');
+ }
+
+ foreach ($rootElement->childNodes as $errorNode) {
+ if (!($errorNode instanceof DOMText)) {
+ $error = new Zend_Gdata_Gapps_Error();
+ $error->transferFromDom($errorNode);
+ $this->addError($error);
+ }
+ }
+ return $this;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('XML passed to transferFromXML cannot be null');
+ }
+
+ }
+
+ /**
+ * Get a human readable version of this exception.
+ *
+ * @return string
+ */
+ public function __toString() {
+ $result = "The server encountered the following errors processing the request:";
+ foreach ($this->_errors as $error) {
+ $result .= "\n" . $error->__toString();
+ }
+ return $result;
+ }
+}
diff --git a/zend/library/Zend/Gdata/Gapps/UserEntry.php b/zend/library/Zend/Gdata/Gapps/UserEntry.php
new file mode 100644
index 0000000..ed7e9e3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/UserEntry.php
@@ -0,0 +1,295 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: UserEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension_FeedLink
+ */
+require_once 'Zend/Gdata/Extension/FeedLink.php';
+
+/**
+ * @see Zend_Gdata_Gapps_Extension_Login
+ */
+require_once 'Zend/Gdata/Gapps/Extension/Login.php';
+
+/**
+ * @see Zend_Gdata_Gapps_Extension_Name
+ */
+require_once 'Zend/Gdata/Gapps/Extension/Name.php';
+
+/**
+ * @see Zend_Gdata_Gapps_Extension_Quota
+ */
+require_once 'Zend/Gdata/Gapps/Extension/Quota.php';
+
+/**
+ * Data model class for a Google Apps User Entry.
+ *
+ * Each user entry describes a single user within a Google Apps hosted
+ * domain.
+ *
+ * To transfer user entries to and from the Google Apps servers, including
+ * creating new entries, refer to the Google Apps service class,
+ * Zend_Gdata_Gapps.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_UserEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_UserEntry';
+
+ /**
+ * <apps:login> element containing information about this user's
+ * account, including their username and permissions.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Login
+ */
+ protected $_login = null;
+
+ /**
+ * <apps:name> element containing the user's actual name.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Name
+ */
+ protected $_name = null;
+
+ /**
+ * <apps:quotq> element describing any storage quotas in place for
+ * this user.
+ *
+ * @var Zend_Gdata_Gapps_Extension_Quota
+ */
+ protected $_quota = null;
+
+ /**
+ * <gd:feedLink> element containing information about other feeds
+ * relevant to this entry.
+ *
+ * @var Zend_Gdata_Extension_FeedLink
+ */
+ protected $_feedLink = array();
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Gapps::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_login !== null) {
+ $element->appendChild($this->_login->getDOM($element->ownerDocument));
+ }
+ if ($this->_name !== null) {
+ $element->appendChild($this->_name->getDOM($element->ownerDocument));
+ }
+ if ($this->_quota !== null) {
+ $element->appendChild($this->_quota->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('apps') . ':' . 'login';
+ $login = new Zend_Gdata_Gapps_Extension_Login();
+ $login->transferFromDOM($child);
+ $this->_login = $login;
+ break;
+ case $this->lookupNamespace('apps') . ':' . 'name';
+ $name = new Zend_Gdata_Gapps_Extension_Name();
+ $name->transferFromDOM($child);
+ $this->_name = $name;
+ break;
+ case $this->lookupNamespace('apps') . ':' . 'quota';
+ $quota = new Zend_Gdata_Gapps_Extension_Quota();
+ $quota->transferFromDOM($child);
+ $this->_quota = $quota;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink';
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value of the login property for this object.
+ *
+ * @see setLogin
+ * @return Zend_Gdata_Gapps_Extension_Login The requested object.
+ */
+ public function getLogin()
+ {
+ return $this->_login;
+ }
+
+ /**
+ * Set the value of the login property for this object. This property
+ * is used to store the username address of the current user.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Login $value The desired value for
+ * this instance's login property.
+ * @return Zend_Gdata_Gapps_UserEntry Provides a fluent interface.
+ */
+ public function setLogin($value)
+ {
+ $this->_login = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the name property for this object.
+ *
+ * @see setName
+ * @return Zend_Gdata_Gapps_Extension_Name The requested object.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value of the name property for this object. This property
+ * is used to store the full name of the current user.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Name $value The desired value for
+ * this instance's name property.
+ * @return Zend_Gdata_Gapps_UserEntry Provides a fluent interface.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of the quota property for this object.
+ *
+ * @see setQuota
+ * @return Zend_Gdata_Gapps_Extension_Quota The requested object.
+ */
+ public function getQuota()
+ {
+ return $this->_quota;
+ }
+
+ /**
+ * Set the value of the quota property for this object. This property
+ * is used to store the amount of storage available for the current
+ * user. Quotas may not be modifiable depending on the domain used.
+ *
+ * @param Zend_Gdata_Gapps_Extension_Quota $value The desired value for
+ * this instance's quota property.
+ * @return Zend_Gdata_Gapps_UserEntry Provides a fluent interface.
+ */
+ public function setQuota($value)
+ {
+ $this->_quota = $value;
+ return $this;
+ }
+
+ /**
+ * Returns all feed links for this entry, or if a rel value is
+ * specified, the feed link associated with that value is returned.
+ *
+ * @param string $rel The rel value of the link to be found. If null,
+ * the array of links is returned instead.
+ * @return mixed Either an array of Zend_Gdata_Extension_FeedLink
+ * objects if $rel is null, a single
+ * Zend_Gdata_Extension_FeedLink object if $rel is specified
+ * and a matching feed link is found, or null if $rel is
+ * specified and no matching feed link is found.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Set the value of the feed link property for this object. This property
+ * is used to provide links to alternative feeds relevant to this entry.
+ *
+ * @param array $value A collection of
+ * Zend_Gdata_Gapps_Extension_FeedLink objects.
+ * @return Zend_Gdata_Gapps_EventEntry Provides a fluent interface.
+ */
+ public function setFeedLink($value)
+ {
+ $this->_feedLink = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/UserFeed.php b/zend/library/Zend/Gdata/Gapps/UserFeed.php
new file mode 100644
index 0000000..7a295e8
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/UserFeed.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: UserFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Gapps_UserEntry
+ */
+require_once 'Zend/Gdata/Gapps/UserEntry.php';
+
+/**
+ * Data model for a collection of Google Apps user entries, usually
+ * provided by the Google Apps servers.
+ *
+ * For information on requesting this feed from a server, see the Google
+ * Apps service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_UserFeed extends Zend_Gdata_Feed
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Gapps_UserEntry';
+ protected $_feedClassName = 'Zend_Gdata_Gapps_UserFeed';
+
+}
diff --git a/zend/library/Zend/Gdata/Gapps/UserQuery.php b/zend/library/Zend/Gdata/Gapps/UserQuery.php
new file mode 100644
index 0000000..2c65a38
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gapps/UserQuery.php
@@ -0,0 +1,147 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: UserQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Gapps_Query
+ */
+require_once('Zend/Gdata/Gapps/Query.php');
+
+/**
+ * Assists in constructing queries for Google Apps user entries.
+ * Instances of this class can be provided in many places where a URL is
+ * required.
+ *
+ * For information on submitting queries to a server, see the Google Apps
+ * service class, Zend_Gdata_Gapps.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gapps
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gapps_UserQuery extends Zend_Gdata_Gapps_Query
+{
+
+ /**
+ * If not null, specifies the username of the user who should be
+ * retrieved by this query.
+ *
+ * @var string
+ */
+ protected $_username = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param string $domain (optional) The Google Apps-hosted domain to use
+ * when constructing query URIs.
+ * @param string $username (optional) Value for the username
+ * property.
+ * @param string $startUsername (optional) Value for the
+ * startUsername property.
+ */
+ public function __construct($domain = null, $username = null,
+ $startUsername = null)
+ {
+ parent::__construct($domain);
+ $this->setUsername($username);
+ $this->setStartUsername($startUsername);
+ }
+
+ /**
+ * Set the username to query for. When set, only users with a username
+ * matching this value will be returned in search results. Set to
+ * null to disable filtering by username.
+ *
+ * @see getUsername
+ * @param string $value The username to filter search results by, or null to
+ * disable.
+ */
+ public function setUsername($value)
+ {
+ $this->_username = $value;
+ }
+
+ /**
+ * Get the username to query for. If no username is set, null will be
+ * returned.
+ *
+ * @param string $value The username to filter search results by, or
+ * null if disabled.
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Set the first username which should be displayed when retrieving
+ * a list of users.
+ *
+ * @param string $value The first username to be returned, or null to
+ * disable.
+ */
+ public function setStartUsername($value)
+ {
+ if ($value !== null) {
+ $this->_params['startUsername'] = $value;
+ } else {
+ unset($this->_params['startUsername']);
+ }
+ }
+
+ /**
+ * Get the first username which should be displayed when retrieving
+ * a list of users.
+ *
+ * @see setStartUsername
+ * @return string The first username to be returned, or null if
+ * disabled.
+ */
+ public function getStartUsername()
+ {
+ if (array_key_exists('startUsername', $this->_params)) {
+ return $this->_params['startUsername'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the query URL generated by this query instance.
+ *
+ * @return string The query URL for this instance.
+ */
+ public function getQueryUrl()
+ {
+ $uri = $this->getBaseUrl();
+ $uri .= Zend_Gdata_Gapps::APPS_USER_PATH;
+ if ($this->_username !== null) {
+ $uri .= '/' . $this->_username;
+ }
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Gbase.php b/zend/library/Zend/Gdata/Gbase.php
new file mode 100644
index 0000000..963a2f4
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase.php
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Gbase.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * Service class for interacting with the Google Base data API
+ *
+ * @link http://code.google.com/apis/base
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase extends Zend_Gdata
+{
+
+ /**
+ * Path to the customer items feeds on the Google Base server.
+ */
+ const GBASE_ITEM_FEED_URI = 'https://www.google.com/base/feeds/items';
+
+ /**
+ * Path to the snippets feeds on the Google Base server.
+ */
+ const GBASE_SNIPPET_FEED_URI = 'https://www.google.com/base/feeds/snippets';
+
+ /**
+ * Authentication service name for Google Base
+ */
+ const AUTH_SERVICE_NAME = 'gbase';
+
+ /**
+ * Create Zend_Gdata_Gbase object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google Apps servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ throw new Zend_Exception(
+ 'Google Base API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googlemerchantblog.blogspot.ca/2010/12/new-shopping-apis-and-deprecation-of.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Gbase/Entry.php b/zend/library/Zend/Gdata/Gbase/Entry.php
new file mode 100644
index 0000000..1a57f1a
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/Entry.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Entry.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * Base class for working with Google Base entries.
+ *
+ * @link http://code.google.com/apis/base/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_Entry extends Zend_Gdata_Entry
+{
+ /**
+ * Constructs a new Zend_Gdata_Gbase_ItemEntry object.
+ * @param DOMElement $element (optional) The DOMElement on which to base this object.
+ */
+ public function __construct($element = null)
+ {
+ throw new Zend_Exception(
+ 'Google Base API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googlemerchantblog.blogspot.ca/2010/12/new-shopping-apis-and-deprecation-of.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Gbase/Extension/BaseAttribute.php b/zend/library/Zend/Gdata/Gbase/Extension/BaseAttribute.php
new file mode 100644
index 0000000..a440f9f
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/Extension/BaseAttribute.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: BaseAttribute.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Element
+ */
+require_once 'Zend/Gdata/App/Extension/Element.php';
+
+/**
+ * Concrete class for working with ItemType elements.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_Extension_BaseAttribute extends Zend_Gdata_App_Extension_Element
+{
+ /**
+ * Create a new instance.
+ *
+ * @param string $name (optional) The name of the Base attribute
+ * @param string $text (optional) The text value of the Base attribute
+ * @param string $text (optional) The type of the Base attribute
+ */
+ public function __construct($name = null, $text = null, $type = null)
+ {
+ throw new Zend_Exception(
+ 'Google Base API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googlemerchantblog.blogspot.ca/2010/12/new-shopping-apis-and-deprecation-of.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Gbase/Feed.php b/zend/library/Zend/Gdata/Gbase/Feed.php
new file mode 100644
index 0000000..0925dd2
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/Feed.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Feed.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * Base class for the Google Base Feed
+ *
+ * @link http://code.google.com/apis/base/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_Feed extends Zend_Gdata_Feed
+{
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ throw new Zend_Exception(
+ 'Google Base API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googlemerchantblog.blogspot.ca/2010/12/new-shopping-apis-and-deprecation-of.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Gbase/ItemEntry.php b/zend/library/Zend/Gdata/Gbase/ItemEntry.php
new file mode 100644
index 0000000..e2ef503
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/ItemEntry.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ItemEntry.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Gdata_Gbase_Entry
+ */
+require_once 'Zend/Gdata/Gbase/Entry.php';
+
+/**
+ * Concrete class for working with Item entries.
+ *
+ * @link http://code.google.com/apis/base/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_ItemEntry extends Zend_Gdata_Gbase_Entry
+{
+}
diff --git a/zend/library/Zend/Gdata/Gbase/ItemFeed.php b/zend/library/Zend/Gdata/Gbase/ItemFeed.php
new file mode 100644
index 0000000..64a5168
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/ItemFeed.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ItemFeed.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Gdata_Gbase_Feed
+ */
+require_once 'Zend/Gdata/Gbase/Feed.php';
+
+/**
+ * Represents the Google Base Customer Items Feed
+ *
+ * @link http://code.google.com/apis/base/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_ItemFeed extends Zend_Gdata_Feed
+{
+}
diff --git a/zend/library/Zend/Gdata/Gbase/ItemQuery.php b/zend/library/Zend/Gdata/Gbase/ItemQuery.php
new file mode 100644
index 0000000..b73d11c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/ItemQuery.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ItemQuery.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Gbase_Query
+ */
+require_once 'Zend/Gdata/Gbase/Query.php';
+
+
+/**
+ * Assists in constructing queries for Google Base Customer Items Feed
+ *
+ * @link http://code.google.com/apis/base/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_ItemQuery extends Zend_Gdata_Gbase_Query
+{
+ /**
+ * Path to the customer items feeds on the Google Base server.
+ */
+ const GBASE_ITEM_FEED_URI = 'https://www.google.com/base/feeds/items';
+}
diff --git a/zend/library/Zend/Gdata/Gbase/Query.php b/zend/library/Zend/Gdata/Gbase/Query.php
new file mode 100644
index 0000000..6e35434
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/Query.php
@@ -0,0 +1,69 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Query.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Query
+ */
+require_once 'Zend/Gdata/Query.php';
+
+/**
+ * Assists in constructing queries for Google Base
+ *
+ * @link http://code.google.com/apis/base
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_Query extends Zend_Gdata_Query
+{
+
+ /**
+ * Path to the customer items feeds on the Google Base server.
+ */
+ const GBASE_ITEM_FEED_URI = 'https://www.google.com/base/feeds/items';
+
+ /**
+ * Path to the snippets feeds on the Google Base server.
+ */
+ const GBASE_SNIPPET_FEED_URI = 'https://www.google.com/base/feeds/snippets';
+
+ /**
+ * Create Gdata_Query object
+ */
+ public function __construct($url = null)
+ {
+ throw new Zend_Exception(
+ 'Google Base API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googlemerchantblog.blogspot.ca/2010/12/new-shopping-apis-and-deprecation-of.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Gbase/SnippetEntry.php b/zend/library/Zend/Gdata/Gbase/SnippetEntry.php
new file mode 100644
index 0000000..d8e72d1
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/SnippetEntry.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: SnippetEntry.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Gdata_Gbase_Entry
+ */
+require_once 'Zend/Gdata/Gbase/Entry.php';
+
+/**
+ * Concrete class for working with Snippet entries.
+ *
+ * @link http://code.google.com/apis/base/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_SnippetEntry extends Zend_Gdata_Gbase_Entry
+{
+}
diff --git a/zend/library/Zend/Gdata/Gbase/SnippetFeed.php b/zend/library/Zend/Gdata/Gbase/SnippetFeed.php
new file mode 100644
index 0000000..15ac3c3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/SnippetFeed.php
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: SnippetFeed.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * Represents the Google Base Snippets Feed
+ *
+ * @link http://code.google.com/apis/base/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_SnippetFeed extends Zend_Gdata_Feed
+{
+}
diff --git a/zend/library/Zend/Gdata/Gbase/SnippetQuery.php b/zend/library/Zend/Gdata/Gbase/SnippetQuery.php
new file mode 100644
index 0000000..14b0f6a
--- /dev/null
+++ b/zend/library/Zend/Gdata/Gbase/SnippetQuery.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: SnippetQuery.php 24777 2012-05-08 18:50:23Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Gdata_Gbase_Query
+ */
+require_once 'Zend/Gdata/Gbase/Query.php';
+
+/**
+ * Assists in constructing queries for Google Base Snippets Feed
+ *
+ * @link http://code.google.com/apis/base/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gbase
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Gbase_SnippetQuery extends Zend_Gdata_Gbase_Query
+{
+ /**
+ * Path to the snippets feeds on the Google Base server.
+ */
+ const BASE_SNIPPET_FEED_URI = 'https://www.google.com/base/feeds/snippets';
+}
diff --git a/zend/library/Zend/Gdata/Geo.php b/zend/library/Zend/Gdata/Geo.php
new file mode 100755
index 0000000..2d3b01b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Geo.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Geo.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * Service class for interacting with the services which use the
+ * GeoRSS + GML extensions.
+ * @link http://georss.org/
+ * @link http://www.opengis.net/gml/
+ * @link http://code.google.com/apis/picasaweb/reference.html#georss_reference
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Geo extends Zend_Gdata
+{
+
+ /**
+ * Namespaces used for Zend_Gdata_Geo
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('georss', 'http://www.georss.org/georss', 1, 0),
+ array('gml', 'http://www.opengis.net/gml', 1, 0)
+ );
+
+
+ /**
+ * Create Zend_Gdata_Geo object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google Apps servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Geo');
+ $this->registerPackage('Zend_Gdata_Geo_Extension');
+ parent::__construct($client, $applicationId);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Geo/Entry.php b/zend/library/Zend/Gdata/Geo/Entry.php
new file mode 100755
index 0000000..4a039c2
--- /dev/null
+++ b/zend/library/Zend/Gdata/Geo/Entry.php
@@ -0,0 +1,97 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Entry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Geo
+ */
+require_once 'Zend/Gdata/Geo.php';
+
+/**
+ * @see Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+require_once 'Zend/Gdata/Geo/Extension/GeoRssWhere.php';
+
+/**
+ * An Atom entry containing Geograpic data.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Geo_Entry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Geo_Entry';
+
+ protected $_where = null;
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_where != null) {
+ $element->appendChild($this->_where->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('georss') . ':' . 'where':
+ $where = new Zend_Gdata_Geo_Extension_GeoRssWhere();
+ $where->transferFromDOM($child);
+ $this->_where = $where;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getWhere()
+ {
+ return $this->_where;
+ }
+
+ public function setWhere($value)
+ {
+ $this->_where = $value;
+ return $this;
+ }
+
+
+}
diff --git a/zend/library/Zend/Gdata/Geo/Extension/GeoRssWhere.php b/zend/library/Zend/Gdata/Geo/Extension/GeoRssWhere.php
new file mode 100755
index 0000000..a6538a7
--- /dev/null
+++ b/zend/library/Zend/Gdata/Geo/Extension/GeoRssWhere.php
@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: GeoRssWhere.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Geo
+ */
+require_once 'Zend/Gdata/Geo.php';
+
+/**
+ * @see Zend_Gdata_Geo_Extension_GmlPoint
+ */
+require_once 'Zend/Gdata/Geo/Extension/GmlPoint.php';
+
+
+/**
+ * Represents the georss:where element used by the Gdata Geo extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Geo_Extension_GeoRssWhere extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'georss';
+ protected $_rootElement = 'where';
+
+ /**
+ * The point location for this geo element
+ *
+ * @var Zend_Gdata_Geo_Extension_GmlPoint
+ */
+ protected $_point = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param Zend_Gdata_Geo_Extension_GmlPoint $point (optional) Point to which
+ * object should be initialized.
+ */
+ public function __construct($point = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct();
+ $this->setPoint($point);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_point !== null) {
+ $element->appendChild($this->_point->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gml') . ':' . 'Point';
+ $point = new Zend_Gdata_Geo_Extension_GmlPoint();
+ $point->transferFromDOM($child);
+ $this->_point = $point;
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's point attribute.
+ *
+ * @see setPoint
+ * @return Zend_Gdata_Geo_Extension_GmlPoint The requested attribute.
+ */
+ public function getPoint()
+ {
+ return $this->_point;
+ }
+
+ /**
+ * Set the value for this element's point attribute.
+ *
+ * @param Zend_Gdata_Geo_Extension_GmlPoint $value The desired value for this attribute.
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere Provides a fluent interface
+ */
+ public function setPoint($value)
+ {
+ $this->_point = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Geo/Extension/GmlPoint.php b/zend/library/Zend/Gdata/Geo/Extension/GmlPoint.php
new file mode 100755
index 0000000..d11b951
--- /dev/null
+++ b/zend/library/Zend/Gdata/Geo/Extension/GmlPoint.php
@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: GmlPoint.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Geo
+ */
+require_once 'Zend/Gdata/Geo.php';
+
+/**
+ * @see Zend_Gdata_Geo_Extension_GmlPos
+ */
+require_once 'Zend/Gdata/Geo/Extension/GmlPos.php';
+
+
+/**
+ * Represents the gml:point element used by the Gdata Geo extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Geo_Extension_GmlPoint extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gml';
+ protected $_rootElement = 'Point';
+
+ /**
+ * The position represented by this GmlPoint
+ *
+ * @var Zend_Gdata_Geo_Extension_GmlPos
+ */
+ protected $_pos = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param Zend_Gdata_Geo_Extension_GmlPos $pos (optional) Pos to which this
+ * object should be initialized.
+ */
+ public function __construct($pos = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct();
+ $this->setPos($pos);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_pos !== null) {
+ $element->appendChild($this->_pos->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gml') . ':' . 'pos';
+ $pos = new Zend_Gdata_Geo_Extension_GmlPos();
+ $pos->transferFromDOM($child);
+ $this->_pos = $pos;
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's pos attribute.
+ *
+ * @see setPos
+ * @return Zend_Gdata_Geo_Extension_GmlPos The requested attribute.
+ */
+ public function getPos()
+ {
+ return $this->_pos;
+ }
+
+ /**
+ * Set the value for this element's distance attribute.
+ *
+ * @param Zend_Gdata_Geo_Extension_GmlPos $value The desired value for this attribute
+ * @return Zend_Gdata_Geo_Extension_GmlPoint Provides a fluent interface
+ */
+ public function setPos($value)
+ {
+ $this->_pos = $value;
+ return $this;
+ }
+
+
+}
diff --git a/zend/library/Zend/Gdata/Geo/Extension/GmlPos.php b/zend/library/Zend/Gdata/Geo/Extension/GmlPos.php
new file mode 100755
index 0000000..ce008ee
--- /dev/null
+++ b/zend/library/Zend/Gdata/Geo/Extension/GmlPos.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: GmlPos.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Geo
+ */
+require_once 'Zend/Gdata/Geo.php';
+
+/**
+ * Represents the gml:pos element used by the Gdata Geo extensions.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Geo_Extension_GmlPos extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gml';
+ protected $_rootElement = 'pos';
+
+ /**
+ * Constructs a new Zend_Gdata_Geo_Extension_GmlPos object.
+ *
+ * @param string $text (optional) The value to use for this element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Geo/Feed.php b/zend/library/Zend/Gdata/Geo/Feed.php
new file mode 100755
index 0000000..eddbd89
--- /dev/null
+++ b/zend/library/Zend/Gdata/Geo/Feed.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Feed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_eed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Geo
+ */
+require_once 'Zend/Gdata/Geo.php';
+
+/**
+ * @see Zend_Gdata_Geo_Entry
+ */
+require_once 'Zend/Gdata/Geo/Entry.php';
+
+/**
+ * Feed for Gdata Geographic data entries.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Geo
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Geo_Feed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Geo_Entry';
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Geo::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Health.php b/zend/library/Zend/Gdata/Health.php
new file mode 100755
index 0000000..857fd82
--- /dev/null
+++ b/zend/library/Zend/Gdata/Health.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Health.php 24779 2012-05-08 19:13:59Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * Service class for interacting with the Google Health Data API
+ *
+ * @link http://code.google.com/apis/health
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Health extends Zend_Gdata
+{
+ /**
+ * URIs of the AuthSub/OAuth feeds.
+ */
+ const AUTHSUB_PROFILE_FEED_URI =
+ 'https://www.google.com/health/feeds/profile/default';
+ const AUTHSUB_REGISTER_FEED_URI =
+ 'https://www.google.com/health/feeds/register/default';
+
+ /**
+ * URIs of the ClientLogin feeds.
+ */
+ const CLIENTLOGIN_PROFILELIST_FEED_URI =
+ 'https://www.google.com/health/feeds/profile/list';
+ const CLIENTLOGIN_PROFILE_FEED_URI =
+ 'https://www.google.com/health/feeds/profile/ui';
+ const CLIENTLOGIN_REGISTER_FEED_URI =
+ 'https://www.google.com/health/feeds/register/ui';
+
+ /**
+ * Authentication service names for Google Health and the H9 Sandbox.
+ */
+ const HEALTH_SERVICE_NAME = 'health';
+ const H9_SANDBOX_SERVICE_NAME = 'weaver';
+
+ /**
+ * Create Zend_Gdata_Health object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google Health servers.
+ * @param string $applicationId The identity of the application in the form
+ * of Company-AppName-Version
+ * @param bool $useH9Sandbox True if the H9 Developer's Sandbox should be
+ * used instead of production Google Health.
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0', $useH9Sandbox = false)
+ {
+ throw new Zend_Exception(
+ 'Google Health API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googleblog.blogspot.ca/2011/06/update-on-google-health-and-google.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Health/Extension/Ccr.php b/zend/library/Zend/Gdata/Health/Extension/Ccr.php
new file mode 100755
index 0000000..71d1f82
--- /dev/null
+++ b/zend/library/Zend/Gdata/Health/Extension/Ccr.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Ccr.php 24779 2012-05-08 19:13:59Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Element
+ */
+require_once 'Zend/Gdata/App/Extension/Element.php';
+
+/**
+ * Concrete class for working with CCR elements.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Health_Extension_Ccr extends Zend_Gdata_App_Extension_Element
+{
+ /**
+ * Creates a Zend_Gdata_Health_Extension_Ccr entry, representing CCR data
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ throw new Zend_Exception(
+ 'Google Health API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googleblog.blogspot.ca/2011/06/update-on-google-health-and-google.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Health/ProfileEntry.php b/zend/library/Zend/Gdata/Health/ProfileEntry.php
new file mode 100755
index 0000000..949b8c8
--- /dev/null
+++ b/zend/library/Zend/Gdata/Health/ProfileEntry.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ProfileEntry.php 24779 2012-05-08 19:13:59Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * Concrete class for working with Health profile entries.
+ *
+ * @link http://code.google.com/apis/health/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Health_ProfileEntry extends Zend_Gdata_Entry
+{
+ /**
+ * Constructs a new Zend_Gdata_Health_ProfileEntry object.
+ * @param DOMElement $element (optional) The DOMElement on which to base this object.
+ */
+ public function __construct($element = null)
+ {
+ throw new Zend_Exception(
+ 'Google Health API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googleblog.blogspot.ca/2011/06/update-on-google-health-and-google.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Health/ProfileFeed.php b/zend/library/Zend/Gdata/Health/ProfileFeed.php
new file mode 100755
index 0000000..18db6e6
--- /dev/null
+++ b/zend/library/Zend/Gdata/Health/ProfileFeed.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ProfileFeed.php 24779 2012-05-08 19:13:59Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * Represents a Google Health user's Profile Feed
+ *
+ * @link http://code.google.com/apis/health/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Health_ProfileFeed extends Zend_Gdata_Feed
+{
+ /**
+ * Creates a Health Profile feed, representing a user's Health profile
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ throw new Zend_Exception(
+ 'Google Health API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googleblog.blogspot.ca/2011/06/update-on-google-health-and-google.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Health/ProfileListEntry.php b/zend/library/Zend/Gdata/Health/ProfileListEntry.php
new file mode 100755
index 0000000..6303bf8
--- /dev/null
+++ b/zend/library/Zend/Gdata/Health/ProfileListEntry.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ProfileListEntry.php 24779 2012-05-08 19:13:59Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * Concrete class for working with Health profile list entries.
+ *
+ * @link http://code.google.com/apis/health/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Health_ProfileListEntry extends Zend_Gdata_Entry
+{
+ /**
+ * Constructs a new Zend_Gdata_Health_ProfileListEntry object.
+ * @param DOMElement $element (optional) The DOMElement on which to base this object.
+ */
+ public function __construct($element = null)
+ {
+ throw new Zend_Exception(
+ 'Google Health API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googleblog.blogspot.ca/2011/06/update-on-google-health-and-google.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Health/ProfileListFeed.php b/zend/library/Zend/Gdata/Health/ProfileListFeed.php
new file mode 100755
index 0000000..36230bc
--- /dev/null
+++ b/zend/library/Zend/Gdata/Health/ProfileListFeed.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ProfileListFeed.php 24779 2012-05-08 19:13:59Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * Represents a Google Health user's Profile List Feed
+ *
+ * @link http://code.google.com/apis/health/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Health_ProfileListFeed extends Zend_Gdata_Feed
+{
+ public function __construct($element = null)
+ {
+ throw new Zend_Exception(
+ 'Google Health API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googleblog.blogspot.ca/2011/06/update-on-google-health-and-google.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/Health/Query.php b/zend/library/Zend/Gdata/Health/Query.php
new file mode 100755
index 0000000..aa068f0
--- /dev/null
+++ b/zend/library/Zend/Gdata/Health/Query.php
@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Query.php 24779 2012-05-08 19:13:59Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @see Zend_Gdata_Query
+ */
+require_once('Zend/Gdata/Query.php');
+
+/**
+ * Assists in constructing queries for Google Health
+ *
+ * @link http://code.google.com/apis/health
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Health_Query extends Zend_Gdata_Query
+{
+ /**
+ * URI of a user's profile feed.
+ */
+ const HEALTH_PROFILE_FEED_URI =
+ 'https://www.google.com/health/feeds/profile/default';
+
+ /**
+ * URI of register (notices) feed.
+ */
+ const HEALTH_REGISTER_FEED_URI =
+ 'https://www.google.com/health/feeds/register/default';
+
+ /**
+ * Namespace for an item category
+ */
+ const ITEM_CATEGORY_NS = 'http://schemas.google.com/health/item';
+
+ /**
+ * Create Gdata_Query object
+ */
+ public function __construct($url = null)
+ {
+ throw new Zend_Exception(
+ 'Google Health API has been discontinued by Google and was removed'
+ . ' from Zend Framework in 1.12.0. For more information see: '
+ . 'http://googleblog.blogspot.ca/2011/06/update-on-google-health-and-google.html'
+ );
+ }
+}
diff --git a/zend/library/Zend/Gdata/HttpAdapterStreamingProxy.php b/zend/library/Zend/Gdata/HttpAdapterStreamingProxy.php
new file mode 100644
index 0000000..b843898
--- /dev/null
+++ b/zend/library/Zend/Gdata/HttpAdapterStreamingProxy.php
@@ -0,0 +1,127 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: HttpAdapterStreamingProxy.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Http_Client_Adapter_Proxy
+ */
+require_once 'Zend/Http/Client/Adapter/Proxy.php';
+
+/**
+ * Extends the proxy HTTP adapter to handle streams instead of discrete body
+ * strings.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_HttpAdapterStreamingProxy extends Zend_Http_Client_Adapter_Proxy
+{
+ /**
+ * The amount read from a stream source at a time.
+ *
+ * @var integer
+ */
+ const CHUNK_SIZE = 1024;
+
+ /**
+ * Send request to the proxy server with streaming support
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ */
+ public function write($method, $uri, $http_ver = '1.1', $headers = array(), $body = '')
+ {
+ // If no proxy is set, throw an error
+ if (! $this->config['proxy_host']) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('No proxy host set!');
+ }
+
+ // Make sure we're properly connected
+ if (! $this->socket) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are not connected');
+ }
+
+ $host = $this->config['proxy_host'];
+ $port = $this->config['proxy_port'];
+
+ if ($this->connected_to[0] != $host || $this->connected_to[1] != $port) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are connected to the wrong proxy ' .
+ 'server');
+ }
+
+ // Add Proxy-Authorization header
+ if ($this->config['proxy_user'] && ! isset($headers['proxy-authorization'])) {
+ $headers['proxy-authorization'] = Zend_Http_Client::encodeAuthHeader(
+ $this->config['proxy_user'], $this->config['proxy_pass'], $this->config['proxy_auth']
+ );
+ }
+
+ // if we are proxying HTTPS, preform CONNECT handshake with the proxy
+ if ($uri->getScheme() == 'https' && (! $this->negotiated)) {
+ $this->connectHandshake($uri->getHost(), $uri->getPort(), $http_ver, $headers);
+ $this->negotiated = true;
+ }
+
+ // Save request method for later
+ $this->method = $method;
+
+ // Build request headers
+ $request = "{$method} {$uri->__toString()} HTTP/{$http_ver}\r\n";
+
+ // Add all headers to the request string
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = "$k: $v";
+ $request .= "$v\r\n";
+ }
+
+ $request .= "\r\n";
+
+ // Send the request headers
+ if (! @fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to proxy server');
+ }
+
+ //read from $body, write to socket
+ while ($body->hasData()) {
+ if (! @fwrite($this->socket, $body->read(self::CHUNK_SIZE))) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to server');
+ }
+ }
+ return 'Large upload, request is not cached.';
+ }
+}
diff --git a/zend/library/Zend/Gdata/HttpAdapterStreamingSocket.php b/zend/library/Zend/Gdata/HttpAdapterStreamingSocket.php
new file mode 100644
index 0000000..c89e67b
--- /dev/null
+++ b/zend/library/Zend/Gdata/HttpAdapterStreamingSocket.php
@@ -0,0 +1,111 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: HttpAdapterStreamingSocket.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Http_Client_Adapter_Socket
+ */
+require_once 'Zend/Http/Client/Adapter/Socket.php';
+
+/**
+ * Extends the default HTTP adapter to handle streams instead of discrete body
+ * strings.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_HttpAdapterStreamingSocket extends Zend_Http_Client_Adapter_Socket
+{
+
+ /**
+ * The amount read from a stream source at a time.
+ *
+ * @var integer
+ */
+ const CHUNK_SIZE = 1024;
+
+ /**
+ * Send request to the remote server with streaming support.
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ */
+ public function write($method, $uri, $http_ver = '1.1', $headers = array(),
+ $body = '')
+ {
+ // Make sure we're properly connected
+ if (! $this->socket) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are not connected');
+ }
+
+ $host = $uri->getHost();
+ $host = (strtolower($uri->getScheme()) == 'https' ? $this->config['ssltransport'] : 'tcp') . '://' . $host;
+ if ($this->connected_to[0] != $host || $this->connected_to[1] != $uri->getPort()) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are connected to the wrong host');
+ }
+
+ // Save request method for later
+ $this->method = $method;
+
+ // Build request headers
+ $path = $uri->getPath();
+ if ($uri->getQuery()) $path .= '?' . $uri->getQuery();
+ $request = "{$method} {$path} HTTP/{$http_ver}\r\n";
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = ucfirst($k) . ": $v";
+ $request .= "$v\r\n";
+ }
+
+ // Send the headers over
+ $request .= "\r\n";
+ if (! @fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to server');
+ }
+
+
+ //read from $body, write to socket
+ $chunk = $body->read(self::CHUNK_SIZE);
+ while ($chunk !== FALSE) {
+ if (! @fwrite($this->socket, $chunk)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to server');
+ }
+ $chunk = $body->read(self::CHUNK_SIZE);
+ }
+ $body->closeFileHandle();
+ return 'Large upload, request is not cached.';
+ }
+}
diff --git a/zend/library/Zend/Gdata/HttpClient.php b/zend/library/Zend/Gdata/HttpClient.php
new file mode 100644
index 0000000..5e77ddd
--- /dev/null
+++ b/zend/library/Zend/Gdata/HttpClient.php
@@ -0,0 +1,352 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: HttpClient.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Http_Client
+ */
+require_once 'Zend/Http/Client.php';
+
+/**
+ * Gdata Http Client object.
+ *
+ * Class to extend the generic Zend Http Client with the ability to perform
+ * secure AuthSub requests
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_HttpClient extends Zend_Http_Client
+{
+
+ /**
+ * OpenSSL private key resource id
+ * This key is used for AuthSub authentication. If this value is set,
+ * it is assuemd that secure AuthSub is desired.
+ *
+ * @var resource
+ */
+ private $_authSubPrivateKeyId = null;
+
+ /**
+ * Token for AuthSub authentication.
+ * If this token is set, AuthSub authentication is used.
+ *
+ * @var string
+ */
+ private $_authSubToken = null;
+
+ /**
+ * Token for ClientLogin authentication.
+ * If only this token is set, ClientLogin authentication is used.
+ *
+ * @var string
+ */
+ private $_clientLoginToken = null;
+
+ /**
+ * Token for ClientLogin authentication.
+ * If this token is set, and the AuthSub key is not set,
+ * ClientLogin authentication is used
+ *
+ * @var string
+ */
+ private $_clientLoginKey = null;
+
+ /**
+ * True if this request is being made with data supplied by
+ * a stream object instead of a raw encoded string.
+ *
+ * @var bool
+ */
+ protected $_streamingRequest = null;
+
+ /**
+ * Sets the PEM formatted private key, as read from a file.
+ *
+ * This method reads the file and then calls setAuthSubPrivateKey()
+ * with the file contents.
+ *
+ * @param string $file The location of the file containing the PEM key
+ * @param string $passphrase The optional private key passphrase
+ * @param bool $useIncludePath Whether to search the include_path
+ * for the file
+ * @return void
+ */
+ public function setAuthSubPrivateKeyFile($file, $passphrase = null,
+ $useIncludePath = false) {
+ $fp = @fopen($file, "r", $useIncludePath);
+ if (!$fp) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException('Failed to open private key file for AuthSub.');
+ }
+
+ $key = '';
+ while (!feof($fp)) {
+ $key .= fread($fp, 8192);
+ }
+ $this->setAuthSubPrivateKey($key, $passphrase);
+ fclose($fp);
+ }
+
+ /**
+ * Sets the PEM formatted private key to be used for secure AuthSub auth.
+ *
+ * In order to call this method, openssl must be enabled in your PHP
+ * installation. Otherwise, a Zend_Gdata_App_InvalidArgumentException
+ * will be thrown.
+ *
+ * @param string $key The private key
+ * @param string $passphrase The optional private key passphrase
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_HttpClient Provides a fluent interface
+ */
+ public function setAuthSubPrivateKey($key, $passphrase = null) {
+ if ($key != null && !function_exists('openssl_pkey_get_private')) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You cannot enable secure AuthSub if the openssl module ' .
+ 'is not enabled in your PHP installation.');
+ }
+ $this->_authSubPrivateKeyId = openssl_pkey_get_private(
+ $key, $passphrase);
+ return $this;
+ }
+
+ /**
+ * Gets the openssl private key id
+ *
+ * @return string The private key
+ */
+ public function getAuthSubPrivateKeyId() {
+ return $this->_authSubPrivateKeyId;
+ }
+
+ /**
+ * Gets the AuthSub token used for authentication
+ *
+ * @return string The token
+ */
+ public function getAuthSubToken() {
+ return $this->_authSubToken;
+ }
+
+ /**
+ * Sets the AuthSub token used for authentication
+ *
+ * @param string $token The token
+ * @return Zend_Gdata_HttpClient Provides a fluent interface
+ */
+ public function setAuthSubToken($token) {
+ $this->_authSubToken = $token;
+ return $this;
+ }
+
+ /**
+ * Gets the ClientLogin token used for authentication
+ *
+ * @return string The token
+ */
+ public function getClientLoginToken() {
+ return $this->_clientLoginToken;
+ }
+
+ /**
+ * Sets the ClientLogin token used for authentication
+ *
+ * @param string $token The token
+ * @return Zend_Gdata_HttpClient Provides a fluent interface
+ */
+ public function setClientLoginToken($token) {
+ $this->_clientLoginToken = $token;
+ return $this;
+ }
+
+ /**
+ * Filters the HTTP requests being sent to add the Authorization header.
+ *
+ * If both AuthSub and ClientLogin tokens are set,
+ * AuthSub takes precedence. If an AuthSub key is set, then
+ * secure AuthSub authentication is used, and the request is signed.
+ * Requests must be signed only with the private key corresponding to the
+ * public key registered with Google. If an AuthSub key is set, but
+ * openssl support is not enabled in the PHP installation, an exception is
+ * thrown.
+ *
+ * @param string $method The HTTP method
+ * @param string $url The URL
+ * @param array $headers An associate array of headers to be
+ * sent with the request or null
+ * @param string $body The body of the request or null
+ * @param string $contentType The MIME content type of the body or null
+ * @throws Zend_Gdata_App_Exception if there was a signing failure
+ * @return array The processed values in an associative array,
+ * using the same names as the params
+ */
+ public function filterHttpRequest($method, $url, $headers = array(), $body = null, $contentType = null) {
+ if ($this->getAuthSubToken() != null) {
+ // AuthSub authentication
+ if ($this->getAuthSubPrivateKeyId() != null) {
+ // secure AuthSub
+ $time = time();
+ $nonce = mt_rand(0, 999999999);
+ $dataToSign = $method . ' ' . $url . ' ' . $time . ' ' . $nonce;
+
+ // compute signature
+ $pKeyId = $this->getAuthSubPrivateKeyId();
+ $signSuccess = openssl_sign($dataToSign, $signature, $pKeyId,
+ OPENSSL_ALGO_SHA1);
+ if (!$signSuccess) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'openssl_signing failure - returned false');
+ }
+ // encode signature
+ $encodedSignature = base64_encode($signature);
+
+ // final header
+ $headers['authorization'] = 'AuthSub token="' . $this->getAuthSubToken() . '" ' .
+ 'data="' . $dataToSign . '" ' .
+ 'sig="' . $encodedSignature . '" ' .
+ 'sigalg="rsa-sha1"';
+ } else {
+ // AuthSub without secure tokens
+ $headers['authorization'] = 'AuthSub token="' . $this->getAuthSubToken() . '"';
+ }
+ } elseif ($this->getClientLoginToken() != null) {
+ $headers['authorization'] = 'GoogleLogin auth=' . $this->getClientLoginToken();
+ }
+ return array('method' => $method, 'url' => $url, 'body' => $body, 'headers' => $headers, 'contentType' => $contentType);
+ }
+
+ /**
+ * Method for filtering the HTTP response, though no filtering is
+ * currently done.
+ *
+ * @param Zend_Http_Response $response The response object to filter
+ * @return Zend_Http_Response The filterd response object
+ */
+ public function filterHttpResponse($response) {
+ return $response;
+ }
+
+ /**
+ * Return the current connection adapter
+ *
+ * @return Zend_Http_Client_Adapter_Interface|string $adapter
+ */
+ public function getAdapter()
+ {
+ return $this->adapter;
+ }
+
+ /**
+ * Load the connection adapter
+ *
+ * @param Zend_Http_Client_Adapter_Interface $adapter
+ * @return void
+ */
+ public function setAdapter($adapter)
+ {
+ if ($adapter == null) {
+ $this->adapter = $adapter;
+ } else {
+ parent::setAdapter($adapter);
+ }
+ }
+
+ /**
+ * Set the streamingRequest variable which controls whether we are
+ * sending the raw (already encoded) POST data from a stream source.
+ *
+ * @param boolean $value The value to set.
+ * @return void
+ */
+ public function setStreamingRequest($value)
+ {
+ $this->_streamingRequest = $value;
+ }
+
+ /**
+ * Check whether the client is set to perform streaming requests.
+ *
+ * @return boolean True if yes, false otherwise.
+ */
+ public function getStreamingRequest()
+ {
+ if ($this->_streamingRequest()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Prepare the request body (for POST and PUT requests)
+ *
+ * @return string
+ * @throws Zend_Http_Client_Exception
+ */
+ protected function _prepareBody()
+ {
+ if($this->_streamingRequest) {
+ $this->setHeaders(self::CONTENT_LENGTH,
+ $this->raw_post_data->getTotalSize());
+ return $this->raw_post_data;
+ }
+ else {
+ return parent::_prepareBody();
+ }
+ }
+
+ /**
+ * Clear all custom parameters we set.
+ *
+ * @return Zend_Http_Client
+ */
+ public function resetParameters($clearAll = false)
+ {
+ $this->_streamingRequest = false;
+
+ return parent::resetParameters($clearAll);
+ }
+
+ /**
+ * Set the raw (already encoded) POST data from a stream source.
+ *
+ * This is used to support POSTing from open file handles without
+ * caching the entire body into memory. It is a wrapper around
+ * Zend_Http_Client::setRawData().
+ *
+ * @param string $data The request data
+ * @param string $enctype The encoding type
+ * @return Zend_Http_Client
+ */
+ public function setRawDataStream($data, $enctype = null)
+ {
+ $this->_streamingRequest = true;
+ return $this->setRawData($data, $enctype);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Kind/EventEntry.php b/zend/library/Zend/Gdata/Kind/EventEntry.php
new file mode 100644
index 0000000..5144d1c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Kind/EventEntry.php
@@ -0,0 +1,428 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: EventEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * @see Zend_Gdata_Extension_Where
+ */
+require_once 'Zend/Gdata/Extension/Where.php';
+
+/**
+ * @see Zend_Gdata_Extension_When
+ */
+require_once 'Zend/Gdata/Extension/When.php';
+
+/**
+ * @see Zend_Gdata_Extension_Who
+ */
+require_once 'Zend/Gdata/Extension/Who.php';
+
+/**
+ * @see Zend_Gdata_Extension_Recurrence
+ */
+require_once 'Zend/Gdata/Extension/Recurrence.php';
+
+/**
+ * @see Zend_Gdata_Extension_EventStatus
+ */
+require_once 'Zend/Gdata/Extension/EventStatus.php';
+
+/**
+ * @see Zend_Gdata_Extension_Comments
+ */
+require_once 'Zend/Gdata/Extension/Comments.php';
+
+/**
+ * @see Zend_Gdata_Extension_Transparency
+ */
+require_once 'Zend/Gdata/Extension/Transparency.php';
+
+/**
+ * @see Zend_Gdata_Extension_Visibility
+ */
+require_once 'Zend/Gdata/Extension/Visibility.php';
+
+/**
+ * @see Zend_Gdata_Extension_ExtendedProperty
+ */
+require_once 'Zend/Gdata/Extension/ExtendedProperty.php';
+
+/**
+ * @see Zend_Gdata_Extension_OriginalEvent
+ */
+require_once 'Zend/Gdata/Extension/OriginalEvent.php';
+
+/**
+ * @see Zend_Gdata_Extension_EntryLink
+ */
+require_once 'Zend/Gdata/Extension/EntryLink.php';
+
+/**
+ * Data model for the Gdata Event "Kind". Google Calendar has a separate
+ * EventEntry class which extends this.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Kind_EventEntry extends Zend_Gdata_Entry
+{
+ protected $_who = array();
+ protected $_when = array();
+ protected $_where = array();
+ protected $_recurrence = null;
+ protected $_eventStatus = null;
+ protected $_comments = null;
+ protected $_transparency = null;
+ protected $_visibility = null;
+ protected $_recurrenceException = array();
+ protected $_extendedProperty = array();
+ protected $_originalEvent = null;
+ protected $_entryLink = null;
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_who != null) {
+ foreach ($this->_who as $who) {
+ $element->appendChild($who->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_when != null) {
+ foreach ($this->_when as $when) {
+ $element->appendChild($when->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_where != null) {
+ foreach ($this->_where as $where) {
+ $element->appendChild($where->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_recurrenceException != null) {
+ foreach ($this->_recurrenceException as $recurrenceException) {
+ $element->appendChild($recurrenceException->getDOM($element->ownerDocument));
+ }
+ }
+ if ($this->_extendedProperty != null) {
+ foreach ($this->_extendedProperty as $extProp) {
+ $element->appendChild($extProp->getDOM($element->ownerDocument));
+ }
+ }
+
+ if ($this->_recurrence != null) {
+ $element->appendChild($this->_recurrence->getDOM($element->ownerDocument));
+ }
+ if ($this->_eventStatus != null) {
+ $element->appendChild($this->_eventStatus->getDOM($element->ownerDocument));
+ }
+ if ($this->_comments != null) {
+ $element->appendChild($this->_comments->getDOM($element->ownerDocument));
+ }
+ if ($this->_transparency != null) {
+ $element->appendChild($this->_transparency->getDOM($element->ownerDocument));
+ }
+ if ($this->_visibility != null) {
+ $element->appendChild($this->_visibility->getDOM($element->ownerDocument));
+ }
+ if ($this->_originalEvent != null) {
+ $element->appendChild($this->_originalEvent->getDOM($element->ownerDocument));
+ }
+ if ($this->_entryLink != null) {
+ $element->appendChild($this->_entryLink->getDOM($element->ownerDocument));
+ }
+
+
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'where';
+ $where = new Zend_Gdata_Extension_Where();
+ $where->transferFromDOM($child);
+ $this->_where[] = $where;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'when';
+ $when = new Zend_Gdata_Extension_When();
+ $when->transferFromDOM($child);
+ $this->_when[] = $when;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'who';
+ $who = new Zend_Gdata_Extension_Who();
+ $who ->transferFromDOM($child);
+ $this->_who[] = $who;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'recurrence';
+ $recurrence = new Zend_Gdata_Extension_Recurrence();
+ $recurrence->transferFromDOM($child);
+ $this->_recurrence = $recurrence;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'eventStatus';
+ $eventStatus = new Zend_Gdata_Extension_EventStatus();
+ $eventStatus->transferFromDOM($child);
+ $this->_eventStatus = $eventStatus;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'comments';
+ $comments = new Zend_Gdata_Extension_Comments();
+ $comments->transferFromDOM($child);
+ $this->_comments = $comments;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'transparency';
+ $transparency = new Zend_Gdata_Extension_Transparency();
+ $transparency ->transferFromDOM($child);
+ $this->_transparency = $transparency;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'visibility';
+ $visiblity = new Zend_Gdata_Extension_Visibility();
+ $visiblity ->transferFromDOM($child);
+ $this->_visibility = $visiblity;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'recurrenceException';
+ require_once 'Zend/Gdata/Extension/RecurrenceException.php';
+ $recurrenceException = new Zend_Gdata_Extension_RecurrenceException();
+ $recurrenceException ->transferFromDOM($child);
+ $this->_recurrenceException[] = $recurrenceException;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'originalEvent';
+ $originalEvent = new Zend_Gdata_Extension_OriginalEvent();
+ $originalEvent ->transferFromDOM($child);
+ $this->_originalEvent = $originalEvent;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'extendedProperty';
+ $extProp = new Zend_Gdata_Extension_ExtendedProperty();
+ $extProp->transferFromDOM($child);
+ $this->_extendedProperty[] = $extProp;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'entryLink':
+ $entryLink = new Zend_Gdata_Extension_EntryLink();
+ $entryLink->transferFromDOM($child);
+ $this->_entryLink = $entryLink;
+ break;
+
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getWhen()
+ {
+ return $this->_when;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setWhen($value)
+ {
+ $this->_when = $value;
+ return $this;
+ }
+
+ public function getWhere()
+ {
+ return $this->_where;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setWhere($value)
+ {
+ $this->_where = $value;
+ return $this;
+ }
+
+ public function getWho()
+ {
+ return $this->_who;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setWho($value)
+ {
+ $this->_who = $value;
+ return $this;
+ }
+
+ public function getRecurrence()
+ {
+ return $this->_recurrence;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setRecurrence($value)
+ {
+ $this->_recurrence = $value;
+ return $this;
+ }
+
+ public function getEventStatus()
+ {
+ return $this->_eventStatus;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setEventStatus($value)
+ {
+ $this->_eventStatus = $value;
+ return $this;
+ }
+
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setComments($value)
+ {
+ $this->_comments = $value;
+ return $this;
+ }
+
+ public function getTransparency()
+ {
+ return $this->_transparency;
+ }
+
+ /**
+ * @param Zend_Gdata_Transparency $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setTransparency($value)
+ {
+ $this->_transparency = $value;
+ return $this;
+ }
+
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * @param Zend_Gdata_Visibility $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ public function getRecurrenceExcption()
+ {
+ return $this->_recurrenceException;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setRecurrenceException($value)
+ {
+ $this->_recurrenceException = $value;
+ return $this;
+ }
+
+ public function getExtendedProperty()
+ {
+ return $this->_extendedProperty;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setExtendedProperty($value)
+ {
+ $this->_extendedProperty = $value;
+ return $this;
+ }
+
+ public function getOriginalEvent()
+ {
+ return $this->_originalEvent;
+ }
+
+ /**
+ * @param Zend_Gdata_Extension_OriginalEvent $value
+ * @return Zend_Gdata_Kind_EventEntry Provides a fluent interface
+ */
+ public function setOriginalEvent($value)
+ {
+ $this->_originalEvent = $value;
+ return $this;
+ }
+
+ /**
+ * Get this entry's EntryLink element.
+ *
+ * @return Zend_Gdata_Extension_EntryLink The requested entry.
+ */
+ public function getEntryLink()
+ {
+ return $this->_entryLink;
+ }
+
+ /**
+ * Set the child's EntryLink element.
+ *
+ * @param Zend_Gdata_Extension_EntryLink $value The desired value for this attribute.
+ * @return Zend_Gdata_Extension_Who The element being modified.
+ */
+ public function setEntryLink($value)
+ {
+ $this->_entryLink = $value;
+ return $this;
+ }
+
+
+}
diff --git a/zend/library/Zend/Gdata/Media.php b/zend/library/Zend/Gdata/Media.php
new file mode 100755
index 0000000..786d39d
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Media.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * Service class for interacting with the services which use the media extensions
+ * @link http://code.google.com/apis/gdata/calendar.html
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media extends Zend_Gdata
+{
+
+ /**
+ * Namespaces used for Zend_Gdata_Photos
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('media', 'http://search.yahoo.com/mrss/', 1, 0)
+ );
+
+ /**
+ * Create Gdata_Media object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google Apps servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Media');
+ $this->registerPackage('Zend_Gdata_Media_Extension');
+ parent::__construct($client, $applicationId);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Entry.php b/zend/library/Zend/Gdata/Media/Entry.php
new file mode 100755
index 0000000..b0441fa
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Entry.php
@@ -0,0 +1,134 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Entry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Media
+ */
+require_once 'Zend/Gdata/Media.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaGroup
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaGroup.php';
+
+/**
+ * Represents the Gdata flavor of an Atom entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Entry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Media_Entry';
+
+ /**
+ * media:group element
+ *
+ * @var Zend_Gdata_Media_Extension_MediaGroup
+ */
+ protected $_mediaGroup = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_mediaGroup != null) {
+ $element->appendChild($this->_mediaGroup->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('media') . ':' . 'group':
+ $mediaGroup = new Zend_Gdata_Media_Extension_MediaGroup();
+ $mediaGroup->transferFromDOM($child);
+ $this->_mediaGroup = $mediaGroup;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns the entry's mediaGroup object.
+ *
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function getMediaGroup()
+ {
+ return $this->_mediaGroup;
+ }
+
+ /**
+ * Sets the entry's mediaGroup object.
+ *
+ * @param Zend_Gdata_Media_Extension_MediaGroup $mediaGroup
+ * @return Zend_Gdata_Media_Entry Provides a fluent interface
+ */
+ public function setMediaGroup($mediaGroup)
+ {
+ $this->_mediaGroup = $mediaGroup;
+ return $this;
+ }
+
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaCategory.php b/zend/library/Zend/Gdata/Media/Extension/MediaCategory.php
new file mode 100755
index 0000000..741671a
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaCategory.php
@@ -0,0 +1,148 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaCategory.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:category element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaCategory extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'category';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_scheme = null;
+ protected $_label = null;
+
+ /**
+ * Creates an individual MediaCategory object.
+ *
+ * @param string $text Indication of the type and content of the media
+ * @param string $scheme URI that identifies the categorization scheme
+ * @param string $label Human-readable label to be displayed in applications
+ */
+ public function __construct($text = null, $scheme = null, $label = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_scheme = $scheme;
+ $this->_label = $label;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ if ($this->_label !== null) {
+ $element->setAttribute('label', $this->_label);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ case 'label':
+ $this->_label = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the URI that identifies the categorization scheme
+ * Optional.
+ *
+ * @return string URI that identifies the categorization scheme
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value URI that identifies the categorization scheme
+ * @return Zend_Gdata_Media_Extension_MediaCategory Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+ /**
+ * @return string Human-readable label to be displayed in applications
+ */
+ public function getLabel()
+ {
+ return $this->_label;
+ }
+
+ /**
+ * @param string $value Human-readable label to be displayed in applications
+ * @return Zend_Gdata_Media_Extension_MediaCategory Provides a fluent interface
+ */
+ public function setLabel($value)
+ {
+ $this->_label = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaContent.php b/zend/library/Zend/Gdata/Media/Extension/MediaContent.php
new file mode 100755
index 0000000..8bb9b9e
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaContent.php
@@ -0,0 +1,522 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaContent.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the media:content element of Media RSS.
+ * Represents media objects. Multiple media objects representing
+ * the same content can be represented using a
+ * media:group (Zend_Gdata_Media_Extension_MediaGroup) element.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaContent extends Zend_Gdata_Extension
+{
+ protected $_rootElement = 'content';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_url = null;
+
+ /**
+ * @var int
+ */
+ protected $_fileSize = null;
+
+ /**
+ * @var string
+ */
+ protected $_type = null;
+
+ /**
+ * @var string
+ */
+ protected $_medium = null;
+
+ /**
+ * @var string
+ */
+ protected $_isDefault = null;
+
+ /**
+ * @var string
+ */
+ protected $_expression = null;
+
+ /**
+ * @var int
+ */
+ protected $_bitrate = null;
+
+ /**
+ * @var int
+ */
+ protected $_framerate = null;
+
+ /**
+ * @var int
+ */
+ protected $_samplingrate = null;
+
+ /**
+ * @var int
+ */
+ protected $_channels = null;
+
+ /**
+ * @var int
+ */
+ protected $_duration = null;
+
+ /**
+ * @var int
+ */
+ protected $_height = null;
+
+ /**
+ * @var int
+ */
+ protected $_width = null;
+
+ /**
+ * @var string
+ */
+ protected $_lang = null;
+
+ /**
+ * Creates an individual MediaContent object.
+ */
+ public function __construct($url = null, $fileSize = null, $type = null,
+ $medium = null, $isDefault = null, $expression = null,
+ $bitrate = null, $framerate = null, $samplingrate = null,
+ $channels = null, $duration = null, $height = null, $width = null,
+ $lang = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_url = $url;
+ $this->_fileSize = $fileSize;
+ $this->_type = $type;
+ $this->_medium = $medium;
+ $this->_isDefault = $isDefault;
+ $this->_expression = $expression;
+ $this->_bitrate = $bitrate;
+ $this->_framerate = $framerate;
+ $this->_samplingrate = $samplingrate;
+ $this->_channels = $channels;
+ $this->_duration = $duration;
+ $this->_height = $height;
+ $this->_width = $width;
+ $this->_lang = $lang;
+ }
+
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_url !== null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ if ($this->_fileSize !== null) {
+ $element->setAttribute('fileSize', $this->_fileSize);
+ }
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ if ($this->_medium !== null) {
+ $element->setAttribute('medium', $this->_medium);
+ }
+ if ($this->_isDefault !== null) {
+ $element->setAttribute('isDefault', $this->_isDefault);
+ }
+ if ($this->_expression !== null) {
+ $element->setAttribute('expression', $this->_expression);
+ }
+ if ($this->_bitrate !== null) {
+ $element->setAttribute('bitrate', $this->_bitrate);
+ }
+ if ($this->_framerate !== null) {
+ $element->setAttribute('framerate', $this->_framerate);
+ }
+ if ($this->_samplingrate !== null) {
+ $element->setAttribute('samplingrate', $this->_samplingrate);
+ }
+ if ($this->_channels !== null) {
+ $element->setAttribute('channels', $this->_channels);
+ }
+ if ($this->_duration !== null) {
+ $element->setAttribute('duration', $this->_duration);
+ }
+ if ($this->_height !== null) {
+ $element->setAttribute('height', $this->_height);
+ }
+ if ($this->_width !== null) {
+ $element->setAttribute('width', $this->_width);
+ }
+ if ($this->_lang !== null) {
+ $element->setAttribute('lang', $this->_lang);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ case 'fileSize':
+ $this->_fileSize = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ case 'medium':
+ $this->_medium = $attribute->nodeValue;
+ break;
+ case 'isDefault':
+ $this->_isDefault = $attribute->nodeValue;
+ break;
+ case 'expression':
+ $this->_expression = $attribute->nodeValue;
+ break;
+ case 'bitrate':
+ $this->_bitrate = $attribute->nodeValue;
+ break;
+ case 'framerate':
+ $this->_framerate = $attribute->nodeValue;
+ break;
+ case 'samplingrate':
+ $this->_samplingrate = $attribute->nodeValue;
+ break;
+ case 'channels':
+ $this->_channels = $attribute->nodeValue;
+ break;
+ case 'duration':
+ $this->_duration = $attribute->nodeValue;
+ break;
+ case 'height':
+ $this->_height = $attribute->nodeValue;
+ break;
+ case 'width':
+ $this->_width = $attribute->nodeValue;
+ break;
+ case 'lang':
+ $this->_lang = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the URL representing this MediaContent object
+ *
+ * @return string The URL representing this MediaContent object.
+ */
+ public function __toString()
+ {
+ return $this->getUrl();
+ }
+
+ /**
+ * @return string The direct URL to the media object
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * @param string $value The direct URL to the media object
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setUrl($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+ /**
+ * @return int The size of the media in bytes
+ */
+ public function getFileSize()
+ {
+ return $this->_fileSize;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setFileSize($value)
+ {
+ $this->_fileSize = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMedium()
+ {
+ return $this->_medium;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setMedium($value)
+ {
+ $this->_medium = $value;
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function getIsDefault()
+ {
+ return $this->_isDefault;
+ }
+
+ /**
+ * @param bool $value
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setIsDefault($value)
+ {
+ $this->_isDefault = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getExpression()
+ {
+ return $this->_expression;
+ }
+
+ /**
+ * @param string
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setExpression($value)
+ {
+ $this->_expression = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getBitrate()
+ {
+ return $this->_bitrate;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setBitrate($value)
+ {
+ $this->_bitrate = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getFramerate()
+ {
+ return $this->_framerate;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setFramerate($value)
+ {
+ $this->_framerate = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSamplingrate()
+ {
+ return $this->_samplingrate;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setSamplingrate($value)
+ {
+ $this->_samplingrate = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getChannels()
+ {
+ return $this->_channels;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setChannels($value)
+ {
+ $this->_channels = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDuration()
+ {
+ return $this->_duration;
+ }
+
+ /**
+ *
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setDuration($value)
+ {
+ $this->_duration = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getHeight()
+ {
+ return $this->_height;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setHeight($value)
+ {
+ $this->_height = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getWidth()
+ {
+ return $this->_width;
+ }
+
+ /**
+ * @param int
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setWidth($value)
+ {
+ $this->_width = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLang()
+ {
+ return $this->_lang;
+ }
+
+ /**
+ * @param string
+ * @return Zend_Gdata_Media_Extension_MediaContent Provides a fluent interface
+ */
+ public function setLang($value)
+ {
+ $this->_lang = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaCopyright.php b/zend/library/Zend/Gdata/Media/Extension/MediaCopyright.php
new file mode 100755
index 0000000..8462af3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaCopyright.php
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaCopyright.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:copyright element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaCopyright extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'copyright';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_url = null;
+
+ /**
+ * @param string $text
+ * @param string $url
+ */
+ public function __construct($text = null, $url = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_url = $url;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_url !== null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCopyright Provides a fluent interface
+ */
+ public function setUrl($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaCredit.php b/zend/library/Zend/Gdata/Media/Extension/MediaCredit.php
new file mode 100755
index 0000000..5934a03
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaCredit.php
@@ -0,0 +1,149 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaCredit.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:credit element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaCredit extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'credit';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_role = null;
+
+ /**
+ * @var string
+ */
+ protected $_scheme = null;
+
+ /**
+ * Creates an individual MediaCredit object.
+ *
+ * @param string $text
+ * @param string $role
+ * @param string $scheme
+ */
+ public function __construct($text = null, $role = null, $scheme = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_role = $role;
+ $this->_scheme = $scheme;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_role !== null) {
+ $element->setAttribute('role', $this->_role);
+ }
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'role':
+ $this->_role = $attribute->nodeValue;
+ break;
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getRole()
+ {
+ return $this->_role;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent interface
+ */
+ public function setRole($value)
+ {
+ $this->_role = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaDescription.php b/zend/library/Zend/Gdata/Media/Extension/MediaDescription.php
new file mode 100755
index 0000000..19d03b8
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaDescription.php
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaDescription.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:description element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaDescription extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'description';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_type = null;
+
+ /**
+ * @param string $text
+ * @param string $type
+ */
+ public function __construct($text = null, $type = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_type = $type;
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaDescription Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaGroup.php b/zend/library/Zend/Gdata/Media/Extension/MediaGroup.php
new file mode 100755
index 0000000..90bc8b8
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaGroup.php
@@ -0,0 +1,566 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaGroup.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaContent
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaContent.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaCategory
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaCategory.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaCopyright
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaCopyright.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaCredit
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaCredit.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaDescription
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaDescription.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaHash
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaHash.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaKeywords
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaKeywords.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaPlayer
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaPlayer.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaRating
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaRating.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaRestriction
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaRestriction.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaText
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaText.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaThumbnail
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaThumbnail.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaTitle
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaTitle.php';
+
+
+/**
+ * This class represents the media:group element of Media RSS.
+ * It allows the grouping of media:content elements that are
+ * different representations of the same content. When it exists,
+ * it is a child of an Entry (Atom) or Item (RSS).
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaGroup extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'group';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var array
+ */
+ protected $_content = array();
+
+ /**
+ * @var array
+ */
+ protected $_category = array();
+
+ /**
+ * @var Zend_Gdata_Media_Extension_MediaCopyright
+ */
+ protected $_copyright = null;
+
+ /**
+ * @var array
+ */
+ protected $_credit = array();
+
+ /**
+ * @var Zend_Gdata_Media_Extension_MediaDescription
+ */
+ protected $_description = null;
+
+ /**
+ * @var array
+ */
+ protected $_hash = array();
+
+ /**
+ * @var Zend_Gdata_Media_Extension_MediaKeywords
+ */
+ protected $_keywords = null;
+
+ /**
+ * @var array
+ */
+ protected $_player = array();
+
+ /**
+ * @var array
+ */
+ protected $_rating = array();
+
+ /**
+ * @var array
+ */
+ protected $_restriction = array();
+
+ /**
+ * @var array
+ */
+ protected $_mediaText = array();
+
+ /**
+ * @var array
+ */
+ protected $_thumbnail = array();
+
+ /**
+ * @var string
+ */
+ protected $_title = null;
+
+ /**
+ * Creates an individual MediaGroup object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ foreach ($this->_content as $content) {
+ $element->appendChild($content->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_category as $category) {
+ $element->appendChild($category->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_credit as $credit) {
+ $element->appendChild($credit->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_player as $player) {
+ $element->appendChild($player->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_rating as $rating) {
+ $element->appendChild($rating->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_restriction as $restriction) {
+ $element->appendChild($restriction->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_mediaText as $text) {
+ $element->appendChild($text->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_thumbnail as $thumbnail) {
+ $element->appendChild($thumbnail->getDOM($element->ownerDocument));
+ }
+ if ($this->_copyright != null) {
+ $element->appendChild(
+ $this->_copyright->getDOM($element->ownerDocument));
+ }
+ if ($this->_description != null) {
+ $element->appendChild(
+ $this->_description->getDOM($element->ownerDocument));
+ }
+ foreach ($this->_hash as $hash) {
+ $element->appendChild($hash->getDOM($element->ownerDocument));
+ }
+ if ($this->_keywords != null) {
+ $element->appendChild(
+ $this->_keywords->getDOM($element->ownerDocument));
+ }
+ if ($this->_title != null) {
+ $element->appendChild(
+ $this->_title->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('media') . ':' . 'content';
+ $content = new Zend_Gdata_Media_Extension_MediaContent();
+ $content->transferFromDOM($child);
+ $this->_content[] = $content;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'category';
+ $category = new Zend_Gdata_Media_Extension_MediaCategory();
+ $category->transferFromDOM($child);
+ $this->_category[] = $category;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'copyright';
+ $copyright = new Zend_Gdata_Media_Extension_MediaCopyright();
+ $copyright->transferFromDOM($child);
+ $this->_copyright = $copyright;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'credit';
+ $credit = new Zend_Gdata_Media_Extension_MediaCredit();
+ $credit->transferFromDOM($child);
+ $this->_credit[] = $credit;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'description';
+ $description = new Zend_Gdata_Media_Extension_MediaDescription();
+ $description->transferFromDOM($child);
+ $this->_description = $description;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'hash';
+ $hash = new Zend_Gdata_Media_Extension_MediaHash();
+ $hash->transferFromDOM($child);
+ $this->_hash[] = $hash;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'keywords';
+ $keywords = new Zend_Gdata_Media_Extension_MediaKeywords();
+ $keywords->transferFromDOM($child);
+ $this->_keywords = $keywords;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'player';
+ $player = new Zend_Gdata_Media_Extension_MediaPlayer();
+ $player->transferFromDOM($child);
+ $this->_player[] = $player;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'rating';
+ $rating = new Zend_Gdata_Media_Extension_MediaRating();
+ $rating->transferFromDOM($child);
+ $this->_rating[] = $rating;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'restriction';
+ $restriction = new Zend_Gdata_Media_Extension_MediaRestriction();
+ $restriction->transferFromDOM($child);
+ $this->_restriction[] = $restriction;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'text';
+ $text = new Zend_Gdata_Media_Extension_MediaText();
+ $text->transferFromDOM($child);
+ $this->_mediaText[] = $text;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'thumbnail';
+ $thumbnail = new Zend_Gdata_Media_Extension_MediaThumbnail();
+ $thumbnail->transferFromDOM($child);
+ $this->_thumbnail[] = $thumbnail;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'title';
+ $title = new Zend_Gdata_Media_Extension_MediaTitle();
+ $title->transferFromDOM($child);
+ $this->_title = $title;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * @return array
+ */
+ public function getContent()
+ {
+ return $this->_content;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_MediaGroup Provides a fluent interface
+ */
+ public function setContent($value)
+ {
+ $this->_content = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getCategory()
+ {
+ return $this->_category;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setCategory($value)
+ {
+ $this->_category = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_Media_Extension_MediaCopyright
+ */
+ public function getCopyright()
+ {
+ return $this->_copyright;
+ }
+
+ /**
+ * @param Zend_Gdata_Media_Extension_MediaCopyright $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setCopyright($value)
+ {
+ $this->_copyright = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getCredit()
+ {
+ return $this->_credit;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setCredit($value)
+ {
+ $this->_credit = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_Media_Extension_MediaTitle
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+
+ /**
+ * @param Zend_Gdata_Media_Extension_MediaTitle $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setTitle($value)
+ {
+ $this->_title = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_Media_Extension_MediaDescription
+ */
+ public function getDescription()
+ {
+ return $this->_description;
+ }
+
+ /**
+ * @param Zend_Gdata_Media_Extension_MediaDescription $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setDescription($value)
+ {
+ $this->_description = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getHash()
+ {
+ return $this->_hash;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setHash($value)
+ {
+ $this->_hash = $value;
+ return $this;
+ }
+
+ /**
+ * @return Zend_Gdata_Media_Extension_MediaKeywords
+ */
+ public function getKeywords()
+ {
+ return $this->_keywords;
+ }
+
+ /**
+ * @param array $value
+ * @return Zend_Gdata_Media_Extension_MediaGroup Provides a fluent interface
+ */
+ public function setKeywords($value)
+ {
+ $this->_keywords = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getPlayer()
+ {
+ return $this->_player;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setPlayer($value)
+ {
+ $this->_player = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setRating($value)
+ {
+ $this->_rating = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getRestriction()
+ {
+ return $this->_restriction;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setRestriction($value)
+ {
+ $this->_restriction = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getThumbnail()
+ {
+ return $this->_thumbnail;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setThumbnail($value)
+ {
+ $this->_thumbnail = $value;
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getMediaText()
+ {
+ return $this->_mediaText;
+ }
+
+ /**
+ * @param array
+ * @return Zend_Gdata_Media_Extension_MediaGroup
+ */
+ public function setMediaText($value)
+ {
+ $this->_mediaText = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaHash.php b/zend/library/Zend/Gdata/Media/Extension/MediaHash.php
new file mode 100755
index 0000000..147cdaf
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaHash.php
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaHash.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:hash element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaHash extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'hash';
+ protected $_rootNamespace = 'media';
+ protected $_algo = null;
+
+ /**
+ * Constructs a new MediaHash element
+ *
+ * @param string $text
+ * @param string $algo
+ */
+ public function __construct($text = null, $algo = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_algo = $algo;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_algo !== null) {
+ $element->setAttribute('algo', $this->_algo);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'algo':
+ $this->_algo = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string The algo
+ */
+ public function getAlgo()
+ {
+ return $this->_algo;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaHash Provides a fluent interface
+ */
+ public function setAlgo($value)
+ {
+ $this->_algo = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaKeywords.php b/zend/library/Zend/Gdata/Media/Extension/MediaKeywords.php
new file mode 100755
index 0000000..cfa0dea
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaKeywords.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaKeywords.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:keywords element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaKeywords extends Zend_Gdata_Extension
+{
+ protected $_rootElement = 'keywords';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * Constructs a new MediaKeywords element
+ */
+ public function __construct()
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaPlayer.php b/zend/library/Zend/Gdata/Media/Extension/MediaPlayer.php
new file mode 100755
index 0000000..86cb44d
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaPlayer.php
@@ -0,0 +1,178 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaPlayer.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:player element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaPlayer extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'player';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_url = null;
+
+ /**
+ * @var int
+ */
+ protected $_width = null;
+
+ /**
+ * @var int
+ */
+ protected $_height = null;
+
+ /**
+ * Constructs a new MediaPlayer element
+ *
+ * @param string $url
+ * @param int $width
+ * @param int $height
+ */
+ public function __construct($url = null, $width = null, $height = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_url = $url;
+ $this->_width = $width;
+ $this->_height = $height;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_url !== null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ if ($this->_width !== null) {
+ $element->setAttribute('width', $this->_width);
+ }
+ if ($this->_height !== null) {
+ $element->setAttribute('height', $this->_height);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ case 'width':
+ $this->_width = $attribute->nodeValue;
+ break;
+ case 'height':
+ $this->_height = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaPlayer Provides a fluent interface
+ */
+ public function setUrl($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getWidth()
+ {
+ return $this->_width;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaPlayer Provides a fluent interface
+ */
+ public function setWidth($value)
+ {
+ $this->_width = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getHeight()
+ {
+ return $this->_height;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaPlayer Provides a fluent interface
+ */
+ public function setHeight($value)
+ {
+ $this->_height = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaRating.php b/zend/library/Zend/Gdata/Media/Extension/MediaRating.php
new file mode 100755
index 0000000..03e2999
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaRating.php
@@ -0,0 +1,118 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaRating.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:rating element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaRating extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'rating';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_scheme = null;
+
+ /**
+ * Constructs a new MediaRating element
+ *
+ * @param string $text
+ * @param string $scheme
+ */
+ public function __construct($text = null, $scheme = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_scheme = $scheme;
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaRating Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaRestriction.php b/zend/library/Zend/Gdata/Media/Extension/MediaRestriction.php
new file mode 100755
index 0000000..33ddf69
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaRestriction.php
@@ -0,0 +1,149 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaRestriction.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:restriction element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaRestriction extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'restriction';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_relationship = null;
+
+ /**
+ * @var string
+ */
+ protected $_type = null;
+
+ /**
+ * Constructs a new MediaRestriction element
+ *
+ * @param string $text
+ * @param string $relationship
+ * @param string $type
+ */
+ public function __construct($text = null, $relationship = null, $type = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_relationship = $relationship;
+ $this->_type = $type;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_relationship !== null) {
+ $element->setAttribute('relationship', $this->_relationship);
+ }
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'relationship':
+ $this->_relationship = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getRelationship()
+ {
+ return $this->_relationship;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaRestriction Provides a fluent interface
+ */
+ public function setRelationship($value)
+ {
+ $this->_relationship = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaRestriction Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaText.php b/zend/library/Zend/Gdata/Media/Extension/MediaText.php
new file mode 100755
index 0000000..5667f97
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaText.php
@@ -0,0 +1,211 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaText.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:text element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaText extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'text';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_type = null;
+
+ /**
+ * @var string
+ */
+ protected $_lang = null;
+
+ /**
+ * @var string
+ */
+ protected $_start = null;
+
+ /**
+ * @var string
+ */
+ protected $_end = null;
+
+ /**
+ * Constructs a new MediaText element
+ *
+ * @param string $text
+ * @param string $type
+ * @param string $lang
+ * @param string $start
+ * @param string $end
+ */
+ public function __construct($text = null, $type = null, $lang = null,
+ $start = null, $end = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_type = $type;
+ $this->_lang = $lang;
+ $this->_start = $start;
+ $this->_end = $end;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ if ($this->_lang !== null) {
+ $element->setAttribute('lang', $this->_lang);
+ }
+ if ($this->_start !== null) {
+ $element->setAttribute('start', $this->_start);
+ }
+ if ($this->_end !== null) {
+ $element->setAttribute('end', $this->_end);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ case 'lang':
+ $this->_lang = $attribute->nodeValue;
+ break;
+ case 'start':
+ $this->_start = $attribute->nodeValue;
+ break;
+ case 'end':
+ $this->_end = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaText Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLang()
+ {
+ return $this->_lang;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaText Provides a fluent interface
+ */
+ public function setLang($value)
+ {
+ $this->_lang = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getStart()
+ {
+ return $this->_start;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaText Provides a fluent interface
+ */
+ public function setStart($value)
+ {
+ $this->_start = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getEnd()
+ {
+ return $this->_end;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaText Provides a fluent interface
+ */
+ public function setEnd($value)
+ {
+ $this->_end = $value;
+ return $this;
+ }
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaThumbnail.php b/zend/library/Zend/Gdata/Media/Extension/MediaThumbnail.php
new file mode 100755
index 0000000..e316b51
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaThumbnail.php
@@ -0,0 +1,210 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaThumbnail.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:thumbnail element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaThumbnail extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'thumbnail';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_url = null;
+
+ /**
+ * @var int
+ */
+ protected $_width = null;
+
+ /**
+ * @var int
+ */
+ protected $_height = null;
+
+ /**
+ * @var string
+ */
+ protected $_time = null;
+
+ /**
+ * Constructs a new MediaThumbnail element
+ *
+ * @param string $url
+ * @param int $width
+ * @param int $height
+ * @param string $time
+ */
+ public function __construct($url = null, $width = null, $height = null,
+ $time = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_url = $url;
+ $this->_width = $width;
+ $this->_height = $height;
+ $this->_time = $time ;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_url !== null) {
+ $element->setAttribute('url', $this->_url);
+ }
+ if ($this->_width !== null) {
+ $element->setAttribute('width', $this->_width);
+ }
+ if ($this->_height !== null) {
+ $element->setAttribute('height', $this->_height);
+ }
+ if ($this->_time !== null) {
+ $element->setAttribute('time', $this->_time);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'url':
+ $this->_url = $attribute->nodeValue;
+ break;
+ case 'width':
+ $this->_width = $attribute->nodeValue;
+ break;
+ case 'height':
+ $this->_height = $attribute->nodeValue;
+ break;
+ case 'time':
+ $this->_time = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getUrl()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail Provides a fluent interface
+ */
+ public function setUrl($value)
+ {
+ $this->_url = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getWidth()
+ {
+ return $this->_width;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail Provides a fluent interface
+ */
+ public function setWidth($value)
+ {
+ $this->_width = $value;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getHeight()
+ {
+ return $this->_height;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail Provides a fluent interface
+ */
+ public function setHeight($value)
+ {
+ $this->_height = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTime()
+ {
+ return $this->_time;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail Provides a fluent interface
+ */
+ public function setTime($value)
+ {
+ $this->_time = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Extension/MediaTitle.php b/zend/library/Zend/Gdata/Media/Extension/MediaTitle.php
new file mode 100755
index 0000000..5da8e08
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Extension/MediaTitle.php
@@ -0,0 +1,118 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaTitle.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the media:title element in MediaRSS
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Extension_MediaTitle extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'title';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_type = null;
+
+ /**
+ * Constructs a MediaTitle element
+ *
+ * @param string $text
+ * @param string $type
+ */
+ public function __construct($text = null, $type = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_type = $type;
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_type !== null) {
+ $element->setAttribute('type', $this->_type);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'type':
+ $this->_type = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaTitle Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Media/Feed.php b/zend/library/Zend/Gdata/Media/Feed.php
new file mode 100755
index 0000000..a5c5bc7
--- /dev/null
+++ b/zend/library/Zend/Gdata/Media/Feed.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Feed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_eed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Media
+ */
+require_once 'Zend/Gdata/Media.php';
+
+/**
+ * @see Zend_Gdata_Media_Entry
+ */
+require_once 'Zend/Gdata/Media/Entry.php';
+
+/**
+ * The Gdata flavor of an Atom Feed with media support
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Media_Feed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Media_Entry';
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/MediaMimeStream.php b/zend/library/Zend/Gdata/MediaMimeStream.php
new file mode 100644
index 0000000..54ba79b
--- /dev/null
+++ b/zend/library/Zend/Gdata/MediaMimeStream.php
@@ -0,0 +1,190 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaMimeStream.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+* @see Zend_Gdata_MimeFile
+*/
+require_once 'Zend/Gdata/MimeFile.php';
+
+/**
+* @see Zend_Gdata_MimeBodyString
+*/
+require_once 'Zend/Gdata/MimeBodyString.php';
+
+
+/**
+ * A streaming Media MIME class that allows for buffered read operations.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_MediaMimeStream
+{
+
+ /**
+ * A valid MIME boundary.
+ *
+ * @var string
+ */
+ protected $_boundaryString = null;
+
+ /**
+ * A handle to the file that is part of the message.
+ *
+ * @var resource
+ */
+ protected $_fileHandle = null;
+
+ /**
+ * The current part being read from.
+ * @var integer
+ */
+ protected $_currentPart = 0;
+
+ /**
+ * The size of the MIME message.
+ * @var integer
+ */
+ protected $_totalSize = 0;
+
+ /**
+ * An array of all the parts to be sent. Array members are either a
+ * MimeFile or a MimeBodyString object.
+ * @var array
+ */
+ protected $_parts = null;
+
+ /**
+ * Create a new MimeMediaStream object.
+ *
+ * @param string $xmlString The string corresponding to the XML section
+ * of the message, typically an atom entry or feed.
+ * @param string $filePath The path to the file that constitutes the binary
+ * part of the message.
+ * @param string $fileContentType The valid internet media type of the file.
+ * @throws Zend_Gdata_App_IOException If the file cannot be read or does
+ * not exist. Also if mbstring.func_overload has been set > 1.
+ */
+ public function __construct($xmlString = null, $filePath = null,
+ $fileContentType = null)
+ {
+ if (!file_exists($filePath) || !is_readable($filePath)) {
+ require_once 'Zend/Gdata/App/IOException.php';
+ throw new Zend_Gdata_App_IOException('File to be uploaded at ' .
+ $filePath . ' does not exist or is not readable.');
+ }
+
+ $this->_fileHandle = fopen($filePath, 'rb', TRUE);
+ $this->_boundaryString = '=_' . md5(microtime(1) . rand(1,20));
+ $entry = $this->wrapEntry($xmlString, $fileContentType);
+ $closingBoundary = new Zend_Gdata_MimeBodyString("\r\n--{$this->_boundaryString}--\r\n");
+ $file = new Zend_Gdata_MimeFile($this->_fileHandle);
+ $this->_parts = array($entry, $file, $closingBoundary);
+
+ $fileSize = filesize($filePath);
+ $this->_totalSize = $entry->getSize() + $fileSize
+ + $closingBoundary->getSize();
+
+ }
+
+ /**
+ * Sandwiches the entry body into a MIME message
+ *
+ * @return void
+ */
+ private function wrapEntry($entry, $fileMimeType)
+ {
+ $wrappedEntry = "--{$this->_boundaryString}\r\n";
+ $wrappedEntry .= "Content-Type: application/atom+xml\r\n\r\n";
+ $wrappedEntry .= $entry;
+ $wrappedEntry .= "\r\n--{$this->_boundaryString}\r\n";
+ $wrappedEntry .= "Content-Type: $fileMimeType\r\n\r\n";
+ return new Zend_Gdata_MimeBodyString($wrappedEntry);
+ }
+
+ /**
+ * Read a specific chunk of the the MIME multipart message.
+ *
+ * @param integer $bufferSize The size of the chunk that is to be read,
+ * must be lower than MAX_BUFFER_SIZE.
+ * @return string A corresponding piece of the message. This could be
+ * binary or regular text.
+ */
+ public function read($bytesRequested)
+ {
+ if($this->_currentPart >= count($this->_parts)) {
+ return FALSE;
+ }
+
+ $activePart = $this->_parts[$this->_currentPart];
+ $buffer = $activePart->read($bytesRequested);
+
+ while(strlen($buffer) < $bytesRequested) {
+ $this->_currentPart += 1;
+ $nextBuffer = $this->read($bytesRequested - strlen($buffer));
+ if($nextBuffer === FALSE) {
+ break;
+ }
+ $buffer .= $nextBuffer;
+ }
+
+ return $buffer;
+ }
+
+ /**
+ * Return the total size of the mime message.
+ *
+ * @return integer Total size of the message to be sent.
+ */
+ public function getTotalSize()
+ {
+ return $this->_totalSize;
+ }
+
+ /**
+ * Close the internal file that we are streaming to the socket.
+ *
+ * @return void
+ */
+ public function closeFileHandle()
+ {
+ if ($this->_fileHandle !== null) {
+ fclose($this->_fileHandle);
+ }
+ }
+
+ /**
+ * Return a Content-type header that includes the current boundary string.
+ *
+ * @return string A valid HTTP Content-Type header.
+ */
+ public function getContentType()
+ {
+ return 'multipart/related;boundary="' .
+ $this->_boundaryString . '"' . "\r\n";
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/MimeBodyString.php b/zend/library/Zend/Gdata/MimeBodyString.php
new file mode 100644
index 0000000..d4ab5c3
--- /dev/null
+++ b/zend/library/Zend/Gdata/MimeBodyString.php
@@ -0,0 +1,92 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MimeBodyString.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * A wrapper for strings for buffered reading.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_MimeBodyString
+{
+
+ /**
+ * The source string.
+ *
+ * @var string
+ */
+ protected $_sourceString = '';
+
+ /**
+ * The size of the MIME message.
+ * @var integer
+ */
+ protected $_bytesRead = 0;
+
+ /**
+ * Create a new MimeBodyString object.
+ *
+ * @param string $sourceString The string we are wrapping.
+ */
+ public function __construct($sourceString)
+ {
+ $this->_sourceString = $sourceString;
+ $this->_bytesRead = 0;
+ }
+
+ /**
+ * Read the next chunk of the string.
+ *
+ * @param integer $bytesRequested The size of the chunk that is to be read.
+ * @return string A corresponding piece of the string.
+ */
+ public function read($bytesRequested)
+ {
+ $len = strlen($this->_sourceString);
+ if($this->_bytesRead == $len) {
+ return FALSE;
+ } else if($bytesRequested > $len - $this->_bytesRead) {
+ $bytesRequested = $len - $this->_bytesRead;
+ }
+
+ $buffer = substr($this->_sourceString, $this->_bytesRead, $bytesRequested);
+ $this->_bytesRead += $bytesRequested;
+
+ return $buffer;
+ }
+
+ /**
+ * The length of the string.
+ *
+ * @return int The length of the string contained in the object.
+ */
+ public function getSize()
+ {
+ return strlen($this->_sourceString);
+ }
+
+
+}
diff --git a/zend/library/Zend/Gdata/MimeFile.php b/zend/library/Zend/Gdata/MimeFile.php
new file mode 100644
index 0000000..2b263ed
--- /dev/null
+++ b/zend/library/Zend/Gdata/MimeFile.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MimeFile.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * A wrapper for strings for buffered reading.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_MimeFile
+{
+
+ /**
+ * A handle to the file that is part of the message.
+ *
+ * @var resource
+ */
+ protected $_fileHandle = null;
+
+ /**
+ * Create a new MimeFile object.
+ *
+ * @param string $fileHandle An open file handle to the file being
+ * read.
+ */
+ public function __construct($fileHandle)
+ {
+ $this->_fileHandle = $fileHandle;
+ }
+
+ /**
+ * Read the next chunk of the file.
+ *
+ * @param integer $bytesRequested The size of the chunk that is to be read.
+ * @return string A corresponding piece of the message. This could be
+ * binary or regular text.
+ */
+ public function read($bytesRequested)
+ {
+ return fread($this->_fileHandle, $bytesRequested);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos.php b/zend/library/Zend/Gdata/Photos.php
new file mode 100755
index 0000000..bab0beb
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos.php
@@ -0,0 +1,576 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Photos.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * @see Zend_Gdata_Photos_UserFeed
+ */
+require_once 'Zend/Gdata/Photos/UserFeed.php';
+
+/**
+ * @see Zend_Gdata_Photos_AlbumFeed
+ */
+require_once 'Zend/Gdata/Photos/AlbumFeed.php';
+
+/**
+ * @see Zend_Gdata_Photos_PhotoFeed
+ */
+require_once 'Zend/Gdata/Photos/PhotoFeed.php';
+
+/**
+ * Service class for interacting with the Google Photos Data API.
+ *
+ * Like other service classes in this module, this class provides access via
+ * an HTTP client to Google servers for working with entries and feeds.
+ *
+ * @link http://code.google.com/apis/picasaweb/gdata.html
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos extends Zend_Gdata
+{
+
+ const PICASA_BASE_URI = 'https://picasaweb.google.com/data';
+ const PICASA_BASE_FEED_URI = 'https://picasaweb.google.com/data/feed';
+ const AUTH_SERVICE_NAME = 'lh2';
+
+ /**
+ * Default projection when interacting with the Picasa server.
+ */
+ const DEFAULT_PROJECTION = 'api';
+
+ /**
+ * The default visibility to filter events by.
+ */
+ const DEFAULT_VISIBILITY = 'all';
+
+ /**
+ * The default user to retrieve feeds for.
+ */
+ const DEFAULT_USER = 'default';
+
+ /**
+ * Path to the user feed on the Picasa server.
+ */
+ const USER_PATH = 'user';
+
+ /**
+ * Path to album feeds on the Picasa server.
+ */
+ const ALBUM_PATH = 'albumid';
+
+ /**
+ * Path to photo feeds on the Picasa server.
+ */
+ const PHOTO_PATH = 'photoid';
+
+ /**
+ * The path to the community search feed on the Picasa server.
+ */
+ const COMMUNITY_SEARCH_PATH = 'all';
+
+ /**
+ * The path to use for finding links to feeds within entries
+ */
+ const FEED_LINK_PATH = 'http://schemas.google.com/g/2005#feed';
+
+ /**
+ * The path to use for the determining type of an entry
+ */
+ const KIND_PATH = 'http://schemas.google.com/g/2005#kind';
+
+ /**
+ * Namespaces used for Zend_Gdata_Photos
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('gphoto', 'http://schemas.google.com/photos/2007', 1, 0),
+ array('photo', 'http://www.pheed.com/pheed/', 1, 0),
+ array('exif', 'http://schemas.google.com/photos/exif/2007', 1, 0),
+ array('georss', 'http://www.georss.org/georss', 1, 0),
+ array('gml', 'http://www.opengis.net/gml', 1, 0),
+ array('media', 'http://search.yahoo.com/mrss/', 1, 0)
+ );
+
+ /**
+ * Create Zend_Gdata_Photos object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Photos');
+ $this->registerPackage('Zend_Gdata_Photos_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Retrieve a UserFeed containing AlbumEntries, PhotoEntries and
+ * TagEntries associated with a given user.
+ *
+ * @param string $userName The userName of interest
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query. If not provided, a default URL will be used instead.
+ * @return Zend_Gdata_Photos_UserFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getUserFeed($userName = null, $location = null)
+ {
+ if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('feed');
+ if ($userName !== null) {
+ $location->setUser($userName);
+ }
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($userName !== null) {
+ $location->setUser($userName);
+ }
+ $uri = $location->getQueryUrl();
+ } else if ($location !== null) {
+ $uri = $location;
+ } else if ($userName !== null) {
+ $uri = self::PICASA_BASE_FEED_URI . '/' .
+ self::DEFAULT_PROJECTION . '/' . self::USER_PATH . '/' .
+ $userName;
+ } else {
+ $uri = self::PICASA_BASE_FEED_URI . '/' .
+ self::DEFAULT_PROJECTION . '/' . self::USER_PATH . '/' .
+ self::DEFAULT_USER;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Photos_UserFeed');
+ }
+
+ /**
+ * Retreive AlbumFeed object containing multiple PhotoEntry or TagEntry
+ * objects.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_AlbumFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getAlbumFeed($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('feed');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Photos_AlbumFeed');
+ }
+
+ /**
+ * Retreive PhotoFeed object containing comments and tags associated
+ * with a given photo.
+ *
+ * @param mixed $location (optional) The location for the feed, as a URL
+ * or Query. If not specified, the community search feed will
+ * be returned instead.
+ * @return Zend_Gdata_Photos_PhotoFeed
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getPhotoFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = self::PICASA_BASE_FEED_URI . '/' .
+ self::DEFAULT_PROJECTION . '/' .
+ self::COMMUNITY_SEARCH_PATH;
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('feed');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Photos_PhotoFeed');
+ }
+
+ /**
+ * Retreive a single UserEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_UserEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getUserEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_UserEntry');
+ }
+
+ /**
+ * Retreive a single AlbumEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_AlbumEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getAlbumEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_AlbumEntry');
+ }
+
+ /**
+ * Retreive a single PhotoEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_PhotoEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getPhotoEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_PhotoEntry');
+ }
+
+ /**
+ * Retreive a single TagEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_TagEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getTagEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_TagEntry');
+ }
+
+ /**
+ * Retreive a single CommentEntry object.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query.
+ * @return Zend_Gdata_Photos_CommentEntry
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function getCommentEntry($location)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Photos_UserQuery) {
+ $location->setType('entry');
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Photos_CommentEntry');
+ }
+
+ /**
+ * Create a new album from a AlbumEntry.
+ *
+ * @param Zend_Gdata_Photos_AlbumEntry $album The album entry to
+ * insert.
+ * @param string $url (optional) The URI that the album should be
+ * uploaded to. If null, the default album creation URI for
+ * this domain will be used.
+ * @return Zend_Gdata_Photos_AlbumEntry The inserted album entry as
+ * returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function insertAlbumEntry($album, $uri = null)
+ {
+ if ($uri === null) {
+ $uri = self::PICASA_BASE_FEED_URI . '/' .
+ self::DEFAULT_PROJECTION . '/' . self::USER_PATH . '/' .
+ self::DEFAULT_USER;
+ }
+ $newEntry = $this->insertEntry($album, $uri, 'Zend_Gdata_Photos_AlbumEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new photo from a PhotoEntry.
+ *
+ * @param Zend_Gdata_Photos_PhotoEntry $photo The photo to insert.
+ * @param string $url The URI that the photo should be uploaded
+ * to. Alternatively, an AlbumEntry can be provided and the
+ * photo will be added to that album.
+ * @return Zend_Gdata_Photos_PhotoEntry The inserted photo entry
+ * as returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function insertPhotoEntry($photo, $uri = null)
+ {
+ if ($uri instanceof Zend_Gdata_Photos_AlbumEntry) {
+ $uri = $uri->getLink(self::FEED_LINK_PATH)->href;
+ }
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($photo, $uri, 'Zend_Gdata_Photos_PhotoEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new tag from a TagEntry.
+ *
+ * @param Zend_Gdata_Photos_TagEntry $tag The tag entry to insert.
+ * @param string $url The URI where the tag should be
+ * uploaded to. Alternatively, a PhotoEntry can be provided and
+ * the tag will be added to that photo.
+ * @return Zend_Gdata_Photos_TagEntry The inserted tag entry as returned
+ * by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function insertTagEntry($tag, $uri = null)
+ {
+ if ($uri instanceof Zend_Gdata_Photos_PhotoEntry) {
+ $uri = $uri->getLink(self::FEED_LINK_PATH)->href;
+ }
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($tag, $uri, 'Zend_Gdata_Photos_TagEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Create a new comment from a CommentEntry.
+ *
+ * @param Zend_Gdata_Photos_CommentEntry $comment The comment entry to
+ * insert.
+ * @param string $url The URI where the comment should be uploaded to.
+ * Alternatively, a PhotoEntry can be provided and
+ * the comment will be added to that photo.
+ * @return Zend_Gdata_Photos_CommentEntry The inserted comment entry
+ * as returned by the server.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function insertCommentEntry($comment, $uri = null)
+ {
+ if ($uri instanceof Zend_Gdata_Photos_PhotoEntry) {
+ $uri = $uri->getLink(self::FEED_LINK_PATH)->href;
+ }
+ if ($uri === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'URI must not be null');
+ }
+ $newEntry = $this->insertEntry($comment, $uri, 'Zend_Gdata_Photos_CommentEntry');
+ return $newEntry;
+ }
+
+ /**
+ * Delete an AlbumEntry.
+ *
+ * @param Zend_Gdata_Photos_AlbumEntry $album The album entry to
+ * delete.
+ * @param boolean $catch Whether to catch an exception when
+ * modified and re-delete or throw
+ * @return void.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function deleteAlbumEntry($album, $catch)
+ {
+ if ($catch) {
+ try {
+ $this->delete($album);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() === 409) {
+ $entry = new Zend_Gdata_Photos_AlbumEntry($e->getResponse()->getBody());
+ $this->delete($entry->getLink('edit')->href);
+ } else {
+ throw $e;
+ }
+ }
+ } else {
+ $this->delete($album);
+ }
+ }
+
+ /**
+ * Delete a PhotoEntry.
+ *
+ * @param Zend_Gdata_Photos_PhotoEntry $photo The photo entry to
+ * delete.
+ * @param boolean $catch Whether to catch an exception when
+ * modified and re-delete or throw
+ * @return void.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function deletePhotoEntry($photo, $catch)
+ {
+ if ($catch) {
+ try {
+ $this->delete($photo);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() === 409) {
+ $entry = new Zend_Gdata_Photos_PhotoEntry($e->getResponse()->getBody());
+ $this->delete($entry->getLink('edit')->href);
+ } else {
+ throw $e;
+ }
+ }
+ } else {
+ $this->delete($photo);
+ }
+ }
+
+ /**
+ * Delete a CommentEntry.
+ *
+ * @param Zend_Gdata_Photos_CommentEntry $comment The comment entry to
+ * delete.
+ * @param boolean $catch Whether to catch an exception when
+ * modified and re-delete or throw
+ * @return void.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function deleteCommentEntry($comment, $catch)
+ {
+ if ($catch) {
+ try {
+ $this->delete($comment);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() === 409) {
+ $entry = new Zend_Gdata_Photos_CommentEntry($e->getResponse()->getBody());
+ $this->delete($entry->getLink('edit')->href);
+ } else {
+ throw $e;
+ }
+ }
+ } else {
+ $this->delete($comment);
+ }
+ }
+
+ /**
+ * Delete a TagEntry.
+ *
+ * @param Zend_Gdata_Photos_TagEntry $tag The tag entry to
+ * delete.
+ * @param boolean $catch Whether to catch an exception when
+ * modified and re-delete or throw
+ * @return void.
+ * @throws Zend_Gdata_App_Exception
+ * @throws Zend_Gdata_App_HttpException
+ */
+ public function deleteTagEntry($tag, $catch)
+ {
+ if ($catch) {
+ try {
+ $this->delete($tag);
+ } catch (Zend_Gdata_App_HttpException $e) {
+ if ($e->getResponse()->getStatus() === 409) {
+ $entry = new Zend_Gdata_Photos_TagEntry($e->getResponse()->getBody());
+ $this->delete($entry->getLink('edit')->href);
+ } else {
+ throw $e;
+ }
+ }
+ } else {
+ $this->delete($tag);
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/AlbumEntry.php b/zend/library/Zend/Gdata/Photos/AlbumEntry.php
new file mode 100755
index 0000000..03c0b83
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/AlbumEntry.php
@@ -0,0 +1,610 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AlbumEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Access
+ */
+require_once 'Zend/Gdata/Photos/Extension/Access.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_BytesUsed
+ */
+require_once 'Zend/Gdata/Photos/Extension/BytesUsed.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Location
+ */
+require_once 'Zend/Gdata/Photos/Extension/Location.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Name
+ */
+require_once 'Zend/Gdata/Photos/Extension/Name.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_NumPhotos
+ */
+require_once 'Zend/Gdata/Photos/Extension/NumPhotos.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_NumPhotosRemaining
+ */
+require_once 'Zend/Gdata/Photos/Extension/NumPhotosRemaining.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_CommentCount
+ */
+require_once 'Zend/Gdata/Photos/Extension/CommentCount.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_CommentingEnabled
+ */
+require_once 'Zend/Gdata/Photos/Extension/CommentingEnabled.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Id
+ */
+require_once 'Zend/Gdata/Photos/Extension/Id.php';
+
+/**
+ * @see Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+require_once 'Zend/Gdata/Geo/Extension/GeoRssWhere.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaGroup
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaGroup.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Category
+ */
+require_once 'Zend/Gdata/App/Extension/Category.php';
+
+/**
+ * Data model class for a Photo Album Entry.
+ *
+ * To transfer user entries to and from the servers, including
+ * creating new entries, refer to the service class,
+ * Zend_Gdata_Photos.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_AlbumEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_AlbumEntry';
+
+ /**
+ * gphoto:id element
+ *
+ * @var Zend_Gdata_Photos_Extension_Id
+ */
+ protected $_gphotoId = null;
+
+ /**
+ * gphoto:access element
+ *
+ * @var Zend_Gdata_Photos_Extension_Access
+ */
+ protected $_gphotoAccess = null;
+
+ /**
+ * gphoto:location element
+ *
+ * @var Zend_Gdata_Photos_Extension_Location
+ */
+ protected $_gphotoLocation = null;
+
+ /**
+ * gphoto:user element
+ *
+ * @var Zend_Gdata_Photos_Extension_User
+ */
+ protected $_gphotoUser = null;
+
+ /**
+ * gphoto:nickname element
+ *
+ * @var Zend_Gdata_Photos_Extension_Nickname
+ */
+ protected $_gphotoNickname = null;
+
+ /**
+ * gphoto:timestamp element
+ *
+ * @var Zend_Gdata_Photos_Extension_Timestamp
+ */
+ protected $_gphotoTimestamp = null;
+
+ /**
+ * gphoto:name element
+ *
+ * @var Zend_Gdata_Photos_Extension_Name
+ */
+ protected $_gphotoName = null;
+
+ /**
+ * gphoto:numphotos element
+ *
+ * @var Zend_Gdata_Photos_Extension_NumPhotos
+ */
+ protected $_gphotoNumPhotos = null;
+
+ /**
+ * gphoto:commentCount element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentCount
+ */
+ protected $_gphotoCommentCount = null;
+
+ /**
+ * gphoto:commentingEnabled element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentingEnabled
+ */
+ protected $_gphotoCommentingEnabled = null;
+
+ /**
+ * media:group element
+ *
+ * @var Zend_Gdata_Media_MediaGroup
+ */
+ protected $_mediaGroup = null;
+
+ /**
+ * georss:where element
+ *
+ * @var Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+ protected $_geoRssWhere = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#album',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoTimestamp !== null) {
+ $element->appendChild($this->_gphotoTimestamp->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoUser !== null) {
+ $element->appendChild($this->_gphotoUser->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNickname !== null) {
+ $element->appendChild($this->_gphotoNickname->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoAccess !== null) {
+ $element->appendChild($this->_gphotoAccess->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoLocation !== null) {
+ $element->appendChild($this->_gphotoLocation->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoName !== null) {
+ $element->appendChild($this->_gphotoName->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNumPhotos !== null) {
+ $element->appendChild($this->_gphotoNumPhotos->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentCount !== null) {
+ $element->appendChild($this->_gphotoCommentCount->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentingEnabled !== null) {
+ $element->appendChild($this->_gphotoCommentingEnabled->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoId !== null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediaGroup !== null) {
+ $element->appendChild($this->_mediaGroup->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'access';
+ $access = new Zend_Gdata_Photos_Extension_Access();
+ $access->transferFromDOM($child);
+ $this->_gphotoAccess = $access;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'location';
+ $location = new Zend_Gdata_Photos_Extension_Location();
+ $location->transferFromDOM($child);
+ $this->_gphotoLocation = $location;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'name';
+ $name = new Zend_Gdata_Photos_Extension_Name();
+ $name->transferFromDOM($child);
+ $this->_gphotoName = $name;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'numphotos';
+ $numPhotos = new Zend_Gdata_Photos_Extension_NumPhotos();
+ $numPhotos->transferFromDOM($child);
+ $this->_gphotoNumPhotos = $numPhotos;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentCount';
+ $commentCount = new Zend_Gdata_Photos_Extension_CommentCount();
+ $commentCount->transferFromDOM($child);
+ $this->_gphotoCommentCount = $commentCount;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentingEnabled';
+ $commentingEnabled = new Zend_Gdata_Photos_Extension_CommentingEnabled();
+ $commentingEnabled->transferFromDOM($child);
+ $this->_gphotoCommentingEnabled = $commentingEnabled;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'user';
+ $user = new Zend_Gdata_Photos_Extension_User();
+ $user->transferFromDOM($child);
+ $this->_gphotoUser = $user;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'timestamp';
+ $timestamp = new Zend_Gdata_Photos_Extension_Timestamp();
+ $timestamp->transferFromDOM($child);
+ $this->_gphotoTimestamp = $timestamp;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Photos_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_gphotoNickname = $nickname;
+ break;
+ case $this->lookupNamespace('georss') . ':' . 'where';
+ $geoRssWhere = new Zend_Gdata_Geo_Extension_GeoRssWhere();
+ $geoRssWhere->transferFromDOM($child);
+ $this->_geoRssWhere = $geoRssWhere;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'group';
+ $mediaGroup = new Zend_Gdata_Media_Extension_MediaGroup();
+ $mediaGroup->transferFromDOM($child);
+ $this->_mediaGroup = $mediaGroup;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:access attribute.
+ *
+ * @see setGphotoAccess
+ * @return string The requested attribute.
+ */
+ public function getGphotoAccess()
+ {
+ return $this->_gphotoAccess;
+ }
+
+ /**
+ * Set the value for this element's gphoto:access attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Access The element being modified.
+ */
+ public function setGphotoAccess($value)
+ {
+ $this->_gphotoAccess = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:location attribute.
+ *
+ * @see setGphotoLocation
+ * @return string The requested attribute.
+ */
+ public function getGphotoLocation()
+ {
+ return $this->_gphotoLocation;
+ }
+
+ /**
+ * Set the value for this element's gphoto:location attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Location The element being modified.
+ */
+ public function setGphotoLocation($value)
+ {
+ $this->_location = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:name attribute.
+ *
+ * @see setGphotoName
+ * @return string The requested attribute.
+ */
+ public function getGphotoName()
+ {
+ return $this->_gphotoName;
+ }
+
+ /**
+ * Set the value for this element's gphoto:name attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Name The element being modified.
+ */
+ public function setGphotoName($value)
+ {
+ $this->_gphotoName = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:numphotos attribute.
+ *
+ * @see setGphotoNumPhotos
+ * @return string The requested attribute.
+ */
+ public function getGphotoNumPhotos()
+ {
+ return $this->_gphotoNumPhotos;
+ }
+
+ /**
+ * Set the value for this element's gphoto:numphotos attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_NumPhotos The element being modified.
+ */
+ public function setGphotoNumPhotos($value)
+ {
+ $this->_gphotoNumPhotos = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentCount attribute.
+ *
+ * @see setGphotoCommentCount
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentCount()
+ {
+ return $this->_gphotoCommentCount;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentCount attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentCount The element being modified.
+ */
+ public function setGphotoCommentCount($value)
+ {
+ $this->_gphotoCommentCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @see setGphotoCommentingEnabled
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentingEnabled()
+ {
+ return $this->_gphotoCommentingEnabled;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentingEnabled The element being modified.
+ */
+ public function setGphotoCommentingEnabled($value)
+ {
+ $this->_gphotoCommentingEnabled = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's georss:where attribute.
+ *
+ * @see setGeoRssWhere
+ * @return string The requested attribute.
+ */
+ public function getGeoRssWhere()
+ {
+ return $this->_geoRssWhere;
+ }
+
+ /**
+ * Set the value for this element's georss:where attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere The element being modified.
+ */
+ public function setGeoRssWhere($value)
+ {
+ $this->_geoRssWhere = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's media:group attribute.
+ *
+ * @see setMediaGroup
+ * @return string The requested attribute.
+ */
+ public function getMediaGroup()
+ {
+ return $this->_mediaGroup;
+ }
+
+ /**
+ * Set the value for this element's media:group attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Media_Extension_MediaGroup The element being modified.
+ */
+ public function setMediaGroup($value)
+ {
+ $this->_mediaGroup = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:user attribute.
+ *
+ * @see setGphotoUser
+ * @return string The requested attribute.
+ */
+ public function getGphotoUser()
+ {
+ return $this->_gphotoUser;
+ }
+
+ /**
+ * Set the value for this element's gphoto:user attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_User The element being modified.
+ */
+ public function setGphotoUser($value)
+ {
+ $this->_gphotoUser = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:nickname attribute.
+ *
+ * @see setGphotoNickname
+ * @return string The requested attribute.
+ */
+ public function getGphotoNickname()
+ {
+ return $this->_gphotoNickname;
+ }
+
+ /**
+ * Set the value for this element's gphoto:nickname attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Nickname The element being modified.
+ */
+ public function setGphotoNickname($value)
+ {
+ $this->_gphotoNickname = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:timestamp attribute.
+ *
+ * @see setGphotoTimestamp
+ * @return string The requested attribute.
+ */
+ public function getGphotoTimestamp()
+ {
+ return $this->_gphotoTimestamp;
+ }
+
+ /**
+ * Set the value for this element's gphoto:timestamp attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Timestamp The element being modified.
+ */
+ public function setGphotoTimestamp($value)
+ {
+ $this->_gphotoTimestamp = $value;
+ return $this;
+ }
+}
diff --git a/zend/library/Zend/Gdata/Photos/AlbumFeed.php b/zend/library/Zend/Gdata/Photos/AlbumFeed.php
new file mode 100755
index 0000000..a4b7cfb
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/AlbumFeed.php
@@ -0,0 +1,509 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AlbumFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Photos_AlbumEntry
+ */
+require_once 'Zend/Gdata/Photos/AlbumEntry.php';
+
+/**
+ * Data model for a collection of album entries, usually
+ * provided by the servers.
+ *
+ * For information on requesting this feed from a server, see the
+ * service class, Zend_Gdata_Photos.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_AlbumFeed extends Zend_Gdata_Feed
+{
+ protected $_entryClassName = 'Zend_Gdata_Photos_AlbumEntry';
+ protected $_feedClassName = 'Zend_Gdata_Photos_AlbumFeed';
+
+ /**
+ * gphoto:id element
+ *
+ * @var Zend_Gdata_Photos_Extension_Id
+ */
+ protected $_gphotoId = null;
+
+ /**
+ * gphoto:user element
+ *
+ * @var Zend_Gdata_Photos_Extension_User
+ */
+ protected $_gphotoUser = null;
+
+ /**
+ * gphoto:access element
+ *
+ * @var Zend_Gdata_Photos_Extension_Access
+ */
+ protected $_gphotoAccess = null;
+
+ /**
+ * gphoto:location element
+ *
+ * @var Zend_Gdata_Photos_Extension_Location
+ */
+ protected $_gphotoLocation = null;
+
+ /**
+ * gphoto:nickname element
+ *
+ * @var Zend_Gdata_Photos_Extension_Nickname
+ */
+ protected $_gphotoNickname = null;
+
+ /**
+ * gphoto:timestamp element
+ *
+ * @var Zend_Gdata_Photos_Extension_Timestamp
+ */
+ protected $_gphotoTimestamp = null;
+
+ /**
+ * gphoto:name element
+ *
+ * @var Zend_Gdata_Photos_Extension_Name
+ */
+ protected $_gphotoName = null;
+
+ /**
+ * gphoto:numphotos element
+ *
+ * @var Zend_Gdata_Photos_Extension_NumPhotos
+ */
+ protected $_gphotoNumPhotos = null;
+
+ /**
+ * gphoto:commentCount element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentCount
+ */
+ protected $_gphotoCommentCount = null;
+
+ /**
+ * gphoto:commentingEnabled element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentingEnabled
+ */
+ protected $_gphotoCommentingEnabled = null;
+
+ protected $_entryKindClassMapping = array(
+ 'http://schemas.google.com/photos/2007#photo' => 'Zend_Gdata_Photos_PhotoEntry',
+ 'http://schemas.google.com/photos/2007#comment' => 'Zend_Gdata_Photos_CommentEntry',
+ 'http://schemas.google.com/photos/2007#tag' => 'Zend_Gdata_Photos_TagEntry'
+ );
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoId != null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoUser != null) {
+ $element->appendChild($this->_gphotoUser->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNickname != null) {
+ $element->appendChild($this->_gphotoNickname->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoName != null) {
+ $element->appendChild($this->_gphotoName->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoLocation != null) {
+ $element->appendChild($this->_gphotoLocation->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoAccess != null) {
+ $element->appendChild($this->_gphotoAccess->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoTimestamp != null) {
+ $element->appendChild($this->_gphotoTimestamp->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNumPhotos != null) {
+ $element->appendChild($this->_gphotoNumPhotos->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentingEnabled != null) {
+ $element->appendChild($this->_gphotoCommentingEnabled->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentCount != null) {
+ $element->appendChild($this->_gphotoCommentCount->getDOM($element->ownerDocument));
+ }
+
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'user';
+ $user = new Zend_Gdata_Photos_Extension_User();
+ $user->transferFromDOM($child);
+ $this->_gphotoUser = $user;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Photos_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_gphotoNickname = $nickname;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'name';
+ $name = new Zend_Gdata_Photos_Extension_Name();
+ $name->transferFromDOM($child);
+ $this->_gphotoName = $name;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'location';
+ $location = new Zend_Gdata_Photos_Extension_Location();
+ $location->transferFromDOM($child);
+ $this->_gphotoLocation = $location;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'access';
+ $access = new Zend_Gdata_Photos_Extension_Access();
+ $access->transferFromDOM($child);
+ $this->_gphotoAccess = $access;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'timestamp';
+ $timestamp = new Zend_Gdata_Photos_Extension_Timestamp();
+ $timestamp->transferFromDOM($child);
+ $this->_gphotoTimestamp = $timestamp;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'numphotos';
+ $numphotos = new Zend_Gdata_Photos_Extension_NumPhotos();
+ $numphotos->transferFromDOM($child);
+ $this->_gphotoNumPhotos = $numphotos;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentingEnabled';
+ $commentingEnabled = new Zend_Gdata_Photos_Extension_CommentingEnabled();
+ $commentingEnabled->transferFromDOM($child);
+ $this->_gphotoCommentingEnabled = $commentingEnabled;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentCount';
+ $commentCount = new Zend_Gdata_Photos_Extension_CommentCount();
+ $commentCount->transferFromDOM($child);
+ $this->_gphotoCommentCount = $commentCount;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'entry':
+ $entryClassName = $this->_entryClassName;
+ $tmpEntry = new Zend_Gdata_App_Entry($child);
+ $categories = $tmpEntry->getCategory();
+ foreach ($categories as $category) {
+ if ($category->scheme == Zend_Gdata_Photos::KIND_PATH &&
+ $this->_entryKindClassMapping[$category->term] != "") {
+ $entryClassName = $this->_entryKindClassMapping[$category->term];
+ break;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Entry is missing kind declaration.');
+ }
+ }
+
+ $newEntry = new $entryClassName($child);
+ $newEntry->setHttpClient($this->getHttpClient());
+ $this->_entry[] = $newEntry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:user attribute.
+ *
+ * @see setGphotoUser
+ * @return string The requested attribute.
+ */
+ public function getGphotoUser()
+ {
+ return $this->_gphotoUser;
+ }
+
+ /**
+ * Set the value for this element's gphoto:user attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_User The element being modified.
+ */
+ public function setGphotoUser($value)
+ {
+ $this->_gphotoUser = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:access attribute.
+ *
+ * @see setGphotoAccess
+ * @return string The requested attribute.
+ */
+ public function getGphotoAccess()
+ {
+ return $this->_gphotoAccess;
+ }
+
+ /**
+ * Set the value for this element's gphoto:access attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Access The element being modified.
+ */
+ public function setGphotoAccess($value)
+ {
+ $this->_gphotoAccess = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:location attribute.
+ *
+ * @see setGphotoLocation
+ * @return string The requested attribute.
+ */
+ public function getGphotoLocation()
+ {
+ return $this->_gphotoLocation;
+ }
+
+ /**
+ * Set the value for this element's gphoto:location attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Location The element being modified.
+ */
+ public function setGphotoLocation($value)
+ {
+ $this->_gphotoLocation = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:name attribute.
+ *
+ * @see setGphotoName
+ * @return string The requested attribute.
+ */
+ public function getGphotoName()
+ {
+ return $this->_gphotoName;
+ }
+
+ /**
+ * Set the value for this element's gphoto:name attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Name The element being modified.
+ */
+ public function setGphotoName($value)
+ {
+ $this->_gphotoName = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:numphotos attribute.
+ *
+ * @see setGphotoNumPhotos
+ * @return string The requested attribute.
+ */
+ public function getGphotoNumPhotos()
+ {
+ return $this->_gphotoNumPhotos;
+ }
+
+ /**
+ * Set the value for this element's gphoto:numphotos attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_NumPhotos The element being modified.
+ */
+ public function setGphotoNumPhotos($value)
+ {
+ $this->_gphotoNumPhotos = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentCount attribute.
+ *
+ * @see setGphotoCommentCount
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentCount()
+ {
+ return $this->_gphotoCommentCount;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentCount attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentCount The element being modified.
+ */
+ public function setGphotoCommentCount($value)
+ {
+ $this->_gphotoCommentCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @see setGphotoCommentingEnabled
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentingEnabled()
+ {
+ return $this->_gphotoCommentingEnabled;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentingEnabled The element being modified.
+ */
+ public function setGphotoCommentingEnabled($value)
+ {
+ $this->_gphotoCommentingEnabled = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's georss:where attribute.
+ *
+ * @see setGeoRssWhere
+ * @return string The requested attribute.
+ */
+ public function getGeoRssWhere()
+ {
+ return $this->_geoRssWhere;
+ }
+
+ /**
+ * Set the value for this element's georss:where attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere The element being modified.
+ */
+ public function setGeoRssWhere($value)
+ {
+ $this->_geoRssWhere = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:nickname attribute.
+ *
+ * @see setGphotoNickname
+ * @return string The requested attribute.
+ */
+ public function getGphotoNickname()
+ {
+ return $this->_gphotoNickname;
+ }
+
+ /**
+ * Set the value for this element's gphoto:nickname attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Nickname The element being modified.
+ */
+ public function setGphotoNickname($value)
+ {
+ $this->_gphotoNickname = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:timestamp attribute.
+ *
+ * @see setGphotoTimestamp
+ * @return string The requested attribute.
+ */
+ public function getGphotoTimestamp()
+ {
+ return $this->_gphotoTimestamp;
+ }
+
+ /**
+ * Set the value for this element's gphoto:timestamp attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Timestamp The element being modified.
+ */
+ public function setGphotoTimestamp($value)
+ {
+ $this->_gphotoTimestamp = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/AlbumQuery.php b/zend/library/Zend/Gdata/Photos/AlbumQuery.php
new file mode 100755
index 0000000..ee00322
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/AlbumQuery.php
@@ -0,0 +1,149 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AlbumQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Photos_UserQuery
+ */
+require_once('Zend/Gdata/Photos/UserQuery.php');
+
+/**
+ * Assists in constructing album queries for various entries.
+ * Instances of this class can be provided in many places where a URL is
+ * required.
+ *
+ * For information on submitting queries to a server, see the service
+ * class, Zend_Gdata_Photos.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_AlbumQuery extends Zend_Gdata_Photos_UserQuery
+{
+
+ /**
+ * The name of the album to query for. Mutually exclusive with AlbumId.
+ *
+ * @var string
+ */
+ protected $_albumName = null;
+
+ /**
+ * The ID of the album to query for. Mutually exclusive with AlbumName.
+ *
+ * @var string
+ */
+ protected $_albumId = null;
+
+ /**
+ * Set the album name to query for. When set, this album's photographs
+ * be returned. If not set or null, the default user's feed will be
+ * returned instead.
+ *
+ * NOTE: AlbumName and AlbumId are mutually exclusive. Setting one will
+ * automatically set the other to null.
+ *
+ * @param string $value The name of the album to retrieve, or null to
+ * clear.
+ * @return Zend_Gdata_Photos_AlbumQuery The query object.
+ */
+ public function setAlbumName($value)
+ {
+ $this->_albumId = null;
+ $this->_albumName = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get the album name which is to be returned.
+ *
+ * @see setAlbumName
+ * @return string The name of the album to retrieve.
+ */
+ public function getAlbumName()
+ {
+ return $this->_albumName;
+ }
+
+ /**
+ * Set the album ID to query for. When set, this album's photographs
+ * be returned. If not set or null, the default user's feed will be
+ * returned instead.
+ *
+ * NOTE: Album and AlbumId are mutually exclusive. Setting one will
+ * automatically set the other to null.
+ *
+ * @param string $value The ID of the album to retrieve, or null to
+ * clear.
+ * @return Zend_Gdata_Photos_AlbumQuery The query object.
+ */
+ public function setAlbumId($value)
+ {
+ $this->_albumName = null;
+ $this->_albumId = $value;
+
+ return $this;
+ }
+
+ /**
+ * Get the album ID which is to be returned.
+ *
+ * @see setAlbum
+ * @return string The ID of the album to retrieve.
+ */
+ public function getAlbumId()
+ {
+ return $this->_albumId;
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl($incomingUri = '')
+ {
+ $uri = '';
+ if ($this->getAlbumName() !== null && $this->getAlbumId() === null) {
+ $uri .= '/album/' . $this->getAlbumName();
+ } elseif ($this->getAlbumName() === null && $this->getAlbumId() !== null) {
+ $uri .= '/albumid/' . $this->getAlbumId();
+ } elseif ($this->getAlbumName() !== null && $this->getAlbumId() !== null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'AlbumName and AlbumId cannot both be non-null');
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'AlbumName and AlbumId cannot both be null');
+ }
+ $uri .= $incomingUri;
+ return parent::getQueryUrl($uri);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/CommentEntry.php b/zend/library/Zend/Gdata/Photos/CommentEntry.php
new file mode 100755
index 0000000..24bfae3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/CommentEntry.php
@@ -0,0 +1,195 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CommentEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Id
+ */
+require_once 'Zend/Gdata/Photos/Extension/Id.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_PhotoId
+ */
+require_once 'Zend/Gdata/Photos/Extension/PhotoId.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Weight
+ */
+require_once 'Zend/Gdata/Photos/Extension/Weight.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Category
+ */
+require_once 'Zend/Gdata/App/Extension/Category.php';
+
+/**
+ * Data model class for a Comment Entry.
+ *
+ * To transfer user entries to and from the servers, including
+ * creating new entries, refer to the service class,
+ * Zend_Gdata_Photos.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_CommentEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_CommentEntry';
+
+ /**
+ * gphoto:id element
+ *
+ * @var Zend_Gdata_Photos_Extension_Id
+ */
+ protected $_gphotoId = null;
+
+ /**
+ * gphoto:photoid element, differs from gphoto:id as this is an
+ * actual identification number unique exclusively to photo entries,
+ * whereas gphoto:id can refer to all gphoto objects
+ *
+ * @var Zend_Gdata_Photos_Extension_PhotoId
+ */
+ protected $_gphotoPhotoId = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#comment',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoId !== null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoPhotoId !== null) {
+ $element->appendChild($this->_gphotoPhotoId->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'photoid';
+ $photoid = new Zend_Gdata_Photos_Extension_PhotoId();
+ $photoid->transferFromDOM($child);
+ $this->_gphotoPhotoId = $photoid;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:photoid attribute.
+ *
+ * @see setGphotoPhotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoPhotoId()
+ {
+ return $this->_gphotoPhotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:photoid attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_PhotoId The element being modified.
+ */
+ public function setGphotoPhotoId($value)
+ {
+ $this->_gphotoPhotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Access.php b/zend/library/Zend/Gdata/Photos/Extension/Access.php
new file mode 100755
index 0000000..d3040a2
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Access.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Access.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:access element used by the API.
+ * This determines the visibility for an album, and can be either
+ * the strings 'private' or 'public'.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Access extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'access';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Access object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/AlbumId.php b/zend/library/Zend/Gdata/Photos/Extension/AlbumId.php
new file mode 100755
index 0000000..1efb08b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/AlbumId.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AlbumId.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:albumid element used by the API. This
+ * class represents the ID of an album and is usually contained
+ * within an instance of Zend_Gdata_Photos_AlbumEntry or CommentEntry.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_AlbumId extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'albumid';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_AlbumId object.
+ *
+ * @param string $text (optional) The value to use for the Album ID.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/BytesUsed.php b/zend/library/Zend/Gdata/Photos/Extension/BytesUsed.php
new file mode 100755
index 0000000..14a6e4b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/BytesUsed.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: BytesUsed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:bytesUsed element used by the API.
+ * This indicates the number of bytes of storage used by an album.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_BytesUsed extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'bytesUsed';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_BytesUsed object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Checksum.php b/zend/library/Zend/Gdata/Photos/Extension/Checksum.php
new file mode 100755
index 0000000..1f252f6
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Checksum.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Checksum.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:checksum element used by the API.
+ * This is an optional field that can be used to store a photo's
+ * checksum to ease duplicate checking.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Checksum extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'checksum';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Checksum object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Client.php b/zend/library/Zend/Gdata/Photos/Extension/Client.php
new file mode 100755
index 0000000..72335bf
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Client.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Client.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:client element used by the API.
+ * This is an optional field that can be used to indicate the
+ * client which created a photo.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Client extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'client';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Client object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/CommentCount.php b/zend/library/Zend/Gdata/Photos/Extension/CommentCount.php
new file mode 100755
index 0000000..d3742ef
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/CommentCount.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CommentCount.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:commentCount element used by the API. This
+ * class represents the number of comments attached to an entry and is usually contained
+ * within an instance of Zend_Gdata_Photos_PhotoEntry or AlbumEntry.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_CommentCount extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'commentCount';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_CommentCount object.
+ *
+ * @param string $text (optional) The value to use for the count.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/CommentingEnabled.php b/zend/library/Zend/Gdata/Photos/Extension/CommentingEnabled.php
new file mode 100755
index 0000000..5440960
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/CommentingEnabled.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CommentingEnabled.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:commentingEnabled element used by the API.
+ * This class represents whether commenting is enabled for a given
+ * entry.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_CommentingEnabled extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'commentingEnabled';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_CommentingEnabled object.
+ *
+ * @param string $text (optional) Whether commenting should be enabled
+ * or not.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Height.php b/zend/library/Zend/Gdata/Photos/Extension/Height.php
new file mode 100755
index 0000000..ab7ab00
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Height.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Height.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:height element used by the API.
+ * The height of a photo in pixels.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Height extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'height';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Height object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Id.php b/zend/library/Zend/Gdata/Photos/Extension/Id.php
new file mode 100755
index 0000000..0121643
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Id.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Id.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:id element used by the API. This class
+ * represents the unique ID assigned to an element by the servers.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Id extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'id';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Id object.
+ *
+ * @param string $text (optional) The ID being represented.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Location.php b/zend/library/Zend/Gdata/Photos/Extension/Location.php
new file mode 100755
index 0000000..fa60312
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Location.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Location.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:location element used by the API.
+ * This indicates the number of bytes of storage used by an album.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Location extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'location';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Location object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php b/zend/library/Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php
new file mode 100755
index 0000000..1deb2bc
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MaxPhotosPerAlbum.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:maxPhotosPerAlbum element used by the API.
+ * This class represents the maximum number of photos allowed in an
+ * album.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_MaxPhotosPerAlbum extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'maxPhotosPerAlbum';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_MaxPhotosPerAlbum object.
+ *
+ * @param string $text (optional) The value being represented.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Name.php b/zend/library/Zend/Gdata/Photos/Extension/Name.php
new file mode 100755
index 0000000..94e30f4
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Name.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Name.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:name element used by the API.
+ * This indicates the URL-usable name for an album.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Name extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'name';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Name object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Nickname.php b/zend/library/Zend/Gdata/Photos/Extension/Nickname.php
new file mode 100755
index 0000000..8d64966
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Nickname.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Nickname.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:nickname element used by the API.
+ * This class represents the nickname for a user.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Nickname extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'nickname';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Nickname object.
+ *
+ * @param string $text (optional) The value being represented.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/NumPhotos.php b/zend/library/Zend/Gdata/Photos/Extension/NumPhotos.php
new file mode 100755
index 0000000..ef60301
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/NumPhotos.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: NumPhotos.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:numphotos element used by the API.
+ * This indicates the number of photos in an album.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_NumPhotos extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'numphotos';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_NumPhotos object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/NumPhotosRemaining.php b/zend/library/Zend/Gdata/Photos/Extension/NumPhotosRemaining.php
new file mode 100755
index 0000000..6bf42e6
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/NumPhotosRemaining.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: NumPhotosRemaining.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:numphotosremaining element used by the API.
+ * This indicates the number of photos remaining in an album.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_NumPhotosRemaining extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'numphotosremaining';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_NumPhotosRemaining object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/PhotoId.php b/zend/library/Zend/Gdata/Photos/Extension/PhotoId.php
new file mode 100755
index 0000000..5c71f39
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/PhotoId.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PhotoId.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:id element used by the Picasa API.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_PhotoId extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'id';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_PhotoId object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Position.php b/zend/library/Zend/Gdata/Photos/Extension/Position.php
new file mode 100755
index 0000000..75e9988
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Position.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Position.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:position element used by the API.
+ * The ordinal position of a photo within an album.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Position extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'position';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Position object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/QuotaCurrent.php b/zend/library/Zend/Gdata/Photos/Extension/QuotaCurrent.php
new file mode 100755
index 0000000..3caa587
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/QuotaCurrent.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: QuotaCurrent.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:quotaCurrent element used by the API.
+ * This class represents the number of bytes of storage used by a user.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_QuotaCurrent extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'quotaCurrent';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_QuotaCurrent object.
+ *
+ * @param string $text (optional) The value being represented.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/QuotaLimit.php b/zend/library/Zend/Gdata/Photos/Extension/QuotaLimit.php
new file mode 100755
index 0000000..7f074cc
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/QuotaLimit.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: QuotaLimit.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:quotaLimit element used by the API.
+ * This class represents the number of bytes of storage available for
+ * a user.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_QuotaLimit extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'quotaLimit';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_QuotaLimit object.
+ *
+ * @param string $text (optional) The value being represented.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Rotation.php b/zend/library/Zend/Gdata/Photos/Extension/Rotation.php
new file mode 100755
index 0000000..9d10263
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Rotation.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Rotation.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:rotation element used by the API.
+ * The rotation of a photo in degrees. Will only be shown if the
+ * rotation has not already been applied to the image.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Rotation extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'rotation';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Rotation object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Size.php b/zend/library/Zend/Gdata/Photos/Extension/Size.php
new file mode 100755
index 0000000..932b4b4
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Size.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Size.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:size element used by the API.
+ * The size of a photo in bytes.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Size extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'size';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Size object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Thumbnail.php b/zend/library/Zend/Gdata/Photos/Extension/Thumbnail.php
new file mode 100755
index 0000000..6512e9f
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Thumbnail.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Thumbnail.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:thumbnail element used by the API.
+ * This class represents the URI for a thumbnail image.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Thumbnail extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'thumbnail';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Thumbnail object.
+ *
+ * @param string $text (optional) The thumbnail URI to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Timestamp.php b/zend/library/Zend/Gdata/Photos/Extension/Timestamp.php
new file mode 100755
index 0000000..48f6302
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Timestamp.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Timestamp.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:timestamp element used by the API.
+ * The timestamp of a photo in milliseconds since January 1, 1970.
+ * This date is either set externally or based on EXIF data.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Timestamp extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'timestamp';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Timestamp object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/User.php b/zend/library/Zend/Gdata/Photos/Extension/User.php
new file mode 100755
index 0000000..a452a1c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/User.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: User.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:user element used by the API.
+ * This class represents the username for a user.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_User extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'user';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_User object.
+ *
+ * @param string $text (optional) The username to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Version.php b/zend/library/Zend/Gdata/Photos/Extension/Version.php
new file mode 100755
index 0000000..cf759f0
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Version.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Version.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:version element used by the API.
+ * This number is used for optimistic concurrency, and does not
+ * increase linearly.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Version extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'version';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Version object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Weight.php b/zend/library/Zend/Gdata/Photos/Extension/Weight.php
new file mode 100755
index 0000000..7482104
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Weight.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Weight.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:weight element used by the API.
+ * This indicates the weight of a tag, based on the number of times
+ * it appears in photos under the current element.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Weight extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'weight';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Weight object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/Extension/Width.php b/zend/library/Zend/Gdata/Photos/Extension/Width.php
new file mode 100755
index 0000000..e0fd78e
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/Extension/Width.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Width.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * Represents the gphoto:width element used by the API.
+ * This indicates the width of a photo in pixels.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_Extension_Width extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'gphoto';
+ protected $_rootElement = 'width';
+
+ /**
+ * Constructs a new Zend_Gdata_Photos_Extension_Width object.
+ *
+ * @param string $text (optional) The value to represent.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct();
+ $this->setText($text);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/PhotoEntry.php b/zend/library/Zend/Gdata/Photos/PhotoEntry.php
new file mode 100755
index 0000000..ce3165f
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/PhotoEntry.php
@@ -0,0 +1,691 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PhotoEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_MediaEntry
+ */
+require_once 'Zend/Gdata/Media/Entry.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_PhotoId
+ */
+require_once 'Zend/Gdata/Photos/Extension/PhotoId.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Version
+ */
+require_once 'Zend/Gdata/Photos/Extension/Version.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_AlbumId
+ */
+require_once 'Zend/Gdata/Photos/Extension/AlbumId.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Id
+ */
+require_once 'Zend/Gdata/Photos/Extension/Id.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Width
+ */
+require_once 'Zend/Gdata/Photos/Extension/Width.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Height
+ */
+require_once 'Zend/Gdata/Photos/Extension/Height.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Size
+ */
+require_once 'Zend/Gdata/Photos/Extension/Size.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Client
+ */
+require_once 'Zend/Gdata/Photos/Extension/Client.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Checksum
+ */
+require_once 'Zend/Gdata/Photos/Extension/Checksum.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Timestamp
+ */
+require_once 'Zend/Gdata/Photos/Extension/Timestamp.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_CommentingEnabled
+ */
+require_once 'Zend/Gdata/Photos/Extension/CommentingEnabled.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_CommentCount
+ */
+require_once 'Zend/Gdata/Photos/Extension/CommentCount.php';
+
+/**
+ * @see Zend_Gdata_Exif_Extension_Tags
+ */
+require_once 'Zend/Gdata/Exif/Extension/Tags.php';
+
+/**
+ * @see Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+require_once 'Zend/Gdata/Geo/Extension/GeoRssWhere.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Category
+ */
+require_once 'Zend/Gdata/App/Extension/Category.php';
+
+/**
+ * Data model class for a Comment Entry.
+ *
+ * To transfer user entries to and from the servers, including
+ * creating new entries, refer to the service class,
+ * Zend_Gdata_Photos.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_PhotoEntry extends Zend_Gdata_Media_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_PhotoEntry';
+
+ /**
+ * gphoto:id element
+ *
+ * @var Zend_Gdata_Photos_Extension_Id
+ */
+ protected $_gphotoId = null;
+
+ /**
+ * gphoto:albumid element
+ *
+ * @var Zend_Gdata_Photos_Extension_AlbumId
+ */
+ protected $_gphotoAlbumId = null;
+
+ /**
+ * gphoto:version element
+ *
+ * @var Zend_Gdata_Photos_Extension_Version
+ */
+ protected $_gphotoVersion = null;
+
+ /**
+ * gphoto:width element
+ *
+ * @var Zend_Gdata_Photos_Extension_Width
+ */
+ protected $_gphotoWidth = null;
+
+ /**
+ * gphoto:height element
+ *
+ * @var Zend_Gdata_Photos_Extension_Height
+ */
+ protected $_gphotoHeight = null;
+
+ /**
+ * gphoto:size element
+ *
+ * @var Zend_Gdata_Photos_Extension_Size
+ */
+ protected $_gphotoSize = null;
+
+ /**
+ * gphoto:client element
+ *
+ * @var Zend_Gdata_Photos_Extension_Client
+ */
+ protected $_gphotoClient = null;
+
+ /**
+ * gphoto:checksum element
+ *
+ * @var Zend_Gdata_Photos_Extension_Checksum
+ */
+ protected $_gphotoChecksum = null;
+
+ /**
+ * gphoto:timestamp element
+ *
+ * @var Zend_Gdata_Photos_Extension_Timestamp
+ */
+ protected $_gphotoTimestamp = null;
+
+ /**
+ * gphoto:commentCount element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentCount
+ */
+ protected $_gphotoCommentCount = null;
+
+ /**
+ * gphoto:commentingEnabled element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentingEnabled
+ */
+ protected $_gphotoCommentingEnabled = null;
+
+ /**
+ * exif:tags element
+ *
+ * @var Zend_Gdata_Exif_Extension_Tags
+ */
+ protected $_exifTags = null;
+
+ /**
+ * georss:where element
+ *
+ * @var Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+ protected $_geoRssWhere = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#photo',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoAlbumId !== null) {
+ $element->appendChild($this->_gphotoAlbumId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoId !== null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoVersion !== null) {
+ $element->appendChild($this->_gphotoVersion->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoWidth !== null) {
+ $element->appendChild($this->_gphotoWidth->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoHeight !== null) {
+ $element->appendChild($this->_gphotoHeight->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoSize !== null) {
+ $element->appendChild($this->_gphotoSize->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoClient !== null) {
+ $element->appendChild($this->_gphotoClient->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoChecksum !== null) {
+ $element->appendChild($this->_gphotoChecksum->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoTimestamp !== null) {
+ $element->appendChild($this->_gphotoTimestamp->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentingEnabled !== null) {
+ $element->appendChild($this->_gphotoCommentingEnabled->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentCount !== null) {
+ $element->appendChild($this->_gphotoCommentCount->getDOM($element->ownerDocument));
+ }
+ if ($this->_exifTags !== null) {
+ $element->appendChild($this->_exifTags->getDOM($element->ownerDocument));
+ }
+ if ($this->_geoRssWhere !== null) {
+ $element->appendChild($this->_geoRssWhere->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'albumid';
+ $albumId = new Zend_Gdata_Photos_Extension_AlbumId();
+ $albumId->transferFromDOM($child);
+ $this->_gphotoAlbumId = $albumId;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'version';
+ $version = new Zend_Gdata_Photos_Extension_Version();
+ $version->transferFromDOM($child);
+ $this->_gphotoVersion = $version;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'width';
+ $width = new Zend_Gdata_Photos_Extension_Width();
+ $width->transferFromDOM($child);
+ $this->_gphotoWidth = $width;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'height';
+ $height = new Zend_Gdata_Photos_Extension_Height();
+ $height->transferFromDOM($child);
+ $this->_gphotoHeight = $height;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'size';
+ $size = new Zend_Gdata_Photos_Extension_Size();
+ $size->transferFromDOM($child);
+ $this->_gphotoSize = $size;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'client';
+ $client = new Zend_Gdata_Photos_Extension_Client();
+ $client->transferFromDOM($child);
+ $this->_gphotoClient = $client;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'checksum';
+ $checksum = new Zend_Gdata_Photos_Extension_Checksum();
+ $checksum->transferFromDOM($child);
+ $this->_gphotoChecksum = $checksum;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'timestamp';
+ $timestamp = new Zend_Gdata_Photos_Extension_Timestamp();
+ $timestamp->transferFromDOM($child);
+ $this->_gphotoTimestamp = $timestamp;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentingEnabled';
+ $commentingEnabled = new Zend_Gdata_Photos_Extension_CommentingEnabled();
+ $commentingEnabled->transferFromDOM($child);
+ $this->_gphotoCommentingEnabled = $commentingEnabled;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentCount';
+ $commentCount = new Zend_Gdata_Photos_Extension_CommentCount();
+ $commentCount->transferFromDOM($child);
+ $this->_gphotoCommentCount = $commentCount;
+ break;
+ case $this->lookupNamespace('exif') . ':' . 'tags';
+ $exifTags = new Zend_Gdata_Exif_Extension_Tags();
+ $exifTags->transferFromDOM($child);
+ $this->_exifTags = $exifTags;
+ break;
+ case $this->lookupNamespace('georss') . ':' . 'where';
+ $geoRssWhere = new Zend_Gdata_Geo_Extension_GeoRssWhere();
+ $geoRssWhere->transferFromDOM($child);
+ $this->_geoRssWhere = $geoRssWhere;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:albumid attribute.
+ *
+ * @see setGphotoAlbumId
+ * @return string The requested attribute.
+ */
+ public function getGphotoAlbumId()
+ {
+ return $this->_gphotoAlbumId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:albumid attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_AlbumId The element being modified.
+ */
+ public function setGphotoAlbumId($value)
+ {
+ $this->_gphotoAlbumId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:version attribute.
+ *
+ * @see setGphotoVersion
+ * @return string The requested attribute.
+ */
+ public function getGphotoVersion()
+ {
+ return $this->_gphotoVersion;
+ }
+
+ /**
+ * Set the value for this element's gphoto:version attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Version The element being modified.
+ */
+ public function setGphotoVersion($value)
+ {
+ $this->_gphotoVersion = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:width attribute.
+ *
+ * @see setGphotoWidth
+ * @return string The requested attribute.
+ */
+ public function getGphotoWidth()
+ {
+ return $this->_gphotoWidth;
+ }
+
+ /**
+ * Set the value for this element's gphoto:width attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Width The element being modified.
+ */
+ public function setGphotoWidth($value)
+ {
+ $this->_gphotoWidth = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:height attribute.
+ *
+ * @see setGphotoHeight
+ * @return string The requested attribute.
+ */
+ public function getGphotoHeight()
+ {
+ return $this->_gphotoHeight;
+ }
+
+ /**
+ * Set the value for this element's gphoto:height attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Height The element being modified.
+ */
+ public function setGphotoHeight($value)
+ {
+ $this->_gphotoHeight = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:size attribute.
+ *
+ * @see setGphotoSize
+ * @return string The requested attribute.
+ */
+ public function getGphotoSize()
+ {
+ return $this->_gphotoSize;
+ }
+
+ /**
+ * Set the value for this element's gphoto:size attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Size The element being modified.
+ */
+ public function setGphotoSize($value)
+ {
+ $this->_gphotoSize = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:client attribute.
+ *
+ * @see setGphotoClient
+ * @return string The requested attribute.
+ */
+ public function getGphotoClient()
+ {
+ return $this->_gphotoClient;
+ }
+
+ /**
+ * Set the value for this element's gphoto:client attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Client The element being modified.
+ */
+ public function setGphotoClient($value)
+ {
+ $this->_gphotoClient = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:checksum attribute.
+ *
+ * @see setGphotoChecksum
+ * @return string The requested attribute.
+ */
+ public function getGphotoChecksum()
+ {
+ return $this->_gphotoChecksum;
+ }
+
+ /**
+ * Set the value for this element's gphoto:checksum attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Checksum The element being modified.
+ */
+ public function setGphotoChecksum($value)
+ {
+ $this->_gphotoChecksum = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:timestamp attribute.
+ *
+ * @see setGphotoTimestamp
+ * @return string The requested attribute.
+ */
+ public function getGphotoTimestamp()
+ {
+ return $this->_gphotoTimestamp;
+ }
+
+ /**
+ * Set the value for this element's gphoto:timestamp attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Timestamp The element being modified.
+ */
+ public function setGphotoTimestamp($value)
+ {
+ $this->_gphotoTimestamp = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentCount attribute.
+ *
+ * @see setGphotoCommentCount
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentCount()
+ {
+ return $this->_gphotoCommentCount;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentCount attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentCount The element being modified.
+ */
+ public function setGphotoCommentCount($value)
+ {
+ $this->_gphotoCommentCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @see setGphotoCommentingEnabled
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentingEnabled()
+ {
+ return $this->_gphotoCommentingEnabled;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentingEnabled The element being modified.
+ */
+ public function setGphotoCommentingEnabled($value)
+ {
+ $this->_gphotoCommentingEnabled = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's exif:tags attribute.
+ *
+ * @see setExifTags
+ * @return string The requested attribute.
+ */
+ public function getExifTags()
+ {
+ return $this->_exifTags;
+ }
+
+ /**
+ * Set the value for this element's exif:tags attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Exif_Extension_Tags The element being modified.
+ */
+ public function setExifTags($value)
+ {
+ $this->_exifTags = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's georss:where attribute.
+ *
+ * @see setGeoRssWhere
+ * @return string The requested attribute.
+ */
+ public function getGeoRssWhere()
+ {
+ return $this->_geoRssWhere;
+ }
+
+ /**
+ * Set the value for this element's georss:where attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere The element being modified.
+ */
+ public function setGeoRssWhere($value)
+ {
+ $this->_geoRssWhere = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's media:group attribute.
+ *
+ * @see setMediaGroup
+ * @return string The requested attribute.
+ */
+ public function getMediaGroup()
+ {
+ return $this->_mediaGroup;
+ }
+
+ /**
+ * Set the value for this element's media:group attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Media_Extension_MediaGroup The element being modified.
+ */
+ public function setMediaGroup($value)
+ {
+ $this->_mediaGroup = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/PhotoFeed.php b/zend/library/Zend/Gdata/Photos/PhotoFeed.php
new file mode 100755
index 0000000..e0ebe0c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/PhotoFeed.php
@@ -0,0 +1,559 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PhotoFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Photos_PhotoEntry
+ */
+require_once 'Zend/Gdata/Photos/PhotoEntry.php';
+
+/**
+ * Data model for a collection of photo entries, usually
+ * provided by the Picasa servers.
+ *
+ * For information on requesting this feed from a server, see the
+ * service class, Zend_Gdata_Photos.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_PhotoFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * gphoto:id element
+ *
+ * @var Zend_Gdata_Photos_Extension_Id
+ */
+ protected $_gphotoId = null;
+
+ /**
+ * gphoto:albumid element
+ *
+ * @var Zend_Gdata_Photos_Extension_AlbumId
+ */
+ protected $_gphotoAlbumId = null;
+
+ /**
+ * gphoto:version element
+ *
+ * @var Zend_Gdata_Photos_Extension_Version
+ */
+ protected $_gphotoVersion = null;
+
+ /**
+ * gphoto:width element
+ *
+ * @var Zend_Gdata_Photos_Extension_Width
+ */
+ protected $_gphotoWidth = null;
+
+ /**
+ * gphoto:height element
+ *
+ * @var Zend_Gdata_Photos_Extension_Height
+ */
+ protected $_gphotoHeight = null;
+
+ /**
+ * gphoto:size element
+ *
+ * @var Zend_Gdata_Photos_Extension_Size
+ */
+ protected $_gphotoSize = null;
+
+ /**
+ * gphoto:client element
+ *
+ * @var Zend_Gdata_Photos_Extension_Client
+ */
+ protected $_gphotoClient = null;
+
+ /**
+ * gphoto:checksum element
+ *
+ * @var Zend_Gdata_Photos_Extension_Checksum
+ */
+ protected $_gphotoChecksum = null;
+
+ /**
+ * gphoto:timestamp element
+ *
+ * @var Zend_Gdata_Photos_Extension_Timestamp
+ */
+ protected $_gphotoTimestamp = null;
+
+ /**
+ * gphoto:commentCount element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentCount
+ */
+ protected $_gphotoCommentCount = null;
+
+ /**
+ * gphoto:commentingEnabled element
+ *
+ * @var Zend_Gdata_Photos_Extension_CommentingEnabled
+ */
+ protected $_gphotoCommentingEnabled = null;
+
+ /**
+ * media:group element
+ *
+ * @var Zend_Gdata_Media_Extension_MediaGroup
+ */
+ protected $_mediaGroup = null;
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_PhotoEntry';
+ protected $_feedClassName = 'Zend_Gdata_Photos_PhotoFeed';
+
+ protected $_entryKindClassMapping = array(
+ 'http://schemas.google.com/photos/2007#comment' => 'Zend_Gdata_Photos_CommentEntry',
+ 'http://schemas.google.com/photos/2007#tag' => 'Zend_Gdata_Photos_TagEntry'
+ );
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoId != null) {
+ $element->appendChild($this->_gphotoId->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoVersion != null) {
+ $element->appendChild($this->_gphotoVersion->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoWidth != null) {
+ $element->appendChild($this->_gphotoWidth->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoHeight != null) {
+ $element->appendChild($this->_gphotoHeight->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoSize != null) {
+ $element->appendChild($this->_gphotoSize->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoClient != null) {
+ $element->appendChild($this->_gphotoClient->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoChecksum != null) {
+ $element->appendChild($this->_gphotoChecksum->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoTimestamp != null) {
+ $element->appendChild($this->_gphotoTimestamp->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentingEnabled != null) {
+ $element->appendChild($this->_gphotoCommentingEnabled->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoCommentCount != null) {
+ $element->appendChild($this->_gphotoCommentCount->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediaGroup != null) {
+ $element->appendChild($this->_mediaGroup->getDOM($element->ownerDocument));
+ }
+
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'id';
+ $id = new Zend_Gdata_Photos_Extension_Id();
+ $id->transferFromDOM($child);
+ $this->_gphotoId = $id;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'version';
+ $version = new Zend_Gdata_Photos_Extension_Version();
+ $version->transferFromDOM($child);
+ $this->_gphotoVersion = $version;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'albumid';
+ $albumid = new Zend_Gdata_Photos_Extension_AlbumId();
+ $albumid->transferFromDOM($child);
+ $this->_gphotoAlbumId = $albumid;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'width';
+ $width = new Zend_Gdata_Photos_Extension_Width();
+ $width->transferFromDOM($child);
+ $this->_gphotoWidth = $width;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'height';
+ $height = new Zend_Gdata_Photos_Extension_Height();
+ $height->transferFromDOM($child);
+ $this->_gphotoHeight = $height;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'size';
+ $size = new Zend_Gdata_Photos_Extension_Size();
+ $size->transferFromDOM($child);
+ $this->_gphotoSize = $size;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'client';
+ $client = new Zend_Gdata_Photos_Extension_Client();
+ $client->transferFromDOM($child);
+ $this->_gphotoClient = $client;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'checksum';
+ $checksum = new Zend_Gdata_Photos_Extension_Checksum();
+ $checksum->transferFromDOM($child);
+ $this->_gphotoChecksum = $checksum;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'timestamp';
+ $timestamp = new Zend_Gdata_Photos_Extension_Timestamp();
+ $timestamp->transferFromDOM($child);
+ $this->_gphotoTimestamp = $timestamp;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentingEnabled';
+ $commentingEnabled = new Zend_Gdata_Photos_Extension_CommentingEnabled();
+ $commentingEnabled->transferFromDOM($child);
+ $this->_gphotoCommentingEnabled = $commentingEnabled;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'commentCount';
+ $commentCount = new Zend_Gdata_Photos_Extension_CommentCount();
+ $commentCount->transferFromDOM($child);
+ $this->_gphotoCommentCount = $commentCount;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'group';
+ $mediaGroup = new Zend_Gdata_Media_Extension_MediaGroup();
+ $mediaGroup->transferFromDOM($child);
+ $this->_mediaGroup = $mediaGroup;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'entry':
+ $entryClassName = $this->_entryClassName;
+ $tmpEntry = new Zend_Gdata_App_Entry($child);
+ $categories = $tmpEntry->getCategory();
+ foreach ($categories as $category) {
+ if ($category->scheme == Zend_Gdata_Photos::KIND_PATH &&
+ $this->_entryKindClassMapping[$category->term] != "") {
+ $entryClassName = $this->_entryKindClassMapping[$category->term];
+ break;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Entry is missing kind declaration.');
+ }
+ }
+
+ $newEntry = new $entryClassName($child);
+ $newEntry->setHttpClient($this->getHttpClient());
+ $this->_entry[] = $newEntry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:id attribute.
+ *
+ * @see setGphotoId
+ * @return string The requested attribute.
+ */
+ public function getGphotoId()
+ {
+ return $this->_gphotoId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:id attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Id The element being modified.
+ */
+ public function setGphotoId($value)
+ {
+ $this->_gphotoId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:version attribute.
+ *
+ * @see setGphotoVersion
+ * @return string The requested attribute.
+ */
+ public function getGphotoVersion()
+ {
+ return $this->_gphotoVersion;
+ }
+
+ /**
+ * Set the value for this element's gphoto:version attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Version The element being modified.
+ */
+ public function setGphotoVersion($value)
+ {
+ $this->_gphotoVersion = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:albumid attribute.
+ *
+ * @see setGphotoAlbumId
+ * @return string The requested attribute.
+ */
+ public function getGphotoAlbumId()
+ {
+ return $this->_gphotoAlbumId;
+ }
+
+ /**
+ * Set the value for this element's gphoto:albumid attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_AlbumId The element being modified.
+ */
+ public function setGphotoAlbumId($value)
+ {
+ $this->_gphotoAlbumId = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:width attribute.
+ *
+ * @see setGphotoWidth
+ * @return string The requested attribute.
+ */
+ public function getGphotoWidth()
+ {
+ return $this->_gphotoWidth;
+ }
+
+ /**
+ * Set the value for this element's gphoto:width attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Width The element being modified.
+ */
+ public function setGphotoWidth($value)
+ {
+ $this->_gphotoWidth = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:height attribute.
+ *
+ * @see setGphotoHeight
+ * @return string The requested attribute.
+ */
+ public function getGphotoHeight()
+ {
+ return $this->_gphotoHeight;
+ }
+
+ /**
+ * Set the value for this element's gphoto:height attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Height The element being modified.
+ */
+ public function setGphotoHeight($value)
+ {
+ $this->_gphotoHeight = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:size attribute.
+ *
+ * @see setGphotoSize
+ * @return string The requested attribute.
+ */
+ public function getGphotoSize()
+ {
+ return $this->_gphotoSize;
+ }
+
+ /**
+ * Set the value for this element's gphoto:size attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Size The element being modified.
+ */
+ public function setGphotoSize($value)
+ {
+ $this->_gphotoSize = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:client attribute.
+ *
+ * @see setGphotoClient
+ * @return string The requested attribute.
+ */
+ public function getGphotoClient()
+ {
+ return $this->_gphotoClient;
+ }
+
+ /**
+ * Set the value for this element's gphoto:client attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Client The element being modified.
+ */
+ public function setGphotoClient($value)
+ {
+ $this->_gphotoClient = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:checksum attribute.
+ *
+ * @see setGphotoChecksum
+ * @return string The requested attribute.
+ */
+ public function getGphotoChecksum()
+ {
+ return $this->_gphotoChecksum;
+ }
+
+ /**
+ * Set the value for this element's gphoto:checksum attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Checksum The element being modified.
+ */
+ public function setGphotoChecksum($value)
+ {
+ $this->_gphotoChecksum = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:timestamp attribute.
+ *
+ * @see setGphotoTimestamp
+ * @return string The requested attribute.
+ */
+ public function getGphotoTimestamp()
+ {
+ return $this->_gphotoTimestamp;
+ }
+
+ /**
+ * Set the value for this element's gphoto:timestamp attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Timestamp The element being modified.
+ */
+ public function setGphotoTimestamp($value)
+ {
+ $this->_gphotoTimestamp = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentCount attribute.
+ *
+ * @see setGphotoCommentCount
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentCount()
+ {
+ return $this->_gphotoCommentCount;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentCount attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentCount The element being modified.
+ */
+ public function setGphotoCommentCount($value)
+ {
+ $this->_gphotoCommentCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @see setGphotoCommentingEnabled
+ * @return string The requested attribute.
+ */
+ public function getGphotoCommentingEnabled()
+ {
+ return $this->_gphotoCommentingEnabled;
+ }
+
+ /**
+ * Set the value for this element's gphoto:commentingEnabled attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_CommentingEnabled The element being modified.
+ */
+ public function setGphotoCommentingEnabled($value)
+ {
+ $this->_gphotoCommentingEnabled = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's media:group attribute.
+ *
+ * @see setMediaGroup
+ * @return string The requested attribute.
+ */
+ public function getMediaGroup()
+ {
+ return $this->_mediaGroup;
+ }
+
+ /**
+ * Set the value for this element's media:group attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Media_Extension_MediaGroup The element being modified.
+ */
+ public function setMediaGroup($value)
+ {
+ $this->_mediaGroup = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/PhotoQuery.php b/zend/library/Zend/Gdata/Photos/PhotoQuery.php
new file mode 100755
index 0000000..881212d
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/PhotoQuery.php
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PhotoQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Gapps_Picasa_AlbumQuery
+ */
+require_once('Zend/Gdata/Photos/AlbumQuery.php');
+
+/**
+ * Assists in constructing queries for comment/tag entries.
+ * Instances of this class can be provided in many places where a URL is
+ * required.
+ *
+ * For information on submitting queries to a server, see the
+ * service class, Zend_Gdata_Photos.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_PhotoQuery extends Zend_Gdata_Photos_AlbumQuery
+{
+
+ /**
+ * The ID of the photo to query for.
+ *
+ * @var string
+ */
+ protected $_photoId = null;
+
+ /**
+ * Set the photo ID to query for. When set, this photo's comments/tags
+ * will be returned. If not set or null, the default user's feed will be
+ * returned instead.
+ *
+ * @param string $value The ID of the photo to retrieve, or null to
+ * clear.
+ */
+ public function setPhotoId($value)
+ {
+ $this->_photoId = $value;
+ }
+
+ /**
+ * Get the photo ID which is to be returned.
+ *
+ * @see setPhoto
+ * @return string The ID of the photo to retrieve.
+ */
+ public function getPhotoId()
+ {
+ return $this->_photoId;
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl($incomingUri = '')
+ {
+ $uri = '';
+ if ($this->getPhotoId() !== null) {
+ $uri .= '/photoid/' . $this->getPhotoId();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'PhotoId cannot be null');
+ }
+ $uri .= $incomingUri;
+ return parent::getQueryUrl($uri);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/TagEntry.php b/zend/library/Zend/Gdata/Photos/TagEntry.php
new file mode 100755
index 0000000..eb03fb2
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/TagEntry.php
@@ -0,0 +1,140 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: TagEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Weight
+ */
+require_once 'Zend/Gdata/Photos/Extension/Weight.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Category
+ */
+require_once 'Zend/Gdata/App/Extension/Category.php';
+
+/**
+ * Data model class for a Tag Entry.
+ *
+ * To transfer user entries to and from the servers, including
+ * creating new entries, refer to the service class,
+ * Zend_Gdata_Photos.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_TagEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_TagEntry';
+
+ protected $_gphotoWeight = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#tag',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoWeight !== null) {
+ $element->appendChild($this->_gphotoWeight->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'weight';
+ $weight = new Zend_Gdata_Photos_Extension_Weight();
+ $weight->transferFromDOM($child);
+ $this->_gphotoWeight = $weight;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:weight attribute.
+ *
+ * @see setGphotoWeight
+ * @return string The requested attribute.
+ */
+ public function getGphotoWeight()
+ {
+ return $this->_gphotoWeight;
+ }
+
+ /**
+ * Set the value for this element's gphoto:weight attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Weight The element being modified.
+ */
+ public function setGphotoWeight($value)
+ {
+ $this->_gphotoWeight = $value;
+ return $this;
+ }
+}
diff --git a/zend/library/Zend/Gdata/Photos/UserEntry.php b/zend/library/Zend/Gdata/Photos/UserEntry.php
new file mode 100755
index 0000000..6f488b8
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/UserEntry.php
@@ -0,0 +1,366 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: UserEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Gapps
+ */
+require_once 'Zend/Gdata/Gapps.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Nickname
+ */
+require_once 'Zend/Gdata/Photos/Extension/Nickname.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_Thumbnail
+ */
+require_once 'Zend/Gdata/Photos/Extension/Thumbnail.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_QuotaCurrent
+ */
+require_once 'Zend/Gdata/Photos/Extension/QuotaCurrent.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_QuotaLimit
+ */
+require_once 'Zend/Gdata/Photos/Extension/QuotaLimit.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_MaxPhotosPerAlbum
+ */
+require_once 'Zend/Gdata/Photos/Extension/MaxPhotosPerAlbum.php';
+
+/**
+ * @see Zend_Gdata_Photos_Extension_User
+ */
+require_once 'Zend/Gdata/Photos/Extension/User.php';
+
+/**
+ * @see Zend_Gdata_App_Extension_Category
+ */
+require_once 'Zend/Gdata/App/Extension/Category.php';
+
+/**
+ * Data model class for a User Entry.
+ *
+ * To transfer user entries to and from the servers, including
+ * creating new entries, refer to the service class,
+ * Zend_Gdata_Photos.
+ *
+ * This class represents <atom:entry> in the Google Data protocol.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_UserEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_UserEntry';
+
+ /**
+ * gphoto:nickname element
+ *
+ * @var Zend_Gdata_Photos_Extension_Nickname
+ */
+ protected $_gphotoNickname = null;
+
+ /**
+ * gphoto:user element
+ *
+ * @var Zend_Gdata_Photos_Extension_User
+ */
+ protected $_gphotoUser = null;
+
+ /**
+ * gphoto:thumbnail element
+ *
+ * @var Zend_Gdata_Photos_Extension_Thumbnail
+ */
+ protected $_gphotoThumbnail = null;
+
+ /**
+ * gphoto:quotalimit element
+ *
+ * @var Zend_Gdata_Photos_Extension_QuotaLimit
+ */
+ protected $_gphotoQuotaLimit = null;
+
+ /**
+ * gphoto:quotacurrent element
+ *
+ * @var Zend_Gdata_Photos_Extension_QuotaCurrent
+ */
+ protected $_gphotoQuotaCurrent = null;
+
+ /**
+ * gphoto:maxPhotosPerAlbum element
+ *
+ * @var Zend_Gdata_Photos_Extension_MaxPhotosPerAlbum
+ */
+ protected $_gphotoMaxPhotosPerAlbum = null;
+
+ /**
+ * Create a new instance.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+
+ $category = new Zend_Gdata_App_Extension_Category(
+ 'http://schemas.google.com/photos/2007#user',
+ 'http://schemas.google.com/g/2005#kind');
+ $this->setCategory(array($category));
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoNickname !== null) {
+ $element->appendChild($this->_gphotoNickname->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoThumbnail !== null) {
+ $element->appendChild($this->_gphotoThumbnail->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoUser !== null) {
+ $element->appendChild($this->_gphotoUser->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoQuotaCurrent !== null) {
+ $element->appendChild($this->_gphotoQuotaCurrent->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoQuotaLimit !== null) {
+ $element->appendChild($this->_gphotoQuotaLimit->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoMaxPhotosPerAlbum !== null) {
+ $element->appendChild($this->_gphotoMaxPhotosPerAlbum->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Photos_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_gphotoNickname = $nickname;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'thumbnail';
+ $thumbnail = new Zend_Gdata_Photos_Extension_Thumbnail();
+ $thumbnail->transferFromDOM($child);
+ $this->_gphotoThumbnail = $thumbnail;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'user';
+ $user = new Zend_Gdata_Photos_Extension_User();
+ $user->transferFromDOM($child);
+ $this->_gphotoUser = $user;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'quotacurrent';
+ $quotaCurrent = new Zend_Gdata_Photos_Extension_QuotaCurrent();
+ $quotaCurrent->transferFromDOM($child);
+ $this->_gphotoQuotaCurrent = $quotaCurrent;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'quotalimit';
+ $quotaLimit = new Zend_Gdata_Photos_Extension_QuotaLimit();
+ $quotaLimit->transferFromDOM($child);
+ $this->_gphotoQuotaLimit = $quotaLimit;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'maxPhotosPerAlbum';
+ $maxPhotosPerAlbum = new Zend_Gdata_Photos_Extension_MaxPhotosPerAlbum();
+ $maxPhotosPerAlbum->transferFromDOM($child);
+ $this->_gphotoMaxPhotosPerAlbum = $maxPhotosPerAlbum;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's gphoto:nickname attribute.
+ *
+ * @see setGphotoNickname
+ * @return string The requested attribute.
+ */
+ public function getGphotoNickname()
+ {
+ return $this->_gphotoNickname;
+ }
+
+ /**
+ * Set the value for this element's gphoto:nickname attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Nickname The element being modified.
+ */
+ public function setGphotoNickname($value)
+ {
+ $this->_gphotoNickname = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:thumbnail attribute.
+ *
+ * @see setGphotoThumbnail
+ * @return string The requested attribute.
+ */
+ public function getGphotoThumbnail()
+ {
+ return $this->_gphotoThumbnail;
+ }
+
+ /**
+ * Set the value for this element's gphoto:thumbnail attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Thumbnail The element being modified.
+ */
+ public function setGphotoThumbnail($value)
+ {
+ $this->_gphotoThumbnail = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:quotacurrent attribute.
+ *
+ * @see setGphotoQuotaCurrent
+ * @return string The requested attribute.
+ */
+ public function getGphotoQuotaCurrent()
+ {
+ return $this->_gphotoQuotaCurrent;
+ }
+
+ /**
+ * Set the value for this element's gphoto:quotacurrent attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_QuotaCurrent The element being modified.
+ */
+ public function setGphotoQuotaCurrent($value)
+ {
+ $this->_gphotoQuotaCurrent = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:quotalimit attribute.
+ *
+ * @see setGphotoQuotaLimit
+ * @return string The requested attribute.
+ */
+ public function getGphotoQuotaLimit()
+ {
+ return $this->_gphotoQuotaLimit;
+ }
+
+ /**
+ * Set the value for this element's gphoto:quotalimit attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_QuotaLimit The element being modified.
+ */
+ public function setGphotoQuotaLimit($value)
+ {
+ $this->_gphotoQuotaLimit = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:maxPhotosPerAlbum attribute.
+ *
+ * @see setGphotoMaxPhotosPerAlbum
+ * @return string The requested attribute.
+ */
+ public function getGphotoMaxPhotosPerAlbum()
+ {
+ return $this->_gphotoMaxPhotosPerAlbum;
+ }
+
+ /**
+ * Set the value for this element's gphoto:maxPhotosPerAlbum attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_MaxPhotosPerAlbum The element being modified.
+ */
+ public function setGphotoMaxPhotosPerAlbum($value)
+ {
+ $this->_gphotoMaxPhotosPerAlbum = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:user attribute.
+ *
+ * @see setGphotoUser
+ * @return string The requested attribute.
+ */
+ public function getGphotoUser()
+ {
+ return $this->_gphotoUser;
+ }
+
+ /**
+ * Set the value for this element's gphoto:user attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_User The element being modified.
+ */
+ public function setGphotoUser($value)
+ {
+ $this->_gphotoUser = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/UserFeed.php b/zend/library/Zend/Gdata/Photos/UserFeed.php
new file mode 100755
index 0000000..6f1d7d3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/UserFeed.php
@@ -0,0 +1,247 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: UserFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Photos
+ */
+require_once 'Zend/Gdata/Photos.php';
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Photos_UserEntry
+ */
+require_once 'Zend/Gdata/Photos/UserEntry.php';
+
+/**
+ * @see Zend_Gdata_Photos_AlbumEntry
+ */
+require_once 'Zend/Gdata/Photos/AlbumEntry.php';
+
+/**
+ * @see Zend_Gdata_Photos_PhotoEntry
+ */
+require_once 'Zend/Gdata/Photos/PhotoEntry.php';
+
+/**
+ * @see Zend_Gdata_Photos_TagEntry
+ */
+require_once 'Zend/Gdata/Photos/TagEntry.php';
+
+/**
+ * @see Zend_Gdata_Photos_CommentEntry
+ */
+require_once 'Zend/Gdata/Photos/CommentEntry.php';
+
+/**
+ * Data model for a collection of entries for a specific user, usually
+ * provided by the servers.
+ *
+ * For information on requesting this feed from a server, see the
+ * service class, Zend_Gdata_Photos.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_UserFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * gphoto:user element
+ *
+ * @var Zend_Gdata_Photos_Extension_User
+ */
+ protected $_gphotoUser = null;
+
+ /**
+ * gphoto:thumbnail element
+ *
+ * @var Zend_Gdata_Photos_Extension_Thumbnail
+ */
+ protected $_gphotoThumbnail = null;
+
+ /**
+ * gphoto:nickname element
+ *
+ * @var Zend_Gdata_Photos_Extension_Nickname
+ */
+ protected $_gphotoNickname = null;
+
+ protected $_entryClassName = 'Zend_Gdata_Photos_UserEntry';
+ protected $_feedClassName = 'Zend_Gdata_Photos_UserFeed';
+
+ protected $_entryKindClassMapping = array(
+ 'http://schemas.google.com/photos/2007#album' => 'Zend_Gdata_Photos_AlbumEntry',
+ 'http://schemas.google.com/photos/2007#photo' => 'Zend_Gdata_Photos_PhotoEntry',
+ 'http://schemas.google.com/photos/2007#comment' => 'Zend_Gdata_Photos_CommentEntry',
+ 'http://schemas.google.com/photos/2007#tag' => 'Zend_Gdata_Photos_TagEntry'
+ );
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Photos::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gphoto') . ':' . 'user';
+ $user = new Zend_Gdata_Photos_Extension_User();
+ $user->transferFromDOM($child);
+ $this->_gphotoUser = $user;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'nickname';
+ $nickname = new Zend_Gdata_Photos_Extension_Nickname();
+ $nickname->transferFromDOM($child);
+ $this->_gphotoNickname = $nickname;
+ break;
+ case $this->lookupNamespace('gphoto') . ':' . 'thumbnail';
+ $thumbnail = new Zend_Gdata_Photos_Extension_Thumbnail();
+ $thumbnail->transferFromDOM($child);
+ $this->_gphotoThumbnail = $thumbnail;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'entry':
+ $entryClassName = $this->_entryClassName;
+ $tmpEntry = new Zend_Gdata_App_Entry($child);
+ $categories = $tmpEntry->getCategory();
+ foreach ($categories as $category) {
+ if ($category->scheme == Zend_Gdata_Photos::KIND_PATH &&
+ $this->_entryKindClassMapping[$category->term] != "") {
+ $entryClassName = $this->_entryKindClassMapping[$category->term];
+ break;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Entry is missing kind declaration.');
+ }
+ }
+
+ $newEntry = new $entryClassName($child);
+ $newEntry->setHttpClient($this->getHttpClient());
+ $this->_entry[] = $newEntry;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_gphotoUser != null) {
+ $element->appendChild($this->_gphotoUser->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoNickname != null) {
+ $element->appendChild($this->_gphotoNickname->getDOM($element->ownerDocument));
+ }
+ if ($this->_gphotoThumbnail != null) {
+ $element->appendChild($this->_gphotoThumbnail->getDOM($element->ownerDocument));
+ }
+
+ return $element;
+ }
+
+ /**
+ * Get the value for this element's gphoto:user attribute.
+ *
+ * @see setGphotoUser
+ * @return string The requested attribute.
+ */
+ public function getGphotoUser()
+ {
+ return $this->_gphotoUser;
+ }
+
+ /**
+ * Set the value for this element's gphoto:user attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_User The element being modified.
+ */
+ public function setGphotoUser($value)
+ {
+ $this->_gphotoUser = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:nickname attribute.
+ *
+ * @see setGphotoNickname
+ * @return string The requested attribute.
+ */
+ public function getGphotoNickname()
+ {
+ return $this->_gphotoNickname;
+ }
+
+ /**
+ * Set the value for this element's gphoto:nickname attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Nickname The element being modified.
+ */
+ public function setGphotoNickname($value)
+ {
+ $this->_gphotoNickname = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's gphoto:thumbnail attribute.
+ *
+ * @see setGphotoThumbnail
+ * @return string The requested attribute.
+ */
+ public function getGphotoThumbnail()
+ {
+ return $this->_gphotoThumbnail;
+ }
+
+ /**
+ * Set the value for this element's gphoto:thumbnail attribute.
+ *
+ * @param string $value The desired value for this attribute.
+ * @return Zend_Gdata_Photos_Extension_Thumbnail The element being modified.
+ */
+ public function setGphotoThumbnail($value)
+ {
+ $this->_gphotoThumbnail = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Photos/UserQuery.php b/zend/library/Zend/Gdata/Photos/UserQuery.php
new file mode 100755
index 0000000..87d3c77
--- /dev/null
+++ b/zend/library/Zend/Gdata/Photos/UserQuery.php
@@ -0,0 +1,355 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: UserQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Gapps_Query
+ */
+require_once('Zend/Gdata/Gapps/Query.php');
+
+/**
+ * Assists in constructing queries for user entries.
+ * Instances of this class can be provided in many places where a URL is
+ * required.
+ *
+ * For information on submitting queries to a server, see the
+ * service class, Zend_Gdata_Photos.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Photos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Photos_UserQuery extends Zend_Gdata_Query
+{
+
+ /**
+ * Indicates the format of data returned in Atom feeds. Can be either
+ * 'api' or 'base'. Default value is 'api'.
+ *
+ * @var string
+ */
+ protected $_projection = 'api';
+
+ /**
+ * Indicates whether to request a feed or entry in queries. Default
+ * value is 'feed';
+ *
+ * @var string
+ */
+ protected $_type = 'feed';
+
+ /**
+ * A string which, if not null, indicates which user should
+ * be retrieved by this query. If null, the default user will be used
+ * instead.
+ *
+ * @var string
+ */
+ protected $_user = Zend_Gdata_Photos::DEFAULT_USER;
+
+ /**
+ * Create a new Query object with default values.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ /**
+ * Set's the format of data returned in Atom feeds. Can be either
+ * 'api' or 'base'. Normally, 'api' will be desired. Default is 'api'.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Photos_UserQuery Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the format of data in returned in Atom feeds.
+ *
+ * @see setProjection
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Set's the type of data returned in queries. Can be either
+ * 'feed' or 'entry'. Normally, 'feed' will be desired. Default is 'feed'.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Photos_UserQuery Provides a fluent interface
+ */
+ public function setType($value)
+ {
+ $this->_type = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the type of data in returned in queries.
+ *
+ * @see setType
+ * @return string type
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * Set the user to query for. When set, this user's feed will be
+ * returned. If not set or null, the default user's feed will be returned
+ * instead.
+ *
+ * @param string $value The user to retrieve, or null for the default
+ * user.
+ */
+ public function setUser($value)
+ {
+ if ($value !== null) {
+ $this->_user = $value;
+ } else {
+ $this->_user = Zend_Gdata_Photos::DEFAULT_USER;
+ }
+ }
+
+ /**
+ * Get the user which is to be returned.
+ *
+ * @see setUser
+ * @return string The visibility to retrieve.
+ */
+ public function getUser()
+ {
+ return $this->_user;
+ }
+
+ /**
+ * Set the visibility filter for entries returned. Only entries which
+ * match this value will be returned. If null or unset, the default
+ * value will be used instead.
+ *
+ * Valid values are 'all' (default), 'public', and 'private'.
+ *
+ * @param string $value The visibility to filter by, or null to use the
+ * default value.
+ */
+ public function setAccess($value)
+ {
+ if ($value !== null) {
+ $this->_params['access'] = $value;
+ } else {
+ unset($this->_params['access']);
+ }
+ }
+
+ /**
+ * Get the visibility filter for entries returned.
+ *
+ * @see setAccess
+ * @return string The visibility to filter by, or null for the default
+ * user.
+ */
+ public function getAccess()
+ {
+ return $this->_params['access'];
+ }
+
+ /**
+ * Set the tag for entries that are returned. Only entries which
+ * match this value will be returned. If null or unset, this filter will
+ * not be applied.
+ *
+ * See http://code.google.com/apis/picasaweb/reference.html#Parameters
+ * for a list of valid values.
+ *
+ * @param string $value The tag to filter by, or null if no
+ * filter is to be applied.
+ */
+ public function setTag($value)
+ {
+ if ($value !== null) {
+ $this->_params['tag'] = $value;
+ } else {
+ unset($this->_params['tag']);
+ }
+ }
+
+ /**
+ * Get the tag filter for entries returned.
+ *
+ * @see setTag
+ * @return string The tag to filter by, or null if no filter
+ * is to be applied.
+ */
+ public function getTag()
+ {
+ return $this->_params['tag'];
+ }
+
+ /**
+ * Set the kind of entries that are returned. Only entries which
+ * match this value will be returned. If null or unset, this filter will
+ * not be applied.
+ *
+ * See http://code.google.com/apis/picasaweb/reference.html#Parameters
+ * for a list of valid values.
+ *
+ * @param string $value The kind to filter by, or null if no
+ * filter is to be applied.
+ */
+ public function setKind($value)
+ {
+ if ($value !== null) {
+ $this->_params['kind'] = $value;
+ } else {
+ unset($this->_params['kind']);
+ }
+ }
+
+ /**
+ * Get the kind of entries to be returned.
+ *
+ * @see setKind
+ * @return string The kind to filter by, or null if no filter
+ * is to be applied.
+ */
+ public function getKind()
+ {
+ return $this->_params['kind'];
+ }
+
+ /**
+ * Set the maximum image size for entries returned. Only entries which
+ * match this value will be returned. If null or unset, this filter will
+ * not be applied.
+ *
+ * See http://code.google.com/apis/picasaweb/reference.html#Parameters
+ * for a list of valid values.
+ *
+ * @param string $value The image size to filter by, or null if no
+ * filter is to be applied.
+ */
+ public function setImgMax($value)
+ {
+ if ($value !== null) {
+ $this->_params['imgmax'] = $value;
+ } else {
+ unset($this->_params['imgmax']);
+ }
+ }
+
+ /**
+ * Get the maximum image size filter for entries returned.
+ *
+ * @see setImgMax
+ * @return string The image size size to filter by, or null if no filter
+ * is to be applied.
+ */
+ public function getImgMax()
+ {
+ return $this->_params['imgmax'];
+ }
+
+ /**
+ * Set the thumbnail size filter for entries returned. Only entries which
+ * match this value will be returned. If null or unset, this filter will
+ * not be applied.
+ *
+ * See http://code.google.com/apis/picasaweb/reference.html#Parameters
+ * for a list of valid values.
+ *
+ * @param string $value The thumbnail size to filter by, or null if no
+ * filter is to be applied.
+ */
+ public function setThumbsize($value)
+ {
+ if ($value !== null) {
+ $this->_params['thumbsize'] = $value;
+ } else {
+ unset($this->_params['thumbsize']);
+ }
+ }
+
+ /**
+ * Get the thumbnail size filter for entries returned.
+ *
+ * @see setThumbsize
+ * @return string The thumbnail size to filter by, or null if no filter
+ * is to be applied.
+ */
+ public function getThumbsize()
+ {
+ return $this->_params['thumbsize'];
+ }
+
+ /**
+ * Returns the URL generated for this query, based on it's current
+ * parameters.
+ *
+ * @return string A URL generated based on the state of this query.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function getQueryUrl($incomingUri = null)
+ {
+ $uri = Zend_Gdata_Photos::PICASA_BASE_URI;
+
+ if ($this->getType() !== null) {
+ $uri .= '/' . $this->getType();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Type must be feed or entry, not null');
+ }
+
+ if ($this->getProjection() !== null) {
+ $uri .= '/' . $this->getProjection();
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Projection must not be null');
+ }
+
+ if ($this->getUser() !== null) {
+ $uri .= '/user/' . $this->getUser();
+ } else {
+ // Should never occur due to setter behavior
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'User must not be null');
+ }
+
+ $uri .= $incomingUri;
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Query.php b/zend/library/Zend/Gdata/Query.php
new file mode 100644
index 0000000..88bcc55
--- /dev/null
+++ b/zend/library/Zend/Gdata/Query.php
@@ -0,0 +1,418 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Query.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App_Util
+ */
+require_once 'Zend/Gdata/App/Util.php';
+
+/**
+ * Provides a mechanism to build a query URL for Gdata services.
+ * Queries are not defined for APP, but are provided by Gdata services
+ * as an extension.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Gdata
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Query
+{
+
+ /**
+ * Query parameters.
+ *
+ * @var array
+ */
+ protected $_params = array();
+
+ /**
+ * Default URL
+ *
+ * @var string
+ */
+ protected $_defaultFeedUri = null;
+
+ /**
+ * Base URL
+ * TODO: Add setters and getters
+ *
+ * @var string
+ */
+ protected $_url = null;
+
+ /**
+ * Category for the query
+ *
+ * @var string
+ */
+ protected $_category = null;
+
+ /**
+ * Create Gdata_Query object
+ */
+ public function __construct($url = null)
+ {
+ $this->_url = $url;
+ }
+
+ /**
+ * @return string querystring
+ */
+ public function getQueryString()
+ {
+ $queryArray = array();
+ foreach ($this->_params as $name => $value) {
+ if (substr($name, 0, 1) == '_') {
+ continue;
+ }
+ $queryArray[] = urlencode($name) . '=' . urlencode($value);
+ }
+ if (count($queryArray) > 0) {
+ return '?' . implode('&', $queryArray);
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ *
+ */
+ public function resetParameters()
+ {
+ $this->_params = array();
+ }
+
+ /**
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ if ($this->_url == null) {
+ $url = $this->_defaultFeedUri;
+ } else {
+ $url = $this->_url;
+ }
+ if ($this->getCategory() !== null) {
+ $url .= '/-/' . $this->getCategory();
+ }
+ $url .= $this->getQueryString();
+ return $url;
+ }
+
+ /**
+ * @param string $name
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setParam($name, $value)
+ {
+ $this->_params[$name] = $value;
+ return $this;
+ }
+
+ /**
+ * @param string $name
+ */
+ public function getParam($name)
+ {
+ return $this->_params[$name];
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setAlt($value)
+ {
+ if ($value != null) {
+ $this->_params['alt'] = $value;
+ } else {
+ unset($this->_params['alt']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setMaxResults($value)
+ {
+ if ($value != null) {
+ $this->_params['max-results'] = $value;
+ } else {
+ unset($this->_params['max-results']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setQuery($value)
+ {
+ if ($value != null) {
+ $this->_params['q'] = $value;
+ } else {
+ unset($this->_params['q']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param int $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setStartIndex($value)
+ {
+ if ($value != null) {
+ $this->_params['start-index'] = $value;
+ } else {
+ unset($this->_params['start-index']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setUpdatedMax($value)
+ {
+ if ($value != null) {
+ $this->_params['updated-max'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['updated-max']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setUpdatedMin($value)
+ {
+ if ($value != null) {
+ $this->_params['updated-min'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['updated-min']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setPublishedMax($value)
+ {
+ if ($value !== null) {
+ $this->_params['published-max'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['published-max']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setPublishedMin($value)
+ {
+ if ($value != null) {
+ $this->_params['published-min'] = Zend_Gdata_App_Util::formatTimestamp($value);
+ } else {
+ unset($this->_params['published-min']);
+ }
+ return $this;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setAuthor($value)
+ {
+ if ($value != null) {
+ $this->_params['author'] = $value;
+ } else {
+ unset($this->_params['author']);
+ }
+ return $this;
+ }
+
+ /**
+ * @return string rss or atom
+ */
+ public function getAlt()
+ {
+ if (array_key_exists('alt', $this->_params)) {
+ return $this->_params['alt'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return int maxResults
+ */
+ public function getMaxResults()
+ {
+ if (array_key_exists('max-results', $this->_params)) {
+ return intval($this->_params['max-results']);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string query
+ */
+ public function getQuery()
+ {
+ if (array_key_exists('q', $this->_params)) {
+ return $this->_params['q'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return int startIndex
+ */
+ public function getStartIndex()
+ {
+ if (array_key_exists('start-index', $this->_params)) {
+ return intval($this->_params['start-index']);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string updatedMax
+ */
+ public function getUpdatedMax()
+ {
+ if (array_key_exists('updated-max', $this->_params)) {
+ return $this->_params['updated-max'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string updatedMin
+ */
+ public function getUpdatedMin()
+ {
+ if (array_key_exists('updated-min', $this->_params)) {
+ return $this->_params['updated-min'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string publishedMax
+ */
+ public function getPublishedMax()
+ {
+ if (array_key_exists('published-max', $this->_params)) {
+ return $this->_params['published-max'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string publishedMin
+ */
+ public function getPublishedMin()
+ {
+ if (array_key_exists('published-min', $this->_params)) {
+ return $this->_params['published-min'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return string author
+ */
+ public function getAuthor()
+ {
+ if (array_key_exists('author', $this->_params)) {
+ return $this->_params['author'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Query Provides a fluent interface
+ */
+ public function setCategory($value)
+ {
+ $this->_category = $value;
+ return $this;
+ }
+
+ /*
+ * @return string id
+ */
+ public function getCategory()
+ {
+ return $this->_category;
+ }
+
+
+ public function __get($name)
+ {
+ $method = 'get'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method));
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Property ' . $name . ' does not exist');
+ }
+ }
+
+ public function __set($name, $val)
+ {
+ $method = 'set'.ucfirst($name);
+ if (method_exists($this, $method)) {
+ return call_user_func(array(&$this, $method), $val);
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Property ' . $name . ' does not exist');
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets.php b/zend/library/Zend/Gdata/Spreadsheets.php
new file mode 100644
index 0000000..d49906a
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets.php
@@ -0,0 +1,445 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Spreadsheets.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata
+ */
+require_once('Zend/Gdata.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_SpreadsheetFeed
+ */
+require_once('Zend/Gdata/Spreadsheets/SpreadsheetFeed.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_WorksheetFeed
+ */
+require_once('Zend/Gdata/Spreadsheets/WorksheetFeed.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_CellFeed
+ */
+require_once('Zend/Gdata/Spreadsheets/CellFeed.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_ListFeed
+ */
+require_once('Zend/Gdata/Spreadsheets/ListFeed.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_SpreadsheetEntry
+ */
+require_once('Zend/Gdata/Spreadsheets/SpreadsheetEntry.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_WorksheetEntry
+ */
+require_once('Zend/Gdata/Spreadsheets/WorksheetEntry.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_CellEntry
+ */
+require_once('Zend/Gdata/Spreadsheets/CellEntry.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_ListEntry
+ */
+require_once('Zend/Gdata/Spreadsheets/ListEntry.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_DocumentQuery
+ */
+require_once('Zend/Gdata/Spreadsheets/DocumentQuery.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_ListQuery
+ */
+require_once('Zend/Gdata/Spreadsheets/ListQuery.php');
+
+/**
+ * Zend_Gdata_Spreadsheets_CellQuery
+ */
+require_once('Zend/Gdata/Spreadsheets/CellQuery.php');
+
+/**
+ * Gdata Spreadsheets
+ *
+ * @link http://code.google.com/apis/gdata/spreadsheets.html
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets extends Zend_Gdata
+{
+ const SPREADSHEETS_FEED_URI = 'https://spreadsheets.google.com/feeds/spreadsheets';
+ const SPREADSHEETS_POST_URI = 'https://spreadsheets.google.com/feeds/spreadsheets/private/full';
+ const WORKSHEETS_FEED_LINK_URI = 'http://schemas.google.com/spreadsheets/2006#worksheetsfeed';
+ const LIST_FEED_LINK_URI = 'http://schemas.google.com/spreadsheets/2006#listfeed';
+ const CELL_FEED_LINK_URI = 'http://schemas.google.com/spreadsheets/2006#cellsfeed';
+ const AUTH_SERVICE_NAME = 'wise';
+
+ /**
+ * Namespaces used for Zend_Gdata_Photos
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('gs', 'http://schemas.google.com/spreadsheets/2006', 1, 0),
+ array(
+ 'gsx', 'http://schemas.google.com/spreadsheets/2006/extended', 1, 0)
+ );
+
+ /**
+ * Create Gdata_Spreadsheets object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Spreadsheets');
+ $this->registerPackage('Zend_Gdata_Spreadsheets_Extension');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ $this->_server = 'spreadsheets.google.com';
+ }
+
+ /**
+ * Gets a spreadsheet feed.
+ *
+ * @param mixed $location A DocumentQuery or a string URI specifying the feed location.
+ * @return Zend_Gdata_Spreadsheets_SpreadsheetFeed
+ */
+ public function getSpreadsheetFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::SPREADSHEETS_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_DocumentQuery) {
+ if ($location->getDocumentType() == null) {
+ $location->setDocumentType('spreadsheets');
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Spreadsheets_SpreadsheetFeed');
+ }
+
+ /**
+ * Gets a spreadsheet entry.
+ *
+ * @param string $location A DocumentQuery or a URI specifying the entry location.
+ * @return SpreadsheetEntry
+ */
+ public function getSpreadsheetEntry($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_DocumentQuery) {
+ if ($location->getDocumentType() == null) {
+ $location->setDocumentType('spreadsheets');
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getEntry($uri, 'Zend_Gdata_Spreadsheets_SpreadsheetEntry');
+ }
+
+ /**
+ * Gets a worksheet feed.
+ *
+ * @param mixed $location A DocumentQuery, SpreadsheetEntry, or a string URI
+ * @return Zend_Gdata_Spreadsheets_WorksheetFeed The feed of worksheets
+ */
+ public function getWorksheetFeed($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_DocumentQuery) {
+ if ($location->getDocumentType() == null) {
+ $location->setDocumentType('worksheets');
+ }
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_SpreadsheetEntry) {
+ $uri = $location->getLink(self::WORKSHEETS_FEED_LINK_URI)->href;
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Spreadsheets_WorksheetFeed');
+ }
+
+ /**
+ * Gets a worksheet entry.
+ *
+ * @param string $location A DocumentQuery or a URI specifying the entry location.
+ * @return WorksheetEntry
+ */
+ public function GetWorksheetEntry($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_DocumentQuery) {
+ if ($location->getDocumentType() == null) {
+ $location->setDocumentType('worksheets');
+ }
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getEntry($uri, 'Zend_Gdata_Spreadsheets_WorksheetEntry');
+ }
+
+ /**
+ * Gets a cell feed.
+ *
+ * @param string $location A CellQuery, WorksheetEntry or a URI specifying the feed location.
+ * @return CellFeed
+ */
+ public function getCellFeed($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_CellQuery) {
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_WorksheetEntry) {
+ $uri = $location->getLink(self::CELL_FEED_LINK_URI)->href;
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Spreadsheets_CellFeed');
+ }
+
+ /**
+ * Gets a cell entry.
+ *
+ * @param string $location A CellQuery or a URI specifying the entry location.
+ * @return CellEntry
+ */
+ public function getCellEntry($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_CellQuery) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getEntry($uri, 'Zend_Gdata_Spreadsheets_CellEntry');
+ }
+
+ /**
+ * Gets a list feed.
+ *
+ * @param mixed $location A ListQuery, WorksheetEntry or string URI specifying the feed location.
+ * @return ListFeed
+ */
+ public function getListFeed($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_ListQuery) {
+ $uri = $location->getQueryUrl();
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_WorksheetEntry) {
+ $uri = $location->getLink(self::LIST_FEED_LINK_URI)->href;
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_Spreadsheets_ListFeed');
+ }
+
+ /**
+ * Gets a list entry.
+ *
+ * @param string $location A ListQuery or a URI specifying the entry location.
+ * @return ListEntry
+ */
+ public function getListEntry($location)
+ {
+ if ($location instanceof Zend_Gdata_Spreadsheets_ListQuery) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+
+ return parent::getEntry($uri, 'Zend_Gdata_Spreadsheets_ListEntry');
+ }
+
+ /**
+ * Updates an existing cell.
+ *
+ * @param int $row The row containing the cell to update
+ * @param int $col The column containing the cell to update
+ * @param int $inputValue The new value for the cell
+ * @param string $key The key for the spreadsheet to be updated
+ * @param string $wkshtId (optional) The worksheet to be updated
+ * @return CellEntry The updated cell entry.
+ */
+ public function updateCell($row, $col, $inputValue, $key, $wkshtId = 'default')
+ {
+ $cell = 'R'.$row.'C'.$col;
+
+ $query = new Zend_Gdata_Spreadsheets_CellQuery();
+ $query->setSpreadsheetKey($key);
+ $query->setWorksheetId($wkshtId);
+ $query->setCellId($cell);
+
+ $entry = $this->getCellEntry($query);
+ $entry->setCell(new Zend_Gdata_Spreadsheets_Extension_Cell(null, $row, $col, $inputValue));
+ $response = $entry->save();
+ return $response;
+ }
+
+ /**
+ * Inserts a new row with provided data.
+ *
+ * @param array $rowData An array of column header to row data
+ * @param string $key The key of the spreadsheet to modify
+ * @param string $wkshtId (optional) The worksheet to modify
+ * @return ListEntry The inserted row
+ */
+ public function insertRow($rowData, $key, $wkshtId = 'default')
+ {
+ $newEntry = new Zend_Gdata_Spreadsheets_ListEntry();
+ $newCustomArr = array();
+ foreach ($rowData as $k => $v) {
+ $newCustom = new Zend_Gdata_Spreadsheets_Extension_Custom();
+ $newCustom->setText($v)->setColumnName($k);
+ $newEntry->addCustom($newCustom);
+ }
+
+ $query = new Zend_Gdata_Spreadsheets_ListQuery();
+ $query->setSpreadsheetKey($key);
+ $query->setWorksheetId($wkshtId);
+
+ $feed = $this->getListFeed($query);
+ $editLink = $feed->getLink('http://schemas.google.com/g/2005#post');
+
+ return $this->insertEntry($newEntry->saveXML(), $editLink->href, 'Zend_Gdata_Spreadsheets_ListEntry');
+ }
+
+ /**
+ * Updates an existing row with provided data.
+ *
+ * @param ListEntry $entry The row entry to update
+ * @param array $newRowData An array of column header to row data
+ */
+ public function updateRow($entry, $newRowData)
+ {
+ $newCustomArr = array();
+ foreach ($newRowData as $k => $v) {
+ $newCustom = new Zend_Gdata_Spreadsheets_Extension_Custom();
+ $newCustom->setText($v)->setColumnName($k);
+ $newCustomArr[] = $newCustom;
+ }
+ $entry->setCustom($newCustomArr);
+
+ return $entry->save();
+ }
+
+ /**
+ * Deletes an existing row .
+ *
+ * @param ListEntry $entry The row to delete
+ */
+ public function deleteRow($entry)
+ {
+ $entry->delete();
+ }
+
+ /**
+ * Returns the content of all rows as an associative array
+ *
+ * @param mixed $location A ListQuery or string URI specifying the feed location.
+ * @return array An array of rows. Each element of the array is an associative array of data
+ */
+ public function getSpreadsheetListFeedContents($location)
+ {
+ $listFeed = $this->getListFeed($location);
+ $listFeed = $this->retrieveAllEntriesForFeed($listFeed);
+ $spreadsheetContents = array();
+ foreach ($listFeed as $listEntry) {
+ $rowContents = array();
+ $customArray = $listEntry->getCustom();
+ foreach ($customArray as $custom) {
+ $rowContents[$custom->getColumnName()] = $custom->getText();
+ }
+ $spreadsheetContents[] = $rowContents;
+ }
+ return $spreadsheetContents;
+ }
+
+ /**
+ * Returns the content of all cells as an associative array, indexed
+ * off the cell location (ie 'A1', 'D4', etc). Each element of
+ * the array is an associative array with a 'value' and a 'function'.
+ * Only non-empty cells are returned by default. 'range' is the
+ * value of the 'range' query parameter specified at:
+ * http://code.google.com/apis/spreadsheets/reference.html#cells_Parameters
+ *
+ * @param mixed $location A CellQuery, WorksheetEntry or a URL (w/o query string) specifying the feed location.
+ * @param string $range The range of cells to retrieve
+ * @param boolean $empty Whether to retrieve empty cells
+ * @return array An associative array of cells
+ */
+ public function getSpreadsheetCellFeedContents($location, $range = null, $empty = false)
+ {
+ $cellQuery = null;
+ if ($location instanceof Zend_Gdata_Spreadsheets_CellQuery) {
+ $cellQuery = $location;
+ } else if ($location instanceof Zend_Gdata_Spreadsheets_WorksheetEntry) {
+ $url = $location->getLink(self::CELL_FEED_LINK_URI)->href;
+ $cellQuery = new Zend_Gdata_Spreadsheets_CellQuery($url);
+ } else {
+ $url = $location;
+ $cellQuery = new Zend_Gdata_Spreadsheets_CellQuery($url);
+ }
+
+ if ($range != null) {
+ $cellQuery->setRange($range);
+ }
+ $cellQuery->setReturnEmpty($empty);
+
+ $cellFeed = $this->getCellFeed($cellQuery);
+ $cellFeed = $this->retrieveAllEntriesForFeed($cellFeed);
+ $spreadsheetContents = array();
+ foreach ($cellFeed as $cellEntry) {
+ $cellContents = array();
+ $cell = $cellEntry->getCell();
+ $cellContents['formula'] = $cell->getInputValue();
+ $cellContents['value'] = $cell->getText();
+ $spreadsheetContents[$cellEntry->getTitle()->getText()] = $cellContents;
+ }
+ return $spreadsheetContents;
+ }
+
+ /**
+ * Alias for getSpreadsheetFeed
+ *
+ * @param mixed $location A DocumentQuery or a string URI specifying the feed location.
+ * @return Zend_Gdata_Spreadsheets_SpreadsheetFeed
+ */
+ public function getSpreadsheets($location = null)
+ {
+ return $this->getSpreadsheetFeed($location = null);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/CellEntry.php b/zend/library/Zend/Gdata/Spreadsheets/CellEntry.php
new file mode 100644
index 0000000..906ad71
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/CellEntry.php
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CellEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Spreadsheets_Extension_Cell
+ */
+require_once 'Zend/Gdata/Spreadsheets/Extension/Cell.php';
+
+/**
+ * Concrete class for working with Cell entries.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_CellEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Spreadsheets_CellEntry';
+ protected $_cell;
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_CellEntry object.
+ * @param string $uri (optional)
+ * @param DOMElement $element (optional) The DOMElement on which to base this object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_cell != null) {
+ $element->appendChild($this->_cell->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gs') . ':' . 'cell';
+ $cell = new Zend_Gdata_Spreadsheets_Extension_Cell();
+ $cell->transferFromDOM($child);
+ $this->_cell = $cell;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Gets the Cell element of this Cell Entry.
+ * @return Zend_Gdata_Spreadsheets_Extension_Cell
+ */
+ public function getCell()
+ {
+ return $this->_cell;
+ }
+
+ /**
+ * Sets the Cell element of this Cell Entry.
+ * @param Zend_Gdata_Spreadsheets_Extension_Cell $cell
+ * @return Zend_Gdata_Spreadsheets_CellEntry
+ */
+ public function setCell($cell)
+ {
+ $this->_cell = $cell;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/CellFeed.php b/zend/library/Zend/Gdata/Spreadsheets/CellFeed.php
new file mode 100644
index 0000000..8cc9a56
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/CellFeed.php
@@ -0,0 +1,158 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CellFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_Spreadsheets_Extension_RowCount
+ */
+require_once 'Zend/Gdata/Spreadsheets/Extension/RowCount.php';
+
+/**
+ * @see Zend_Gdata_Spreadsheets_Extension_ColCount
+ */
+require_once 'Zend/Gdata/Spreadsheets/Extension/ColCount.php';
+
+/**
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_CellFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Spreadsheets_CellEntry';
+
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Spreadsheets_CellFeed';
+
+ /**
+ * The row count for the feed.
+ *
+ * @var Zend_Gdata_Spreadsheets_Extension_RowCount
+ */
+ protected $_rowCount = null;
+
+ /**
+ * The column count for the feed.
+ *
+ * @var Zend_Gdata_Spreadsheets_Extension_ColCount
+ */
+ protected $_colCount = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_CellFeed object.
+ * @param DOMElement $element (optional) The XML Element on which to base this object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->rowCount != null) {
+ $element->appendChild($this->_rowCount->getDOM($element->ownerDocument));
+ }
+ if ($this->colCount != null) {
+ $element->appendChild($this->_colCount->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gs') . ':' . 'rowCount';
+ $rowCount = new Zend_Gdata_Spreadsheets_Extension_RowCount();
+ $rowCount->transferFromDOM($child);
+ $this->_rowCount = $rowCount;
+ break;
+ case $this->lookupNamespace('gs') . ':' . 'colCount';
+ $colCount = new Zend_Gdata_Spreadsheets_Extension_ColCount();
+ $colCount->transferFromDOM($child);
+ $this->_colCount = $colCount;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Gets the row count for this feed.
+ * @return string The row count for the feed.
+ */
+ public function getRowCount()
+ {
+ return $this->_rowCount;
+ }
+
+ /**
+ * Gets the column count for this feed.
+ * @return string The column count for the feed.
+ */
+ public function getColumnCount()
+ {
+ return $this->_colCount;
+ }
+
+ /**
+ * Sets the row count for this feed.
+ * @param string $rowCount The new row count for the feed.
+ */
+ public function setRowCount($rowCount)
+ {
+ $this->_rowCount = $rowCount;
+ return $this;
+ }
+
+ /**
+ * Sets the column count for this feed.
+ * @param string $colCount The new column count for the feed.
+ */
+ public function setColumnCount($colCount)
+ {
+ $this->_colCount = $colCount;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/CellQuery.php b/zend/library/Zend/Gdata/Spreadsheets/CellQuery.php
new file mode 100644
index 0000000..1dafd7c
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/CellQuery.php
@@ -0,0 +1,417 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CellQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App_util
+ */
+require_once('Zend/Gdata/App/Util.php');
+
+/**
+ * Zend_Gdata_Query
+ */
+require_once('Zend/Gdata/Query.php');
+
+/**
+ * Assists in constructing queries for Google Spreadsheets cells
+ *
+ * @link http://code.google.com/apis/gdata/spreadsheets/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_CellQuery extends Zend_Gdata_Query
+{
+
+ const SPREADSHEETS_CELL_FEED_URI = 'https://spreadsheets.google.com/feeds/cells';
+
+ protected $_defaultFeedUri = self::SPREADSHEETS_CELL_FEED_URI;
+ protected $_visibility = 'private';
+ protected $_projection = 'full';
+ protected $_spreadsheetKey = null;
+ protected $_worksheetId = 'default';
+ protected $_cellId = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_CellQuery object.
+ *
+ * @param string $url Base URL to use for queries
+ */
+ public function __construct($url = null)
+ {
+ parent::__construct($url);
+ }
+
+ /**
+ * Sets the spreadsheet key for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setSpreadsheetKey($value)
+ {
+ $this->_spreadsheetKey = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the spreadsheet key for this query.
+ *
+ * @return string spreadsheet key
+ */
+ public function getSpreadsheetKey()
+ {
+ return $this->_spreadsheetKey;
+ }
+
+ /**
+ * Sets the worksheet id for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setWorksheetId($value)
+ {
+ $this->_worksheetId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the worksheet id for this query.
+ *
+ * @return string worksheet id
+ */
+ public function getWorksheetId()
+ {
+ return $this->_worksheetId;
+ }
+
+ /**
+ * Sets the cell id for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setCellId($value)
+ {
+ $this->_cellId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the cell id for this query.
+ *
+ * @return string cell id
+ */
+ public function getCellId()
+ {
+ return $this->_cellId;
+ }
+
+ /**
+ * Sets the projection for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the visibility for this query.
+ *
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the projection for this query.
+ *
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Gets the visibility for this query.
+ *
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * Sets the min-row attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setMinRow($value)
+ {
+ if ($value != null) {
+ $this->_params['min-row'] = $value;
+ } else {
+ unset($this->_params['min-row']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the min-row attribute for this query.
+ *
+ * @return string min-row
+ */
+ public function getMinRow()
+ {
+ if (array_key_exists('min-row', $this->_params)) {
+ return $this->_params['min-row'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the max-row attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setMaxRow($value)
+ {
+ if ($value != null) {
+ $this->_params['max-row'] = $value;
+ } else {
+ unset($this->_params['max-row']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the max-row attribute for this query.
+ *
+ * @return string max-row
+ */
+ public function getMaxRow()
+ {
+ if (array_key_exists('max-row', $this->_params)) {
+ return $this->_params['max-row'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the min-col attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setMinCol($value)
+ {
+ if ($value != null) {
+ $this->_params['min-col'] = $value;
+ } else {
+ unset($this->_params['min-col']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the min-col attribute for this query.
+ *
+ * @return string min-col
+ */
+ public function getMinCol()
+ {
+ if (array_key_exists('min-col', $this->_params)) {
+ return $this->_params['min-col'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the max-col attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setMaxCol($value)
+ {
+ if ($value != null) {
+ $this->_params['max-col'] = $value;
+ } else {
+ unset($this->_params['max-col']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the max-col attribute for this query.
+ *
+ * @return string max-col
+ */
+ public function getMaxCol()
+ {
+ if (array_key_exists('max-col', $this->_params)) {
+ return $this->_params['max-col'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the range attribute for this query.
+ *
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setRange($value)
+ {
+ if ($value != null) {
+ $this->_params['range'] = $value;
+ } else {
+ unset($this->_params['range']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the range attribute for this query.
+ *
+ * @return string range
+ */
+ public function getRange()
+ {
+ if (array_key_exists('range', $this->_params)) {
+ return $this->_params['range'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the return-empty attribute for this query.
+ *
+ * @param mixed $value String or bool value for whether to return empty cells
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setReturnEmpty($value)
+ {
+ if (is_bool($value)) {
+ $this->_params['return-empty'] = ($value?'true':'false');
+ } else if ($value != null) {
+ $this->_params['return-empty'] = $value;
+ } else {
+ unset($this->_params['return-empty']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the return-empty attribute for this query.
+ *
+ * @return string return-empty
+ */
+ public function getReturnEmpty()
+ {
+ if (array_key_exists('return-empty', $this->_params)) {
+ return $this->_params['return-empty'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the full query URL for this query.
+ *
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ if ($this->_url == null) {
+ $uri = $this->_defaultFeedUri;
+
+ if ($this->_spreadsheetKey != null) {
+ $uri .= '/'.$this->_spreadsheetKey;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A spreadsheet key must be provided for cell queries.');
+ }
+
+ if ($this->_worksheetId != null) {
+ $uri .= '/'.$this->_worksheetId;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A worksheet id must be provided for cell queries.');
+ }
+
+ if ($this->_visibility != null) {
+ $uri .= '/'.$this->_visibility;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A visibility must be provided for cell queries.');
+ }
+
+ if ($this->_projection != null) {
+ $uri .= '/'.$this->_projection;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A projection must be provided for cell queries.');
+ }
+
+ if ($this->_cellId != null) {
+ $uri .= '/'.$this->_cellId;
+ }
+ } else {
+ $uri = $this->_url;
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+ /**
+ * Gets the attribute query string for this query.
+ *
+ * @return string query string
+ */
+ public function getQueryString()
+ {
+ return parent::getQueryString();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/DocumentQuery.php b/zend/library/Zend/Gdata/Spreadsheets/DocumentQuery.php
new file mode 100644
index 0000000..f6abec3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/DocumentQuery.php
@@ -0,0 +1,288 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: DocumentQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App_util
+ */
+require_once('Zend/Gdata/App/Util.php');
+
+/**
+ * Zend_Gdata_Query
+ */
+require_once('Zend/Gdata/Query.php');
+
+/**
+ * Assists in constructing queries for Google Spreadsheets documents
+ *
+ * @link http://code.google.com/apis/gdata/spreadsheets/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_DocumentQuery extends Zend_Gdata_Query
+{
+
+ const SPREADSHEETS_FEED_URI = 'https://spreadsheets.google.com/feeds';
+
+ protected $_defaultFeedUri = self::SPREADSHEETS_FEED_URI;
+ protected $_documentType;
+ protected $_visibility = 'private';
+ protected $_projection = 'full';
+ protected $_spreadsheetKey = null;
+ protected $_worksheetId = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_DocumentQuery object.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ /**
+ * Sets the spreadsheet key for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setSpreadsheetKey($value)
+ {
+ $this->_spreadsheetKey = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the spreadsheet key for this query.
+ * @return string spreadsheet key
+ */
+ public function getSpreadsheetKey()
+ {
+ return $this->_spreadsheetKey;
+ }
+
+ /**
+ * Sets the worksheet id for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setWorksheetId($value)
+ {
+ $this->_worksheetId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the worksheet id for this query.
+ * @return string worksheet id
+ */
+ public function getWorksheetId()
+ {
+ return $this->_worksheetId;
+ }
+
+ /**
+ * Sets the document type for this query.
+ * @param string $value spreadsheets or worksheets
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setDocumentType($value)
+ {
+ $this->_documentType = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the document type for this query.
+ * @return string document type
+ */
+ public function getDocumentType()
+ {
+ return $this->_documentType;
+ }
+
+ /**
+ * Sets the projection for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the visibility for this query.
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the projection for this query.
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Gets the visibility for this query.
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * Sets the title attribute for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setTitle($value)
+ {
+ if ($value != null) {
+ $this->_params['title'] = $value;
+ } else {
+ unset($this->_params['title']);
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the title-exact attribute for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setTitleExact($value)
+ {
+ if ($value != null) {
+ $this->_params['title-exact'] = $value;
+ } else {
+ unset($this->_params['title-exact']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the title attribute for this query.
+ * @return string title
+ */
+ public function getTitle()
+ {
+ if (array_key_exists('title', $this->_params)) {
+ return $this->_params['title'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the title-exact attribute for this query.
+ * @return string title-exact
+ */
+ public function getTitleExact()
+ {
+ if (array_key_exists('title-exact', $this->_params)) {
+ return $this->_params['title-exact'];
+ } else {
+ return null;
+ }
+ }
+
+ private function appendVisibilityProjection()
+ {
+ $uri = '';
+
+ if ($this->_visibility != null) {
+ $uri .= '/'.$this->_visibility;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A visibility must be provided for document queries.');
+ }
+
+ if ($this->_projection != null) {
+ $uri .= '/'.$this->_projection;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A projection must be provided for document queries.');
+ }
+
+ return $uri;
+ }
+
+
+ /**
+ * Gets the full query URL for this query.
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+ $uri = $this->_defaultFeedUri;
+
+ if ($this->_documentType != null) {
+ $uri .= '/'.$this->_documentType;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A document type must be provided for document queries.');
+ }
+
+ if ($this->_documentType == 'spreadsheets') {
+ $uri .= $this->appendVisibilityProjection();
+ if ($this->_spreadsheetKey != null) {
+ $uri .= '/'.$this->_spreadsheetKey;
+ }
+ } else if ($this->_documentType == 'worksheets') {
+ if ($this->_spreadsheetKey != null) {
+ $uri .= '/'.$this->_spreadsheetKey;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A spreadsheet key must be provided for worksheet document queries.');
+ }
+ $uri .= $this->appendVisibilityProjection();
+ if ($this->_worksheetId != null) {
+ $uri .= '/'.$this->_worksheetId;
+ }
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+ /**
+ * Gets the attribute query string for this query.
+ * @return string query string
+ */
+ public function getQueryString()
+ {
+ return parent::getQueryString();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/Extension/Cell.php b/zend/library/Zend/Gdata/Spreadsheets/Extension/Cell.php
new file mode 100644
index 0000000..8ebad7d
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/Extension/Cell.php
@@ -0,0 +1,201 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Cell.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+
+/**
+ * Concrete class for working with cell elements.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_Extension_Cell extends Zend_Gdata_Extension
+{
+ protected $_rootElement = 'cell';
+ protected $_rootNamespace = 'gs';
+
+ /**
+ * The row attribute of this cell
+ *
+ * @var string
+ */
+ protected $_row = null;
+
+ /**
+ * The column attribute of this cell
+ *
+ * @var string
+ */
+ protected $_col = null;
+
+ /**
+ * The inputValue attribute of this cell
+ *
+ * @var string
+ */
+ protected $_inputValue = null;
+
+ /**
+ * The numericValue attribute of this cell
+ *
+ * @var string
+ */
+ protected $_numericValue = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_Extension_Cell element.
+ *
+ * @param string $text (optional) Text contents of the element.
+ * @param string $row (optional) Row attribute of the element.
+ * @param string $col (optional) Column attribute of the element.
+ * @param string $inputValue (optional) Input value attribute of the element.
+ * @param string $numericValue (optional) Numeric value attribute of the element.
+ */
+ public function __construct($text = null, $row = null, $col = null, $inputValue = null, $numericValue = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_row = $row;
+ $this->_col = $col;
+ $this->_inputValue = $inputValue;
+ $this->_numericValue = $numericValue;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ $element->setAttribute('row', $this->_row);
+ $element->setAttribute('col', $this->_col);
+ if ($this->_inputValue) $element->setAttribute('inputValue', $this->_inputValue);
+ if ($this->_numericValue) $element->setAttribute('numericValue', $this->_numericValue);
+ return $element;
+ }
+
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'row':
+ $this->_row = $attribute->nodeValue;
+ break;
+ case 'col':
+ $this->_col = $attribute->nodeValue;
+ break;
+ case 'inputValue':
+ $this->_inputValue = $attribute->nodeValue;
+ break;
+ case 'numericValue':
+ $this->_numericValue = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Gets the row attribute of the Cell element.
+ * @return string Row of the Cell.
+ */
+ public function getRow()
+ {
+ return $this->_row;
+ }
+
+ /**
+ * Gets the column attribute of the Cell element.
+ * @return string Column of the Cell.
+ */
+ public function getColumn()
+ {
+ return $this->_col;
+ }
+
+ /**
+ * Gets the input value attribute of the Cell element.
+ * @return string Input value of the Cell.
+ */
+ public function getInputValue()
+ {
+ return $this->_inputValue;
+ }
+
+ /**
+ * Gets the numeric value attribute of the Cell element.
+ * @return string Numeric value of the Cell.
+ */
+ public function getNumericValue()
+ {
+ return $this->_numericValue;
+ }
+
+ /**
+ * Sets the row attribute of the Cell element.
+ * @param string $row New row of the Cell.
+ */
+ public function setRow($row)
+ {
+ $this->_row = $row;
+ return $this;
+ }
+
+ /**
+ * Sets the column attribute of the Cell element.
+ * @param string $col New column of the Cell.
+ */
+ public function setColumn($col)
+ {
+ $this->_col = $col;
+ return $this;
+ }
+
+ /**
+ * Sets the input value attribute of the Cell element.
+ * @param string $inputValue New input value of the Cell.
+ */
+ public function setInputValue($inputValue)
+ {
+ $this->_inputValue = $inputValue;
+ return $this;
+ }
+
+ /**
+ * Sets the numeric value attribute of the Cell element.
+ * @param string $numericValue New numeric value of the Cell.
+ */
+ public function setNumericValue($numericValue)
+ {
+ $this->_numericValue = $numericValue;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/Extension/ColCount.php b/zend/library/Zend/Gdata/Spreadsheets/Extension/ColCount.php
new file mode 100644
index 0000000..80eb7dc
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/Extension/ColCount.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ColCount.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+
+/**
+ * Concrete class for working with colCount elements.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_Extension_ColCount extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'colCount';
+ protected $_rootNamespace = 'gs';
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_Extension_ColCount element.
+ * @param string $text (optional) Text contents of the element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/Extension/Custom.php b/zend/library/Zend/Gdata/Spreadsheets/Extension/Custom.php
new file mode 100644
index 0000000..1a39066
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/Extension/Custom.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Custom.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+
+/**
+ * Concrete class for working with custom gsx elements.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_Extension_Custom extends Zend_Gdata_Extension
+{
+ // custom elements have custom names.
+ protected $_rootElement = null; // The name of the column
+ protected $_rootNamespace = 'gsx';
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_Extension_Custom object.
+ * @param string $column (optional) The column/tag name of the element.
+ * @param string $value (optional) The text content of the element.
+ */
+ public function __construct($column = null, $value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ $this->_rootElement = $column;
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ return $element;
+ }
+
+ /**
+ * Transfers each child and attribute into member variables.
+ * This is called when XML is received over the wire and the data
+ * model needs to be built to represent this XML.
+ *
+ * @param DOMNode $node The DOMNode that represents this object's data
+ */
+ public function transferFromDOM($node)
+ {
+ parent::transferFromDOM($node);
+ $this->_rootElement = $node->localName;
+ }
+
+ /**
+ * Sets the column/tag name of the element.
+ * @param string $column The new column name.
+ */
+ public function setColumnName($column)
+ {
+ $this->_rootElement = $column;
+ return $this;
+ }
+
+ /**
+ * Gets the column name of the element
+ * @return string The column name.
+ */
+ public function getColumnName()
+ {
+ return $this->_rootElement;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/Extension/RowCount.php b/zend/library/Zend/Gdata/Spreadsheets/Extension/RowCount.php
new file mode 100644
index 0000000..fa0a51d
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/Extension/RowCount.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: RowCount.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+
+/**
+ * Concrete class for working with RowCount elements.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_Extension_RowCount extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'rowCount';
+ protected $_rootNamespace = 'gs';
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_Extension_RowCount object.
+ * @param string $text (optional) The text content of the element.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/ListEntry.php b/zend/library/Zend/Gdata/Spreadsheets/ListEntry.php
new file mode 100644
index 0000000..08cd367
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/ListEntry.php
@@ -0,0 +1,208 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ListEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Spreadsheets_Extension_Custom
+ */
+require_once 'Zend/Gdata/Spreadsheets/Extension/Custom.php';
+
+/**
+ * Concrete class for working with List entries.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_ListEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Spreadsheets_ListEntry';
+
+ /**
+ * List of custom row elements (Zend_Gdata_Spreadsheets_Extension_Custom),
+ * indexed by order added to this entry.
+ * @var array
+ */
+ protected $_custom = array();
+
+ /**
+ * List of custom row elements (Zend_Gdata_Spreadsheets_Extension_Custom),
+ * indexed by element name.
+ * @var array
+ */
+ protected $_customByName = array();
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_ListEntry object.
+ * @param DOMElement $element An existing XML element on which to base this new object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if (!empty($this->_custom)) {
+ foreach ($this->_custom as $custom) {
+ $element->appendChild($custom->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ protected function takeChildFromDOM($child)
+ {
+ switch ($child->namespaceURI) {
+ case $this->lookupNamespace('gsx');
+ $custom = new Zend_Gdata_Spreadsheets_Extension_Custom($child->localName);
+ $custom->transferFromDOM($child);
+ $this->addCustom($custom);
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Gets the row elements contained by this list entry.
+ * @return array The custom row elements in this list entry
+ */
+ public function getCustom()
+ {
+ return $this->_custom;
+ }
+
+ /**
+ * Gets a single row element contained by this list entry using its name.
+ * @param string $name The name of a custom element to return. If null
+ * or not defined, an array containing all custom elements
+ * indexed by name will be returned.
+ * @return mixed If a name is specified, the
+ * Zend_Gdata_Spreadsheets_Extension_Custom element requested,
+ * is returned or null if not found. Otherwise, an array of all
+ * Zend_Gdata_Spreadsheets_Extension_Custom elements is returned
+ * indexed by name.
+ */
+ public function getCustomByName($name = null)
+ {
+ if ($name === null) {
+ return $this->_customByName;
+ } else {
+ if (array_key_exists($name, $this->customByName)) {
+ return $this->_customByName[$name];
+ } else {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Sets the row elements contained by this list entry. If any
+ * custom row elements were previously stored, they will be overwritten.
+ * @param array $custom The custom row elements to be contained in this
+ * list entry.
+ * @return Zend_Gdata_Spreadsheets_ListEntry Provides a fluent interface.
+ */
+ public function setCustom($custom)
+ {
+ $this->_custom = array();
+ foreach ($custom as $c) {
+ $this->addCustom($c);
+ }
+ return $this;
+ }
+
+ /**
+ * Add an individual custom row element to this list entry.
+ * @param Zend_Gdata_Spreadsheets_Extension_Custom $custom The custom
+ * element to be added.
+ * @return Zend_Gdata_Spreadsheets_ListEntry Provides a fluent interface.
+ */
+ public function addCustom($custom)
+ {
+ $this->_custom[] = $custom;
+ $this->_customByName[$custom->getColumnName()] = $custom;
+ return $this;
+ }
+
+ /**
+ * Remove an individual row element from this list entry by index. This
+ * will cause the array to be re-indexed.
+ * @param int $index The index of the custom element to be deleted.
+ * @return Zend_Gdata_Spreadsheets_ListEntry Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function removeCustom($index)
+ {
+ if (array_key_exists($index, $this->_custom)) {
+ $element = $this->_custom[$index];
+ // Remove element
+ unset($this->_custom[$index]);
+ // Re-index the array
+ $this->_custom = array_values($this->_custom);
+ // Be sure to delete form both arrays!
+ $key = array_search($element, $this->_customByName);
+ unset($this->_customByName[$key]);
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Element does not exist.');
+ }
+ return $this;
+ }
+
+ /**
+ * Remove an individual row element from this list entry by name.
+ * @param string $name The name of the custom element to be deleted.
+ * @return Zend_Gdata_Spreadsheets_ListEntry Provides a fluent interface.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ */
+ public function removeCustomByName($name)
+ {
+ if (array_key_exists($name, $this->_customByName)) {
+ $element = $this->_customByName[$name];
+ // Remove element
+ unset($this->_customByName[$name]);
+ // Be sure to delete from both arrays!
+ $key = array_search($element, $this->_custom);
+ unset($this->_custom[$key]);
+ } else {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Element does not exist.');
+ }
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/ListFeed.php b/zend/library/Zend/Gdata/Spreadsheets/ListFeed.php
new file mode 100644
index 0000000..b2cb08b
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/ListFeed.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ListFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_ListFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Spreadsheets_ListEntry';
+
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Spreadsheets_ListFeed';
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_ListFeed object.
+ * @param DOMElement $element An existing XML element on which to base this new object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/ListQuery.php b/zend/library/Zend/Gdata/Spreadsheets/ListQuery.php
new file mode 100644
index 0000000..64ea3d3
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/ListQuery.php
@@ -0,0 +1,305 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ListQuery.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Zend_Gdata_App_util
+ */
+require_once('Zend/Gdata/App/Util.php');
+
+/**
+ * Zend_Gdata_Query
+ */
+require_once('Zend/Gdata/Query.php');
+
+/**
+ * Assists in constructing queries for Google Spreadsheets lists
+ *
+ * @link http://code.google.com/apis/gdata/calendar/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_ListQuery extends Zend_Gdata_Query
+{
+
+ const SPREADSHEETS_LIST_FEED_URI = 'https://spreadsheets.google.com/feeds/list';
+
+ protected $_defaultFeedUri = self::SPREADSHEETS_LIST_FEED_URI;
+ protected $_visibility = 'private';
+ protected $_projection = 'full';
+ protected $_spreadsheetKey = null;
+ protected $_worksheetId = 'default';
+ protected $_rowId = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_ListQuery object.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ /**
+ * Sets the spreadsheet key for the query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setSpreadsheetKey($value)
+ {
+ $this->_spreadsheetKey = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the spreadsheet key for the query.
+ * @return string spreadsheet key
+ */
+ public function getSpreadsheetKey()
+ {
+ return $this->_spreadsheetKey;
+ }
+
+ /**
+ * Sets the worksheet id for the query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setWorksheetId($value)
+ {
+ $this->_worksheetId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the worksheet id for the query.
+ * @return string worksheet id
+ */
+ public function getWorksheetId()
+ {
+ return $this->_worksheetId;
+ }
+
+ /**
+ * Sets the row id for the query.
+ * @param string $value row id
+ * @return Zend_Gdata_Spreadsheets_CellQuery Provides a fluent interface
+ */
+ public function setRowId($value)
+ {
+ $this->_rowId = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the row id for the query.
+ * @return string row id
+ */
+ public function getRowId()
+ {
+ return $this->_rowId;
+ }
+
+ /**
+ * Sets the projection for the query.
+ * @param string $value Projection
+ * @return Zend_Gdata_Spreadsheets_ListQuery Provides a fluent interface
+ */
+ public function setProjection($value)
+ {
+ $this->_projection = $value;
+ return $this;
+ }
+
+ /**
+ * Sets the visibility for this query.
+ * @param string $value visibility
+ * @return Zend_Gdata_Spreadsheets_ListQuery Provides a fluent interface
+ */
+ public function setVisibility($value)
+ {
+ $this->_visibility = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the projection for this query.
+ * @return string projection
+ */
+ public function getProjection()
+ {
+ return $this->_projection;
+ }
+
+ /**
+ * Gets the visibility for this query.
+ * @return string visibility
+ */
+ public function getVisibility()
+ {
+ return $this->_visibility;
+ }
+
+ /**
+ * Sets the spreadsheet key for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setSpreadsheetQuery($value)
+ {
+ if ($value != null) {
+ $this->_params['sq'] = $value;
+ } else {
+ unset($this->_params['sq']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the spreadsheet key for this query.
+ * @return string spreadsheet query
+ */
+ public function getSpreadsheetQuery()
+ {
+ if (array_key_exists('sq', $this->_params)) {
+ return $this->_params['sq'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the orderby attribute for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setOrderBy($value)
+ {
+ if ($value != null) {
+ $this->_params['orderby'] = $value;
+ } else {
+ unset($this->_params['orderby']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the orderby attribute for this query.
+ * @return string orderby
+ */
+ public function getOrderBy()
+ {
+ if (array_key_exists('orderby', $this->_params)) {
+ return $this->_params['orderby'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the reverse attribute for this query.
+ * @param string $value
+ * @return Zend_Gdata_Spreadsheets_DocumentQuery Provides a fluent interface
+ */
+ public function setReverse($value)
+ {
+ if ($value != null) {
+ $this->_params['reverse'] = $value;
+ } else {
+ unset($this->_params['reverse']);
+ }
+ return $this;
+ }
+
+ /**
+ * Gets the reverse attribute for this query.
+ * @return string reverse
+ */
+ public function getReverse()
+ {
+
+
+ if (array_key_exists('reverse', $this->_params)) {
+ return $this->_params['reverse'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the full query URL for this query.
+ * @return string url
+ */
+ public function getQueryUrl()
+ {
+
+ $uri = $this->_defaultFeedUri;
+
+ if ($this->_spreadsheetKey != null) {
+ $uri .= '/'.$this->_spreadsheetKey;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A spreadsheet key must be provided for list queries.');
+ }
+
+ if ($this->_worksheetId != null) {
+ $uri .= '/'.$this->_worksheetId;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A worksheet id must be provided for list queries.');
+ }
+
+ if ($this->_visibility != null) {
+ $uri .= '/'.$this->_visibility;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A visibility must be provided for list queries.');
+ }
+
+ if ($this->_projection != null) {
+ $uri .= '/'.$this->_projection;
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('A projection must be provided for list queries.');
+ }
+
+ if ($this->_rowId != null) {
+ $uri .= '/'.$this->_rowId;
+ }
+
+ $uri .= $this->getQueryString();
+ return $uri;
+ }
+
+ /**
+ * Gets the attribute query string for this query.
+ * @return string query string
+ */
+ public function getQueryString()
+ {
+ return parent::getQueryString();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/SpreadsheetEntry.php b/zend/library/Zend/Gdata/Spreadsheets/SpreadsheetEntry.php
new file mode 100644
index 0000000..ff3e21e
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/SpreadsheetEntry.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: SpreadsheetEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * Concrete class for working with Atom entries.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_SpreadsheetEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Spreadsheets_SpreadsheetEntry';
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_SpreadsheetEntry object.
+ * @param DOMElement $element (optional) The DOMElement on which to base this object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Returns the worksheets in this spreadsheet
+ *
+ * @return Zend_Gdata_Spreadsheets_WorksheetFeed The worksheets
+ */
+ public function getWorksheets()
+ {
+ $service = new Zend_Gdata_Spreadsheets($this->getHttpClient());
+ return $service->getWorksheetFeed($this);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/SpreadsheetFeed.php b/zend/library/Zend/Gdata/Spreadsheets/SpreadsheetFeed.php
new file mode 100644
index 0000000..e47f9c9
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/SpreadsheetFeed.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: SpreadsheetFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_SpreadsheetFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Spreadsheets_SpreadsheetEntry';
+
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Spreadsheets_SpreadsheetFeed';
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_SpreadsheetFeed object.
+ * @param DOMElement $element (optional) The DOMElement on which to base this object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/WorksheetEntry.php b/zend/library/Zend/Gdata/Spreadsheets/WorksheetEntry.php
new file mode 100644
index 0000000..a7506de
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/WorksheetEntry.php
@@ -0,0 +1,187 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: WorksheetEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Spreadsheets_Extension_RowCount
+ */
+require_once 'Zend/Gdata/Spreadsheets/Extension/RowCount.php';
+
+/**
+ * @see Zend_Gdata_Spreadsheets_Extension_ColCount
+ */
+require_once 'Zend/Gdata/Spreadsheets/Extension/ColCount.php';
+
+/**
+ * Concrete class for working with Worksheet entries.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_WorksheetEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_Spreadsheets_WorksheetEntry';
+
+ protected $_rowCount = null;
+ protected $_colCount = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_WorksheetEntry object.
+ *
+ * @param DOMElement $element (optional) The DOMElement on which to base this object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_rowCount != null) {
+ $element->appendChild($this->_rowCount->getDOM($element->ownerDocument));
+ }
+ if ($this->_colCount != null) {
+ $element->appendChild($this->_colCount->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gs') . ':' . 'rowCount';
+ $rowCount = new Zend_Gdata_Spreadsheets_Extension_RowCount();
+ $rowCount->transferFromDOM($child);
+ $this->_rowCount = $rowCount;
+ break;
+ case $this->lookupNamespace('gs') . ':' . 'colCount';
+ $colCount = new Zend_Gdata_Spreadsheets_Extension_ColCount();
+ $colCount->transferFromDOM($child);
+ $this->_colCount = $colCount;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+
+ /**
+ * Gets the row count for this entry.
+ *
+ * @return string The row count for the entry.
+ */
+ public function getRowCount()
+ {
+ return $this->_rowCount;
+ }
+
+ /**
+ * Gets the column count for this entry.
+ *
+ * @return string The column count for the entry.
+ */
+ public function getColumnCount()
+ {
+ return $this->_colCount;
+ }
+
+ /**
+ * Sets the row count for this entry.
+ *
+ * @param string $rowCount The new row count for the entry.
+ */
+ public function setRowCount($rowCount)
+ {
+ $this->_rowCount = $rowCount;
+ return $this;
+ }
+
+ /**
+ * Sets the column count for this entry.
+ *
+ * @param string $colCount The new column count for the entry.
+ */
+ public function setColumnCount($colCount)
+ {
+ $this->_colCount = $colCount;
+ return $this;
+ }
+
+ /**
+ * Returns the content of all rows as an associative array
+ *
+ * @return array An array of rows. Each element of the array is an associative array of data
+ */
+ public function getContentsAsRows()
+ {
+ $service = new Zend_Gdata_Spreadsheets($this->getHttpClient());
+ return $service->getSpreadsheetListFeedContents($this);
+ }
+
+ /**
+ * Returns the content of all cells as an associative array, indexed
+ * off the cell location (ie 'A1', 'D4', etc). Each element of
+ * the array is an associative array with a 'value' and a 'function'.
+ * Only non-empty cells are returned by default. 'range' is the
+ * value of the 'range' query parameter specified at:
+ * http://code.google.com/apis/spreadsheets/reference.html#cells_Parameters
+ *
+ * @param string $range The range of cells to retrieve
+ * @param boolean $empty Whether to retrieve empty cells
+ * @return array An associative array of cells
+ */
+ public function getContentsAsCells($range = null, $empty = false)
+ {
+ $service = new Zend_Gdata_Spreadsheets($this->getHttpClient());
+ return $service->getSpreadsheetCellFeedContents($this, $range, $empty);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/Spreadsheets/WorksheetFeed.php b/zend/library/Zend/Gdata/Spreadsheets/WorksheetFeed.php
new file mode 100644
index 0000000..f549e09
--- /dev/null
+++ b/zend/library/Zend/Gdata/Spreadsheets/WorksheetFeed.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: WorksheetFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Spreadsheets
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Spreadsheets_WorksheetFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * Constructs a new Zend_Gdata_Spreadsheets_WorksheetFeed object.
+ * @param DOMElement $element (optional) The DOMElement on whick to base this element.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Spreadsheets::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_Spreadsheets_WorksheetEntry';
+
+ /**
+ * The classname for the feed.
+ *
+ * @var string
+ */
+ protected $_feedClassName = 'Zend_Gdata_Spreadsheets_WorksheetFeed';
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube.php b/zend/library/Zend/Gdata/YouTube.php
new file mode 100644
index 0000000..0102766
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube.php
@@ -0,0 +1,874 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: YouTube.php 24796 2012-05-12 03:34:26Z adamlundrigan $
+ */
+
+/**
+ * @see Zend_Gdata_Media
+ */
+require_once 'Zend/Gdata/Media.php';
+
+/**
+ * @see Zend_Gdata_YouTube_VideoEntry
+ */
+require_once 'Zend/Gdata/YouTube/VideoEntry.php';
+
+/**
+ * @see Zend_Gdata_YouTube_VideoFeed
+ */
+require_once 'Zend/Gdata/YouTube/VideoFeed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_CommentFeed
+ */
+require_once 'Zend/Gdata/YouTube/CommentFeed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_PlaylistListFeed
+ */
+require_once 'Zend/Gdata/YouTube/PlaylistListFeed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_SubscriptionFeed
+ */
+require_once 'Zend/Gdata/YouTube/SubscriptionFeed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_ContactFeed
+ */
+require_once 'Zend/Gdata/YouTube/ContactFeed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_PlaylistVideoFeed
+ */
+require_once 'Zend/Gdata/YouTube/PlaylistVideoFeed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_ActivityFeed
+ */
+require_once 'Zend/Gdata/YouTube/ActivityFeed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_InboxFeed
+ */
+require_once 'Zend/Gdata/YouTube/InboxFeed.php';
+
+
+/**
+ * Service class for interacting with the YouTube Data API.
+ * @link http://code.google.com/apis/youtube/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube extends Zend_Gdata_Media
+{
+
+ const AUTH_SERVICE_NAME = 'youtube';
+ const CLIENTLOGIN_URL = 'https://www.google.com/youtube/accounts/ClientLogin';
+
+ const STANDARD_TOP_RATED_URI = 'https://gdata.youtube.com/feeds/api/standardfeeds/top_rated';
+ const STANDARD_MOST_VIEWED_URI = 'https://gdata.youtube.com/feeds/api/standardfeeds/most_viewed';
+ const STANDARD_RECENTLY_FEATURED_URI = 'https://gdata.youtube.com/feeds/api/standardfeeds/recently_featured';
+ const STANDARD_WATCH_ON_MOBILE_URI = 'https://gdata.youtube.com/feeds/api/standardfeeds/watch_on_mobile';
+
+ const STANDARD_TOP_RATED_URI_V2 =
+ 'https://gdata.youtube.com/feeds/api/standardfeeds/top_rated';
+ const STANDARD_MOST_VIEWED_URI_V2 =
+ 'https://gdata.youtube.com/feeds/api/standardfeeds/most_viewed';
+ const STANDARD_RECENTLY_FEATURED_URI_V2 =
+ 'https://gdata.youtube.com/feeds/api/standardfeeds/recently_featured';
+ const STANDARD_WATCH_ON_MOBILE_URI_V2 =
+ 'https://gdata.youtube.com/feeds/api/standardfeeds/watch_on_mobile';
+
+ const USER_URI = 'https://gdata.youtube.com/feeds/api/users';
+ const VIDEO_URI = 'https://gdata.youtube.com/feeds/api/videos';
+ const PLAYLIST_REL = 'http://gdata.youtube.com/schemas/2007#playlist';
+ const USER_UPLOADS_REL = 'http://gdata.youtube.com/schemas/2007#user.uploads';
+ const USER_PLAYLISTS_REL = 'http://gdata.youtube.com/schemas/2007#user.playlists';
+ const USER_SUBSCRIPTIONS_REL = 'http://gdata.youtube.com/schemas/2007#user.subscriptions';
+ const USER_CONTACTS_REL = 'http://gdata.youtube.com/schemas/2007#user.contacts';
+ const USER_FAVORITES_REL = 'http://gdata.youtube.com/schemas/2007#user.favorites';
+ const VIDEO_RESPONSES_REL = 'http://gdata.youtube.com/schemas/2007#video.responses';
+ const VIDEO_RATINGS_REL = 'http://gdata.youtube.com/schemas/2007#video.ratings';
+ const VIDEO_COMPLAINTS_REL = 'http://gdata.youtube.com/schemas/2007#video.complaints';
+ const ACTIVITY_FEED_URI = 'https://gdata.youtube.com/feeds/api/events';
+ const FRIEND_ACTIVITY_FEED_URI =
+ 'https://gdata.youtube.com/feeds/api/users/default/friendsactivity';
+
+ /**
+ * The URI of the in-reply-to schema for comments in reply to
+ * other comments.
+ *
+ * @var string
+ */
+ const IN_REPLY_TO_SCHEME =
+ 'http://gdata.youtube.com/schemas/2007#in-reply-to';
+
+ /**
+ * The URI of the inbox feed for the currently authenticated user.
+ *
+ * @var string
+ */
+ const INBOX_FEED_URI =
+ 'https://gdata.youtube.com/feeds/api/users/default/inbox';
+
+ /**
+ * The maximum number of users for which activity can be requested for,
+ * as enforced by the API.
+ *
+ * @var integer
+ */
+ const ACTIVITY_FEED_MAX_USERS = 20;
+
+ /**
+ * The suffix for a feed of favorites.
+ *
+ * @var string
+ */
+ const FAVORITES_URI_SUFFIX = 'favorites';
+
+ /**
+ * The suffix for the user's upload feed.
+ *
+ * @var string
+ */
+ const UPLOADS_URI_SUFFIX = 'uploads';
+
+ /**
+ * The suffix for a feed of video responses.
+ *
+ * @var string
+ */
+ const RESPONSES_URI_SUFFIX = 'responses';
+
+ /**
+ * The suffix for a feed of related videos.
+ *
+ * @var string
+ */
+ const RELATED_URI_SUFFIX = 'related';
+
+ /**
+ * The suffix for a feed of messages (inbox entries).
+ *
+ * @var string
+ */
+ const INBOX_URI_SUFFIX = 'inbox';
+
+ /**
+ * Namespaces used for Zend_Gdata_YouTube
+ *
+ * @var array
+ */
+ public static $namespaces = array(
+ array('yt', 'http://gdata.youtube.com/schemas/2007', 1, 0),
+ array('georss', 'http://www.georss.org/georss', 1, 0),
+ array('gml', 'http://www.opengis.net/gml', 1, 0),
+ array('media', 'http://search.yahoo.com/mrss/', 1, 0)
+ );
+
+ /**
+ * Create Zend_Gdata_YouTube object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google servers.
+ * @param string $applicationId The identity of the app in the form of
+ * Company-AppName-Version
+ * @param string $clientId The clientId issued by the YouTube dashboard
+ * @param string $developerKey The developerKey issued by the YouTube dashboard
+ */
+ public function __construct($client = null,
+ $applicationId = 'MyCompany-MyApp-1.0', $clientId = null,
+ $developerKey = null)
+ {
+ $this->registerPackage('Zend_Gdata_YouTube');
+ $this->registerPackage('Zend_Gdata_YouTube_Extension');
+ $this->registerPackage('Zend_Gdata_Media');
+ $this->registerPackage('Zend_Gdata_Media_Extension');
+
+ // NOTE This constructor no longer calls the parent constructor
+ $this->setHttpClient($client, $applicationId, $clientId, $developerKey);
+ }
+
+ /**
+ * Set the Zend_Http_Client object used for communication
+ *
+ * @param Zend_Http_Client $client The client to use for communication
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Gdata_App Provides a fluent interface
+ */
+ public function setHttpClient($client,
+ $applicationId = 'MyCompany-MyApp-1.0', $clientId = null,
+ $developerKey = null)
+ {
+ if ($client === null) {
+ $client = new Zend_Http_Client();
+ }
+ if (!$client instanceof Zend_Http_Client) {
+ require_once 'Zend/Gdata/App/HttpException.php';
+ throw new Zend_Gdata_App_HttpException(
+ 'Argument is not an instance of Zend_Http_Client.');
+ }
+
+ if ($clientId != null) {
+ $client->setHeaders('X-GData-Client', $clientId);
+ }
+
+ if ($developerKey != null) {
+ $client->setHeaders('X-GData-Key', 'key='. $developerKey);
+ }
+
+ return parent::setHttpClient($client, $applicationId);
+ }
+
+ /**
+ * Retrieves a feed of videos.
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getVideoFeed($location = null)
+ {
+ if ($location == null) {
+ $uri = self::VIDEO_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a specific video entry.
+ *
+ * @param mixed $videoId The ID of the video to retrieve.
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined.
+ * @param boolean $fullEntry (optional) Retrieve the full metadata for the
+ * entry. Only possible if entry belongs to currently authenticated
+ * user. An exception will be thrown otherwise.
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Gdata_YouTube_VideoEntry The video entry found at the
+ * specified URL.
+ */
+ public function getVideoEntry($videoId = null, $location = null,
+ $fullEntry = false)
+ {
+ if ($videoId !== null) {
+ if ($fullEntry) {
+ return $this->getFullVideoEntry($videoId);
+ } else {
+ $uri = self::VIDEO_URI . "/" . $videoId;
+ }
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_YouTube_VideoEntry');
+ }
+
+ /**
+ * Retrieves a video entry from the user's upload feed.
+ *
+ * @param mixed $videoID The ID of the video to retrieve.
+ * @throws Zend_Gdata_App_HttpException
+ * @return Zend_Gdata_YouTube_VideoEntry|null The video entry to be
+ * retrieved, or null if it was not found or the user requesting it
+ * did not have the appropriate permissions.
+ */
+ public function getFullVideoEntry($videoId)
+ {
+ $uri = self::USER_URI . "/default/" .
+ self::UPLOADS_URI_SUFFIX . "/$videoId";
+ return parent::getEntry($uri, 'Zend_Gdata_YouTube_VideoEntry');
+ }
+
+ /**
+ * Retrieves a feed of videos related to the specified video ID.
+ *
+ * @param string $videoId The videoId of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getRelatedVideoFeed($videoId = null, $location = null)
+ {
+ if ($videoId !== null) {
+ $uri = self::VIDEO_URI . "/" . $videoId . "/" .
+ self::RELATED_URI_SUFFIX;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of video responses related to the specified video ID.
+ *
+ * @param string $videoId The videoId of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getVideoResponseFeed($videoId = null, $location = null)
+ {
+ if ($videoId !== null) {
+ $uri = self::VIDEO_URI . "/" . $videoId . "/" .
+ self::RESPONSES_URI_SUFFIX;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of comments related to the specified video ID.
+ *
+ * @param string $videoId The videoId of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_CommentFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getVideoCommentFeed($videoId = null, $location = null)
+ {
+ if ($videoId !== null) {
+ $uri = self::VIDEO_URI . "/" . $videoId . "/comments";
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_CommentFeed');
+ }
+
+ /**
+ * Retrieves a feed of comments related to the specified video ID.
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_CommentFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getTopRatedVideoFeed($location = null)
+ {
+ $standardFeedUri = self::STANDARD_TOP_RATED_URI;
+
+ if ($this->getMajorProtocolVersion() == 2) {
+ $standardFeedUri = self::STANDARD_TOP_RATED_URI_V2;
+ }
+
+ if ($location == null) {
+ $uri = $standardFeedUri;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
+ if (!isset($location->url)) {
+ $location->setFeedType('top rated');
+ }
+ }
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+
+ /**
+ * Retrieves a feed of the most viewed videos.
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getMostViewedVideoFeed($location = null)
+ {
+ $standardFeedUri = self::STANDARD_MOST_VIEWED_URI;
+
+ if ($this->getMajorProtocolVersion() == 2) {
+ $standardFeedUri = self::STANDARD_MOST_VIEWED_URI_V2;
+ }
+
+ if ($location == null) {
+ $uri = $standardFeedUri;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
+ if (!isset($location->url)) {
+ $location->setFeedType('most viewed');
+ }
+ }
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of recently featured videos.
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getRecentlyFeaturedVideoFeed($location = null)
+ {
+ $standardFeedUri = self::STANDARD_RECENTLY_FEATURED_URI;
+
+ if ($this->getMajorProtocolVersion() == 2) {
+ $standardFeedUri = self::STANDARD_RECENTLY_FEATURED_URI_V2;
+ }
+
+ if ($location == null) {
+ $uri = $standardFeedUri;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
+ if (!isset($location->url)) {
+ $location->setFeedType('recently featured');
+ }
+ }
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of videos recently featured for mobile devices.
+ * These videos will have RTSP links in the $entry->mediaGroup->content
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The feed of videos found at the
+ * specified URL.
+ */
+ public function getWatchOnMobileVideoFeed($location = null)
+ {
+ $standardFeedUri = self::STANDARD_WATCH_ON_MOBILE_URI;
+
+ if ($this->getMajorProtocolVersion() == 2) {
+ $standardFeedUri = self::STANDARD_WATCH_ON_MOBILE_URI_V2;
+ }
+
+ if ($location == null) {
+ $uri = $standardFeedUri;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ if ($location instanceof Zend_Gdata_YouTube_VideoQuery) {
+ if (!isset($location->url)) {
+ $location->setFeedType('watch on mobile');
+ }
+ }
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a feed which lists a user's playlist
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_PlaylistListFeed The feed of playlists
+ */
+ public function getPlaylistListFeed($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/playlists';
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_PlaylistListFeed');
+ }
+
+ /**
+ * Retrieves a feed of videos in a particular playlist
+ *
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_PlaylistVideoFeed The feed of videos found at
+ * the specified URL.
+ */
+ public function getPlaylistVideoFeed($location)
+ {
+ if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_PlaylistVideoFeed');
+ }
+
+ /**
+ * Retrieves a feed of a user's subscriptions
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_SubscriptionListFeed The feed of subscriptions
+ */
+ public function getSubscriptionFeed($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/subscriptions';
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_SubscriptionFeed');
+ }
+
+ /**
+ * Retrieves a feed of a user's contacts
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_ContactFeed The feed of contacts
+ */
+ public function getContactFeed($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/contacts';
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_ContactFeed');
+ }
+
+ /**
+ * Retrieves a user's uploads
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The videos uploaded by the user
+ */
+ public function getUserUploads($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/' .
+ self::UPLOADS_URI_SUFFIX;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a user's favorites
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_VideoFeed The videos favorited by the user
+ */
+ public function getUserFavorites($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user . '/' .
+ self::FAVORITES_URI_SUFFIX;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_VideoFeed');
+ }
+
+ /**
+ * Retrieves a user's profile as an entry
+ *
+ * @param string $user (optional) The username of interest
+ * @param mixed $location (optional) The URL to query or a
+ * Zend_Gdata_Query object from which a URL can be determined
+ * @return Zend_Gdata_YouTube_UserProfileEntry The user profile entry
+ */
+ public function getUserProfile($user = null, $location = null)
+ {
+ if ($user !== null) {
+ $uri = self::USER_URI . '/' . $user;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_YouTube_UserProfileEntry');
+ }
+
+ /**
+ * Helper function for parsing a YouTube token response
+ *
+ * @param string $response The service response
+ * @throws Zend_Gdata_App_Exception
+ * @return array An array containing the token and URL
+ */
+ public static function parseFormUploadTokenResponse($response)
+ {
+ // Load the feed as an XML DOMDocument object
+ @ini_set('track_errors', 1);
+ $doc = new DOMDocument();
+ $success = @$doc->loadXML($response);
+ @ini_restore('track_errors');
+
+ if (!$success) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ "Zend_Gdata_YouTube::parseFormUploadTokenResponse - " .
+ "DOMDocument cannot parse XML: $php_errormsg");
+ }
+ $responseElement = $doc->getElementsByTagName('response')->item(0);
+
+ $urlText = null;
+ $tokenText = null;
+ if ($responseElement != null) {
+ $urlElement =
+ $responseElement->getElementsByTagName('url')->item(0);
+ $tokenElement =
+ $responseElement->getElementsByTagName('token')->item(0);
+
+ if ($urlElement && $urlElement->hasChildNodes() &&
+ $tokenElement && $tokenElement->hasChildNodes()) {
+
+ $urlText = $urlElement->firstChild->nodeValue;
+ $tokenText = $tokenElement->firstChild->nodeValue;
+ }
+ }
+
+ if ($tokenText != null && $urlText != null) {
+ return array('token' => $tokenText, 'url' => $urlText);
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Form upload token not found in response');
+ }
+ }
+
+ /**
+ * Retrieves a YouTube token
+ *
+ * @param Zend_Gdata_YouTube_VideoEntry $videoEntry The video entry
+ * @param string $url The location as a string URL
+ * @throws Zend_Gdata_App_Exception
+ * @return array An array containing a token and URL
+ */
+ public function getFormUploadToken($videoEntry,
+ $url='https://gdata.youtube.com/action/GetUploadToken')
+ {
+ if ($url != null && is_string($url)) {
+ // $response is a Zend_Http_response object
+ $response = $this->post($videoEntry, $url);
+ return self::parseFormUploadTokenResponse($response->getBody());
+ } else {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Url must be provided as a string URL');
+ }
+ }
+
+ /**
+ * Retrieves the activity feed for users
+ *
+ * @param mixed $usernames A string identifying the usernames for which to
+ * retrieve activity for. This can also be a Zend_Gdata_Query
+ * object from which a URL can be determined.
+ * @throws Zend_Gdata_App_VersionException if using version less than 2.
+ * @return Zend_Gdata_YouTube_ActivityFeed
+ */
+ public function getActivityForUser($username)
+ {
+ if ($this->getMajorProtocolVersion() == 1) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('User activity feeds ' .
+ 'are not available in API version 1.');
+ }
+
+ $uri = null;
+ if ($username instanceof Zend_Gdata_Query) {
+ $uri = $username->getQueryUrl($this->getMajorProtocolVersion());
+ } else {
+ if (count(explode(',', $username)) >
+ self::ACTIVITY_FEED_MAX_USERS) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Activity feed can only retrieve for activity for up to ' .
+ self::ACTIVITY_FEED_MAX_USERS . ' users per request');
+ }
+ $uri = self::ACTIVITY_FEED_URI . '?author=' . $username;
+ }
+
+ return parent::getFeed($uri, 'Zend_Gdata_YouTube_ActivityFeed');
+ }
+
+ /**
+ * Retrieve the activity of the currently authenticated users friend.
+ *
+ * @throws Zend_Gdata_App_Exception if not logged in.
+ * @return Zend_Gdata_YouTube_ActivityFeed
+ */
+ public function getFriendActivityForCurrentUser()
+ {
+ if (!$this->isAuthenticated()) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('You must be authenticated to ' .
+ 'use the getFriendActivityForCurrentUser function in Zend_' .
+ 'Gdata_YouTube.');
+ }
+ return parent::getFeed(self::FRIEND_ACTIVITY_FEED_URI,
+ 'Zend_Gdata_YouTube_ActivityFeed');
+ }
+
+ /**
+ * Retrieve a feed of messages in the currently authenticated user's inbox.
+ *
+ * @throws Zend_Gdata_App_Exception if not logged in.
+ * @return Zend_Gdata_YouTube_InboxFeed|null
+ */
+ public function getInboxFeedForCurrentUser()
+ {
+ if (!$this->isAuthenticated()) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('You must be authenticated to ' .
+ 'use the getInboxFeedForCurrentUser function in Zend_' .
+ 'Gdata_YouTube.');
+ }
+
+ return parent::getFeed(self::INBOX_FEED_URI,
+ 'Zend_Gdata_YouTube_InboxFeed');
+ }
+
+ /**
+ * Send a video message.
+ *
+ * Note: Either a Zend_Gdata_YouTube_VideoEntry or a valid video ID must
+ * be provided.
+ *
+ * @param string $body The body of the message
+ * @param Zend_Gdata_YouTube_VideoEntry (optional) The video entry to send
+ * @param string $videoId The id of the video to send
+ * @param string $recipientUserName The username of the recipient
+ * @throws Zend_Gdata_App_InvalidArgumentException if no valid
+ * Zend_Gdata_YouTube_VideoEntry or videoId were provided
+ * @return Zend_Gdata_YouTube_InboxEntry|null The
+ * Zend_Gdata_YouTube_Inbox_Entry representing the sent message.
+ *
+ */
+ public function sendVideoMessage($body, $videoEntry = null,
+ $videoId = null, $recipientUserName)
+ {
+ if (!$videoId && !$videoEntry) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Expecting either a valid videoID or a videoEntry object in ' .
+ 'Zend_Gdata_YouTube->sendVideoMessage().');
+ }
+
+ $messageEntry = new Zend_Gdata_YouTube_InboxEntry();
+
+ if ($this->getMajorProtocolVersion() == null ||
+ $this->getMajorProtocolVersion() == 1) {
+
+ if (!$videoId) {
+ $videoId = $videoEntry->getVideoId();
+ } elseif (strlen($videoId) < 12) {
+ //Append the full URI
+ $videoId = self::VIDEO_URI . '/' . $videoId;
+ }
+
+ $messageEntry->setId($this->newId($videoId));
+ // TODO there seems to be a bug where v1 inbox entries dont
+ // retain their description...
+ $messageEntry->setDescription(
+ new Zend_Gdata_YouTube_Extension_Description($body));
+
+ } else {
+ if (!$videoId) {
+ $videoId = $videoEntry->getVideoId();
+ $videoId = substr($videoId, strrpos($videoId, ':'));
+ }
+ $messageEntry->setId($this->newId($videoId));
+ $messageEntry->setSummary($this->newSummary($body));
+ }
+
+ $insertUrl = 'https://gdata.youtube.com/feeds/api/users/' .
+ $recipientUserName . '/inbox';
+ $response = $this->insertEntry($messageEntry, $insertUrl,
+ 'Zend_Gdata_YouTube_InboxEntry');
+ return $response;
+ }
+
+ /**
+ * Post a comment in reply to an existing comment
+ *
+ * @param Zend_Gdata_YouTube_CommentEntry $commentEntry The comment entry
+ * to reply to
+ * @param string $commentText The text of the
+ * comment to post
+ * @return Zend_Gdata_YouTube_CommentEntry the posted comment
+ */
+ public function replyToCommentEntry($commentEntry, $commentText)
+ {
+ $newComment = $this->newCommentEntry();
+ $newComment->content = $this->newContent()->setText($commentText);
+ $commentId = $commentEntry->getId();
+ $commentIdArray = explode(':', $commentId);
+
+ // create a new link element
+ $inReplyToLinkHref = self::VIDEO_URI . '/' . $commentIdArray[3] .
+ '/comments/' . $commentIdArray[5];
+ $inReplyToLink = $this->newLink($inReplyToLinkHref,
+ self::IN_REPLY_TO_SCHEME, $type="application/atom+xml");
+ $links = $newComment->getLink();
+ $links[] = $inReplyToLink;
+ $newComment->setLink($links);
+ $commentFeedPostUrl = self::VIDEO_URI . '/' . $commentIdArray[3] .
+ '/comments';
+ return $this->insertEntry($newComment,
+ $commentFeedPostUrl, 'Zend_Gdata_YouTube_CommentEntry');
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/ActivityEntry.php b/zend/library/Zend/Gdata/YouTube/ActivityEntry.php
new file mode 100644
index 0000000..3c60e1b
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/ActivityEntry.php
@@ -0,0 +1,232 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Health
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ActivityEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_VideoId
+ */
+require_once 'Zend/Gdata/YouTube/Extension/VideoId.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Username
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Username.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Rating
+ */
+require_once 'Zend/Gdata/Extension/Rating.php';
+
+/**
+ * A concrete class for working with YouTube user activity entries.
+ *
+ * @link http://code.google.com/apis/youtube/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_ActivityEntry extends Zend_Gdata_Entry
+{
+ const ACTIVITY_CATEGORY_SCHEME =
+ 'http://gdata.youtube.com/schemas/2007/userevents.cat';
+
+ /**
+ * The classname for individual user activity entry elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_ActivityEntry';
+
+ /**
+ * The ID of the video that was part of the activity
+ *
+ * @var Zend_Gdata_YouTube_VideoId
+ */
+ protected $_videoId = null;
+
+ /**
+ * The username for the user that was part of the activity
+ *
+ * @var Zend_Gdata_YouTube_Username
+ */
+ protected $_username = null;
+
+ /**
+ * The rating element that was part of the activity
+ *
+ * @var Zend_Gdata_Extension_Rating
+ */
+ protected $_rating = null;
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_ActivityEntry object.
+ * @param DOMElement $element (optional) The DOMElement on which to
+ * base this object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_videoId !== null) {
+ $element->appendChild($this->_videoId->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_username !== null) {
+ $element->appendChild($this->_username->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_rating !== null) {
+ $element->appendChild($this->_rating->getDOM(
+ $element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'videoid':
+ $videoId = new Zend_Gdata_YouTube_Extension_VideoId();
+ $videoId->transferFromDOM($child);
+ $this->_videoId = $videoId;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'username':
+ $username = new Zend_Gdata_YouTube_Extension_Username();
+ $username->transferFromDOM($child);
+ $this->_username = $username;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'rating':
+ $rating = new Zend_Gdata_Extension_Rating();
+ $rating->transferFromDOM($child);
+ $this->_rating = $rating;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns the video ID for this activity entry.
+ *
+ * @return null|Zend_Gdata_YouTube_Extension_VideoId
+ */
+ public function getVideoId()
+ {
+ return $this->_videoId;
+ }
+
+ /**
+ * Returns the username for this activity entry.
+ *
+ * @return null|Zend_Gdata_YouTube_Extension_Username
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Returns the rating for this activity entry.
+ *
+ * @return null|Zend_Gdata_YouTube_Extension_Rating
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * Return the value of the rating for this video entry.
+ *
+ * Convenience method to save needless typing.
+ *
+ * @return integer|null The value of the rating that was created, if found.
+ */
+ public function getRatingValue()
+ {
+ $rating = $this->_rating;
+ if ($rating) {
+ return $rating->getValue();
+ }
+ return null;
+ }
+
+ /**
+ * Return the activity type that was performed.
+ *
+ * Convenience method that inspects category where scheme is
+ * http://gdata.youtube.com/schemas/2007/userevents.cat.
+ *
+ * @return string|null The activity category if found.
+ */
+ public function getActivityType()
+ {
+ $categories = $this->getCategory();
+ foreach($categories as $category) {
+ if ($category->getScheme() == self::ACTIVITY_CATEGORY_SCHEME) {
+ return $category->getTerm();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Convenience method to quickly get access to the author of the activity
+ *
+ * @return string The author of the activity
+ */
+ public function getAuthorName()
+ {
+ $authors = $this->getAuthor();
+ return $authors[0]->getName()->getText();
+ }
+}
diff --git a/zend/library/Zend/Gdata/YouTube/ActivityFeed.php b/zend/library/Zend/Gdata/YouTube/ActivityFeed.php
new file mode 100644
index 0000000..6389c30
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/ActivityFeed.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ActivityFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_ActivityEntry
+ */
+require_once 'Zend/Gdata/YouTube/ActivityEntry.php';
+
+/**
+ * A feed of user activity entries for YouTube
+ *
+ * @link http://code.google.com/apis/youtube/
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_ActivityFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_ActivityEntry';
+
+ /**
+ * Creates an Activity feed, representing a list of activity entries
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/CommentEntry.php b/zend/library/Zend/Gdata/YouTube/CommentEntry.php
new file mode 100644
index 0000000..c16effa
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/CommentEntry.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CommentEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Feed
+ */
+require_once 'Zend/Gdata/Media/Feed.php';
+
+/**
+ * The YouTube comments flavor of an Atom Entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_CommentEntry extends Zend_Gdata_Entry
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_CommentEntry';
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_CommentEntry object.
+ * @param DOMElement $element (optional) The DOMElement on which to
+ * base this object.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/CommentFeed.php b/zend/library/Zend/Gdata/YouTube/CommentFeed.php
new file mode 100644
index 0000000..aede378
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/CommentFeed.php
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CommentFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_feed
+ */
+require_once 'Zend/Gdata/Feed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_CommentEntry
+ */
+require_once 'Zend/Gdata/YouTube/CommentEntry.php';
+
+/**
+ * The YouTube comments flavor of an Atom Feed
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_CommentFeed extends Zend_Gdata_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_CommentEntry';
+
+ /**
+ * Constructs a new YouTube Comment Feed object, to represent
+ * a feed of comments for an individual video
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/ContactEntry.php b/zend/library/Zend/Gdata/YouTube/ContactEntry.php
new file mode 100644
index 0000000..50503bf
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/ContactEntry.php
@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ContactEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_YouTube_UserProfileEntry
+ */
+require_once 'Zend/Gdata/YouTube/UserProfileEntry.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Status
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Status.php';
+
+/**
+ * The YouTube contacts flavor of an Atom Entry with media support
+ * Represents a an individual contact
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_ContactEntry extends Zend_Gdata_YouTube_UserProfileEntry
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_ContactEntry';
+
+ /**
+ * Status of the user as a contact
+ *
+ * @var string
+ */
+ protected $_status = null;
+
+ /**
+ * Constructs a new Contact Entry object, to represent
+ * an individual contact for a user
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_status != null) {
+ $element->appendChild($this->_status->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'status':
+ $status = new Zend_Gdata_YouTube_Extension_Status();
+ $status->transferFromDOM($child);
+ $this->_status = $status;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets the status
+ *
+ * @param Zend_Gdata_YouTube_Extension_Status $status The status
+ * @return Zend_Gdata_YouTube_ContactEntry Provides a fluent interface
+ */
+ public function setStatus($status = null)
+ {
+ $this->_status = $status;
+ return $this;
+ }
+
+ /**
+ * Returns the status
+ *
+ * @return Zend_Gdata_YouTube_Extension_Status The status
+ */
+ public function getStatus()
+ {
+ return $this->_status;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/ContactFeed.php b/zend/library/Zend/Gdata/YouTube/ContactFeed.php
new file mode 100644
index 0000000..a072b08
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/ContactFeed.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ContactFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Feed
+ */
+require_once 'Zend/Gdata/Media/Feed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_ContactEntry
+ */
+require_once 'Zend/Gdata/YouTube/ContactEntry.php';
+
+/**
+ * The YouTube contacts flavor of an Atom Feed with media support
+ * Represents a list of individual contacts, where each contained entry is
+ * a contact.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_ContactFeed extends Zend_Gdata_Media_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_ContactEntry';
+
+ /**
+ * Constructs a new YouTube Contact Feed object, to represent
+ * a feed of contacts for a user
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/AboutMe.php b/zend/library/Zend/Gdata/YouTube/Extension/AboutMe.php
new file mode 100644
index 0000000..9828fa5
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/AboutMe.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: AboutMe.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:aboutMe element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_AboutMe extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'aboutMe';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Age.php b/zend/library/Zend/Gdata/YouTube/Extension/Age.php
new file mode 100644
index 0000000..2cea5a9
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Age.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Age.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:age element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Age extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'age';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Books.php b/zend/library/Zend/Gdata/YouTube/Extension/Books.php
new file mode 100644
index 0000000..d62466f
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Books.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Books.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:books element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Books extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'books';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Company.php b/zend/library/Zend/Gdata/YouTube/Extension/Company.php
new file mode 100644
index 0000000..a333e28
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Company.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Company.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:company element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Company extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'company';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Control.php b/zend/library/Zend/Gdata/YouTube/Extension/Control.php
new file mode 100755
index 0000000..338544b
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Control.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Control.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Control
+ */
+require_once 'Zend/Gdata/App/Extension/Control.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_State
+ */
+require_once 'Zend/Gdata/YouTube/Extension/State.php';
+
+
+/**
+ * Specialized Control class for use with YouTube. Enables use of yt extension elements.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Control extends Zend_Gdata_App_Extension_Control
+{
+
+ protected $_state = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_Control object.
+ * @see Zend_Gdata_App_Extension_Control#__construct
+ * @param Zend_Gdata_App_Extension_Draft $draft
+ * @param Zend_Gdata_YouTube_Extension_State $state
+ */
+ public function __construct($draft = null, $state = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($draft);
+ $this->_state = $state;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_state != null) {
+ $element->appendChild($this->_state->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'state':
+ $state = new Zend_Gdata_YouTube_Extension_State();
+ $state->transferFromDOM($child);
+ $this->_state = $state;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's state attribute.
+ *
+ * @return Zend_Gdata_YouTube_Extension_State The state element.
+ */
+ public function getState()
+ {
+ return $this->_state;
+ }
+
+ /**
+ * Set the value for this element's state attribute.
+ *
+ * @param Zend_Gdata_YouTube_Extension_State $value The desired value for this attribute.
+ * @return Zend_YouTube_Extension_Control The element being modified.
+ */
+ public function setState($value)
+ {
+ $this->_state = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of this element's state attribute.
+ *
+ * @return string The state's text value
+ */
+ public function getStateValue()
+ {
+ return $this->getState()->getText();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/CountHint.php b/zend/library/Zend/Gdata/YouTube/Extension/CountHint.php
new file mode 100755
index 0000000..98fa6e2
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/CountHint.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: CountHint.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:countHint element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_CountHint extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'countHint';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Description.php b/zend/library/Zend/Gdata/YouTube/Extension/Description.php
new file mode 100644
index 0000000..81b2b81
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Description.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Description.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:description element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Description extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'description';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Duration.php b/zend/library/Zend/Gdata/YouTube/Extension/Duration.php
new file mode 100644
index 0000000..ae12087
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Duration.php
@@ -0,0 +1,126 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Duration.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:duration element used by the YouTube data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Duration extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'yt';
+ protected $_rootElement = 'duration';
+ protected $_seconds = null;
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_Extension_Duration object.
+ * @param bool $seconds(optional) The seconds value of the element.
+ */
+ public function __construct($seconds = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_seconds = $seconds;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_seconds !== null) {
+ $element->setAttribute('seconds', $this->_seconds);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and valueare
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'seconds':
+ $this->_seconds = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's seconds attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getSeconds()
+ {
+ return $this->_seconds;
+ }
+
+ /**
+ * Set the value for this element's seconds attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Duration The element being modified.
+ */
+ public function setSeconds($value)
+ {
+ $this->_seconds = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string The duration in seconds
+ */
+ public function __toString()
+ {
+ return $this->_seconds;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/FirstName.php b/zend/library/Zend/Gdata/YouTube/Extension/FirstName.php
new file mode 100644
index 0000000..140816b
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/FirstName.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: FirstName.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:firstName element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_FirstName extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'firstName';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Gender.php b/zend/library/Zend/Gdata/YouTube/Extension/Gender.php
new file mode 100644
index 0000000..98560a4
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Gender.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Gender.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:gender element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Gender extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'gender';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Hobbies.php b/zend/library/Zend/Gdata/YouTube/Extension/Hobbies.php
new file mode 100644
index 0000000..e8b905d
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Hobbies.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Hobbies.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:hobbies element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Hobbies extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'hobbies';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Hometown.php b/zend/library/Zend/Gdata/YouTube/Extension/Hometown.php
new file mode 100644
index 0000000..f65f508
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Hometown.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Hometown.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:hometown element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Hometown extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'hometown';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/LastName.php b/zend/library/Zend/Gdata/YouTube/Extension/LastName.php
new file mode 100644
index 0000000..76b8c62
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/LastName.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: LastName.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:lastName element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_LastName extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'lastName';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Link.php b/zend/library/Zend/Gdata/YouTube/Extension/Link.php
new file mode 100755
index 0000000..88cfa6b
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Link.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Link.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension_Link
+ */
+require_once 'Zend/Gdata/App/Extension/Link.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Token
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Token.php';
+
+
+/**
+ * Specialized Link class for use with YouTube. Enables use of yt extension elements.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Link extends Zend_Gdata_App_Extension_Link
+{
+
+ protected $_token = null;
+
+ /**
+ * Constructs a new Zend_Gdata_Calendar_Extension_Link object.
+ * @see Zend_Gdata_App_Extension_Link#__construct
+ * @param Zend_Gdata_YouTube_Extension_Token $token
+ */
+ public function __construct($href = null, $rel = null, $type = null,
+ $hrefLang = null, $title = null, $length = null, $token = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($href, $rel, $type, $hrefLang, $title, $length);
+ $this->_token = $token;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_token != null) {
+ $element->appendChild($this->_token->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'token':
+ $token = new Zend_Gdata_YouTube_Extension_Token();
+ $token->transferFromDOM($child);
+ $this->_token = $token;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the value for this element's token attribute.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Token The token element.
+ */
+ public function getToken()
+ {
+ return $this->_token;
+ }
+
+ /**
+ * Set the value for this element's token attribute.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Token $value The desired value for this attribute.
+ * @return Zend_YouTube_Extension_Link The element being modified.
+ */
+ public function setToken($value)
+ {
+ $this->_token = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value of this element's token attribute.
+ *
+ * @return string The token's text value
+ */
+ public function getTokenValue()
+ {
+ return $this->getToken()->getText();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Location.php b/zend/library/Zend/Gdata/YouTube/Extension/Location.php
new file mode 100644
index 0000000..7c5907b
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Location.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Location.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:location element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Location extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'location';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/MediaContent.php b/zend/library/Zend/Gdata/YouTube/Extension/MediaContent.php
new file mode 100755
index 0000000..9cad525
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/MediaContent.php
@@ -0,0 +1,120 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaContent.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaContent
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaContent.php';
+
+/**
+ * Represents the media:content element of Media RSS.
+ * Represents media objects. Multiple media objects representing
+ * the same content can be represented using a
+ * media:group (Zend_Gdata_Media_Extension_MediaGroup) element.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_MediaContent extends Zend_Gdata_Media_Extension_MediaContent
+{
+ protected $_rootElement = 'content';
+ protected $_rootNamespace = 'media';
+
+ /*
+ * Format of the video
+ * Optional.
+ *
+ * @var int
+ */
+ protected $_format = null;
+
+
+ function __construct() {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_format!= null) {
+ $element->setAttributeNS($this->lookupNamespace('yt'), 'yt:format', $this->_format);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ $absoluteAttrName = $attribute->namespaceURI . ':' . $attribute->localName;
+ if ($absoluteAttrName == $this->lookupNamespace('yt') . ':' . 'format') {
+ $this->_format = $attribute->nodeValue;
+ } else {
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Returns the format of the media
+ * Optional.
+ *
+ * @return int The format of the media
+ */
+ public function getFormat()
+ {
+ return $this->_format;
+ }
+
+ /**
+ * Sets the format of the media
+ *
+ * @param int $value Format of the media
+ * @return Zend_Gdata_YouTube_Extension_MediaContent Provides a fluent interface
+ *
+ */
+ public function setFormat($value)
+ {
+ $this->_format = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/MediaCredit.php b/zend/library/Zend/Gdata/YouTube/Extension/MediaCredit.php
new file mode 100644
index 0000000..b118475
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/MediaCredit.php
@@ -0,0 +1,189 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaCredit.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_App_Extension
+ */
+require_once 'Zend/Gdata/App/Extension.php';
+
+/**
+ * Represents the YouTube specific media:credit element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_MediaCredit extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'credit';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_role = null;
+
+ /**
+ * @var string
+ */
+ protected $_scheme = null;
+
+ /**
+ * Represents the value of the yt:type attribute.
+ *
+ * Set to 'partner' if the uploader of this video is a YouTube
+ * partner.
+ *
+ * @var string
+ */
+ protected $_yttype = null;
+
+ /**
+ * Creates an individual MediaCredit object.
+ *
+ * @param string $text
+ * @param string $role
+ * @param string $scheme
+ */
+ public function __construct($text = null, $role = null, $scheme = null,
+ $yttype = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ $this->_role = $role;
+ $this->_scheme = $scheme;
+ $this->_yttype = $yttype;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_role !== null) {
+ $element->setAttribute('role', $this->_role);
+ }
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ if ($this->_yttype !== null) {
+ $element->setAttributeNS('http://gdata.youtube.com/schemas/2007',
+ 'yt:type', $this->_yttype);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'role':
+ $this->_role = $attribute->nodeValue;
+ break;
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ case 'type':
+ $this->_yttype = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getRole()
+ {
+ return $this->_role;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent
+ * interface
+ */
+ public function setRole($value)
+ {
+ $this->_role = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent
+ * interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getYTtype()
+ {
+ return $this->_yttype;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_Media_Extension_MediaCredit Provides a fluent
+ * interface
+ */
+ public function setYTtype($value)
+ {
+ $this->_yttype = $value;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/MediaGroup.php b/zend/library/Zend/Gdata/YouTube/Extension/MediaGroup.php
new file mode 100755
index 0000000..14d70ed
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/MediaGroup.php
@@ -0,0 +1,336 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaGroup.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaGroup
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaGroup.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_MediaContent
+ */
+require_once 'Zend/Gdata/YouTube/Extension/MediaContent.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Duration
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Duration.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_MediaRating
+ */
+require_once 'Zend/Gdata/YouTube/Extension/MediaRating.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_MediaCredit
+ */
+require_once 'Zend/Gdata/YouTube/Extension/MediaCredit.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Private
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Private.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_VideoId
+ */
+require_once 'Zend/Gdata/YouTube/Extension/VideoId.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Uploaded
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Uploaded.php';
+
+/**
+ * This class represents the media:group element of Media RSS.
+ * It allows the grouping of media:content elements that are
+ * different representations of the same content. When it exists,
+ * it is a child of an Entry (Atom) or Item (RSS).
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_MediaGroup extends Zend_Gdata_Media_Extension_MediaGroup
+{
+
+ protected $_rootElement = 'group';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var Zend_Gdata_YouTube_Extension_Duration
+ */
+ protected $_duration = null;
+
+ /**
+ * @var Zend_Gdata_YouTube_Extension_Private
+ */
+ protected $_private = null;
+
+ /**
+ * @var Zend_Gdata_YouTube_Extension_VideoId
+ */
+ protected $_videoid = null;
+
+ /**
+ * @var Zend_Gdata_YouTube_Extension_MediaRating
+ */
+ protected $_mediarating = null;
+
+ /**
+ * @var Zend_Gdata_YouTube_Extension_MediaCredit
+ */
+ protected $_mediacredit = null;
+
+ /**
+ * @var Zend_Gdata_YouTube_Extension_Uploaded
+ */
+ protected $_uploaded = null;
+
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_duration !== null) {
+ $element->appendChild(
+ $this->_duration->getDOM($element->ownerDocument));
+ }
+ if ($this->_private !== null) {
+ $element->appendChild(
+ $this->_private->getDOM($element->ownerDocument));
+ }
+ if ($this->_videoid != null) {
+ $element->appendChild(
+ $this->_videoid->getDOM($element->ownerDocument));
+ }
+ if ($this->_uploaded != null) {
+ $element->appendChild(
+ $this->_uploaded->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediacredit != null) {
+ $element->appendChild(
+ $this->_mediacredit->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediarating != null) {
+ $element->appendChild(
+ $this->_mediarating->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('media') . ':' . 'content':
+ $content = new Zend_Gdata_YouTube_Extension_MediaContent();
+ $content->transferFromDOM($child);
+ $this->_content[] = $content;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'rating':
+ $mediarating = new Zend_Gdata_YouTube_Extension_MediaRating();
+ $mediarating->transferFromDOM($child);
+ $this->_mediarating = $mediarating;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'credit':
+ $mediacredit = new Zend_Gdata_YouTube_Extension_MediaCredit();
+ $mediacredit->transferFromDOM($child);
+ $this->_mediacredit = $mediacredit;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'duration':
+ $duration = new Zend_Gdata_YouTube_Extension_Duration();
+ $duration->transferFromDOM($child);
+ $this->_duration = $duration;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'private':
+ $private = new Zend_Gdata_YouTube_Extension_Private();
+ $private->transferFromDOM($child);
+ $this->_private = $private;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'videoid':
+ $videoid = new Zend_Gdata_YouTube_Extension_VideoId();
+ $videoid ->transferFromDOM($child);
+ $this->_videoid = $videoid;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'uploaded':
+ $uploaded = new Zend_Gdata_YouTube_Extension_Uploaded();
+ $uploaded ->transferFromDOM($child);
+ $this->_uploaded = $uploaded;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Returns the duration value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_Duration
+ */
+ public function getDuration()
+ {
+ return $this->_duration;
+ }
+
+ /**
+ * Sets the duration value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_Duration $value The duration value
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setDuration($value)
+ {
+ $this->_duration = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the videoid value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_VideoId
+ */
+ public function getVideoId()
+ {
+ return $this->_videoid;
+ }
+
+ /**
+ * Sets the videoid value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_VideoId $value The video id value
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setVideoId($value)
+ {
+ $this->_videoid = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the yt:uploaded element
+ *
+ * @return Zend_Gdata_YouTube_Extension_Uploaded
+ */
+ public function getUploaded()
+ {
+ return $this->_uploaded;
+ }
+
+ /**
+ * Sets the yt:uploaded element
+ *
+ * @param Zend_Gdata_YouTube_Extension_Uploaded $value The uploaded value
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setUploaded($value)
+ {
+ $this->_uploaded = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the private value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_Private
+ */
+ public function getPrivate()
+ {
+ return $this->_private;
+ }
+
+ /**
+ * Sets the private value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_Private $value The private value
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setPrivate($value)
+ {
+ $this->_private = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the rating value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_MediaRating
+ */
+ public function getMediaRating()
+ {
+ return $this->_mediarating;
+ }
+
+ /**
+ * Sets the media:rating value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_MediaRating $value The rating element
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setMediaRating($value)
+ {
+ $this->_mediarating = $value;
+ return $this;
+ }
+
+ /**
+ * Returns the media:credit value of this element
+ *
+ * @return Zend_Gdata_YouTube_Extension_MediaCredit
+ */
+ public function getMediaCredit()
+ {
+ return $this->_mediacredit;
+ }
+
+ /**
+ * Sets the media:credit value of this element
+ *
+ * @param Zend_Gdata_YouTube_Extension_MediaCredit $value The credit element
+ * @return Zend_Gdata_YouTube_Extension_MediaGroup Provides a fluent
+ * interface
+ */
+ public function setMediaCredit($value)
+ {
+ $this->_mediacredit = $value;
+ return $this;
+ }
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/MediaRating.php b/zend/library/Zend/Gdata/YouTube/Extension/MediaRating.php
new file mode 100755
index 0000000..7acb307
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/MediaRating.php
@@ -0,0 +1,150 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Media
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaRating.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the media:rating element specific to YouTube.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_MediaRating extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'rating';
+ protected $_rootNamespace = 'media';
+
+ /**
+ * @var string
+ */
+ protected $_scheme = null;
+
+ /**
+ * @var string
+ */
+ protected $_country = null;
+
+ /**
+ * Constructs a new MediaRating element
+ *
+ * @param string $text
+ * @param string $scheme
+ * @param string $country
+ */
+ public function __construct($text = null, $scheme = null, $country = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_Media::$namespaces);
+ parent::__construct();
+ $this->_scheme = $scheme;
+ $this->_country = $country;
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_scheme !== null) {
+ $element->setAttribute('scheme', $this->_scheme);
+ }
+ if ($this->_country != null) {
+ $element->setAttribute('country', $this->_country);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'scheme':
+ $this->_scheme = $attribute->nodeValue;
+ break;
+ case 'country':
+ $this->_country = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getScheme()
+ {
+ return $this->_scheme;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_YouTube_Extension_MediaRating Provides a fluent interface
+ */
+ public function setScheme($value)
+ {
+ $this->_scheme = $value;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCountry()
+ {
+ return $this->_country;
+ }
+
+ /**
+ * @param string $value
+ * @return Zend_Gdata_YouTube_Extension_MediaRating Provides a fluent interface
+ */
+ public function setCountry($value)
+ {
+ $this->_country = $value;
+ return $this;
+ }
+
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Movies.php b/zend/library/Zend/Gdata/YouTube/Extension/Movies.php
new file mode 100644
index 0000000..cbf73cf
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Movies.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Movies.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:movies element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Movies extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'movies';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Music.php b/zend/library/Zend/Gdata/YouTube/Extension/Music.php
new file mode 100644
index 0000000..88eca9d
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Music.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Music.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:music element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Music extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'music';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/NoEmbed.php b/zend/library/Zend/Gdata/YouTube/Extension/NoEmbed.php
new file mode 100644
index 0000000..e88f270
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/NoEmbed.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: NoEmbed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:noembed element used by the YouTube data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_NoEmbed extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'yt';
+ protected $_rootElement = 'noembed';
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_Extension_VideoShare object.
+ * @param bool $enabled(optional) The enabled value of the element.
+ */
+ public function __construct($enabled = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Occupation.php b/zend/library/Zend/Gdata/YouTube/Extension/Occupation.php
new file mode 100644
index 0000000..f523c4a
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Occupation.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Occupation.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:occupation element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Occupation extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'occupation';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/PlaylistId.php b/zend/library/Zend/Gdata/YouTube/Extension/PlaylistId.php
new file mode 100644
index 0000000..a8449a5
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/PlaylistId.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PlaylistId.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:playlistId element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_PlaylistId extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'playlistId';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/PlaylistTitle.php b/zend/library/Zend/Gdata/YouTube/Extension/PlaylistTitle.php
new file mode 100644
index 0000000..8e3263c
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/PlaylistTitle.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PlaylistTitle.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:playlistTitle element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_PlaylistTitle extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'playlistTitle';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Position.php b/zend/library/Zend/Gdata/YouTube/Extension/Position.php
new file mode 100644
index 0000000..95685f9
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Position.php
@@ -0,0 +1,90 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Position.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Data model class to represent a playlist item's position in the list (yt:position)
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Position extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'position';
+ protected $_rootNamespace = 'yt';
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_Extension_Position object.
+ *
+ * @param string $value (optional) The 1-based position in the playlist
+ */
+ public function __construct($value = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $value;
+ }
+
+ /**
+ * Get the value for the position in the playlist
+ *
+ * @return int The 1-based position in the playlist
+ */
+ public function getValue()
+ {
+ return $this->_text;
+ }
+
+ /**
+ * Set the value for the position in the playlist
+ *
+ * @param int $value The 1-based position in the playlist
+ * @return Zend_Gdata_Extension_Visibility The element being modified
+ */
+ public function setValue($value)
+ {
+ $this->_text = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getValue();
+ }
+
+}
+
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Private.php b/zend/library/Zend/Gdata/YouTube/Extension/Private.php
new file mode 100755
index 0000000..03d375b
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Private.php
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Private.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:private element used by the YouTube data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Private extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'yt';
+ protected $_rootElement = 'private';
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_Extension_Private object.
+ */
+ public function __construct()
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and valueare
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ parent::takeAttributeFromDOM($attribute);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/QueryString.php b/zend/library/Zend/Gdata/YouTube/Extension/QueryString.php
new file mode 100644
index 0000000..55b69b1
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/QueryString.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: QueryString.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:queryString element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_QueryString extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'queryString';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Racy.php b/zend/library/Zend/Gdata/YouTube/Extension/Racy.php
new file mode 100644
index 0000000..7aa3d92
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Racy.php
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Racy.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:racy element used by the YouTube data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Racy extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'yt';
+ protected $_rootElement = 'racy';
+ protected $_state = null;
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_Extension_Racy object.
+ * @param bool $state(optional) The state value of the element.
+ */
+ public function __construct($state = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_state = $state;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_state !== null) {
+ $element->setAttribute('state', $this->_state);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and value are
+ * stored in an array.
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'state':
+ $this->_state = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's state attribute.
+ *
+ * @return bool The value associated with this attribute.
+ */
+ public function getState()
+ {
+ return $this->_state;
+ }
+
+ /**
+ * Set the value for this element's state attribute.
+ *
+ * @param bool $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Racy The element being modified.
+ */
+ public function setState($value)
+ {
+ $this->_state = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ */
+ public function __toString()
+ {
+ return $this->_state;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Recorded.php b/zend/library/Zend/Gdata/YouTube/Extension/Recorded.php
new file mode 100644
index 0000000..655a3de
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Recorded.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Recorded.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:recorded element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Recorded extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'recorded';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Relationship.php b/zend/library/Zend/Gdata/YouTube/Extension/Relationship.php
new file mode 100644
index 0000000..563fdd6
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Relationship.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Relationship.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:relationship element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Relationship extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'relationship';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/ReleaseDate.php b/zend/library/Zend/Gdata/YouTube/Extension/ReleaseDate.php
new file mode 100644
index 0000000..b4a5261
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/ReleaseDate.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: ReleaseDate.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:releaseDate element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_ReleaseDate extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'releaseDate';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/School.php b/zend/library/Zend/Gdata/YouTube/Extension/School.php
new file mode 100644
index 0000000..912447f
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/School.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: School.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:school element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_School extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'school';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/State.php b/zend/library/Zend/Gdata/YouTube/Extension/State.php
new file mode 100644
index 0000000..bdc8af0
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/State.php
@@ -0,0 +1,193 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: State.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:state element used by the YouTube data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_State extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'yt';
+ protected $_rootElement = 'state';
+ protected $_name = null;
+ protected $_reasonCode = null;
+ protected $_helpUrl = null;
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_Extension_State object.
+ *
+ * @param string $explanation(optional) The explanation of this state
+ * @param string $name(optional) The name value
+ * @param string $reasonCode(optional) The reasonCode value
+ * @param string $helpUrl(optional) The helpUrl value
+ */
+ public function __construct($explanation = null, $name = null,
+ $reasonCode = null, $helpUrl = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $explanation;
+ $this->_name = $name;
+ $this->_reasonCode = $reasonCode;
+ $this->_helpUrl = $reasonCode;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_name !== null) {
+ $element->setAttribute('name', $this->_name);
+ }
+ if ($this->_reasonCode !== null) {
+ $element->setAttribute('reasonCode', $this->_reasonCode);
+ }
+ if ($this->_helpUrl !== null) {
+ $element->setAttribute('helpUrl', $this->_helpUrl);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and valueare
+ * stored in an array.
+ * TODO: Convert attributes to proper types
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'name':
+ $this->_name = $attribute->nodeValue;
+ break;
+ case 'reasonCode':
+ $this->_reasonCode = $attribute->nodeValue;
+ break;
+ case 'helpUrl':
+ $this->_helpUrl = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's name attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * Set the value for this element's name attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_State The element being modified.
+ */
+ public function setName($value)
+ {
+ $this->_name = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's reasonCode attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getReasonCode()
+ {
+ return $this->_reasonCode;
+ }
+
+ /**
+ * Set the value for this element's reasonCode attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_State The element being modified.
+ */
+ public function setReasonCode($value)
+ {
+ $this->_reasonCode = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's helpUrl attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getHelpUrl()
+ {
+ return $this->_helpUrl;
+ }
+
+ /**
+ * Set the value for this element's helpUrl attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_State The element being modified.
+ */
+ public function setHelpUrl($value)
+ {
+ $this->_helpUrl = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->_text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Statistics.php b/zend/library/Zend/Gdata/YouTube/Extension/Statistics.php
new file mode 100644
index 0000000..001c53d
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Statistics.php
@@ -0,0 +1,309 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Statistics.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:statistics element used by the YouTube data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Statistics extends Zend_Gdata_Extension
+{
+
+ protected $_rootNamespace = 'yt';
+ protected $_rootElement = 'statistics';
+
+ /**
+ * The videoWatchCount attribute specifies the number of videos
+ * that a user has watched on YouTube. The videoWatchCount attribute
+ * is only specified when the <yt:statistics> tag appears within a
+ * user profile entry.
+ *
+ * @var integer
+ */
+ protected $_videoWatchCount = null;
+
+ /**
+ * When the viewCount attribute refers to a video entry, the attribute
+ * specifies the number of times that the video has been viewed.
+ * When the viewCount attribute refers to a user profile, the attribute
+ * specifies the number of times that the user's profile has been
+ * viewed.
+ *
+ * @var integer
+ */
+ protected $_viewCount = null;
+
+ /**
+ * The subscriberCount attribute specifies the number of YouTube users
+ * who have subscribed to a particular user's YouTube channel.
+ * The subscriberCount attribute is only specified when the
+ * <yt:statistics> tag appears within a user profile entry.
+ *
+ * @var integer
+ */
+ protected $_subscriberCount = null;
+
+ /**
+ * The lastWebAccess attribute indicates the most recent time that
+ * a particular user used YouTube.
+ *
+ * @var string
+ */
+ protected $_lastWebAccess = null;
+
+ /**
+ * The favoriteCount attribute specifies the number of YouTube users
+ * who have added a video to their list of favorite videos. The
+ * favoriteCount attribute is only specified when the
+ * <yt:statistics> tag appears within a video entry.
+ *
+ * @var integer
+ */
+ protected $_favoriteCount = null;
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_Extension_Statistics object.
+ * @param string $viewCount(optional) The viewCount value
+ * @param string $videoWatchCount(optional) The videoWatchCount value
+ * @param string $subscriberCount(optional) The subscriberCount value
+ * @param string $lastWebAccess(optional) The lastWebAccess value
+ * @param string $favoriteCount(optional) The favoriteCount value
+ */
+ public function __construct($viewCount = null, $videoWatchCount = null,
+ $subscriberCount = null, $lastWebAccess = null,
+ $favoriteCount = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_viewCount = $viewCount;
+ $this->_videoWatchCount = $videoWatchCount;
+ $this->_subscriberCount = $subscriberCount;
+ $this->_lastWebAccess = $lastWebAccess;
+ $this->_favoriteCount = $favoriteCount;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_videoWatchCount !== null) {
+ $element->setAttribute('watchCount', $this->_videoWatchCount);
+ }
+ if ($this->_viewCount !== null) {
+ $element->setAttribute('viewCount', $this->_viewCount);
+ }
+ if ($this->_subscriberCount !== null) {
+ $element->setAttribute('subscriberCount',
+ $this->_subscriberCount);
+ }
+ if ($this->_lastWebAccess !== null) {
+ $element->setAttribute('lastWebAccess',
+ $this->_lastWebAccess);
+ }
+ if ($this->_favoriteCount !== null) {
+ $element->setAttribute('favoriteCount',
+ $this->_favoriteCount);
+ }
+ return $element;
+ }
+
+ /**
+ * Given a DOMNode representing an attribute, tries to map the data into
+ * instance members. If no mapping is defined, the name and valueare
+ * stored in an array.
+ * TODO: Convert attributes to proper types
+ *
+ * @param DOMNode $attribute The DOMNode attribute needed to be handled
+ */
+ protected function takeAttributeFromDOM($attribute)
+ {
+ switch ($attribute->localName) {
+ case 'videoWatchCount':
+ $this->_videoWatchCount = $attribute->nodeValue;
+ break;
+ case 'viewCount':
+ $this->_viewCount = $attribute->nodeValue;
+ break;
+ case 'subscriberCount':
+ $this->_subscriberCount = $attribute->nodeValue;
+ break;
+ case 'lastWebAccess':
+ $this->_lastWebAccess = $attribute->nodeValue;
+ break;
+ case 'favoriteCount':
+ $this->_favoriteCount = $attribute->nodeValue;
+ break;
+ default:
+ parent::takeAttributeFromDOM($attribute);
+ }
+ }
+
+ /**
+ * Get the value for this element's viewCount attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getViewCount()
+ {
+ return $this->_viewCount;
+ }
+
+ /**
+ * Set the value for this element's viewCount attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setViewCount($value)
+ {
+ $this->_viewCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's videoWatchCount attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getVideoWatchCount()
+ {
+ return $this->_videoWatchCount;
+ }
+
+ /**
+ * Set the value for this element's videoWatchCount attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setVideoWatchCount($value)
+ {
+ $this->_videoWatchCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's subscriberCount attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getSubscriberCount()
+ {
+ return $this->_subscriberCount;
+ }
+
+ /**
+ * Set the value for this element's subscriberCount attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setSubscriberCount($value)
+ {
+ $this->_subscriberCount = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's lastWebAccess attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getLastWebAccess()
+ {
+ return $this->_lastWebAccess;
+ }
+
+ /**
+ * Set the value for this element's lastWebAccess attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setLastWebAccess($value)
+ {
+ $this->_lastWebAccess = $value;
+ return $this;
+ }
+
+ /**
+ * Get the value for this element's favoriteCount attribute.
+ *
+ * @return int The value associated with this attribute.
+ */
+ public function getFavoriteCount()
+ {
+ return $this->_favoriteCount;
+ }
+
+ /**
+ * Set the value for this element's favoriteCount attribute.
+ *
+ * @param int $value The desired value for this attribute.
+ * @return Zend_Gdata_YouTube_Extension_Statistics The element being
+ * modified.
+ */
+ public function setFavoriteCount($value)
+ {
+ $this->_favoriteCount = $value;
+ return $this;
+ }
+
+ /**
+ * Magic toString method allows using this directly via echo
+ * Works best in PHP >= 4.2.0
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return 'View Count=' . $this->_viewCount .
+ ' VideoWatchCount=' . $this->_videoWatchCount .
+ ' SubscriberCount=' . $this->_subscriberCount .
+ ' LastWebAccess=' . $this->_lastWebAccess .
+ ' FavoriteCount=' . $this->_favoriteCount;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Status.php b/zend/library/Zend/Gdata/YouTube/Extension/Status.php
new file mode 100644
index 0000000..ff25276
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Status.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Status.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:status element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Status extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'status';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Token.php b/zend/library/Zend/Gdata/YouTube/Extension/Token.php
new file mode 100755
index 0000000..4ddf4b2
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Token.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Token.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:token element used by the YouTube data API
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Token extends Zend_Gdata_App_Extension
+{
+
+ protected $_rootNamespace = 'yt';
+ protected $_rootElement = 'token';
+
+ /**
+ * Constructs a new Zend_Gdata_YouTube_Extension_Token object.
+ */
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ return $element;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Uploaded.php b/zend/library/Zend/Gdata/YouTube/Extension/Uploaded.php
new file mode 100644
index 0000000..3a51a48
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Uploaded.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Uploaded.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:uploaded element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Uploaded extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'uploaded';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/Username.php b/zend/library/Zend/Gdata/YouTube/Extension/Username.php
new file mode 100644
index 0000000..b489183
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/Username.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Username.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:username element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_Username extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'username';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/Extension/VideoId.php b/zend/library/Zend/Gdata/YouTube/Extension/VideoId.php
new file mode 100644
index 0000000..81c3e31
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/Extension/VideoId.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: VideoId.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension
+ */
+require_once 'Zend/Gdata/Extension.php';
+
+/**
+ * Represents the yt:videoid element
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_Extension_VideoId extends Zend_Gdata_Extension
+{
+
+ protected $_rootElement = 'videoid';
+ protected $_rootNamespace = 'yt';
+
+ public function __construct($text = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct();
+ $this->_text = $text;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/InboxEntry.php b/zend/library/Zend/Gdata/YouTube/InboxEntry.php
new file mode 100644
index 0000000..46a1d2f
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/InboxEntry.php
@@ -0,0 +1,281 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: InboxEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Entry
+ */
+require_once 'Zend/Gdata/Media/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension_Rating
+ */
+require_once 'Zend/Gdata/Extension/Rating.php';
+
+/**
+ * @see Zend_Gdata_Extension_Comments
+ */
+require_once 'Zend/Gdata/Extension/Comments.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Statistics
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Statistics.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Description
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Description.php';
+
+
+/**
+ * Represents the YouTube message flavor of an Atom entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_InboxEntry extends Zend_Gdata_Media_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_YouTube_InboxEntry';
+
+ /**
+ * The gd:comments element of this entry.
+ *
+ * @var Zend_Gdata_Extension_Comments
+ */
+ protected $_comments = null;
+
+ /**
+ * The gd:rating element of this entry.
+ *
+ * @var Zend_Gdata_Extension_Rating
+ */
+ protected $_rating = null;
+
+ /**
+ * The yt:statistics element of this entry.
+ *
+ * @var Zend_Gdata_YouTube_Extension_Statistics
+ */
+ protected $_statistics = null;
+
+ /**
+ * The yt:description element of this entry.
+ *
+ * @var Zend_Gdata_YouTube_Extension_Description
+ */
+ protected $_description = null;
+
+ /**
+ * Creates a subscription entry, representing an individual subscription
+ * in a list of subscriptions, usually associated with an individual user.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_description != null) {
+ $element->appendChild(
+ $this->_description->getDOM($element->ownerDocument));
+ }
+ if ($this->_rating != null) {
+ $element->appendChild(
+ $this->_rating->getDOM($element->ownerDocument));
+ }
+ if ($this->_statistics != null) {
+ $element->appendChild(
+ $this->_statistics->getDOM($element->ownerDocument));
+ }
+ if ($this->_comments != null) {
+ $element->appendChild(
+ $this->_comments->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'comments':
+ $comments = new Zend_Gdata_Extension_Comments();
+ $comments->transferFromDOM($child);
+ $this->_comments = $comments;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'rating':
+ $rating = new Zend_Gdata_Extension_Rating();
+ $rating->transferFromDOM($child);
+ $this->_rating = $rating;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'description':
+ $description = new Zend_Gdata_YouTube_Extension_Description();
+ $description->transferFromDOM($child);
+ $this->_description = $description;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'statistics':
+ $statistics = new Zend_Gdata_YouTube_Extension_Statistics();
+ $statistics->transferFromDOM($child);
+ $this->_statistics = $statistics;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Get the yt:description
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_Description|null
+ */
+ public function getDescription()
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getDescription ' .
+ ' method is only supported in version 1 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_description;
+ }
+ }
+
+ /**
+ * Sets the yt:description element for a new inbox entry.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Description $description The
+ * description.
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_InboxEntry Provides a fluent interface
+ */
+ public function setDescription($description = null)
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setDescription ' .
+ ' method is only supported in version 1 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_description = $description;
+ return $this;
+ }
+ }
+
+ /**
+ * Get the gd:rating element for the inbox entry
+ *
+ * @return Zend_Gdata_Extension_Rating|null
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * Sets the gd:rating element for the inbox entry
+ *
+ * @param Zend_Gdata_Extension_Rating $rating The rating for the video in
+ * the message
+ * @return Zend_Gdata_YouTube_InboxEntry Provides a fluent interface
+ */
+ public function setRating($rating = null)
+ {
+ $this->_rating = $rating;
+ return $this;
+ }
+
+ /**
+ * Get the gd:comments element of the inbox entry.
+ *
+ * @return Zend_Gdata_Extension_Comments|null
+ */
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * Sets the gd:comments element for the inbox entry
+ *
+ * @param Zend_Gdata_Extension_Comments $comments The comments feed link
+ * @return Zend_Gdata_YouTube_InboxEntry Provides a fluent interface
+ */
+ public function setComments($comments = null)
+ {
+ $this->_comments = $comments;
+ return $this;
+ }
+
+ /**
+ * Get the yt:statistics element for the inbox entry
+ *
+ * @return Zend_Gdata_YouTube_Extension_Statistics|null
+ */
+ public function getStatistics()
+ {
+ return $this->_statistics;
+ }
+
+ /**
+ * Sets the yt:statistics element for the inbox entry
+ *
+ * @param Zend_Gdata_YouTube_Extension_Statistics $statistics The
+ * statistics element for the video in the message
+ * @return Zend_Gdata_YouTube_InboxEntry Provides a fluent interface
+ */
+ public function setStatistics($statistics = null)
+ {
+ $this->_statistics = $statistics;
+ return $this;
+ }
+
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/InboxFeed.php b/zend/library/Zend/Gdata/YouTube/InboxFeed.php
new file mode 100644
index 0000000..e30b343
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/InboxFeed.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: InboxFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Feed
+ */
+require_once 'Zend/Gdata/Media/Feed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_InboxEntry
+ */
+require_once 'Zend/Gdata/YouTube/InboxEntry.php';
+
+/**
+ * The YouTube inbox feed list flavor of an Atom Feed with media support
+ * Represents a list of individual inbox entries, where each contained entry is
+ * a message.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_InboxFeed extends Zend_Gdata_Media_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_InboxEntry';
+
+ /**
+ * Creates an Inbox feed, representing a list of messages,
+ * associated with an individual user.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/MediaEntry.php b/zend/library/Zend/Gdata/YouTube/MediaEntry.php
new file mode 100755
index 0000000..7356dd1
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/MediaEntry.php
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: MediaEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media
+ */
+require_once 'Zend/Gdata/Media.php';
+
+/**
+ * @see Zend_Gdata_Media_Entry
+ */
+require_once 'Zend/Gdata/Media/Entry.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_MediaGroup
+ */
+require_once 'Zend/Gdata/YouTube/Extension/MediaGroup.php';
+
+/**
+ * Represents the YouTube flavor of a Gdata Media Entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_MediaEntry extends Zend_Gdata_Media_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_YouTube_MediaEntry';
+
+ /**
+ * media:group element
+ *
+ * @var Zend_Gdata_YouTube_Extension_MediaGroup
+ */
+ protected $_mediaGroup = null;
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them as members of this entry based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('media') . ':' . 'group':
+ $mediaGroup = new Zend_Gdata_YouTube_Extension_MediaGroup();
+ $mediaGroup->transferFromDOM($child);
+ $this->_mediaGroup = $mediaGroup;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/PlaylistListEntry.php b/zend/library/Zend/Gdata/YouTube/PlaylistListEntry.php
new file mode 100644
index 0000000..1fc44f5
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/PlaylistListEntry.php
@@ -0,0 +1,300 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PlaylistListEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_YouTube
+ */
+require_once 'Zend/Gdata/YouTube.php';
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension_FeedLink
+ */
+require_once 'Zend/Gdata/Extension/FeedLink.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Description
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Description.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_PlaylistId
+ */
+require_once 'Zend/Gdata/YouTube/Extension/PlaylistId.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_CountHint
+ */
+require_once 'Zend/Gdata/YouTube/Extension/CountHint.php';
+
+/**
+ * Represents the YouTube video playlist flavor of an Atom entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_PlaylistListEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_YouTube_PlaylistListEntry';
+
+ /**
+ * Nested feed links
+ *
+ * @var array
+ */
+ protected $_feedLink = array();
+
+ /**
+ * Description of this playlist
+ *
+ * @deprecated Deprecated as of version 2 of the YouTube API.
+ * @var Zend_Gdata_YouTube_Extension_Description
+ */
+ protected $_description = null;
+
+ /**
+ * Id of this playlist
+ *
+ * @var Zend_Gdata_YouTube_Extension_PlaylistId
+ */
+ protected $_playlistId = null;
+
+ /**
+ * CountHint for this playlist.
+ *
+ * @var Zend_Gdata_YouTube_Extension_CountHint
+ */
+ protected $_countHint = null;
+
+ /**
+ * Creates a Playlist list entry, representing an individual playlist
+ * in a list of playlists, usually associated with an individual user.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_description != null) {
+ $element->appendChild($this->_description->getDOM($element->ownerDocument));
+ }
+ if ($this->_countHint != null) {
+ $element->appendChild($this->_countHint->getDOM($element->ownerDocument));
+ }
+ if ($this->_playlistId != null) {
+ $element->appendChild($this->_playlistId->getDOM($element->ownerDocument));
+ }
+ if ($this->_feedLink != null) {
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'description':
+ $description = new Zend_Gdata_YouTube_Extension_Description();
+ $description->transferFromDOM($child);
+ $this->_description = $description;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'countHint':
+ $countHint = new Zend_Gdata_YouTube_Extension_CountHint();
+ $countHint->transferFromDOM($child);
+ $this->_countHint = $countHint;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'playlistId':
+ $playlistId = new Zend_Gdata_YouTube_Extension_PlaylistId();
+ $playlistId->transferFromDOM($child);
+ $this->_playlistId = $playlistId;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink':
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets the description relating to the playlist.
+ *
+ * @deprecated Deprecated as of version 2 of the YouTube API.
+ * @param Zend_Gdata_YouTube_Extension_Description $description The description relating to the video
+ * @return Zend_Gdata_YouTube_PlaylistListEntry Provides a fluent interface
+ */
+ public function setDescription($description = null)
+ {
+ if ($this->getMajorProtocolVersion() >= 2) {
+ $this->setSummary($description);
+ } else {
+ $this->_description = $description;
+ }
+ return $this;
+ }
+
+ /**
+ * Returns the description relating to the video.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Description The description
+ * relating to the video
+ */
+ public function getDescription()
+ {
+ if ($this->getMajorProtocolVersion() >= 2) {
+ return $this->getSummary();
+ } else {
+ return $this->_description;
+ }
+ }
+
+ /**
+ * Returns the countHint relating to the playlist.
+ *
+ * The countHint is the number of videos on a playlist.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_CountHint The count of videos on
+ * a playlist.
+ */
+ public function getCountHint()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The yt:countHint ' .
+ 'element is not supported in versions earlier than 2.');
+ } else {
+ return $this->_countHint;
+ }
+ }
+
+ /**
+ * Returns the Id relating to the playlist.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_PlaylistId The id of this playlist.
+ */
+ public function getPlaylistId()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The yt:playlistId ' .
+ 'element is not supported in versions earlier than 2.');
+ } else {
+ return $this->_playlistId;
+ }
+ }
+
+ /**
+ * Sets the array of embedded feeds related to the playlist
+ *
+ * @param array $feedLink The array of embedded feeds relating to the video
+ * @return Zend_Gdata_YouTube_PlaylistListEntry Provides a fluent interface
+ */
+ public function setFeedLink($feedLink = null)
+ {
+ $this->_feedLink = $feedLink;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL of the playlist video feed
+ *
+ * @return string The URL of the playlist video feed
+ */
+ public function getPlaylistVideoFeedUrl()
+ {
+ if ($this->getMajorProtocolVersion() >= 2) {
+ return $this->getContent()->getSrc();
+ } else {
+ return $this->getFeedLink(Zend_Gdata_YouTube::PLAYLIST_REL)->href;
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/PlaylistListFeed.php b/zend/library/Zend/Gdata/YouTube/PlaylistListFeed.php
new file mode 100644
index 0000000..6fbe006
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/PlaylistListFeed.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PlaylistListFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Feed
+ */
+require_once 'Zend/Gdata/Media/Feed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_PlaylistListEntry
+ */
+require_once 'Zend/Gdata/YouTube/PlaylistListEntry.php';
+
+/**
+ * The YouTube video playlist flavor of an Atom Feed with media support
+ * Represents a list of individual playlists, where each contained entry is
+ * a playlist.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_PlaylistListFeed extends Zend_Gdata_Media_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_PlaylistListEntry';
+
+ /**
+ * Creates a Playlist list feed, representing a list of playlists,
+ * usually associated with an individual user.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/PlaylistVideoEntry.php b/zend/library/Zend/Gdata/YouTube/PlaylistVideoEntry.php
new file mode 100644
index 0000000..79c59a8
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/PlaylistVideoEntry.php
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PlaylistVideoEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_YouTube_VideoEntry
+ */
+require_once 'Zend/Gdata/YouTube/VideoEntry.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Position
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Position.php';
+
+/**
+ * Represents the YouTube video playlist flavor of an Atom entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_PlaylistVideoEntry extends Zend_Gdata_YouTube_VideoEntry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_YouTube_PlaylistVideoEntry';
+
+ /**
+ * Position of the entry in the feed, as specified by the user
+ *
+ * @var Zend_Gdata_YouTube_Extension_Position
+ */
+ protected $_position = null;
+
+ /**
+ * Creates a Playlist video entry, representing an individual video
+ * in a list of videos contained within a specific playlist
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_position !== null) {
+ $element->appendChild($this->_position->getDOM($element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'position':
+ $position = new Zend_Gdata_YouTube_Extension_Position();
+ $position->transferFromDOM($child);
+ $this->_position = $position;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+
+ /**
+ * Sets the array of embedded feeds related to the video
+ *
+ * @param Zend_Gdata_YouTube_Extension_Position $position
+ * The position of the entry in the feed, as specified by the user.
+ * @return Zend_Gdata_YouTube_PlaylistVideoEntry Provides a fluent interface
+ */
+ public function setPosition($position = null)
+ {
+ $this->_position = $position;
+ return $this;
+ }
+
+ /**
+ * Returns the position of the entry in the feed, as specified by the user
+ *
+ * @return Zend_Gdata_YouTube_Extension_Position The position
+ */
+ public function getPosition()
+ {
+ return $this->_position;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/PlaylistVideoFeed.php b/zend/library/Zend/Gdata/YouTube/PlaylistVideoFeed.php
new file mode 100644
index 0000000..e4b2b1b
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/PlaylistVideoFeed.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: PlaylistVideoFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Feed
+ */
+require_once 'Zend/Gdata/Media/Feed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_PlaylistVideoEntry
+ */
+require_once 'Zend/Gdata/YouTube/PlaylistVideoEntry.php';
+
+/**
+ * The YouTube video playlist flavor of an Atom Feed with media support
+ * Represents a list of videos contained in a playlist. Each entry in this
+ * feed represents an individual video.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_PlaylistVideoFeed extends Zend_Gdata_Media_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_PlaylistVideoEntry';
+
+ /**
+ * Creates a Play Video feed, representing a list of videos contained
+ * within a single playlist.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/SubscriptionEntry.php b/zend/library/Zend/Gdata/YouTube/SubscriptionEntry.php
new file mode 100644
index 0000000..5ae402e
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/SubscriptionEntry.php
@@ -0,0 +1,446 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: SubscriptionEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension_FeedLink
+ */
+require_once 'Zend/Gdata/Extension/FeedLink.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Description
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Description.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_PlaylistTitle
+ */
+require_once 'Zend/Gdata/YouTube/Extension/PlaylistTitle.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_PlaylistId
+ */
+require_once 'Zend/Gdata/YouTube/Extension/PlaylistId.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaThumbnail
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaThumbnail.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Username
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Username.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_CountHint
+ */
+require_once 'Zend/Gdata/YouTube/Extension/CountHint.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_QueryString
+ */
+require_once 'Zend/Gdata/YouTube/Extension/QueryString.php';
+
+/**
+ * Represents the YouTube video subscription flavor of an Atom entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_SubscriptionEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_YouTube_SubscriptionEntry';
+
+ /**
+ * Nested feed links
+ *
+ * @var array
+ */
+ protected $_feedLink = array();
+
+ /**
+ * The username of this entry.
+ *
+ * @var Zend_Gdata_YouTube_Extension_Username
+ */
+ protected $_username = null;
+
+ /**
+ * The playlist title for this entry.
+ *
+ * This element is only used on subscriptions to playlists.
+ *
+ * @var Zend_Gdata_YouTube_Extension_PlaylistTitle
+ */
+ protected $_playlistTitle = null;
+
+ /**
+ * The playlist id for this entry.
+ *
+ * This element is only used on subscriptions to playlists.
+ *
+ * @var Zend_Gdata_YouTube_Extension_PlaylistId
+ */
+ protected $_playlistId = null;
+
+ /**
+ * The media:thumbnail element for this entry.
+ *
+ * This element is only used on subscriptions to playlists.
+ *
+ * @var Zend_Gdata_Media_Extension_MediaThumbnail
+ */
+ protected $_mediaThumbnail = null;
+
+ /**
+ * The countHint for this entry.
+ *
+ * @var Zend_Gdata_YouTube_Extension_CountHint
+ */
+ protected $_countHint = null;
+
+ /**
+ * The queryString for this entry.
+ *
+ * @var Zend_Gdata_YouTube_Extension_QueryString
+ */
+ protected $_queryString = null;
+
+ /**
+ * Creates a subscription entry, representing an individual subscription
+ * in a list of subscriptions, usually associated with an individual user.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_countHint != null) {
+ $element->appendChild($this->_countHint->getDOM($element->ownerDocument));
+ }
+ if ($this->_playlistTitle != null) {
+ $element->appendChild($this->_playlistTitle->getDOM($element->ownerDocument));
+ }
+ if ($this->_playlistId != null) {
+ $element->appendChild($this->_playlistId->getDOM($element->ownerDocument));
+ }
+ if ($this->_mediaThumbnail != null) {
+ $element->appendChild($this->_mediaThumbnail->getDOM($element->ownerDocument));
+ }
+ if ($this->_username != null) {
+ $element->appendChild($this->_username->getDOM($element->ownerDocument));
+ }
+ if ($this->_queryString != null) {
+ $element->appendChild($this->_queryString->getDOM($element->ownerDocument));
+ }
+ if ($this->_feedLink != null) {
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('gd') . ':' . 'feedLink':
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'thumbnail':
+ $mediaThumbnail = new Zend_Gdata_Media_Extension_MediaThumbnail();
+ $mediaThumbnail->transferFromDOM($child);
+ $this->_mediaThumbnail = $mediaThumbnail;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'countHint':
+ $countHint = new Zend_Gdata_YouTube_Extension_CountHint();
+ $countHint->transferFromDOM($child);
+ $this->_countHint = $countHint;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'playlistTitle':
+ $playlistTitle = new Zend_Gdata_YouTube_Extension_PlaylistTitle();
+ $playlistTitle->transferFromDOM($child);
+ $this->_playlistTitle = $playlistTitle;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'playlistId':
+ $playlistId = new Zend_Gdata_YouTube_Extension_PlaylistId();
+ $playlistId->transferFromDOM($child);
+ $this->_playlistId = $playlistId;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'queryString':
+ $queryString = new Zend_Gdata_YouTube_Extension_QueryString();
+ $queryString->transferFromDOM($child);
+ $this->_queryString = $queryString;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'username':
+ $username = new Zend_Gdata_YouTube_Extension_Username();
+ $username->transferFromDOM($child);
+ $this->_username = $username;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets the array of embedded feeds related to the video
+ *
+ * @param array $feedLink The array of embedded feeds relating to the video
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setFeedLink($feedLink = null)
+ {
+ $this->_feedLink = $feedLink;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Get the playlist title for a 'playlist' subscription.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_PlaylistId
+ */
+ public function getPlaylistId()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getPlaylistId ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_playlistId;
+ }
+ }
+
+ /**
+ * Sets the yt:playlistId element for a new playlist subscription.
+ *
+ * @param Zend_Gdata_YouTube_Extension_PlaylistId $id The id of
+ * the playlist to which to subscribe to.
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setPlaylistId($id = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setPlaylistTitle ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_playlistId = $id;
+ return $this;
+ }
+ }
+
+ /**
+ * Get the queryString of the subscription
+ *
+ * @return Zend_Gdata_YouTube_Extension_QueryString
+ */
+ public function getQueryString()
+ {
+ return $this->_queryString;
+ }
+
+ /**
+ * Sets the yt:queryString element for a new keyword subscription.
+ *
+ * @param Zend_Gdata_YouTube_Extension_QueryString $queryString The query
+ * string to subscribe to
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setQueryString($queryString = null)
+ {
+ $this->_queryString = $queryString;
+ return $this;
+ }
+
+ /**
+ * Get the playlist title for a 'playlist' subscription.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_PlaylistTitle
+ */
+ public function getPlaylistTitle()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getPlaylistTitle ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_playlistTitle;
+ }
+ }
+
+ /**
+ * Sets the yt:playlistTitle element for a new playlist subscription.
+ *
+ * @param Zend_Gdata_YouTube_Extension_PlaylistTitle $title The title of
+ * the playlist to which to subscribe to.
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setPlaylistTitle($title = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setPlaylistTitle ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_playlistTitle = $title;
+ return $this;
+ }
+ }
+
+ /**
+ * Get the counthint for a subscription.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_CountHint
+ */
+ public function getCountHint()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getCountHint ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_countHint;
+ }
+ }
+
+ /**
+ * Get the thumbnail for a subscription.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail
+ */
+ public function getMediaThumbnail()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getMediaThumbnail ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_mediaThumbnail;
+ }
+ }
+
+ /**
+ * Get the username for a channel subscription.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Username
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Sets the username for a new channel subscription.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Username $username The username of
+ * the channel to which to subscribe to.
+ * @return Zend_Gdata_YouTube_SubscriptionEntry Provides a fluent interface
+ */
+ public function setUsername($username = null)
+ {
+ $this->_username = $username;
+ return $this;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/SubscriptionFeed.php b/zend/library/Zend/Gdata/YouTube/SubscriptionFeed.php
new file mode 100644
index 0000000..6800c83
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/SubscriptionFeed.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: SubscriptionFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Feed
+ */
+require_once 'Zend/Gdata/Media/Feed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_SubscriptionEntry
+ */
+require_once 'Zend/Gdata/YouTube/SubscriptionEntry.php';
+
+/**
+ * The YouTube video subscription list flavor of an Atom Feed with media support
+ * Represents a list of individual subscriptions, where each contained entry is
+ * a subscription.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_SubscriptionFeed extends Zend_Gdata_Media_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_SubscriptionEntry';
+
+ /**
+ * Creates a Subscription feed, representing a list of subscriptions,
+ * usually associated with an individual user.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/UserProfileEntry.php b/zend/library/Zend/Gdata/YouTube/UserProfileEntry.php
new file mode 100644
index 0000000..4b859f6
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/UserProfileEntry.php
@@ -0,0 +1,1041 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: UserProfileEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Entry
+ */
+require_once 'Zend/Gdata/Entry.php';
+
+/**
+ * @see Zend_Gdata_Extension_FeedLink
+ */
+require_once 'Zend/Gdata/Extension/FeedLink.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Description
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Description.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_AboutMe
+ */
+require_once 'Zend/Gdata/YouTube/Extension/AboutMe.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Age
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Age.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Username
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Username.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Books
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Books.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Company
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Company.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Hobbies
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Hobbies.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Hometown
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Hometown.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Location
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Location.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Movies
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Movies.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Music
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Music.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Occupation
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Occupation.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_School
+ */
+require_once 'Zend/Gdata/YouTube/Extension/School.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Gender
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Gender.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Relationship
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Relationship.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_FirstName
+ */
+require_once 'Zend/Gdata/YouTube/Extension/FirstName.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_LastName
+ */
+require_once 'Zend/Gdata/YouTube/Extension/LastName.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Statistics
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Statistics.php';
+
+/**
+ * @see Zend_Gdata_Media_Extension_MediaThumbnail
+ */
+require_once 'Zend/Gdata/Media/Extension/MediaThumbnail.php';
+
+/**
+ * Represents the YouTube video playlist flavor of an Atom entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_UserProfileEntry extends Zend_Gdata_Entry
+{
+
+ protected $_entryClassName = 'Zend_Gdata_YouTube_UserProfileEntry';
+
+ /**
+ * Nested feed links
+ *
+ * @var array
+ */
+ protected $_feedLink = array();
+
+ /**
+ * The username for this profile entry
+ *
+ * @var string
+ */
+ protected $_username = null;
+
+ /**
+ * The description of the user
+ *
+ * @var string
+ */
+ protected $_description = null;
+
+ /**
+ * The contents of the 'About Me' field.
+ *
+ * @var string
+ */
+ protected $_aboutMe = null;
+
+ /**
+ * The age of the user
+ *
+ * @var int
+ */
+ protected $_age = null;
+
+ /**
+ * Books of interest to the user
+ *
+ * @var string
+ */
+ protected $_books = null;
+
+ /**
+ * Company
+ *
+ * @var string
+ */
+ protected $_company = null;
+
+ /**
+ * Hobbies
+ *
+ * @var string
+ */
+ protected $_hobbies = null;
+
+ /**
+ * Hometown
+ *
+ * @var string
+ */
+ protected $_hometown = null;
+
+ /**
+ * Location
+ *
+ * @var string
+ */
+ protected $_location = null;
+
+ /**
+ * Movies
+ *
+ * @var string
+ */
+ protected $_movies = null;
+
+ /**
+ * Music
+ *
+ * @var string
+ */
+ protected $_music = null;
+
+ /**
+ * Occupation
+ *
+ * @var string
+ */
+ protected $_occupation = null;
+
+ /**
+ * School
+ *
+ * @var string
+ */
+ protected $_school = null;
+
+ /**
+ * Gender
+ *
+ * @var string
+ */
+ protected $_gender = null;
+
+ /**
+ * Relationship
+ *
+ * @var string
+ */
+ protected $_relationship = null;
+
+ /**
+ * First name
+ *
+ * @var string
+ */
+ protected $_firstName = null;
+
+ /**
+ * Last name
+ *
+ * @var string
+ */
+ protected $_lastName = null;
+
+ /**
+ * Statistics
+ *
+ * @var Zend_Gdata_YouTube_Extension_Statistics
+ */
+ protected $_statistics = null;
+
+ /**
+ * Thumbnail
+ *
+ * @var Zend_Gdata_Media_Extension_MediaThumbnail
+ */
+ protected $_thumbnail = null;
+
+ /**
+ * Creates a User Profile entry, representing an individual user
+ * and their attributes.
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_description != null) {
+ $element->appendChild($this->_description->getDOM($element->ownerDocument));
+ }
+ if ($this->_aboutMe != null) {
+ $element->appendChild($this->_aboutMe->getDOM($element->ownerDocument));
+ }
+ if ($this->_age != null) {
+ $element->appendChild($this->_age->getDOM($element->ownerDocument));
+ }
+ if ($this->_username != null) {
+ $element->appendChild($this->_username->getDOM($element->ownerDocument));
+ }
+ if ($this->_books != null) {
+ $element->appendChild($this->_books->getDOM($element->ownerDocument));
+ }
+ if ($this->_company != null) {
+ $element->appendChild($this->_company->getDOM($element->ownerDocument));
+ }
+ if ($this->_hobbies != null) {
+ $element->appendChild($this->_hobbies->getDOM($element->ownerDocument));
+ }
+ if ($this->_hometown != null) {
+ $element->appendChild($this->_hometown->getDOM($element->ownerDocument));
+ }
+ if ($this->_location != null) {
+ $element->appendChild($this->_location->getDOM($element->ownerDocument));
+ }
+ if ($this->_movies != null) {
+ $element->appendChild($this->_movies->getDOM($element->ownerDocument));
+ }
+ if ($this->_music != null) {
+ $element->appendChild($this->_music->getDOM($element->ownerDocument));
+ }
+ if ($this->_occupation != null) {
+ $element->appendChild($this->_occupation->getDOM($element->ownerDocument));
+ }
+ if ($this->_school != null) {
+ $element->appendChild($this->_school->getDOM($element->ownerDocument));
+ }
+ if ($this->_gender != null) {
+ $element->appendChild($this->_gender->getDOM($element->ownerDocument));
+ }
+ if ($this->_relationship != null) {
+ $element->appendChild($this->_relationship->getDOM($element->ownerDocument));
+ }
+ if ($this->_firstName != null) {
+ $element->appendChild($this->_firstName->getDOM($element->ownerDocument));
+ }
+ if ($this->_lastName != null) {
+ $element->appendChild($this->_lastName->getDOM($element->ownerDocument));
+ }
+ if ($this->_statistics != null) {
+ $element->appendChild($this->_statistics->getDOM($element->ownerDocument));
+ }
+ if ($this->_thumbnail != null) {
+ $element->appendChild($this->_thumbnail->getDOM($element->ownerDocument));
+ }
+ if ($this->_feedLink != null) {
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM($element->ownerDocument));
+ }
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'description':
+ $description = new Zend_Gdata_YouTube_Extension_Description();
+ $description->transferFromDOM($child);
+ $this->_description = $description;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'aboutMe':
+ $aboutMe = new Zend_Gdata_YouTube_Extension_AboutMe();
+ $aboutMe->transferFromDOM($child);
+ $this->_aboutMe = $aboutMe;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'age':
+ $age = new Zend_Gdata_YouTube_Extension_Age();
+ $age->transferFromDOM($child);
+ $this->_age = $age;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'username':
+ $username = new Zend_Gdata_YouTube_Extension_Username();
+ $username->transferFromDOM($child);
+ $this->_username = $username;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'books':
+ $books = new Zend_Gdata_YouTube_Extension_Books();
+ $books->transferFromDOM($child);
+ $this->_books = $books;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'company':
+ $company = new Zend_Gdata_YouTube_Extension_Company();
+ $company->transferFromDOM($child);
+ $this->_company = $company;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'hobbies':
+ $hobbies = new Zend_Gdata_YouTube_Extension_Hobbies();
+ $hobbies->transferFromDOM($child);
+ $this->_hobbies = $hobbies;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'hometown':
+ $hometown = new Zend_Gdata_YouTube_Extension_Hometown();
+ $hometown->transferFromDOM($child);
+ $this->_hometown = $hometown;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'location':
+ $location = new Zend_Gdata_YouTube_Extension_Location();
+ $location->transferFromDOM($child);
+ $this->_location = $location;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'movies':
+ $movies = new Zend_Gdata_YouTube_Extension_Movies();
+ $movies->transferFromDOM($child);
+ $this->_movies = $movies;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'music':
+ $music = new Zend_Gdata_YouTube_Extension_Music();
+ $music->transferFromDOM($child);
+ $this->_music = $music;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'occupation':
+ $occupation = new Zend_Gdata_YouTube_Extension_Occupation();
+ $occupation->transferFromDOM($child);
+ $this->_occupation = $occupation;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'school':
+ $school = new Zend_Gdata_YouTube_Extension_School();
+ $school->transferFromDOM($child);
+ $this->_school = $school;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'gender':
+ $gender = new Zend_Gdata_YouTube_Extension_Gender();
+ $gender->transferFromDOM($child);
+ $this->_gender = $gender;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'relationship':
+ $relationship = new Zend_Gdata_YouTube_Extension_Relationship();
+ $relationship->transferFromDOM($child);
+ $this->_relationship = $relationship;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'firstName':
+ $firstName = new Zend_Gdata_YouTube_Extension_FirstName();
+ $firstName->transferFromDOM($child);
+ $this->_firstName = $firstName;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'lastName':
+ $lastName = new Zend_Gdata_YouTube_Extension_LastName();
+ $lastName->transferFromDOM($child);
+ $this->_lastName = $lastName;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'statistics':
+ $statistics = new Zend_Gdata_YouTube_Extension_Statistics();
+ $statistics->transferFromDOM($child);
+ $this->_statistics = $statistics;
+ break;
+ case $this->lookupNamespace('media') . ':' . 'thumbnail':
+ $thumbnail = new Zend_Gdata_Media_Extension_MediaThumbnail();
+ $thumbnail->transferFromDOM($child);
+ $this->_thumbnail = $thumbnail;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink':
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets the content of the 'about me' field.
+ *
+ * @param Zend_Gdata_YouTube_Extension_AboutMe $aboutMe The 'about me'
+ * information.
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setAboutMe($aboutMe = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setAboutMe ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_aboutMe = $aboutMe;
+ return $this;
+ }
+ }
+
+ /**
+ * Returns the contents of the 'about me' field.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_AboutMe The 'about me' information
+ */
+ public function getAboutMe()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getAboutMe ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_aboutMe;
+ }
+ }
+
+ /**
+ * Sets the content of the 'first name' field.
+ *
+ * @param Zend_Gdata_YouTube_Extension_FirstName $firstName The first name
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setFirstName($firstName = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setFirstName ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_firstName = $firstName;
+ return $this;
+ }
+ }
+
+ /**
+ * Returns the first name
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_FirstName The first name
+ */
+ public function getFirstName()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getFirstName ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_firstName;
+ }
+ }
+
+ /**
+ * Sets the content of the 'last name' field.
+ *
+ * @param Zend_Gdata_YouTube_Extension_LastName $lastName The last name
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setLastName($lastName = null)
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The setLastName ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ $this->_lastName = $lastName;
+ return $this;
+ }
+ }
+
+ /**
+ * Returns the last name
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_LastName The last name
+ */
+ public function getLastName()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getLastName ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_lastName;
+ }
+ }
+
+ /**
+ * Returns the statistics
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_Statistics The profile statistics
+ */
+ public function getStatistics()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getStatistics ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_statistics;
+ }
+ }
+
+ /**
+ * Returns the thumbnail
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_Media_Extension_MediaThumbnail The profile thumbnail
+ */
+ public function getThumbnail()
+ {
+ if (($this->getMajorProtocolVersion() == null) ||
+ ($this->getMajorProtocolVersion() == 1)) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException('The getThumbnail ' .
+ ' method is only supported as of version 2 of the YouTube ' .
+ 'API.');
+ } else {
+ return $this->_thumbnail;
+ }
+ }
+
+ /**
+ * Sets the age
+ *
+ * @param Zend_Gdata_YouTube_Extension_Age $age The age
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setAge($age = null)
+ {
+ $this->_age = $age;
+ return $this;
+ }
+
+ /**
+ * Returns the age
+ *
+ * @return Zend_Gdata_YouTube_Extension_Age The age
+ */
+ public function getAge()
+ {
+ return $this->_age;
+ }
+
+ /**
+ * Sets the username
+ *
+ * @param Zend_Gdata_YouTube_Extension_Username $username The username
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setUsername($username = null)
+ {
+ $this->_username = $username;
+ return $this;
+ }
+
+ /**
+ * Returns the username
+ *
+ * @return Zend_Gdata_YouTube_Extension_Username The username
+ */
+ public function getUsername()
+ {
+ return $this->_username;
+ }
+
+ /**
+ * Sets the books
+ *
+ * @param Zend_Gdata_YouTube_Extension_Books $books The books
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setBooks($books = null)
+ {
+ $this->_books = $books;
+ return $this;
+ }
+
+ /**
+ * Returns the books
+ *
+ * @return Zend_Gdata_YouTube_Extension_Books The books
+ */
+ public function getBooks()
+ {
+ return $this->_books;
+ }
+
+ /**
+ * Sets the company
+ *
+ * @param Zend_Gdata_YouTube_Extension_Company $company The company
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setCompany($company = null)
+ {
+ $this->_company = $company;
+ return $this;
+ }
+
+ /**
+ * Returns the company
+ *
+ * @return Zend_Gdata_YouTube_Extension_Company The company
+ */
+ public function getCompany()
+ {
+ return $this->_company;
+ }
+
+ /**
+ * Sets the hobbies
+ *
+ * @param Zend_Gdata_YouTube_Extension_Hobbies $hobbies The hobbies
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setHobbies($hobbies = null)
+ {
+ $this->_hobbies = $hobbies;
+ return $this;
+ }
+
+ /**
+ * Returns the hobbies
+ *
+ * @return Zend_Gdata_YouTube_Extension_Hobbies The hobbies
+ */
+ public function getHobbies()
+ {
+ return $this->_hobbies;
+ }
+
+ /**
+ * Sets the hometown
+ *
+ * @param Zend_Gdata_YouTube_Extension_Hometown $hometown The hometown
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setHometown($hometown = null)
+ {
+ $this->_hometown = $hometown;
+ return $this;
+ }
+
+ /**
+ * Returns the hometown
+ *
+ * @return Zend_Gdata_YouTube_Extension_Hometown The hometown
+ */
+ public function getHometown()
+ {
+ return $this->_hometown;
+ }
+
+ /**
+ * Sets the location
+ *
+ * @param Zend_Gdata_YouTube_Extension_Location $location The location
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setLocation($location = null)
+ {
+ $this->_location = $location;
+ return $this;
+ }
+
+ /**
+ * Returns the location
+ *
+ * @return Zend_Gdata_YouTube_Extension_Location The location
+ */
+ public function getLocation()
+ {
+ return $this->_location;
+ }
+
+ /**
+ * Sets the movies
+ *
+ * @param Zend_Gdata_YouTube_Extension_Movies $movies The movies
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setMovies($movies = null)
+ {
+ $this->_movies = $movies;
+ return $this;
+ }
+
+ /**
+ * Returns the movies
+ *
+ * @return Zend_Gdata_YouTube_Extension_Movies The movies
+ */
+ public function getMovies()
+ {
+ return $this->_movies;
+ }
+
+ /**
+ * Sets the music
+ *
+ * @param Zend_Gdata_YouTube_Extension_Music $music The music
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setMusic($music = null)
+ {
+ $this->_music = $music;
+ return $this;
+ }
+
+ /**
+ * Returns the music
+ *
+ * @return Zend_Gdata_YouTube_Extension_Music The music
+ */
+ public function getMusic()
+ {
+ return $this->_music;
+ }
+
+ /**
+ * Sets the occupation
+ *
+ * @param Zend_Gdata_YouTube_Extension_Occupation $occupation The occupation
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setOccupation($occupation = null)
+ {
+ $this->_occupation = $occupation;
+ return $this;
+ }
+
+ /**
+ * Returns the occupation
+ *
+ * @return Zend_Gdata_YouTube_Extension_Occupation The occupation
+ */
+ public function getOccupation()
+ {
+ return $this->_occupation;
+ }
+
+ /**
+ * Sets the school
+ *
+ * @param Zend_Gdata_YouTube_Extension_School $school The school
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setSchool($school = null)
+ {
+ $this->_school = $school;
+ return $this;
+ }
+
+ /**
+ * Returns the school
+ *
+ * @return Zend_Gdata_YouTube_Extension_School The school
+ */
+ public function getSchool()
+ {
+ return $this->_school;
+ }
+
+ /**
+ * Sets the gender
+ *
+ * @param Zend_Gdata_YouTube_Extension_Gender $gender The gender
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setGender($gender = null)
+ {
+ $this->_gender = $gender;
+ return $this;
+ }
+
+ /**
+ * Returns the gender
+ *
+ * @return Zend_Gdata_YouTube_Extension_Gender The gender
+ */
+ public function getGender()
+ {
+ return $this->_gender;
+ }
+
+ /**
+ * Sets the relationship
+ *
+ * @param Zend_Gdata_YouTube_Extension_Relationship $relationship The relationship
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setRelationship($relationship = null)
+ {
+ $this->_relationship = $relationship;
+ return $this;
+ }
+
+ /**
+ * Returns the relationship
+ *
+ * @return Zend_Gdata_YouTube_Extension_Relationship The relationship
+ */
+ public function getRelationship()
+ {
+ return $this->_relationship;
+ }
+
+ /**
+ * Sets the array of embedded feeds related to the video
+ *
+ * @param array $feedLink The array of embedded feeds relating to the video
+ * @return Zend_Gdata_YouTube_UserProfileEntry Provides a fluent interface
+ */
+ public function setFeedLink($feedLink = null)
+ {
+ $this->_feedLink = $feedLink;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL in the gd:feedLink with the provided rel value
+ *
+ * @param string $rel The rel value to find
+ * @return mixed Either the URL as a string or null if a feedLink wasn't
+ * found with the provided rel value
+ */
+ public function getFeedLinkHref($rel)
+ {
+ $feedLink = $this->getFeedLink($rel);
+ if ($feedLink !== null) {
+ return $feedLink->href;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the URL of the playlist list feed
+ *
+ * @return string The URL of the playlist video feed
+ */
+ public function getPlaylistListFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_PLAYLISTS_REL);
+ }
+
+ /**
+ * Returns the URL of the uploads feed
+ *
+ * @return string The URL of the uploads video feed
+ */
+ public function getUploadsFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_UPLOADS_REL);
+ }
+
+ /**
+ * Returns the URL of the subscriptions feed
+ *
+ * @return string The URL of the subscriptions feed
+ */
+ public function getSubscriptionsFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_SUBSCRIPTIONS_REL);
+ }
+
+ /**
+ * Returns the URL of the contacts feed
+ *
+ * @return string The URL of the contacts feed
+ */
+ public function getContactsFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_CONTACTS_REL);
+ }
+
+ /**
+ * Returns the URL of the favorites feed
+ *
+ * @return string The URL of the favorites feed
+ */
+ public function getFavoritesFeedUrl()
+ {
+ return $this->getFeedLinkHref(Zend_Gdata_YouTube::USER_FAVORITES_REL);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/VideoEntry.php b/zend/library/Zend/Gdata/YouTube/VideoEntry.php
new file mode 100644
index 0000000..b34f6da
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/VideoEntry.php
@@ -0,0 +1,1095 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: VideoEntry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Extension_Comments
+ */
+require_once 'Zend/Gdata/Extension/Comments.php';
+
+/**
+ * @see Zend_Gdata_Extension_FeedLink
+ */
+require_once 'Zend/Gdata/Extension/FeedLink.php';
+
+/**
+ * @see Zend_Gdata_YouTube_MediaEntry
+ */
+require_once 'Zend/Gdata/YouTube/MediaEntry.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_MediaGroup
+ */
+require_once 'Zend/Gdata/YouTube/Extension/MediaGroup.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_NoEmbed
+ */
+require_once 'Zend/Gdata/YouTube/Extension/NoEmbed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Statistics
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Statistics.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Link
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Link.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Racy
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Racy.php';
+
+/**
+ * @see Zend_Gdata_Extension_Rating
+ */
+require_once 'Zend/Gdata/Extension/Rating.php';
+
+/**
+ * @see Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+require_once 'Zend/Gdata/Geo/Extension/GeoRssWhere.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Control
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Control.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Recorded
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Recorded.php';
+
+/**
+ * @see Zend_Gdata_YouTube_Extension_Location
+ */
+require_once 'Zend/Gdata/YouTube/Extension/Location.php';
+
+/**
+ * Represents the YouTube video flavor of an Atom entry
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_VideoEntry extends Zend_Gdata_YouTube_MediaEntry
+{
+
+ const YOUTUBE_DEVELOPER_TAGS_SCHEMA = 'http://gdata.youtube.com/schemas/2007/developertags.cat';
+ const YOUTUBE_CATEGORY_SCHEMA = 'http://gdata.youtube.com/schemas/2007/categories.cat';
+ protected $_entryClassName = 'Zend_Gdata_YouTube_VideoEntry';
+
+ /**
+ * If null, the video can be embedded
+ *
+ * @var Zend_Gdata_YouTube_Extension_NoEmbed|null
+ */
+ protected $_noEmbed = null;
+
+ /**
+ * Specifies the statistics relating to the video.
+ *
+ * @var Zend_Gdata_YouTube_Extension_Statistics
+ */
+ protected $_statistics = null;
+
+ /**
+ * If not null, specifies that the video has racy content.
+ *
+ * @var Zend_Gdata_YouTube_Extension_Racy|null
+ */
+ protected $_racy = null;
+
+ /**
+ * If not null, specifies that the video is private.
+ *
+ * @var Zend_Gdata_YouTube_Extension_Private|null
+ */
+ protected $_private = null;
+
+ /**
+ * Specifies the video's rating.
+ *
+ * @var Zend_Gdata_Extension_Rating
+ */
+ protected $_rating = null;
+
+ /**
+ * Specifies the comments associated with a video.
+ *
+ * @var Zend_Gdata_Extensions_Comments
+ */
+ protected $_comments = null;
+
+ /**
+ * Nested feed links
+ *
+ * @var array
+ */
+ protected $_feedLink = array();
+
+ /**
+ * Geo location for the video
+ *
+ * @var Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+ protected $_where = null;
+
+ /**
+ * Recording date for the video
+ *
+ * @var Zend_Gdata_YouTube_Extension_Recorded|null
+ */
+ protected $_recorded = null;
+
+ /**
+ * Location informtion for the video
+ *
+ * @var Zend_Gdata_YouTube_Extension_Location|null
+ */
+ protected $_location = null;
+
+ /**
+ * Creates a Video entry, representing an individual video
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+ /**
+ * Retrieves a DOMElement which corresponds to this element and all
+ * child properties. This is used to build an entry back into a DOM
+ * and eventually XML text for sending to the server upon updates, or
+ * for application storage/persistence.
+ *
+ * @param DOMDocument $doc The DOMDocument used to construct DOMElements
+ * @return DOMElement The DOMElement representing this element and all
+ * child properties.
+ */
+ public function getDOM($doc = null, $majorVersion = 1, $minorVersion = null)
+ {
+ $element = parent::getDOM($doc, $majorVersion, $minorVersion);
+ if ($this->_noEmbed != null) {
+ $element->appendChild($this->_noEmbed->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_statistics != null) {
+ $element->appendChild($this->_statistics->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_racy != null) {
+ $element->appendChild($this->_racy->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_recorded != null) {
+ $element->appendChild($this->_recorded->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_location != null) {
+ $element->appendChild($this->_location->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_rating != null) {
+ $element->appendChild($this->_rating->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_comments != null) {
+ $element->appendChild($this->_comments->getDOM(
+ $element->ownerDocument));
+ }
+ if ($this->_feedLink != null) {
+ foreach ($this->_feedLink as $feedLink) {
+ $element->appendChild($feedLink->getDOM(
+ $element->ownerDocument));
+ }
+ }
+ if ($this->_where != null) {
+ $element->appendChild($this->_where->getDOM(
+ $element->ownerDocument));
+ }
+ return $element;
+ }
+
+ /**
+ * Creates individual Entry objects of the appropriate type and
+ * stores them in the $_entry array based upon DOM data.
+ *
+ * @param DOMNode $child The DOMNode to process
+ */
+ protected function takeChildFromDOM($child)
+ {
+ $absoluteNodeName = $child->namespaceURI . ':' . $child->localName;
+
+ switch ($absoluteNodeName) {
+ case $this->lookupNamespace('yt') . ':' . 'statistics':
+ $statistics = new Zend_Gdata_YouTube_Extension_Statistics();
+ $statistics->transferFromDOM($child);
+ $this->_statistics = $statistics;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'racy':
+ $racy = new Zend_Gdata_YouTube_Extension_Racy();
+ $racy->transferFromDOM($child);
+ $this->_racy = $racy;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'recorded':
+ $recorded = new Zend_Gdata_YouTube_Extension_Recorded();
+ $recorded->transferFromDOM($child);
+ $this->_recorded = $recorded;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'location':
+ $location = new Zend_Gdata_YouTube_Extension_Location();
+ $location->transferFromDOM($child);
+ $this->_location = $location;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'rating':
+ $rating = new Zend_Gdata_Extension_Rating();
+ $rating->transferFromDOM($child);
+ $this->_rating = $rating;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'comments':
+ $comments = new Zend_Gdata_Extension_Comments();
+ $comments->transferFromDOM($child);
+ $this->_comments = $comments;
+ break;
+ case $this->lookupNamespace('yt') . ':' . 'noembed':
+ $noEmbed = new Zend_Gdata_YouTube_Extension_NoEmbed();
+ $noEmbed->transferFromDOM($child);
+ $this->_noEmbed = $noEmbed;
+ break;
+ case $this->lookupNamespace('gd') . ':' . 'feedLink':
+ $feedLink = new Zend_Gdata_Extension_FeedLink();
+ $feedLink->transferFromDOM($child);
+ $this->_feedLink[] = $feedLink;
+ break;
+ case $this->lookupNamespace('georss') . ':' . 'where':
+ $where = new Zend_Gdata_Geo_Extension_GeoRssWhere();
+ $where->transferFromDOM($child);
+ $this->_where = $where;
+ break;
+ case $this->lookupNamespace('atom') . ':' . 'link';
+ $link = new Zend_Gdata_YouTube_Extension_Link();
+ $link->transferFromDOM($child);
+ $this->_link[] = $link;
+ break;
+ case $this->lookupNamespace('app') . ':' . 'control':
+ $control = new Zend_Gdata_YouTube_Extension_Control();
+ $control->transferFromDOM($child);
+ $this->_control = $control;
+ break;
+ default:
+ parent::takeChildFromDOM($child);
+ break;
+ }
+ }
+
+ /**
+ * Sets when the video was recorded.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Recorded $recorded When the video was recorded
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setRecorded($recorded = null)
+ {
+ $this->_recorded = $recorded;
+ return $this;
+ }
+
+ /**
+ * Gets the date that the video was recorded.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Recorded|null
+ */
+ public function getRecorded()
+ {
+ return $this->_recorded;
+ }
+
+ /**
+ * Sets the location information.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Location $location Where the video
+ * was recorded
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setLocation($location = null)
+ {
+ $this->_location = $location;
+ return $this;
+ }
+
+ /**
+ * Gets the location where the video was recorded.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Location|null
+ */
+ public function getLocation()
+ {
+ return $this->_location;
+ }
+
+ /**
+ * If an instance of Zend_Gdata_YouTube_Extension_NoEmbed is passed in,
+ * the video cannot be embedded. Otherwise, if null is passsed in, the
+ * video is able to be embedded.
+ *
+ * @param Zend_Gdata_YouTube_Extension_NoEmbed $noEmbed Whether or not the
+ * video can be embedded.
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setNoEmbed($noEmbed = null)
+ {
+ $this->_noEmbed = $noEmbed;
+ return $this;
+ }
+
+ /**
+ * If the return value is an instance of
+ * Zend_Gdata_YouTube_Extension_NoEmbed, this video cannot be embedded.
+ *
+ * @return Zend_Gdata_YouTube_Extension_NoEmbed|null Whether or not the video can be embedded
+ */
+ public function getNoEmbed()
+ {
+ return $this->_noEmbed;
+ }
+
+ /**
+ * Checks whether the video is embeddable.
+ *
+ * @return bool Returns true if the video is embeddable.
+ */
+ public function isVideoEmbeddable()
+ {
+ if ($this->getNoEmbed() == null) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Sets the statistics relating to the video.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Statistics $statistics The statistics relating to the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setStatistics($statistics = null)
+ {
+ $this->_statistics = $statistics;
+ return $this;
+ }
+
+ /**
+ * Returns the statistics relating to the video.
+ *
+ * @return Zend_Gdata_YouTube_Extension_Statistics The statistics relating to the video
+ */
+ public function getStatistics()
+ {
+ return $this->_statistics;
+ }
+
+ /**
+ * Specifies that the video has racy content.
+ *
+ * @param Zend_Gdata_YouTube_Extension_Racy $racy The racy flag object
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setRacy($racy = null)
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException(
+ 'Calling getRacy() on a YouTube VideoEntry is deprecated ' .
+ 'as of version 2 of the API.');
+ }
+
+ $this->_racy = $racy;
+ return $this;
+ }
+
+ /**
+ * Returns the racy flag object.
+ *
+ * @throws Zend_Gdata_App_VersionException
+ * @return Zend_Gdata_YouTube_Extension_Racy|null The racy flag object
+ */
+ public function getRacy()
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException(
+ 'Calling getRacy() on a YouTube VideoEntry is deprecated ' .
+ 'as of version 2 of the API.');
+ }
+ return $this->_racy;
+ }
+
+ /**
+ * Sets the rating relating to the video.
+ *
+ * @param Zend_Gdata_Extension_Rating $rating The rating relating to the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setRating($rating = null)
+ {
+ $this->_rating = $rating;
+ return $this;
+ }
+
+ /**
+ * Returns the rating relating to the video.
+ *
+ * @return Zend_Gdata_Extension_Rating The rating relating to the video
+ */
+ public function getRating()
+ {
+ return $this->_rating;
+ }
+
+ /**
+ * Sets the comments relating to the video.
+ *
+ * @param Zend_Gdata_Extension_Comments $comments The comments relating to the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setComments($comments = null)
+ {
+ $this->_comments = $comments;
+ return $this;
+ }
+
+ /**
+ * Returns the comments relating to the video.
+ *
+ * @return Zend_Gdata_Extension_Comments The comments relating to the video
+ */
+ public function getComments()
+ {
+ return $this->_comments;
+ }
+
+ /**
+ * Sets the array of embedded feeds related to the video
+ *
+ * @param array $feedLink The array of embedded feeds relating to the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setFeedLink($feedLink = null)
+ {
+ $this->_feedLink = $feedLink;
+ return $this;
+ }
+
+ /**
+ * Get the feed link property for this entry.
+ *
+ * @see setFeedLink
+ * @param string $rel (optional) The rel value of the link to be found.
+ * If null, the array of links is returned.
+ * @return mixed If $rel is specified, a Zend_Gdata_Extension_FeedLink
+ * object corresponding to the requested rel value is returned
+ * if found, or null if the requested value is not found. If
+ * $rel is null or not specified, an array of all available
+ * feed links for this entry is returned, or null if no feed
+ * links are set.
+ */
+ public function getFeedLink($rel = null)
+ {
+ if ($rel == null) {
+ return $this->_feedLink;
+ } else {
+ foreach ($this->_feedLink as $feedLink) {
+ if ($feedLink->rel == $rel) {
+ return $feedLink;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Returns the link element relating to video responses.
+ *
+ * @return Zend_Gdata_App_Extension_Link
+ */
+ public function getVideoResponsesLink()
+ {
+ return $this->getLink(Zend_Gdata_YouTube::VIDEO_RESPONSES_REL);
+ }
+
+ /**
+ * Returns the link element relating to video ratings.
+ *
+ * @return Zend_Gdata_App_Extension_Link
+ */
+ public function getVideoRatingsLink()
+ {
+ return $this->getLink(Zend_Gdata_YouTube::VIDEO_RATINGS_REL);
+ }
+
+ /**
+ * Returns the link element relating to video complaints.
+ *
+ * @return Zend_Gdata_App_Extension_Link
+ */
+ public function getVideoComplaintsLink()
+ {
+ return $this->getLink(Zend_Gdata_YouTube::VIDEO_COMPLAINTS_REL);
+ }
+
+ /**
+ * Gets the YouTube video ID based upon the atom:id value
+ *
+ * @return string The video ID
+ */
+ public function getVideoId()
+ {
+ if ($this->getMajorProtocolVersion() == 2) {
+ $videoId = $this->getMediaGroup()->getVideoId()->text;
+ } else {
+ $fullId = $this->getId()->getText();
+ $position = strrpos($fullId, '/');
+ if ($position === false) {
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Slash not found in atom:id of ' . $fullId);
+ } else {
+ $videoId = substr($fullId, $position + 1);
+ }
+ }
+ return $videoId;
+ }
+
+ /**
+ * Gets the date that the video was recorded.
+ *
+ * @return string|null The date that the video was recorded
+ */
+ public function getVideoRecorded()
+ {
+ $recorded = $this->getRecorded();
+ if ($recorded != null) {
+ return $recorded->getText();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the date that the video was recorded.
+ *
+ * @param string $recorded The date that the video was recorded, in the
+ * format of '2001-06-19'
+ */
+ public function setVideoRecorded($recorded)
+ {
+ $this->setRecorded(
+ new Zend_Gdata_YouTube_Extension_Recorded($recorded));
+ return $this;
+ }
+
+ /**
+ * Gets the georss:where element
+ *
+ * @return Zend_Gdata_Geo_Extension_GeoRssWhere
+ */
+ public function getWhere()
+ {
+ return $this->_where;
+ }
+
+ /**
+ * Sets the georss:where element
+ *
+ * @param Zend_Gdata_Geo_Extension_GeoRssWhere $value The georss:where class value
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setWhere($value)
+ {
+ $this->_where = $value;
+ return $this;
+ }
+
+ /**
+ * Gets the title of the video as a string. null is returned
+ * if the video title is not available.
+ *
+ * @return string|null The title of the video
+ */
+ public function getVideoTitle()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getTitle() != null) {
+ return $this->getMediaGroup()->getTitle()->getText();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the title of the video as a string.
+ *
+ * @param string $title Title for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoTitle($title)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->setTitle(
+ new Zend_Gdata_Media_Extension_MediaTitle($title));
+ return $this;
+ }
+
+ /**
+ * Sets the description of the video as a string.
+ *
+ * @param string $description Description for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoDescription($description)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->setDescription(
+ new Zend_Gdata_Media_Extension_MediaDescription($description));
+ return $this;
+ }
+
+
+ /**
+ * Gets the description of the video as a string. null is returned
+ * if the video description is not available.
+ *
+ * @return string|null The description of the video
+ */
+ public function getVideoDescription()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getDescription() != null) {
+ return $this->getMediaGroup()->getDescription()->getText();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the URL of the YouTube video watch page. null is returned
+ * if the video watch page URL is not available.
+ *
+ * @return string|null The URL of the YouTube video watch page
+ */
+ public function getVideoWatchPageUrl()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getPlayer() != null &&
+ array_key_exists(0, $this->getMediaGroup()->getPlayer())) {
+ $players = $this->getMediaGroup()->getPlayer();
+ return $players[0]->getUrl();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets an array of the thumbnails representing the video.
+ * Each thumbnail is an element of the array, and is an
+ * array of the thumbnail properties - time, height, width,
+ * and url. For convient usage inside a foreach loop, an
+ * empty array is returned if there are no thumbnails.
+ *
+ * @return array An array of video thumbnails.
+ */
+ public function getVideoThumbnails()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getThumbnail() != null) {
+
+ $thumbnailArray = array();
+
+ foreach ($this->getMediaGroup()->getThumbnail() as $thumbnailObj) {
+ $thumbnail = array();
+ $thumbnail['time'] = $thumbnailObj->time;
+ $thumbnail['height'] = $thumbnailObj->height;
+ $thumbnail['width'] = $thumbnailObj->width;
+ $thumbnail['url'] = $thumbnailObj->url;
+ $thumbnailArray[] = $thumbnail;
+ }
+ return $thumbnailArray;
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Gets the URL of the flash player SWF. null is returned if the
+ * duration value is not available.
+ *
+ * @return string|null The URL of the flash player SWF
+ */
+ public function getFlashPlayerUrl()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ foreach ($this->getMediaGroup()->getContent() as $content) {
+ if ($content->getType() === 'application/x-shockwave-flash') {
+ return $content->getUrl();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets the duration of the video, in seconds. null is returned
+ * if the duration value is not available.
+ *
+ * @return string|null The duration of the video, in seconds.
+ */
+ public function getVideoDuration()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getDuration() != null) {
+ return $this->getMediaGroup()->getDuration()->getSeconds();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Checks whether the video is private.
+ *
+ * @return bool Return true if video is private
+ */
+ public function isVideoPrivate()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getPrivate() != null) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Sets video to private.
+ *
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoPrivate()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->setPrivate(new Zend_Gdata_YouTube_Extension_Private());
+ return $this;
+ }
+
+ /**
+ * Sets a private video to be public.
+ *
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoPublic()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->private = null;
+ return $this;
+ }
+
+ /**
+ * Gets an array of the tags assigned to this video. For convient
+ * usage inside a foreach loop, an empty array is returned when there
+ * are no tags assigned.
+ *
+ * @return array An array of the tags assigned to this video
+ */
+ public function getVideoTags()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ if ($this->getMediaGroup()->getKeywords() != null) {
+
+ $keywords = $this->getMediaGroup()->getKeywords();
+ $keywordsString = $keywords->getText();
+ if (strlen(trim($keywordsString)) > 0) {
+ return preg_split('/(, *)|,/', $keywordsString);
+ }
+ }
+ return array();
+ }
+
+ /**
+ * Sets the keyword tags for a video.
+ *
+ * @param mixed $tags Either a comma-separated string or an array
+ * of tags for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoTags($tags)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $keywords = new Zend_Gdata_Media_Extension_MediaKeywords();
+ if (is_array($tags)) {
+ $tags = implode(', ', $tags);
+ }
+ $keywords->setText($tags);
+ $this->getMediaGroup()->setKeywords($keywords);
+ return $this;
+ }
+
+ /**
+ * Gets the number of views for this video. null is returned if the
+ * number of views is not available.
+ *
+ * @return string|null The number of views for this video
+ */
+ public function getVideoViewCount()
+ {
+ if ($this->getStatistics() != null) {
+ return $this->getStatistics()->getViewCount();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the location specified for this video, if available. The location
+ * is returned as an array containing the keys 'longitude' and 'latitude'.
+ * null is returned if the location is not available.
+ *
+ * @return array|null The location specified for this video
+ */
+ public function getVideoGeoLocation()
+ {
+ if ($this->getWhere() != null &&
+ $this->getWhere()->getPoint() != null &&
+ ($position = $this->getWhere()->getPoint()->getPos()) != null) {
+
+ $positionString = $position->__toString();
+
+ if (strlen(trim($positionString)) > 0) {
+ $positionArray = explode(' ', trim($positionString));
+ if (count($positionArray) == 2) {
+ $returnArray = array();
+ $returnArray['latitude'] = $positionArray[0];
+ $returnArray['longitude'] = $positionArray[1];
+ return $returnArray;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets the rating information for this video, if available. The rating
+ * is returned as an array containing the keys 'average' and 'numRaters'.
+ * null is returned if the rating information is not available.
+ *
+ * @return array|null The rating information for this video
+ */
+ public function getVideoRatingInfo()
+ {
+ if ($this->getRating() != null) {
+ $returnArray = array();
+ $returnArray['average'] = $this->getRating()->getAverage();
+ $returnArray['numRaters'] = $this->getRating()->getNumRaters();
+ return $returnArray;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Gets the category of this video, if available. The category is returned
+ * as a string. Valid categories are found at:
+ * http://gdata.youtube.com/schemas/2007/categories.cat
+ * If the category is not set, null is returned.
+ *
+ * @return string|null The category of this video
+ */
+ public function getVideoCategory()
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $categories = $this->getMediaGroup()->getCategory();
+ if ($categories != null) {
+ foreach($categories as $category) {
+ if ($category->getScheme() == self::YOUTUBE_CATEGORY_SCHEMA) {
+ return $category->getText();
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Sets the category of the video as a string.
+ *
+ * @param string $category Categories for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoCategory($category)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $this->getMediaGroup()->setCategory(array(new Zend_Gdata_Media_Extension_MediaCategory($category, self::YOUTUBE_CATEGORY_SCHEMA)));
+ return $this;
+ }
+
+ /**
+ * Gets the developer tags for the video, if available and if client is
+ * authenticated with a valid developerKey. The tags are returned
+ * as an array.
+ * If no tags are set, null is returned.
+ *
+ * @return array|null The developer tags for this video or null if none were set.
+ */
+ public function getVideoDeveloperTags()
+ {
+ $developerTags = null;
+ $this->ensureMediaGroupIsNotNull();
+
+ $categoryArray = $this->getMediaGroup()->getCategory();
+ if ($categoryArray != null) {
+ foreach ($categoryArray as $category) {
+ if ($category instanceof Zend_Gdata_Media_Extension_MediaCategory) {
+ if ($category->getScheme() == self::YOUTUBE_DEVELOPER_TAGS_SCHEMA) {
+ $developerTags[] = $category->getText();
+ }
+ }
+ }
+ return $developerTags;
+ }
+ return null;
+ }
+
+ /**
+ * Adds a developer tag to array of tags for the video.
+ *
+ * @param string $developerTag DeveloperTag for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function addVideoDeveloperTag($developerTag)
+ {
+ $this->ensureMediaGroupIsNotNull();
+ $newCategory = new Zend_Gdata_Media_Extension_MediaCategory($developerTag, self::YOUTUBE_DEVELOPER_TAGS_SCHEMA);
+
+ if ($this->getMediaGroup()->getCategory() == null) {
+ $this->getMediaGroup()->setCategory($newCategory);
+ } else {
+ $categories = $this->getMediaGroup()->getCategory();
+ $categories[] = $newCategory;
+ $this->getMediaGroup()->setCategory($categories);
+ }
+ return $this;
+ }
+
+ /**
+ * Set multiple developer tags for the video as strings.
+ *
+ * @param array $developerTags Array of developerTag for the video
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface
+ */
+ public function setVideoDeveloperTags($developerTags)
+ {
+ foreach($developerTags as $developerTag) {
+ $this->addVideoDeveloperTag($developerTag);
+ }
+ return $this;
+ }
+
+
+ /**
+ * Get the current publishing state of the video.
+ *
+ * @return Zend_Gdata_YouTube_Extension_State|null The publishing state of this video
+ */
+ public function getVideoState()
+ {
+ $control = $this->getControl();
+ if ($control != null &&
+ $control->getDraft() != null &&
+ $control->getDraft()->getText() == 'yes') {
+
+ return $control->getState();
+ }
+ return null;
+ }
+
+ /**
+ * Get the VideoEntry's Zend_Gdata_YouTube_Extension_MediaGroup object.
+ * If the mediaGroup does not exist, then set it.
+ *
+ * @return void
+ */
+ public function ensureMediaGroupIsNotNull()
+ {
+ if ($this->getMediagroup() == null) {
+ $this->setMediagroup(new Zend_Gdata_YouTube_Extension_MediaGroup());
+ }
+ }
+
+ /**
+ * Helper function to conveniently set a video's rating.
+ *
+ * @param integer $ratingValue A number representing the rating. Must
+ * be between 1 and 5 inclusive.
+ * @throws Zend_Gdata_Exception
+ * @return Zend_Gdata_YouTube_VideoEntry Provides a fluent interface.
+ */
+ public function setVideoRating($ratingValue)
+ {
+ if ($ratingValue < 1 || $ratingValue > 5) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Rating for video entry must be between 1 and 5 inclusive.');
+ }
+
+ require_once 'Zend/Gdata/Extension/Rating.php';
+ $rating = new Zend_Gdata_Extension_Rating(null, 1, 5, null,
+ $ratingValue);
+ $this->setRating($rating);
+ return $this;
+ }
+
+ /**
+ * Retrieve the URL for a video's comment feed.
+ *
+ * @return string|null The URL if found, or null if not found.
+ */
+ public function getVideoCommentFeedUrl()
+ {
+ $commentsExtension = $this->getComments();
+ $commentsFeedUrl = null;
+ if ($commentsExtension) {
+ $commentsFeedLink = $commentsExtension->getFeedLink();
+ if ($commentsFeedLink) {
+ $commentsFeedUrl = $commentsFeedLink->getHref();
+ }
+ }
+ return $commentsFeedUrl;
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/VideoFeed.php b/zend/library/Zend/Gdata/YouTube/VideoFeed.php
new file mode 100644
index 0000000..ee2e277
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/VideoFeed.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: VideoFeed.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Gdata_Media_Feed
+ */
+require_once 'Zend/Gdata/Media/Feed.php';
+
+/**
+ * @see Zend_Gdata_YouTube_VideoEntry
+ */
+require_once 'Zend/Gdata/YouTube/VideoEntry.php';
+
+/**
+ * The YouTube video flavor of an Atom Feed with media support
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_VideoFeed extends Zend_Gdata_Media_Feed
+{
+
+ /**
+ * The classname for individual feed elements.
+ *
+ * @var string
+ */
+ protected $_entryClassName = 'Zend_Gdata_YouTube_VideoEntry';
+
+ /**
+ * Creates a Video feed, representing a list of videos
+ *
+ * @param DOMElement $element (optional) DOMElement from which this
+ * object should be constructed.
+ */
+ public function __construct($element = null)
+ {
+ $this->registerAllNamespaces(Zend_Gdata_YouTube::$namespaces);
+ parent::__construct($element);
+ }
+
+}
diff --git a/zend/library/Zend/Gdata/YouTube/VideoQuery.php b/zend/library/Zend/Gdata/YouTube/VideoQuery.php
new file mode 100644
index 0000000..aee80bb
--- /dev/null
+++ b/zend/library/Zend/Gdata/YouTube/VideoQuery.php
@@ -0,0 +1,540 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: VideoQuery.php 25185 2013-01-08 08:07:08Z frosch $
+ */
+
+/**
+ * Zend_Gdata_YouTube
+ */
+require_once('Zend/Gdata/YouTube.php');
+
+/**
+ * Zend_Gdata_Query
+ */
+require_once('Zend/Gdata/Query.php');
+
+/**
+ * Assists in constructing queries for YouTube videos
+ *
+ * @link http://code.google.com/apis/youtube/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage YouTube
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_YouTube_VideoQuery extends Zend_Gdata_Query
+{
+
+ /**
+ * Create Gdata_YouTube_VideoQuery object
+ */
+ public function __construct($url = null)
+ {
+ parent::__construct($url);
+ }
+
+ /**
+ * Sets the type of feed this query should be used to search
+ *
+ * @param string $feedType The type of feed
+ * @param string $videoId The ID of the video associated with this query
+ * @param string $entry The ID of the entry associated with this query
+ */
+ public function setFeedType($feedType, $videoId = null, $entry = null)
+ {
+ switch ($feedType) {
+ case 'top rated':
+ $this->_url = Zend_Gdata_YouTube::STANDARD_TOP_RATED_URI;
+ break;
+ case 'most viewed':
+ $this->_url = Zend_Gdata_YouTube::STANDARD_MOST_VIEWED_URI;
+ break;
+ case 'recently featured':
+ $this->_url = Zend_Gdata_YouTube::STANDARD_RECENTLY_FEATURED_URI;
+ break;
+ case 'mobile':
+ $this->_url = Zend_Gdata_YouTube::STANDARD_WATCH_ON_MOBILE_URI;
+ break;
+ case 'related':
+ if ($videoId === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Video ID must be set for feed of type: ' . $feedType);
+ } else {
+ $this->_url = Zend_Gdata_YouTube::VIDEO_URI . '/' . $videoId .
+ '/related';
+ }
+ break;
+ case 'responses':
+ if ($videoId === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Video ID must be set for feed of type: ' . $feedType);
+ } else {
+ $this->_url = Zend_Gdata_YouTube::VIDEO_URI . '/' . $videoId .
+ '/responses';
+ }
+ break;
+ case 'comments':
+ if ($videoId === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_Exception(
+ 'Video ID must be set for feed of type: ' . $feedType);
+ } else {
+ $this->_url = Zend_Gdata_YouTube::VIDEO_URI . '/' .
+ $videoId . '/comments';
+ if ($entry !== null) {
+ $this->_url .= '/' . $entry;
+ }
+ }
+ break;
+ default:
+ require_once 'Zend/Gdata/App/Exception.php';
+ throw new Zend_Gdata_App_Exception('Unknown feed type');
+ break;
+ }
+ }
+
+ /**
+ * Sets the location parameter for the query
+ *
+ * @param string $value
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setLocation($value)
+ {
+ switch($value) {
+ case null:
+ unset($this->_params['location']);
+ default:
+ $parameters = explode(',', $value);
+ if (count($parameters) != 2) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'You must provide 2 coordinates to the location ' .
+ 'URL parameter');
+ }
+
+ foreach($parameters as $param) {
+ $temp = trim($param);
+ // strip off the optional exclamation mark for numeric check
+ if (substr($temp, -1) == '!') {
+ $temp = substr($temp, 0, -1);
+ }
+ if (!is_numeric($temp)) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Value provided to location parameter must' .
+ ' be in the form of two coordinates');
+ }
+ }
+ $this->_params['location'] = $value;
+ }
+ }
+
+ /**
+ * Get the value of the location parameter
+ *
+ * @return string|null Return the location if it exists, null otherwise.
+ */
+ public function getLocation()
+ {
+ if (array_key_exists('location', $this->_params)) {
+ return $this->_params['location'];
+ } else {
+ return null;
+ }
+ }
+
+
+ /**
+ * Sets the location-radius parameter for the query
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setLocationRadius($value)
+ {
+ switch($value) {
+ case null:
+ unset($this->_params['location-radius']);
+ default:
+ $this->_params['location-radius'] = $value;
+ }
+ }
+
+ /**
+ * Get the value of the location-radius parameter
+ *
+ * @return string|null Return the location-radius if it exists,
+ * null otherwise.
+ */
+ public function getLocationRadius()
+ {
+ if (array_key_exists('location-radius', $this->_params)) {
+ return $this->_params['location-radius'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the time period over which this query should apply
+ *
+ * @param string $value
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setTime($value = null)
+ {
+ switch ($value) {
+ case 'today':
+ $this->_params['time'] = 'today';
+ break;
+ case 'this_week':
+ $this->_params['time'] = 'this_week';
+ break;
+ case 'this_month':
+ $this->_params['time'] = 'this_month';
+ break;
+ case 'all_time':
+ $this->_params['time'] = 'all_time';
+ break;
+ case null:
+ unset($this->_params['time']);
+ default:
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Unknown time value');
+ break;
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the value of the uploader parameter
+ *
+ * @param string $value The value of the uploader parameter. Currently this
+ * can only be set to the value of 'partner'.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setUploader($value = null)
+ {
+ switch ($value) {
+ case 'partner':
+ $this->_params['uploader'] = 'partner';
+ break;
+ case null:
+ unset($this->_params['uploader']);
+ break;
+ default:
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Unknown value for uploader');
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the formatted video query (vq) URL param value
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setVideoQuery($value = null)
+ {
+ if ($value != null) {
+ $this->_params['vq'] = $value;
+ } else {
+ unset($this->_params['vq']);
+ }
+ return $this;
+ }
+
+ /**
+ * Sets the param to return videos of a specific format
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setFormat($value = null)
+ {
+ if ($value != null) {
+ $this->_params['format'] = $value;
+ } else {
+ unset($this->_params['format']);
+ }
+ return $this;
+ }
+
+ /**
+ * Sets whether or not to include racy videos in the search results
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setRacy($value = null)
+ {
+ switch ($value) {
+ case 'include':
+ $this->_params['racy'] = $value;
+ break;
+ case 'exclude':
+ $this->_params['racy'] = $value;
+ break;
+ case null:
+ unset($this->_params['racy']);
+ break;
+ }
+ return $this;
+ }
+
+ /**
+ * Whether or not to include racy videos in the search results
+ *
+ * @return string|null The value of racy if it exists, null otherwise.
+ */
+ public function getRacy()
+ {
+ if (array_key_exists('racy', $this->_params)) {
+ return $this->_params['racy'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the safeSearch parameter
+ *
+ * @param string $value The value of the parameter, currently only 'none',
+ * 'moderate' or 'strict' are allowed values.
+ * @throws Zend_Gdata_App_InvalidArgumentException
+ * @return Zend_Gdata_YouTube_VideoQuery Provides a fluent interface
+ */
+ public function setSafeSearch($value)
+ {
+ switch ($value) {
+ case 'none':
+ $this->_params['safeSearch'] = 'none';
+ break;
+ case 'moderate':
+ $this->_params['safeSearch'] = 'moderate';
+ break;
+ case 'strict':
+ $this->_params['safeSearch'] = 'strict';
+ break;
+ case null:
+ unset($this->_params['safeSearch']);
+ default:
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'The safeSearch parameter only supports the values '.
+ '\'none\', \'moderate\' or \'strict\'.');
+ }
+ }
+
+ /**
+ * Return the value of the safeSearch parameter
+ *
+ * @return string|null The value of the safeSearch parameter if it has been
+ * set, null otherwise.
+ */
+ public function getSafeSearch()
+ {
+ if (array_key_exists('safeSearch', $this->_params)) {
+ return $this->_params['safeSearch'];
+ }
+ return $this;
+ }
+
+ /**
+ * Set the value of the orderby parameter
+ *
+ * @param string $value
+ * @return Zend_Gdata_YouTube_Query Provides a fluent interface
+ */
+ public function setOrderBy($value)
+ {
+ if ($value != null) {
+ $this->_params['orderby'] = $value;
+ } else {
+ unset($this->_params['orderby']);
+ }
+ return $this;
+ }
+
+ /**
+ * Return the value of the format parameter
+ *
+ * @return string|null The value of format if it exists, null otherwise.
+ */
+ public function getFormat()
+ {
+ if (array_key_exists('format', $this->_params)) {
+ return $this->_params['format'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Return the value of the video query that has been set
+ *
+ * @return string|null The value of the video query if it exists,
+ * null otherwise.
+ */
+ public function getVideoQuery()
+ {
+ if (array_key_exists('vq', $this->_params)) {
+ return $this->_params['vq'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Return the value of the time parameter
+ *
+ * @return string|null The time parameter if it exists, null otherwise.
+ */
+ public function getTime()
+ {
+ if (array_key_exists('time', $this->_params)) {
+ return $this->_params['time'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Return the value of the orderby parameter if it exists
+ *
+ * @return string|null The value of orderby if it exists, null otherwise.
+ */
+ public function getOrderBy()
+ {
+ if (array_key_exists('orderby', $this->_params)) {
+ return $this->_params['orderby'];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Generate the query string from the URL parameters, optionally modifying
+ * them based on protocol version.
+ *
+ * @param integer $majorProtocolVersion The major protocol version
+ * @param integer $minorProtocolVersion The minor protocol version
+ * @throws Zend_Gdata_App_VersionException
+ * @return string querystring
+ */
+ public function getQueryString($majorProtocolVersion = null,
+ $minorProtocolVersion = null)
+ {
+ $queryArray = array();
+
+ foreach ($this->_params as $name => $value) {
+ if (substr($name, 0, 1) == '_') {
+ continue;
+ }
+
+ switch($name) {
+ case 'location-radius':
+ if ($majorProtocolVersion == 1) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException("The $name " .
+ "parameter is only supported in version 2.");
+ }
+ break;
+
+ case 'racy':
+ if ($majorProtocolVersion == 2) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException("The $name " .
+ "parameter is not supported in version 2. " .
+ "Please use 'safeSearch'.");
+ }
+ break;
+
+ case 'safeSearch':
+ if ($majorProtocolVersion == 1) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException("The $name " .
+ "parameter is only supported in version 2. " .
+ "Please use 'racy'.");
+ }
+ break;
+
+ case 'uploader':
+ if ($majorProtocolVersion == 1) {
+ require_once 'Zend/Gdata/App/VersionException.php';
+ throw new Zend_Gdata_App_VersionException("The $name " .
+ "parameter is only supported in version 2.");
+ }
+ break;
+
+ case 'vq':
+ if ($majorProtocolVersion == 2) {
+ $name = 'q';
+ }
+ break;
+ }
+
+ $queryArray[] = urlencode($name) . '=' . urlencode($value);
+
+ }
+ if (count($queryArray) > 0) {
+ return '?' . implode('&', $queryArray);
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * Returns the generated full query URL, optionally modifying it based on
+ * the protocol version.
+ *
+ * @param integer $majorProtocolVersion The major protocol version
+ * @param integer $minorProtocolVersion The minor protocol version
+ * @return string The URL
+ */
+ public function getQueryUrl($majorProtocolVersion = null,
+ $minorProtocolVersion = null)
+ {
+ if (isset($this->_url)) {
+ $url = $this->_url;
+ } else {
+ $url = Zend_Gdata_YouTube::VIDEO_URI;
+ }
+ if ($this->getCategory() !== null) {
+ $url .= '/-/' . $this->getCategory();
+ }
+ $url = $url . $this->getQueryString($majorProtocolVersion,
+ $minorProtocolVersion);
+ return $url;
+ }
+
+}
diff --git a/zend/library/Zend/Http/Client.php b/zend/library/Zend/Http/Client.php
new file mode 100644
index 0000000..8f3c13f
--- /dev/null
+++ b/zend/library/Zend/Http/Client.php
@@ -0,0 +1,1564 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client
+ * @version $Id: Client.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Loader
+ */
+require_once 'Zend/Loader.php';
+
+
+/**
+ * @see Zend_Uri
+ */
+require_once 'Zend/Uri.php';
+
+
+/**
+ * @see Zend_Http_Client_Adapter_Interface
+ */
+require_once 'Zend/Http/Client/Adapter/Interface.php';
+
+
+/**
+ * @see Zend_Http_Response
+ */
+require_once 'Zend/Http/Response.php';
+
+/**
+ * @see Zend_Http_Response_Stream
+ */
+require_once 'Zend/Http/Response/Stream.php';
+
+/**
+ * Zend_Http_Client is an implementation of an HTTP client in PHP. The client
+ * supports basic features like sending different HTTP requests and handling
+ * redirections, as well as more advanced features like proxy settings, HTTP
+ * authentication and cookie persistence (using a Zend_Http_CookieJar object)
+ *
+ * @todo Implement proxy settings
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client
+ * @throws Zend_Http_Client_Exception
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Client
+{
+ /**
+ * HTTP request methods
+ */
+ const GET = 'GET';
+ const POST = 'POST';
+ const PUT = 'PUT';
+ const HEAD = 'HEAD';
+ const DELETE = 'DELETE';
+ const TRACE = 'TRACE';
+ const OPTIONS = 'OPTIONS';
+ const CONNECT = 'CONNECT';
+ const MERGE = 'MERGE';
+
+ /**
+ * Supported HTTP Authentication methods
+ */
+ const AUTH_BASIC = 'basic';
+ //const AUTH_DIGEST = 'digest'; <-- not implemented yet
+
+ /**
+ * HTTP protocol versions
+ */
+ const HTTP_1 = '1.1';
+ const HTTP_0 = '1.0';
+
+ /**
+ * Content attributes
+ */
+ const CONTENT_TYPE = 'Content-Type';
+ const CONTENT_LENGTH = 'Content-Length';
+
+ /**
+ * POST data encoding methods
+ */
+ const ENC_URLENCODED = 'application/x-www-form-urlencoded';
+ const ENC_FORMDATA = 'multipart/form-data';
+
+ /**
+ * Value types for Body key/value pairs
+ */
+ const VTYPE_SCALAR = 'SCALAR';
+ const VTYPE_FILE = 'FILE';
+
+ /**
+ * Configuration array, set using the constructor or using ::setConfig()
+ *
+ * @var array
+ */
+ protected $config = array(
+ 'maxredirects' => 5,
+ 'strictredirects' => false,
+ 'useragent' => 'Zend_Http_Client',
+ 'timeout' => 10,
+ 'adapter' => 'Zend_Http_Client_Adapter_Socket',
+ 'httpversion' => self::HTTP_1,
+ 'keepalive' => false,
+ 'storeresponse' => true,
+ 'strict' => true,
+ 'output_stream' => false,
+ 'encodecookies' => true,
+ 'rfc3986_strict' => false
+ );
+
+ /**
+ * The adapter used to perform the actual connection to the server
+ *
+ * @var Zend_Http_Client_Adapter_Interface
+ */
+ protected $adapter = null;
+
+ /**
+ * Request URI
+ *
+ * @var Zend_Uri_Http
+ */
+ protected $uri = null;
+
+ /**
+ * Associative array of request headers
+ *
+ * @var array
+ */
+ protected $headers = array();
+
+ /**
+ * HTTP request method
+ *
+ * @var string
+ */
+ protected $method = self::GET;
+
+ /**
+ * Associative array of GET parameters
+ *
+ * @var array
+ */
+ protected $paramsGet = array();
+
+ /**
+ * Associative array of POST parameters
+ *
+ * @var array
+ */
+ protected $paramsPost = array();
+
+ /**
+ * Request body content type (for POST requests)
+ *
+ * @var string
+ */
+ protected $enctype = null;
+
+ /**
+ * The raw post data to send. Could be set by setRawData($data, $enctype).
+ *
+ * @var string
+ */
+ protected $raw_post_data = null;
+
+ /**
+ * HTTP Authentication settings
+ *
+ * Expected to be an associative array with this structure:
+ * $this->auth = array('user' => 'username', 'password' => 'password', 'type' => 'basic')
+ * Where 'type' should be one of the supported authentication types (see the AUTH_*
+ * constants), for example 'basic' or 'digest'.
+ *
+ * If null, no authentication will be used.
+ *
+ * @var array|null
+ */
+ protected $auth;
+
+ /**
+ * File upload arrays (used in POST requests)
+ *
+ * An associative array, where each element is of the format:
+ * 'name' => array('filename.txt', 'text/plain', 'This is the actual file contents')
+ *
+ * @var array
+ */
+ protected $files = array();
+
+ /**
+ * Ordered list of keys from key/value pair data to include in body
+ *
+ * An associative array, where each element is of the format:
+ * '<field name>' => VTYPE_SCALAR | VTYPE_FILE
+ *
+ * @var array
+ */
+ protected $body_field_order = array();
+
+ /**
+ * The client's cookie jar
+ *
+ * @var Zend_Http_CookieJar
+ */
+ protected $cookiejar = null;
+
+ /**
+ * The last HTTP request sent by the client, as string
+ *
+ * @var string
+ */
+ protected $last_request = null;
+
+ /**
+ * The last HTTP response received by the client
+ *
+ * @var Zend_Http_Response
+ */
+ protected $last_response = null;
+
+ /**
+ * Redirection counter
+ *
+ * @var int
+ */
+ protected $redirectCounter = 0;
+
+ /**
+ * Status for unmasking GET array params
+ *
+ * @var boolean
+ */
+ protected $_unmaskStatus = false;
+
+ /**
+ * Status if the http_build_query function escapes brackets
+ *
+ * @var boolean
+ */
+ protected $_queryBracketsEscaped = true;
+
+ /**
+ * Fileinfo magic database resource
+ *
+ * This variable is populated the first time _detectFileMimeType is called
+ * and is then reused on every call to this method
+ *
+ * @var resource
+ */
+ static protected $_fileInfoDb = null;
+
+ /**
+ * Constructor method. Will create a new HTTP client. Accepts the target
+ * URL and optionally configuration array.
+ *
+ * @param Zend_Uri_Http|string $uri
+ * @param array $config Configuration key-value pairs.
+ */
+ public function __construct($uri = null, $config = null)
+ {
+ if ($uri !== null) {
+ $this->setUri($uri);
+ }
+ if ($config !== null) {
+ $this->setConfig($config);
+ }
+
+ $this->_queryBracketsEscaped = version_compare(phpversion(), '5.1.3', '>=');
+ }
+
+ /**
+ * Set the URI for the next request
+ *
+ * @param Zend_Uri_Http|string $uri
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setUri($uri)
+ {
+ if ($uri instanceof Zend_Uri_Http) {
+ // clone the URI in order to keep the passed parameter constant
+ $uri = clone $uri;
+ } elseif (is_string($uri)) {
+ $uri = Zend_Uri::factory($uri);
+ }
+
+ if (!$uri instanceof Zend_Uri_Http) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Passed parameter is not a valid HTTP URI.');
+ }
+
+ // Set auth if username and password has been specified in the uri
+ if ($uri->getUsername() && $uri->getPassword()) {
+ $this->setAuth($uri->getUsername(), $uri->getPassword());
+ }
+
+ // We have no ports, set the defaults
+ if (! $uri->getPort()) {
+ $uri->setPort(($uri->getScheme() == 'https' ? 443 : 80));
+ }
+
+ $this->uri = $uri;
+
+ return $this;
+ }
+
+ /**
+ * Get the URI for the next request
+ *
+ * @param boolean $as_string If true, will return the URI as a string
+ * @return Zend_Uri_Http|string
+ */
+ public function getUri($as_string = false)
+ {
+ if ($as_string && $this->uri instanceof Zend_Uri_Http) {
+ return $this->uri->__toString();
+ } else {
+ return $this->uri;
+ }
+ }
+
+ /**
+ * Set configuration parameters for this HTTP client
+ *
+ * @param Zend_Config | array $config
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setConfig($config = array())
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+
+ } elseif (! is_array($config)) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Array or Zend_Config object expected, got ' . gettype($config));
+ }
+
+ foreach ($config as $k => $v) {
+ $this->config[strtolower($k)] = $v;
+ }
+
+ // Pass configuration options to the adapter if it exists
+ if ($this->adapter instanceof Zend_Http_Client_Adapter_Interface) {
+ $this->adapter->setConfig($config);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the next request's method
+ *
+ * Validated the passed method and sets it. If we have files set for
+ * POST requests, and the new method is not POST, the files are silently
+ * dropped.
+ *
+ * @param string $method
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setMethod($method = self::GET)
+ {
+ if (! preg_match('/^[^\x00-\x1f\x7f-\xff\(\)<>@,;:\\\\"\/\[\]\?={}\s]+$/', $method)) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("'{$method}' is not a valid HTTP request method.");
+ }
+
+ if (($method == self::POST || $method == self::PUT || $method == self::DELETE) && $this->enctype === null) {
+ $this->setEncType(self::ENC_URLENCODED);
+ }
+
+ $this->method = $method;
+
+ return $this;
+ }
+
+ /**
+ * Set one or more request headers
+ *
+ * This function can be used in several ways to set the client's request
+ * headers:
+ * 1. By providing two parameters: $name as the header to set (e.g. 'Host')
+ * and $value as it's value (e.g. 'www.example.com').
+ * 2. By providing a single header string as the only parameter
+ * e.g. 'Host: www.example.com'
+ * 3. By providing an array of headers as the first parameter
+ * e.g. array('host' => 'www.example.com', 'x-foo: bar'). In This case
+ * the function will call itself recursively for each array item.
+ *
+ * @param string|array $name Header name, full header string ('Header: value')
+ * or an array of headers
+ * @param mixed $value Header value or null
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setHeaders($name, $value = null)
+ {
+ // If we got an array, go recursive!
+ if (is_array($name)) {
+ foreach ($name as $k => $v) {
+ if (is_string($k)) {
+ $this->setHeaders($k, $v);
+ } else {
+ $this->setHeaders($v, null);
+ }
+ }
+ } else {
+ // Check if $name needs to be split
+ if ($value === null && (strpos($name, ':') > 0)) {
+ list($name, $value) = explode(':', $name, 2);
+ }
+
+ // Make sure the name is valid if we are in strict mode
+ if ($this->config['strict'] && (! preg_match('/^[a-zA-Z0-9-]+$/', $name))) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("{$name} is not a valid HTTP header name");
+ }
+
+ $normalized_name = strtolower($name);
+
+ // If $value is null or false, unset the header
+ if ($value === null || $value === false) {
+ unset($this->headers[$normalized_name]);
+
+ // Else, set the header
+ } else {
+ // Header names are stored lowercase internally.
+ if (is_string($value)) {
+ $value = trim($value);
+ }
+ $this->headers[$normalized_name] = array($name, $value);
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the value of a specific header
+ *
+ * Note that if the header has more than one value, an array
+ * will be returned.
+ *
+ * @param string $key
+ * @return string|array|null The header value or null if it is not set
+ */
+ public function getHeader($key)
+ {
+ $key = strtolower($key);
+ if (isset($this->headers[$key])) {
+ return $this->headers[$key][1];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set a GET parameter for the request. Wrapper around _setParameter
+ *
+ * @param string|array $name
+ * @param string $value
+ * @return Zend_Http_Client
+ */
+ public function setParameterGet($name, $value = null)
+ {
+ if (is_array($name)) {
+ foreach ($name as $k => $v)
+ $this->_setParameter('GET', $k, $v);
+ } else {
+ $this->_setParameter('GET', $name, $value);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set a POST parameter for the request. Wrapper around _setParameter
+ *
+ * @param string|array $name
+ * @param string $value
+ * @return Zend_Http_Client
+ */
+ public function setParameterPost($name, $value = null)
+ {
+ if (is_array($name)) {
+ foreach ($name as $k => $v)
+ $this->_setParameter('POST', $k, $v);
+ } else {
+ $this->_setParameter('POST', $name, $value);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set a GET or POST parameter - used by SetParameterGet and SetParameterPost
+ *
+ * @param string $type GET or POST
+ * @param string $name
+ * @param string $value
+ * @return null
+ */
+ protected function _setParameter($type, $name, $value)
+ {
+ $parray = array();
+ $type = strtolower($type);
+ switch ($type) {
+ case 'get':
+ $parray = &$this->paramsGet;
+ break;
+ case 'post':
+ $parray = &$this->paramsPost;
+ if ( $value === null ) {
+ if (isset($this->body_field_order[$name]))
+ unset($this->body_field_order[$name]);
+ } else {
+ $this->body_field_order[$name] = self::VTYPE_SCALAR;
+ }
+ break;
+ }
+
+ if ($value === null) {
+ if (isset($parray[$name])) unset($parray[$name]);
+ } else {
+ $parray[$name] = $value;
+ }
+ }
+
+ /**
+ * Get the number of redirections done on the last request
+ *
+ * @return int
+ */
+ public function getRedirectionsCount()
+ {
+ return $this->redirectCounter;
+ }
+
+ /**
+ * Set HTTP authentication parameters
+ *
+ * $type should be one of the supported types - see the self::AUTH_*
+ * constants.
+ *
+ * To enable authentication:
+ * <code>
+ * $this->setAuth('shahar', 'secret', Zend_Http_Client::AUTH_BASIC);
+ * </code>
+ *
+ * To disable authentication:
+ * <code>
+ * $this->setAuth(false);
+ * </code>
+ *
+ * @see http://www.faqs.org/rfcs/rfc2617.html
+ * @param string|false $user User name or false disable authentication
+ * @param string $password Password
+ * @param string $type Authentication type
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setAuth($user, $password = '', $type = self::AUTH_BASIC)
+ {
+ // If we got false or null, disable authentication
+ if ($user === false || $user === null) {
+ $this->auth = null;
+
+ // Clear the auth information in the uri instance as well
+ if ($this->uri instanceof Zend_Uri_Http) {
+ $this->getUri()->setUsername('');
+ $this->getUri()->setPassword('');
+ }
+ // Else, set up authentication
+ } else {
+ // Check we got a proper authentication type
+ if (! defined('self::AUTH_' . strtoupper($type))) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Invalid or not supported authentication type: '$type'");
+ }
+
+ $this->auth = array(
+ 'user' => (string) $user,
+ 'password' => (string) $password,
+ 'type' => $type
+ );
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the HTTP client's cookie jar.
+ *
+ * A cookie jar is an object that holds and maintains cookies across HTTP requests
+ * and responses.
+ *
+ * @param Zend_Http_CookieJar|boolean $cookiejar Existing cookiejar object, true to create a new one, false to disable
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setCookieJar($cookiejar = true)
+ {
+ Zend_Loader::loadClass('Zend_Http_CookieJar');
+
+ if ($cookiejar instanceof Zend_Http_CookieJar) {
+ $this->cookiejar = $cookiejar;
+ } elseif ($cookiejar === true) {
+ $this->cookiejar = new Zend_Http_CookieJar();
+ } elseif (! $cookiejar) {
+ $this->cookiejar = null;
+ } else {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Invalid parameter type passed as CookieJar');
+ }
+
+ return $this;
+ }
+
+ /**
+ * Return the current cookie jar or null if none.
+ *
+ * @return Zend_Http_CookieJar|null
+ */
+ public function getCookieJar()
+ {
+ return $this->cookiejar;
+ }
+
+ /**
+ * Add a cookie to the request. If the client has no Cookie Jar, the cookies
+ * will be added directly to the headers array as "Cookie" headers.
+ *
+ * @param Zend_Http_Cookie|string $cookie
+ * @param string|null $value If "cookie" is a string, this is the cookie value.
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setCookie($cookie, $value = null)
+ {
+ Zend_Loader::loadClass('Zend_Http_Cookie');
+
+ if (is_array($cookie)) {
+ foreach ($cookie as $c => $v) {
+ if (is_string($c)) {
+ $this->setCookie($c, $v);
+ } else {
+ $this->setCookie($v);
+ }
+ }
+
+ return $this;
+ }
+
+ if ($value !== null && $this->config['encodecookies']) {
+ $value = urlencode($value);
+ }
+
+ if (isset($this->cookiejar)) {
+ if ($cookie instanceof Zend_Http_Cookie) {
+ $this->cookiejar->addCookie($cookie);
+ } elseif (is_string($cookie) && $value !== null) {
+ $cookie = Zend_Http_Cookie::fromString("{$cookie}={$value}",
+ $this->uri,
+ $this->config['encodecookies']);
+ $this->cookiejar->addCookie($cookie);
+ }
+ } else {
+ if ($cookie instanceof Zend_Http_Cookie) {
+ $name = $cookie->getName();
+ $value = $cookie->getValue();
+ $cookie = $name;
+ }
+
+ if (preg_match("/[=,; \t\r\n\013\014]/", $cookie)) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Cookie name cannot contain these characters: =,; \t\r\n\013\014 ({$cookie})");
+ }
+
+ $value = addslashes($value);
+
+ if (! isset($this->headers['cookie'])) {
+ $this->headers['cookie'] = array('Cookie', '');
+ }
+ $this->headers['cookie'][1] .= $cookie . '=' . $value . '; ';
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set a file to upload (using a POST request)
+ *
+ * Can be used in two ways:
+ *
+ * 1. $data is null (default): $filename is treated as the name if a local file which
+ * will be read and sent. Will try to guess the content type using mime_content_type().
+ * 2. $data is set - $filename is sent as the file name, but $data is sent as the file
+ * contents and no file is read from the file system. In this case, you need to
+ * manually set the Content-Type ($ctype) or it will default to
+ * application/octet-stream.
+ *
+ * @param string $filename Name of file to upload, or name to save as
+ * @param string $formname Name of form element to send as
+ * @param string $data Data to send (if null, $filename is read and sent)
+ * @param string $ctype Content type to use (if $data is set and $ctype is
+ * null, will be application/octet-stream)
+ * @return Zend_Http_Client
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setFileUpload($filename, $formname, $data = null, $ctype = null)
+ {
+ if ($data === null) {
+ if (($data = @file_get_contents($filename)) === false) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Unable to read file '{$filename}' for upload");
+ }
+
+ if (! $ctype) {
+ $ctype = $this->_detectFileMimeType($filename);
+ }
+ }
+
+ // Force enctype to multipart/form-data
+ $this->setEncType(self::ENC_FORMDATA);
+
+ $this->files[] = array(
+ 'formname' => $formname,
+ 'filename' => basename($filename),
+ 'ctype' => $ctype,
+ 'data' => $data
+ );
+
+ $this->body_field_order[$formname] = self::VTYPE_FILE;
+
+ return $this;
+ }
+
+ /**
+ * Set the encoding type for POST data
+ *
+ * @param string $enctype
+ * @return Zend_Http_Client
+ */
+ public function setEncType($enctype = self::ENC_URLENCODED)
+ {
+ $this->enctype = $enctype;
+
+ return $this;
+ }
+
+ /**
+ * Set the raw (already encoded) POST data.
+ *
+ * This function is here for two reasons:
+ * 1. For advanced user who would like to set their own data, already encoded
+ * 2. For backwards compatibilty: If someone uses the old post($data) method.
+ * this method will be used to set the encoded data.
+ *
+ * $data can also be stream (such as file) from which the data will be read.
+ *
+ * @param string|resource $data
+ * @param string $enctype
+ * @return Zend_Http_Client
+ */
+ public function setRawData($data, $enctype = null)
+ {
+ $this->raw_post_data = $data;
+ $this->setEncType($enctype);
+ if (is_resource($data)) {
+ // We've got stream data
+ $stat = @fstat($data);
+ if($stat) {
+ $this->setHeaders(self::CONTENT_LENGTH, $stat['size']);
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Set the unmask feature for GET parameters as array
+ *
+ * Example:
+ * foo%5B0%5D=a&foo%5B1%5D=b
+ * becomes
+ * foo=a&foo=b
+ *
+ * This is usefull for some services
+ *
+ * @param boolean $status
+ * @return Zend_Http_Client
+ */
+ public function setUnmaskStatus($status = true)
+ {
+ $this->_unmaskStatus = (BOOL)$status;
+ return $this;
+ }
+
+ /**
+ * Returns the currently configured unmask status
+ *
+ * @return boolean
+ */
+ public function getUnmaskStatus()
+ {
+ return $this->_unmaskStatus;
+ }
+
+ /**
+ * Clear all GET and POST parameters
+ *
+ * Should be used to reset the request parameters if the client is
+ * used for several concurrent requests.
+ *
+ * clearAll parameter controls if we clean just parameters or also
+ * headers and last_*
+ *
+ * @param bool $clearAll Should all data be cleared?
+ * @return Zend_Http_Client
+ */
+ public function resetParameters($clearAll = false)
+ {
+ // Reset parameter data
+ $this->paramsGet = array();
+ $this->paramsPost = array();
+ $this->files = array();
+ $this->raw_post_data = null;
+ $this->enctype = null;
+
+ if($clearAll) {
+ $this->headers = array();
+ $this->last_request = null;
+ $this->last_response = null;
+ } else {
+ // Clear outdated headers
+ if (isset($this->headers[strtolower(self::CONTENT_TYPE)])) {
+ unset($this->headers[strtolower(self::CONTENT_TYPE)]);
+ }
+ if (isset($this->headers[strtolower(self::CONTENT_LENGTH)])) {
+ unset($this->headers[strtolower(self::CONTENT_LENGTH)]);
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the last HTTP request as string
+ *
+ * @return string
+ */
+ public function getLastRequest()
+ {
+ return $this->last_request;
+ }
+
+ /**
+ * Get the last HTTP response received by this client
+ *
+ * If $config['storeresponse'] is set to false, or no response was
+ * stored yet, will return null
+ *
+ * @return Zend_Http_Response or null if none
+ */
+ public function getLastResponse()
+ {
+ return $this->last_response;
+ }
+
+ /**
+ * Load the connection adapter
+ *
+ * While this method is not called more than one for a client, it is
+ * seperated from ->request() to preserve logic and readability
+ *
+ * @param Zend_Http_Client_Adapter_Interface|string $adapter
+ * @return null
+ * @throws Zend_Http_Client_Exception
+ */
+ public function setAdapter($adapter)
+ {
+ if (is_string($adapter)) {
+ try {
+ Zend_Loader::loadClass($adapter);
+ } catch (Zend_Exception $e) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Unable to load adapter '$adapter': {$e->getMessage()}", 0, $e);
+ }
+
+ $adapter = new $adapter;
+ }
+
+ if (! $adapter instanceof Zend_Http_Client_Adapter_Interface) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Passed adapter is not a HTTP connection adapter');
+ }
+
+ $this->adapter = $adapter;
+ $config = $this->config;
+ unset($config['adapter']);
+ $this->adapter->setConfig($config);
+ }
+
+ /**
+ * Load the connection adapter
+ *
+ * @return Zend_Http_Client_Adapter_Interface $adapter
+ */
+ public function getAdapter()
+ {
+ if (null === $this->adapter) {
+ $this->setAdapter($this->config['adapter']);
+ }
+
+ return $this->adapter;
+ }
+
+ /**
+ * Set streaming for received data
+ *
+ * @param string|boolean $streamfile Stream file, true for temp file, false/null for no streaming
+ * @return Zend_Http_Client
+ */
+ public function setStream($streamfile = true)
+ {
+ $this->setConfig(array("output_stream" => $streamfile));
+ return $this;
+ }
+
+ /**
+ * Get status of streaming for received data
+ * @return boolean|string
+ */
+ public function getStream()
+ {
+ return $this->config["output_stream"];
+ }
+
+ /**
+ * Create temporary stream
+ *
+ * @return resource
+ */
+ protected function _openTempStream()
+ {
+ $this->_stream_name = $this->config['output_stream'];
+ if(!is_string($this->_stream_name)) {
+ // If name is not given, create temp name
+ $this->_stream_name = tempnam(isset($this->config['stream_tmp_dir'])?$this->config['stream_tmp_dir']:sys_get_temp_dir(),
+ 'Zend_Http_Client');
+ }
+
+ if (false === ($fp = @fopen($this->_stream_name, "w+b"))) {
+ if ($this->adapter instanceof Zend_Http_Client_Adapter_Interface) {
+ $this->adapter->close();
+ }
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Could not open temp file {$this->_stream_name}");
+ }
+
+ return $fp;
+ }
+
+ /**
+ * Send the HTTP request and return an HTTP response object
+ *
+ * @param string $method
+ * @return Zend_Http_Response
+ * @throws Zend_Http_Client_Exception
+ */
+ public function request($method = null)
+ {
+ if (! $this->uri instanceof Zend_Uri_Http) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('No valid URI has been passed to the client');
+ }
+
+ if ($method) {
+ $this->setMethod($method);
+ }
+ $this->redirectCounter = 0;
+ $response = null;
+
+ // Make sure the adapter is loaded
+ if ($this->adapter == null) {
+ $this->setAdapter($this->config['adapter']);
+ }
+
+ // Send the first request. If redirected, continue.
+ do {
+ // Clone the URI and add the additional GET parameters to it
+ $uri = clone $this->uri;
+ if (! empty($this->paramsGet)) {
+ $query = $uri->getQuery();
+ if (! empty($query)) {
+ $query .= '&';
+ }
+ $query .= http_build_query($this->paramsGet, null, '&');
+ if ($this->config['rfc3986_strict']) {
+ $query = str_replace('+', '%20', $query);
+ }
+
+ // @see ZF-11671 to unmask for some services to foo=val1&foo=val2
+ if ($this->getUnmaskStatus()) {
+ if ($this->_queryBracketsEscaped) {
+ $query = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $query);
+ } else {
+ $query = preg_replace('/\\[(?:[0-9]|[1-9][0-9]+)\\]=/', '=', $query);
+ }
+ }
+
+ $uri->setQuery($query);
+ }
+
+ $body = $this->_prepareBody();
+ $headers = $this->_prepareHeaders();
+
+ // check that adapter supports streaming before using it
+ if(is_resource($body) && !($this->adapter instanceof Zend_Http_Client_Adapter_Stream)) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Adapter does not support streaming');
+ }
+
+ // Open the connection, send the request and read the response
+ $this->adapter->connect($uri->getHost(), $uri->getPort(),
+ ($uri->getScheme() == 'https' ? true : false));
+
+ if($this->config['output_stream']) {
+ if($this->adapter instanceof Zend_Http_Client_Adapter_Stream) {
+ $stream = $this->_openTempStream();
+ $this->adapter->setOutputStream($stream);
+ } else {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Adapter does not support streaming');
+ }
+ }
+
+ $this->last_request = $this->adapter->write($this->method,
+ $uri, $this->config['httpversion'], $headers, $body);
+
+ $response = $this->adapter->read();
+ if (! $response) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception('Unable to read response, or response is empty');
+ }
+
+ if($this->config['output_stream']) {
+ $streamMetaData = stream_get_meta_data($stream);
+ if ($streamMetaData['seekable']) {
+ rewind($stream);
+ }
+ // cleanup the adapter
+ $this->adapter->setOutputStream(null);
+ $response = Zend_Http_Response_Stream::fromStream($response, $stream);
+ $response->setStreamName($this->_stream_name);
+ if(!is_string($this->config['output_stream'])) {
+ // we used temp name, will need to clean up
+ $response->setCleanup(true);
+ }
+ } else {
+ $response = Zend_Http_Response::fromString($response);
+ }
+
+ if ($this->config['storeresponse']) {
+ $this->last_response = $response;
+ }
+
+ // Load cookies into cookie jar
+ if (isset($this->cookiejar)) {
+ $this->cookiejar->addCookiesFromResponse($response, $uri, $this->config['encodecookies']);
+ }
+
+ // If we got redirected, look for the Location header
+ if ($response->isRedirect() && ($location = $response->getHeader('location'))) {
+
+ // Avoid problems with buggy servers that add whitespace at the
+ // end of some headers (See ZF-11283)
+ $location = trim($location);
+
+ // Check whether we send the exact same request again, or drop the parameters
+ // and send a GET request
+ if ($response->getStatus() == 303 ||
+ ((! $this->config['strictredirects']) && ($response->getStatus() == 302 ||
+ $response->getStatus() == 301))) {
+
+ $this->resetParameters();
+ $this->setMethod(self::GET);
+ }
+
+ // If we got a well formed absolute URI
+ if (($scheme = substr($location, 0, 6)) && ($scheme == 'http:/' || $scheme == 'https:')) {
+ $this->setHeaders('host', null);
+ $this->setUri($location);
+
+ } else {
+
+ // Split into path and query and set the query
+ if (strpos($location, '?') !== false) {
+ list($location, $query) = explode('?', $location, 2);
+ } else {
+ $query = '';
+ }
+ $this->uri->setQuery($query);
+
+ // Else, if we got just an absolute path, set it
+ if(strpos($location, '/') === 0) {
+ $this->uri->setPath($location);
+
+ // Else, assume we have a relative path
+ } else {
+ // Get the current path directory, removing any trailing slashes
+ $path = $this->uri->getPath();
+ $path = rtrim(substr($path, 0, strrpos($path, '/')), "/");
+ $this->uri->setPath($path . '/' . $location);
+ }
+ }
+ ++$this->redirectCounter;
+
+ } else {
+ // If we didn't get any location, stop redirecting
+ break;
+ }
+
+ } while ($this->redirectCounter < $this->config['maxredirects']);
+
+ return $response;
+ }
+
+ /**
+ * Prepare the request headers
+ *
+ * @return array
+ */
+ protected function _prepareHeaders()
+ {
+ $headers = array();
+
+ // Set the host header
+ if (! isset($this->headers['host'])) {
+ $host = $this->uri->getHost();
+
+ // If the port is not default, add it
+ if (! (($this->uri->getScheme() == 'http' && $this->uri->getPort() == 80) ||
+ ($this->uri->getScheme() == 'https' && $this->uri->getPort() == 443))) {
+ $host .= ':' . $this->uri->getPort();
+ }
+
+ $headers[] = "Host: {$host}";
+ }
+
+ // Set the connection header
+ if (! isset($this->headers['connection'])) {
+ if (! $this->config['keepalive']) {
+ $headers[] = "Connection: close";
+ }
+ }
+
+ // Set the Accept-encoding header if not set - depending on whether
+ // zlib is available or not.
+ if (! isset($this->headers['accept-encoding'])) {
+ if (function_exists('gzinflate')) {
+ $headers[] = 'Accept-encoding: gzip, deflate';
+ } else {
+ $headers[] = 'Accept-encoding: identity';
+ }
+ }
+
+ // Set the Content-Type header
+ if (($this->method == self::POST || $this->method == self::PUT) &&
+ (! isset($this->headers[strtolower(self::CONTENT_TYPE)]) && isset($this->enctype))) {
+
+ $headers[] = self::CONTENT_TYPE . ': ' . $this->enctype;
+ }
+
+ // Set the user agent header
+ if (! isset($this->headers['user-agent']) && isset($this->config['useragent'])) {
+ $headers[] = "User-Agent: {$this->config['useragent']}";
+ }
+
+ // Set HTTP authentication if needed
+ if (is_array($this->auth)) {
+ $auth = self::encodeAuthHeader($this->auth['user'], $this->auth['password'], $this->auth['type']);
+ $headers[] = "Authorization: {$auth}";
+ }
+
+ // Load cookies from cookie jar
+ if (isset($this->cookiejar)) {
+ $cookstr = $this->cookiejar->getMatchingCookies($this->uri,
+ true, Zend_Http_CookieJar::COOKIE_STRING_CONCAT);
+
+ if ($cookstr) {
+ $headers[] = "Cookie: {$cookstr}";
+ }
+ }
+
+ // Add all other user defined headers
+ foreach ($this->headers as $header) {
+ list($name, $value) = $header;
+ if (is_array($value)) {
+ $value = implode(', ', $value);
+ }
+
+ $headers[] = "$name: $value";
+ }
+
+ return $headers;
+ }
+
+ /**
+ * Prepare the request body (for POST and PUT requests)
+ *
+ * @return string
+ * @throws Zend_Http_Client_Exception
+ */
+ protected function _prepareBody()
+ {
+ // According to RFC2616, a TRACE request should not have a body.
+ if ($this->method == self::TRACE) {
+ return '';
+ }
+
+ if (isset($this->raw_post_data) && is_resource($this->raw_post_data)) {
+ return $this->raw_post_data;
+ }
+ // If mbstring overloads substr and strlen functions, we have to
+ // override it's internal encoding
+ if (function_exists('mb_internal_encoding') &&
+ ((int) ini_get('mbstring.func_overload')) & 2) {
+
+ $mbIntEnc = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ }
+
+ // If we have raw_post_data set, just use it as the body.
+ if (isset($this->raw_post_data)) {
+ $this->setHeaders(self::CONTENT_LENGTH, strlen($this->raw_post_data));
+ if (isset($mbIntEnc)) {
+ mb_internal_encoding($mbIntEnc);
+ }
+
+ return $this->raw_post_data;
+ }
+
+ $body = '';
+
+ // If we have files to upload, force enctype to multipart/form-data
+ if (count ($this->files) > 0) {
+ $this->setEncType(self::ENC_FORMDATA);
+ }
+
+ // If we have POST parameters or files, encode and add them to the body
+ if (count($this->paramsPost) > 0 || count($this->files) > 0) {
+ switch($this->enctype) {
+ case self::ENC_FORMDATA:
+ // Encode body as multipart/form-data
+ $boundary = '---ZENDHTTPCLIENT-' . md5(microtime());
+ $this->setHeaders(self::CONTENT_TYPE, self::ENC_FORMDATA . "; boundary={$boundary}");
+
+ // Encode all files and POST vars in the order they were given
+ foreach ($this->body_field_order as $fieldName=>$fieldType) {
+ switch ($fieldType) {
+ case self::VTYPE_FILE:
+ foreach ($this->files as $file) {
+ if ($file['formname']===$fieldName) {
+ $fhead = array(self::CONTENT_TYPE => $file['ctype']);
+ $body .= self::encodeFormData($boundary, $file['formname'], $file['data'], $file['filename'], $fhead);
+ }
+ }
+ break;
+ case self::VTYPE_SCALAR:
+ if (isset($this->paramsPost[$fieldName])) {
+ if (is_array($this->paramsPost[$fieldName])) {
+ $flattened = self::_flattenParametersArray($this->paramsPost[$fieldName], $fieldName);
+ foreach ($flattened as $pp) {
+ $body .= self::encodeFormData($boundary, $pp[0], $pp[1]);
+ }
+ } else {
+ $body .= self::encodeFormData($boundary, $fieldName, $this->paramsPost[$fieldName]);
+ }
+ }
+ break;
+ }
+ }
+
+ $body .= "--{$boundary}--\r\n";
+ break;
+
+ case self::ENC_URLENCODED:
+ // Encode body as application/x-www-form-urlencoded
+ $this->setHeaders(self::CONTENT_TYPE, self::ENC_URLENCODED);
+ $body = http_build_query($this->paramsPost, '', '&');
+ break;
+
+ default:
+ if (isset($mbIntEnc)) {
+ mb_internal_encoding($mbIntEnc);
+ }
+
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Cannot handle content type '{$this->enctype}' automatically." .
+ " Please use Zend_Http_Client::setRawData to send this kind of content.");
+ break;
+ }
+ }
+
+ // Set the Content-Length if we have a body or if request is POST/PUT
+ if ($body || $this->method == self::POST || $this->method == self::PUT) {
+ $this->setHeaders(self::CONTENT_LENGTH, strlen($body));
+ }
+
+ if (isset($mbIntEnc)) {
+ mb_internal_encoding($mbIntEnc);
+ }
+
+ return $body;
+ }
+
+ /**
+ * Helper method that gets a possibly multi-level parameters array (get or
+ * post) and flattens it.
+ *
+ * The method returns an array of (key, value) pairs (because keys are not
+ * necessarily unique. If one of the parameters in as array, it will also
+ * add a [] suffix to the key.
+ *
+ * This method is deprecated since Zend Framework 1.9 in favour of
+ * self::_flattenParametersArray() and will be dropped in 2.0
+ *
+ * @deprecated since 1.9
+ *
+ * @param array $parray The parameters array
+ * @param bool $urlencode Whether to urlencode the name and value
+ * @return array
+ */
+ protected function _getParametersRecursive($parray, $urlencode = false)
+ {
+ // Issue a deprecated notice
+ trigger_error("The " . __METHOD__ . " method is deprecated and will be dropped in 2.0.",
+ E_USER_NOTICE);
+
+ if (! is_array($parray)) {
+ return $parray;
+ }
+ $parameters = array();
+
+ foreach ($parray as $name => $value) {
+ if ($urlencode) {
+ $name = urlencode($name);
+ }
+
+ // If $value is an array, iterate over it
+ if (is_array($value)) {
+ $name .= ($urlencode ? '%5B%5D' : '[]');
+ foreach ($value as $subval) {
+ if ($urlencode) {
+ $subval = urlencode($subval);
+ }
+ $parameters[] = array($name, $subval);
+ }
+ } else {
+ if ($urlencode) {
+ $value = urlencode($value);
+ }
+ $parameters[] = array($name, $value);
+ }
+ }
+
+ return $parameters;
+ }
+
+ /**
+ * Attempt to detect the MIME type of a file using available extensions
+ *
+ * This method will try to detect the MIME type of a file. If the fileinfo
+ * extension is available, it will be used. If not, the mime_magic
+ * extension which is deprected but is still available in many PHP setups
+ * will be tried.
+ *
+ * If neither extension is available, the default application/octet-stream
+ * MIME type will be returned
+ *
+ * @param string $file File path
+ * @return string MIME type
+ */
+ protected function _detectFileMimeType($file)
+ {
+ $type = null;
+
+ // First try with fileinfo functions
+ if (function_exists('finfo_open')) {
+ if (self::$_fileInfoDb === null) {
+ self::$_fileInfoDb = @finfo_open(FILEINFO_MIME);
+ }
+
+ if (self::$_fileInfoDb) {
+ $type = finfo_file(self::$_fileInfoDb, $file);
+ }
+
+ } elseif (function_exists('mime_content_type')) {
+ $type = mime_content_type($file);
+ }
+
+ // Fallback to the default application/octet-stream
+ if (! $type) {
+ $type = 'application/octet-stream';
+ }
+
+ return $type;
+ }
+
+ /**
+ * Encode data to a multipart/form-data part suitable for a POST request.
+ *
+ * @param string $boundary
+ * @param string $name
+ * @param mixed $value
+ * @param string $filename
+ * @param array $headers Associative array of optional headers @example ("Content-Transfer-Encoding" => "binary")
+ * @return string
+ */
+ public static function encodeFormData($boundary, $name, $value, $filename = null, $headers = array()) {
+ $ret = "--{$boundary}\r\n" .
+ 'Content-Disposition: form-data; name="' . $name .'"';
+
+ if ($filename) {
+ $ret .= '; filename="' . $filename . '"';
+ }
+ $ret .= "\r\n";
+
+ foreach ($headers as $hname => $hvalue) {
+ $ret .= "{$hname}: {$hvalue}\r\n";
+ }
+ $ret .= "\r\n";
+
+ $ret .= "{$value}\r\n";
+
+ return $ret;
+ }
+
+ /**
+ * Create a HTTP authentication "Authorization:" header according to the
+ * specified user, password and authentication method.
+ *
+ * @see http://www.faqs.org/rfcs/rfc2617.html
+ * @param string $user
+ * @param string $password
+ * @param string $type
+ * @return string
+ * @throws Zend_Http_Client_Exception
+ */
+ public static function encodeAuthHeader($user, $password, $type = self::AUTH_BASIC)
+ {
+ $authHeader = null;
+
+ switch ($type) {
+ case self::AUTH_BASIC:
+ // In basic authentication, the user name cannot contain ":"
+ if (strpos($user, ':') !== false) {
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("The user name cannot contain ':' in 'Basic' HTTP authentication");
+ }
+
+ $authHeader = 'Basic ' . base64_encode($user . ':' . $password);
+ break;
+
+ //case self::AUTH_DIGEST:
+ /**
+ * @todo Implement digest authentication
+ */
+ // break;
+
+ default:
+ /** @see Zend_Http_Client_Exception */
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Not a supported HTTP authentication type: '$type'");
+ }
+
+ return $authHeader;
+ }
+
+ /**
+ * Convert an array of parameters into a flat array of (key, value) pairs
+ *
+ * Will flatten a potentially multi-dimentional array of parameters (such
+ * as POST parameters) into a flat array of (key, value) paris. In case
+ * of multi-dimentional arrays, square brackets ([]) will be added to the
+ * key to indicate an array.
+ *
+ * @since 1.9
+ *
+ * @param array $parray
+ * @param string $prefix
+ * @return array
+ */
+ static protected function _flattenParametersArray($parray, $prefix = null)
+ {
+ if (! is_array($parray)) {
+ return $parray;
+ }
+
+ $parameters = array();
+
+ foreach($parray as $name => $value) {
+
+ // Calculate array key
+ if ($prefix) {
+ if (is_int($name)) {
+ $key = $prefix . '[]';
+ } else {
+ $key = $prefix . "[$name]";
+ }
+ } else {
+ $key = $name;
+ }
+
+ if (is_array($value)) {
+ $parameters = array_merge($parameters, self::_flattenParametersArray($value, $key));
+
+ } else {
+ $parameters[] = array($key, $value);
+ }
+ }
+
+ return $parameters;
+ }
+
+}
diff --git a/zend/library/Zend/Http/Client/Adapter/Curl.php b/zend/library/Zend/Http/Client/Adapter/Curl.php
new file mode 100644
index 0000000..a66b386
--- /dev/null
+++ b/zend/library/Zend/Http/Client/Adapter/Curl.php
@@ -0,0 +1,510 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @version $Id: Curl.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Uri_Http
+ */
+require_once 'Zend/Uri/Http.php';
+
+/**
+ * @see Zend_Http_Client_Adapter_Interface
+ */
+require_once 'Zend/Http/Client/Adapter/Interface.php';
+/**
+ * @see Zend_Http_Client_Adapter_Stream
+ */
+require_once 'Zend/Http/Client/Adapter/Stream.php';
+
+/**
+ * An adapter class for Zend_Http_Client based on the curl extension.
+ * Curl requires libcurl. See for full requirements the PHP manual: http://php.net/curl
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Client_Adapter_Curl implements Zend_Http_Client_Adapter_Interface, Zend_Http_Client_Adapter_Stream
+{
+ /**
+ * Parameters array
+ *
+ * @var array
+ */
+ protected $_config = array();
+
+ /**
+ * What host/port are we connected to?
+ *
+ * @var array
+ */
+ protected $_connected_to = array(null, null);
+
+ /**
+ * The curl session handle
+ *
+ * @var resource|null
+ */
+ protected $_curl = null;
+
+ /**
+ * List of cURL options that should never be overwritten
+ *
+ * @var array
+ */
+ protected $_invalidOverwritableCurlOptions;
+
+ /**
+ * Response gotten from server
+ *
+ * @var string
+ */
+ protected $_response = null;
+
+ /**
+ * Stream for storing output
+ *
+ * @var resource
+ */
+ protected $out_stream;
+
+ /**
+ * Adapter constructor
+ *
+ * Config is set using setConfig()
+ *
+ * @return void
+ * @throws Zend_Http_Client_Adapter_Exception
+ */
+ public function __construct()
+ {
+ if (!extension_loaded('curl')) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('cURL extension has to be loaded to use this Zend_Http_Client adapter.');
+ }
+ $this->_invalidOverwritableCurlOptions = array(
+ CURLOPT_HTTPGET,
+ CURLOPT_POST,
+ CURLOPT_PUT,
+ CURLOPT_CUSTOMREQUEST,
+ CURLOPT_HEADER,
+ CURLOPT_RETURNTRANSFER,
+ CURLOPT_HTTPHEADER,
+ CURLOPT_POSTFIELDS,
+ CURLOPT_INFILE,
+ CURLOPT_INFILESIZE,
+ CURLOPT_PORT,
+ CURLOPT_MAXREDIRS,
+ CURLOPT_CONNECTTIMEOUT,
+ CURL_HTTP_VERSION_1_1,
+ CURL_HTTP_VERSION_1_0,
+ );
+ }
+
+ /**
+ * Set the configuration array for the adapter
+ *
+ * @throws Zend_Http_Client_Adapter_Exception
+ * @param Zend_Config | array $config
+ * @return Zend_Http_Client_Adapter_Curl
+ */
+ public function setConfig($config = array())
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+
+ } elseif (! is_array($config)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Array or Zend_Config object expected, got ' . gettype($config)
+ );
+ }
+
+ if(isset($config['proxy_user']) && isset($config['proxy_pass'])) {
+ $this->setCurlOption(CURLOPT_PROXYUSERPWD, $config['proxy_user'].":".$config['proxy_pass']);
+ unset($config['proxy_user'], $config['proxy_pass']);
+ }
+
+ foreach ($config as $k => $v) {
+ $option = strtolower($k);
+ switch($option) {
+ case 'proxy_host':
+ $this->setCurlOption(CURLOPT_PROXY, $v);
+ break;
+ case 'proxy_port':
+ $this->setCurlOption(CURLOPT_PROXYPORT, $v);
+ break;
+ default:
+ $this->_config[$option] = $v;
+ break;
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Retrieve the array of all configuration options
+ *
+ * @return array
+ */
+ public function getConfig()
+ {
+ return $this->_config;
+ }
+
+ /**
+ * Direct setter for cURL adapter related options.
+ *
+ * @param string|int $option
+ * @param mixed $value
+ * @return Zend_Http_Adapter_Curl
+ */
+ public function setCurlOption($option, $value)
+ {
+ if (!isset($this->_config['curloptions'])) {
+ $this->_config['curloptions'] = array();
+ }
+ $this->_config['curloptions'][$option] = $value;
+ return $this;
+ }
+
+ /**
+ * Initialize curl
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ * @return void
+ * @throws Zend_Http_Client_Adapter_Exception if unable to connect
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ // If we're already connected, disconnect first
+ if ($this->_curl) {
+ $this->close();
+ }
+
+ // If we are connected to a different server or port, disconnect first
+ if ($this->_curl
+ && is_array($this->_connected_to)
+ && ($this->_connected_to[0] != $host
+ || $this->_connected_to[1] != $port)
+ ) {
+ $this->close();
+ }
+
+ // Do the actual connection
+ $this->_curl = curl_init();
+ if ($port != 80) {
+ curl_setopt($this->_curl, CURLOPT_PORT, intval($port));
+ }
+
+ // Set timeout
+ curl_setopt($this->_curl, CURLOPT_CONNECTTIMEOUT, $this->_config['timeout']);
+
+ // Set Max redirects
+ curl_setopt($this->_curl, CURLOPT_MAXREDIRS, $this->_config['maxredirects']);
+
+ if (!$this->_curl) {
+ $this->close();
+
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Unable to Connect to ' . $host . ':' . $port);
+ }
+
+ if ($secure !== false) {
+ // Behave the same like Zend_Http_Adapter_Socket on SSL options.
+ if (isset($this->_config['sslcert'])) {
+ curl_setopt($this->_curl, CURLOPT_SSLCERT, $this->_config['sslcert']);
+ }
+ if (isset($this->_config['sslpassphrase'])) {
+ curl_setopt($this->_curl, CURLOPT_SSLCERTPASSWD, $this->_config['sslpassphrase']);
+ }
+ }
+
+ // Update connected_to
+ $this->_connected_to = array($host, $port);
+ }
+
+ /**
+ * Send request to the remote server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param float $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string $request
+ * @throws Zend_Http_Client_Adapter_Exception If connection fails, connected to wrong host, no PUT file defined, unsupported method, or unsupported cURL option
+ */
+ public function write($method, $uri, $httpVersion = 1.1, $headers = array(), $body = '')
+ {
+ // Make sure we're properly connected
+ if (!$this->_curl) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Trying to write but we are not connected");
+ }
+
+ if ($this->_connected_to[0] != $uri->getHost() || $this->_connected_to[1] != $uri->getPort()) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Trying to write but we are connected to the wrong host");
+ }
+
+ // set URL
+ curl_setopt($this->_curl, CURLOPT_URL, $uri->__toString());
+
+ // ensure correct curl call
+ $curlValue = true;
+ switch ($method) {
+ case Zend_Http_Client::GET:
+ $curlMethod = CURLOPT_HTTPGET;
+ break;
+
+ case Zend_Http_Client::POST:
+ $curlMethod = CURLOPT_POST;
+ break;
+
+ case Zend_Http_Client::PUT:
+ // There are two different types of PUT request, either a Raw Data string has been set
+ // or CURLOPT_INFILE and CURLOPT_INFILESIZE are used.
+ if(is_resource($body)) {
+ $this->_config['curloptions'][CURLOPT_INFILE] = $body;
+ }
+ if (isset($this->_config['curloptions'][CURLOPT_INFILE])) {
+ // Now we will probably already have Content-Length set, so that we have to delete it
+ // from $headers at this point:
+ foreach ($headers AS $k => $header) {
+ if (preg_match('/Content-Length:\s*(\d+)/i', $header, $m)) {
+ if(is_resource($body)) {
+ $this->_config['curloptions'][CURLOPT_INFILESIZE] = (int)$m[1];
+ }
+ unset($headers[$k]);
+ }
+ }
+
+ if (!isset($this->_config['curloptions'][CURLOPT_INFILESIZE])) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Cannot set a file-handle for cURL option CURLOPT_INFILE without also setting its size in CURLOPT_INFILESIZE.");
+ }
+
+ if(is_resource($body)) {
+ $body = '';
+ }
+
+ $curlMethod = CURLOPT_PUT;
+ } else {
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "PUT";
+ }
+ break;
+
+ case Zend_Http_Client::DELETE:
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "DELETE";
+ break;
+
+ case Zend_Http_Client::OPTIONS:
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "OPTIONS";
+ break;
+
+ case Zend_Http_Client::TRACE:
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "TRACE";
+ break;
+
+ case Zend_Http_Client::HEAD:
+ $curlMethod = CURLOPT_CUSTOMREQUEST;
+ $curlValue = "HEAD";
+ break;
+
+ default:
+ // For now, through an exception for unsupported request methods
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Method currently not supported");
+ }
+
+ if(is_resource($body) && $curlMethod != CURLOPT_PUT) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception("Streaming requests are allowed only with PUT");
+ }
+
+ // get http version to use
+ $curlHttp = ($httpVersion == 1.1) ? CURL_HTTP_VERSION_1_1 : CURL_HTTP_VERSION_1_0;
+
+ // mark as HTTP request and set HTTP method
+ curl_setopt($this->_curl, $curlHttp, true);
+ curl_setopt($this->_curl, $curlMethod, $curlValue);
+
+ if($this->out_stream) {
+ // headers will be read into the response
+ curl_setopt($this->_curl, CURLOPT_HEADER, false);
+ curl_setopt($this->_curl, CURLOPT_HEADERFUNCTION, array($this, "readHeader"));
+ // and data will be written into the file
+ curl_setopt($this->_curl, CURLOPT_FILE, $this->out_stream);
+ } else {
+ // ensure headers are also returned
+ curl_setopt($this->_curl, CURLOPT_HEADER, true);
+
+ // ensure actual response is returned
+ curl_setopt($this->_curl, CURLOPT_RETURNTRANSFER, true);
+ }
+
+ // set additional headers
+ $headers['Accept'] = '';
+ curl_setopt($this->_curl, CURLOPT_HTTPHEADER, $headers);
+
+ /**
+ * Make sure POSTFIELDS is set after $curlMethod is set:
+ * @link http://de2.php.net/manual/en/function.curl-setopt.php#81161
+ */
+ if ($method == Zend_Http_Client::POST) {
+ curl_setopt($this->_curl, CURLOPT_POSTFIELDS, $body);
+ } elseif ($curlMethod == CURLOPT_PUT) {
+ // this covers a PUT by file-handle:
+ // Make the setting of this options explicit (rather than setting it through the loop following a bit lower)
+ // to group common functionality together.
+ curl_setopt($this->_curl, CURLOPT_INFILE, $this->_config['curloptions'][CURLOPT_INFILE]);
+ curl_setopt($this->_curl, CURLOPT_INFILESIZE, $this->_config['curloptions'][CURLOPT_INFILESIZE]);
+ unset($this->_config['curloptions'][CURLOPT_INFILE]);
+ unset($this->_config['curloptions'][CURLOPT_INFILESIZE]);
+ } elseif ($method == Zend_Http_Client::PUT) {
+ // This is a PUT by a setRawData string, not by file-handle
+ curl_setopt($this->_curl, CURLOPT_POSTFIELDS, $body);
+ } elseif ($method == Zend_Http_Client::DELETE) {
+ // This is a DELETE by a setRawData string
+ curl_setopt($this->_curl, CURLOPT_POSTFIELDS, $body);
+ }
+
+ // set additional curl options
+ if (isset($this->_config['curloptions'])) {
+ foreach ((array)$this->_config['curloptions'] as $k => $v) {
+ if (!in_array($k, $this->_invalidOverwritableCurlOptions)) {
+ if (curl_setopt($this->_curl, $k, $v) == false) {
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception(sprintf("Unknown or erroreous cURL option '%s' set", $k));
+ }
+ }
+ }
+ }
+
+ // send the request
+ $response = curl_exec($this->_curl);
+
+ // if we used streaming, headers are already there
+ if(!is_resource($this->out_stream)) {
+ $this->_response = $response;
+ }
+
+ $request = curl_getinfo($this->_curl, CURLINFO_HEADER_OUT);
+ $request .= $body;
+
+ if (empty($this->_response)) {
+ require_once 'Zend/Http/Client/Exception.php';
+ throw new Zend_Http_Client_Exception("Error in cURL request: " . curl_error($this->_curl));
+ }
+
+ // cURL automatically decodes chunked-messages, this means we have to disallow the Zend_Http_Response to do it again
+ if (stripos($this->_response, "Transfer-Encoding: chunked\r\n")) {
+ $this->_response = str_ireplace("Transfer-Encoding: chunked\r\n", '', $this->_response);
+ }
+
+ // Eliminate multiple HTTP responses.
+ do {
+ $parts = preg_split('|(?:\r?\n){2}|m', $this->_response, 2);
+ $again = false;
+
+ if (isset($parts[1]) && preg_match("|^HTTP/1\.[01](.*?)\r\n|mi", $parts[1])) {
+ $this->_response = $parts[1];
+ $again = true;
+ }
+ } while ($again);
+
+ // cURL automatically handles Proxy rewrites, remove the "HTTP/1.0 200 Connection established" string:
+ if (stripos($this->_response, "HTTP/1.0 200 Connection established\r\n\r\n") !== false) {
+ $this->_response = str_ireplace("HTTP/1.0 200 Connection established\r\n\r\n", '', $this->_response);
+ }
+
+ return $request;
+ }
+
+ /**
+ * Return read response from server
+ *
+ * @return string
+ */
+ public function read()
+ {
+ return $this->_response;
+ }
+
+ /**
+ * Close the connection to the server
+ *
+ */
+ public function close()
+ {
+ if(is_resource($this->_curl)) {
+ curl_close($this->_curl);
+ }
+ $this->_curl = null;
+ $this->_connected_to = array(null, null);
+ }
+
+ /**
+ * Get cUrl Handle
+ *
+ * @return resource
+ */
+ public function getHandle()
+ {
+ return $this->_curl;
+ }
+
+ /**
+ * Set output stream for the response
+ *
+ * @param resource $stream
+ * @return Zend_Http_Client_Adapter_Socket
+ */
+ public function setOutputStream($stream)
+ {
+ $this->out_stream = $stream;
+ return $this;
+ }
+
+ /**
+ * Header reader function for CURL
+ *
+ * @param resource $curl
+ * @param string $header
+ * @return int
+ */
+ public function readHeader($curl, $header)
+ {
+ $this->_response .= $header;
+ return strlen($header);
+ }
+}
diff --git a/zend/library/Zend/Http/Client/Adapter/Exception.php b/zend/library/Zend/Http/Client/Adapter/Exception.php
new file mode 100644
index 0000000..6416175
--- /dev/null
+++ b/zend/library/Zend/Http/Client/Adapter/Exception.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter_Exception
+ * @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Http_Client_Exception
+ */
+require_once 'Zend/Http/Client/Exception.php';
+
+/**
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Client_Adapter_Exception extends Zend_Http_Client_Exception
+{
+ const READ_TIMEOUT = 1000;
+}
diff --git a/zend/library/Zend/Http/Client/Adapter/Interface.php b/zend/library/Zend/Http/Client/Adapter/Interface.php
new file mode 100644
index 0000000..1a0eddd
--- /dev/null
+++ b/zend/library/Zend/Http/Client/Adapter/Interface.php
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * An interface description for Zend_Http_Client_Adapter classes.
+ *
+ * These classes are used as connectors for Zend_Http_Client, performing the
+ * tasks of connecting, writing, reading and closing connection to the server.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+interface Zend_Http_Client_Adapter_Interface
+{
+ /**
+ * Set the configuration array for the adapter
+ *
+ * @param array $config
+ */
+ public function setConfig($config = array());
+
+ /**
+ * Connect to the remote server
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ */
+ public function connect($host, $port = 80, $secure = false);
+
+ /**
+ * Send request to the remote server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $url
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as text
+ */
+ public function write($method, $url, $http_ver = '1.1', $headers = array(), $body = '');
+
+ /**
+ * Read response from server
+ *
+ * @return string
+ */
+ public function read();
+
+ /**
+ * Close the connection to the server
+ *
+ */
+ public function close();
+}
diff --git a/zend/library/Zend/Http/Client/Adapter/Proxy.php b/zend/library/Zend/Http/Client/Adapter/Proxy.php
new file mode 100644
index 0000000..2ca3012
--- /dev/null
+++ b/zend/library/Zend/Http/Client/Adapter/Proxy.php
@@ -0,0 +1,343 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @version $Id: Proxy.php 25273 2013-03-06 08:02:21Z frosch $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Uri_Http
+ */
+require_once 'Zend/Uri/Http.php';
+/**
+ * @see Zend_Http_Client
+ */
+require_once 'Zend/Http/Client.php';
+/**
+ * @see Zend_Http_Client_Adapter_Socket
+ */
+require_once 'Zend/Http/Client/Adapter/Socket.php';
+
+/**
+ * HTTP Proxy-supporting Zend_Http_Client adapter class, based on the default
+ * socket based adapter.
+ *
+ * Should be used if proxy HTTP access is required. If no proxy is set, will
+ * fall back to Zend_Http_Client_Adapter_Socket behavior. Just like the
+ * default Socket adapter, this adapter does not require any special extensions
+ * installed.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Client_Adapter_Proxy extends Zend_Http_Client_Adapter_Socket
+{
+ /**
+ * Parameters array
+ *
+ * @var array
+ */
+ protected $config = array(
+ 'ssltransport' => 'ssl',
+ 'sslcert' => null,
+ 'sslpassphrase' => null,
+ 'sslusecontext' => false,
+ 'proxy_host' => '',
+ 'proxy_port' => 8080,
+ 'proxy_user' => '',
+ 'proxy_pass' => '',
+ 'proxy_auth' => Zend_Http_Client::AUTH_BASIC,
+ 'persistent' => false,
+ );
+
+ /**
+ * Whether HTTPS CONNECT was already negotiated with the proxy or not
+ *
+ * @var boolean
+ */
+ protected $negotiated = false;
+
+ /**
+ * Stores the last CONNECT handshake request
+ *
+ * @var string
+ */
+ protected $connectHandshakeRequest;
+
+ /**
+ * Connect to the remote server
+ *
+ * Will try to connect to the proxy server. If no proxy was set, will
+ * fall back to the target server (behave like regular Socket adapter)
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ // If no proxy is set, fall back to Socket adapter
+ if (!$this->config['proxy_host']) {
+ return parent::connect($host, $port, $secure);
+ }
+
+ /* Url might require stream context even if proxy connection doesn't */
+ if ($secure) {
+ $this->config['sslusecontext'] = true;
+ }
+
+ // Connect (a non-secure connection) to the proxy server
+ return parent::connect(
+ $this->config['proxy_host'],
+ $this->config['proxy_port'],
+ false
+ );
+ }
+
+ /**
+ * Send request to the proxy server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ * @throws Zend_Http_Client_Adapter_Exception
+ */
+ public function write(
+ $method, $uri, $http_ver = '1.1', $headers = array(), $body = ''
+ )
+ {
+ // If no proxy is set, fall back to default Socket adapter
+ if (!$this->config['proxy_host']) {
+ return parent::write($method, $uri, $http_ver, $headers, $body);
+ }
+
+ // Make sure we're properly connected
+ if (!$this->socket) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are not connected'
+ );
+ }
+
+ $host = $this->config['proxy_host'];
+ $port = $this->config['proxy_port'];
+
+ if ($this->connected_to[0] != "tcp://$host"
+ || $this->connected_to[1] != $port
+ ) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Trying to write but we are connected to the wrong proxy server'
+ );
+ }
+
+ // Add Proxy-Authorization header
+ if ($this->config['proxy_user']) {
+ // Check to see if one already exists
+ $hasProxyAuthHeader = false;
+ foreach ($headers as $k => $v) {
+ if ((string) $k == 'proxy-authorization'
+ || preg_match("/^proxy-authorization:/i", $v)
+ ) {
+ $hasProxyAuthHeader = true;
+ break;
+ }
+ }
+ if (!$hasProxyAuthHeader) {
+ $headers[] = 'Proxy-authorization: '
+ . Zend_Http_Client::encodeAuthHeader(
+ $this->config['proxy_user'],
+ $this->config['proxy_pass'], $this->config['proxy_auth']
+ );
+ }
+ }
+
+ // if we are proxying HTTPS, preform CONNECT handshake with the proxy
+ if ($uri->getScheme() == 'https' && (!$this->negotiated)) {
+ $this->connectHandshake(
+ $uri->getHost(), $uri->getPort(), $http_ver, $headers
+ );
+ $this->negotiated = true;
+ }
+
+ // Save request method for later
+ $this->method = $method;
+
+ // Build request headers
+ if ($this->negotiated) {
+ $path = $uri->getPath();
+ if ($uri->getQuery()) {
+ $path .= '?' . $uri->getQuery();
+ }
+ $request = "$method $path HTTP/$http_ver\r\n";
+ } else {
+ $request = "$method $uri HTTP/$http_ver\r\n";
+ }
+
+ // Add all headers to the request string
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = "$k: $v";
+ $request .= "$v\r\n";
+ }
+
+ if(is_resource($body)) {
+ $request .= "\r\n";
+ } else {
+ // Add the request body
+ $request .= "\r\n" . $body;
+ }
+
+ // Send the request
+ if (!@fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to proxy server'
+ );
+ }
+
+ if(is_resource($body)) {
+ if(stream_copy_to_stream($body, $this->socket) == 0) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to server'
+ );
+ }
+ }
+
+ return $request;
+ }
+
+ /**
+ * Preform handshaking with HTTPS proxy using CONNECT method
+ *
+ * @param string $host
+ * @param integer $port
+ * @param string $http_ver
+ * @param array $headers
+ * @return void
+ * @throws Zend_Http_Client_Adapter_Exception
+ */
+ protected function connectHandshake(
+ $host, $port = 443, $http_ver = '1.1', array &$headers = array()
+ )
+ {
+ $request = "CONNECT $host:$port HTTP/$http_ver\r\n" .
+ "Host: " . $this->config['proxy_host'] . "\r\n";
+
+ // Process provided headers, including important ones to CONNECT request
+ foreach ($headers as $k => $v) {
+ switch (strtolower(substr($v,0,strpos($v,':')))) {
+ case 'proxy-authorization':
+ // break intentionally omitted
+
+ case 'user-agent':
+ $request .= $v . "\r\n";
+ break;
+
+ default:
+ break;
+ }
+ }
+ $request .= "\r\n";
+
+ // @see ZF-3189
+ $this->connectHandshakeRequest = $request;
+
+ // Send the request
+ if (!@fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Error writing request to proxy server'
+ );
+ }
+
+ // Read response headers only
+ $response = '';
+ $gotStatus = false;
+ while ($line = @fgets($this->socket)) {
+ $gotStatus = $gotStatus || (strpos($line, 'HTTP') !== false);
+ if ($gotStatus) {
+ $response .= $line;
+ if (!chop($line)) {
+ break;
+ }
+ }
+ }
+
+ // Check that the response from the proxy is 200
+ if (Zend_Http_Response::extractCode($response) != 200) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Unable to connect to HTTPS proxy. Server response: ' . $response
+ );
+ }
+
+ // If all is good, switch socket to secure mode. We have to fall back
+ // through the different modes
+ $modes = array(
+ STREAM_CRYPTO_METHOD_TLS_CLIENT,
+ STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
+ STREAM_CRYPTO_METHOD_SSLv23_CLIENT,
+ STREAM_CRYPTO_METHOD_SSLv2_CLIENT
+ );
+
+ $success = false;
+ foreach($modes as $mode) {
+ $success = stream_socket_enable_crypto($this->socket, true, $mode);
+ if ($success) {
+ break;
+ }
+ }
+
+ if (!$success) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Unable to connect to HTTPS server through proxy: could not '
+ . 'negotiate secure connection.'
+ );
+ }
+ }
+
+ /**
+ * Close the connection to the server
+ *
+ */
+ public function close()
+ {
+ parent::close();
+ $this->negotiated = false;
+ }
+
+ /**
+ * Destructor: make sure the socket is disconnected
+ *
+ */
+ public function __destruct()
+ {
+ if ($this->socket) {
+ $this->close();
+ }
+ }
+}
diff --git a/zend/library/Zend/Http/Client/Adapter/Socket.php b/zend/library/Zend/Http/Client/Adapter/Socket.php
new file mode 100644
index 0000000..b2a0e9b
--- /dev/null
+++ b/zend/library/Zend/Http/Client/Adapter/Socket.php
@@ -0,0 +1,543 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @version $Id: Socket.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Uri_Http
+ */
+require_once 'Zend/Uri/Http.php';
+/**
+ * @see Zend_Http_Client_Adapter_Interface
+ */
+require_once 'Zend/Http/Client/Adapter/Interface.php';
+/**
+ * @see Zend_Http_Client_Adapter_Stream
+ */
+require_once 'Zend/Http/Client/Adapter/Stream.php';
+
+/**
+ * A sockets based (stream_socket_client) adapter class for Zend_Http_Client. Can be used
+ * on almost every PHP environment, and does not require any special extensions.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Client_Adapter_Socket implements Zend_Http_Client_Adapter_Interface, Zend_Http_Client_Adapter_Stream
+{
+ /**
+ * The socket for server connection
+ *
+ * @var resource|null
+ */
+ protected $socket = null;
+
+ /**
+ * What host/port are we connected to?
+ *
+ * @var array
+ */
+ protected $connected_to = array(null, null);
+
+ /**
+ * Stream for storing output
+ *
+ * @var resource
+ */
+ protected $out_stream = null;
+
+ /**
+ * Parameters array
+ *
+ * @var array
+ */
+ protected $config = array(
+ 'persistent' => false,
+ 'ssltransport' => 'ssl',
+ 'sslcert' => null,
+ 'sslpassphrase' => null,
+ 'sslusecontext' => false
+ );
+
+ /**
+ * Request method - will be set by write() and might be used by read()
+ *
+ * @var string
+ */
+ protected $method = null;
+
+ /**
+ * Stream context
+ *
+ * @var resource
+ */
+ protected $_context = null;
+
+ /**
+ * Adapter constructor, currently empty. Config is set using setConfig()
+ *
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Set the configuration array for the adapter
+ *
+ * @param Zend_Config | array $config
+ */
+ public function setConfig($config = array())
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+
+ } elseif (! is_array($config)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Array or Zend_Config object expected, got ' . gettype($config)
+ );
+ }
+
+ foreach ($config as $k => $v) {
+ $this->config[strtolower($k)] = $v;
+ }
+ }
+
+ /**
+ * Retrieve the array of all configuration options
+ *
+ * @return array
+ */
+ public function getConfig()
+ {
+ return $this->config;
+ }
+
+ /**
+ * Set the stream context for the TCP connection to the server
+ *
+ * Can accept either a pre-existing stream context resource, or an array
+ * of stream options, similar to the options array passed to the
+ * stream_context_create() PHP function. In such case a new stream context
+ * will be created using the passed options.
+ *
+ * @since Zend Framework 1.9
+ *
+ * @param mixed $context Stream context or array of context options
+ * @return Zend_Http_Client_Adapter_Socket
+ */
+ public function setStreamContext($context)
+ {
+ if (is_resource($context) && get_resource_type($context) == 'stream-context') {
+ $this->_context = $context;
+
+ } elseif (is_array($context)) {
+ $this->_context = stream_context_create($context);
+
+ } else {
+ // Invalid parameter
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ "Expecting either a stream context resource or array, got " . gettype($context)
+ );
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get the stream context for the TCP connection to the server.
+ *
+ * If no stream context is set, will create a default one.
+ *
+ * @return resource
+ */
+ public function getStreamContext()
+ {
+ if (! $this->_context) {
+ $this->_context = stream_context_create();
+ }
+
+ return $this->_context;
+ }
+
+ /**
+ * Connect to the remote server
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ // If the URI should be accessed via SSL, prepend the Hostname with ssl://
+ $host = ($secure ? $this->config['ssltransport'] : 'tcp') . '://' . $host;
+
+ // If we are connected to the wrong host, disconnect first
+ if (($this->connected_to[0] != $host || $this->connected_to[1] != $port)) {
+ if (is_resource($this->socket)) $this->close();
+ }
+
+ // Now, if we are not connected, connect
+ if (! is_resource($this->socket) || ! $this->config['keepalive']) {
+ $context = $this->getStreamContext();
+ if ($secure || $this->config['sslusecontext']) {
+ if ($this->config['sslcert'] !== null) {
+ if (! stream_context_set_option($context, 'ssl', 'local_cert',
+ $this->config['sslcert'])) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Unable to set sslcert option');
+ }
+ }
+ if ($this->config['sslpassphrase'] !== null) {
+ if (! stream_context_set_option($context, 'ssl', 'passphrase',
+ $this->config['sslpassphrase'])) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Unable to set sslpassphrase option');
+ }
+ }
+ }
+
+ $flags = STREAM_CLIENT_CONNECT;
+ if ($this->config['persistent']) $flags |= STREAM_CLIENT_PERSISTENT;
+
+ $this->socket = @stream_socket_client($host . ':' . $port,
+ $errno,
+ $errstr,
+ (int) $this->config['timeout'],
+ $flags,
+ $context);
+
+ if (! $this->socket) {
+ $this->close();
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Unable to Connect to ' . $host . ':' . $port . '. Error #' . $errno . ': ' . $errstr);
+ }
+
+ // Set the stream timeout
+ if (! stream_set_timeout($this->socket, (int) $this->config['timeout'])) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Unable to set the connection timeout');
+ }
+
+ // Update connected_to
+ $this->connected_to = array($host, $port);
+ }
+ }
+
+ /**
+ * Send request to the remote server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ */
+ public function write($method, $uri, $http_ver = '1.1', $headers = array(), $body = '')
+ {
+ // Make sure we're properly connected
+ if (! $this->socket) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Trying to write but we are not connected');
+ }
+
+ $host = $uri->getHost();
+ $host = (strtolower($uri->getScheme()) == 'https' ? $this->config['ssltransport'] : 'tcp') . '://' . $host;
+ if ($this->connected_to[0] != $host || $this->connected_to[1] != $uri->getPort()) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Trying to write but we are connected to the wrong host');
+ }
+
+ // Save request method for later
+ $this->method = $method;
+
+ // Build request headers
+ $path = $uri->getPath();
+ if ($uri->getQuery()) $path .= '?' . $uri->getQuery();
+ $request = "{$method} {$path} HTTP/{$http_ver}\r\n";
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = ucfirst($k) . ": $v";
+ $request .= "$v\r\n";
+ }
+
+ if(is_resource($body)) {
+ $request .= "\r\n";
+ } else {
+ // Add the request body
+ $request .= "\r\n" . $body;
+ }
+
+ // Send the request
+ if (! @fwrite($this->socket, $request)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Error writing request to server');
+ }
+
+ if(is_resource($body)) {
+ if(stream_copy_to_stream($body, $this->socket) == 0) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Error writing request to server');
+ }
+ }
+
+ return $request;
+ }
+
+ /**
+ * Read response from server
+ *
+ * @return string
+ */
+ public function read()
+ {
+ // First, read headers only
+ $response = '';
+ $gotStatus = false;
+
+ while (($line = @fgets($this->socket)) !== false) {
+ $gotStatus = $gotStatus || (strpos($line, 'HTTP') !== false);
+ if ($gotStatus) {
+ $response .= $line;
+ if (rtrim($line) === '') break;
+ }
+ }
+
+ $this->_checkSocketReadTimeout();
+
+ $statusCode = Zend_Http_Response::extractCode($response);
+
+ // Handle 100 and 101 responses internally by restarting the read again
+ if ($statusCode == 100 || $statusCode == 101) return $this->read();
+
+ // Check headers to see what kind of connection / transfer encoding we have
+ $headers = Zend_Http_Response::extractHeaders($response);
+
+ /**
+ * Responses to HEAD requests and 204 or 304 responses are not expected
+ * to have a body - stop reading here
+ */
+ if ($statusCode == 304 || $statusCode == 204 ||
+ $this->method == Zend_Http_Client::HEAD) {
+
+ // Close the connection if requested to do so by the server
+ if (isset($headers['connection']) && $headers['connection'] == 'close') {
+ $this->close();
+ }
+ return $response;
+ }
+
+ // If we got a 'transfer-encoding: chunked' header
+ if (isset($headers['transfer-encoding'])) {
+
+ if (strtolower($headers['transfer-encoding']) == 'chunked') {
+
+ do {
+ $line = @fgets($this->socket);
+ $this->_checkSocketReadTimeout();
+
+ $chunk = $line;
+
+ // Figure out the next chunk size
+ $chunksize = trim($line);
+ if (! ctype_xdigit($chunksize)) {
+ $this->close();
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Invalid chunk size "' .
+ $chunksize . '" unable to read chunked body');
+ }
+
+ // Convert the hexadecimal value to plain integer
+ $chunksize = hexdec($chunksize);
+
+ // Read next chunk
+ $read_to = ftell($this->socket) + $chunksize;
+
+ do {
+ $current_pos = ftell($this->socket);
+ if ($current_pos >= $read_to) break;
+
+ if($this->out_stream) {
+ if(stream_copy_to_stream($this->socket, $this->out_stream, $read_to - $current_pos) == 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+ } else {
+ $line = @fread($this->socket, $read_to - $current_pos);
+ if ($line === false || strlen($line) === 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+ $chunk .= $line;
+ }
+ } while (! feof($this->socket));
+
+ $chunk .= @fgets($this->socket);
+ $this->_checkSocketReadTimeout();
+
+ if(!$this->out_stream) {
+ $response .= $chunk;
+ }
+ } while ($chunksize > 0);
+ } else {
+ $this->close();
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Cannot handle "' .
+ $headers['transfer-encoding'] . '" transfer encoding');
+ }
+
+ // We automatically decode chunked-messages when writing to a stream
+ // this means we have to disallow the Zend_Http_Response to do it again
+ if ($this->out_stream) {
+ $response = str_ireplace("Transfer-Encoding: chunked\r\n", '', $response);
+ }
+ // Else, if we got the content-length header, read this number of bytes
+ } elseif (isset($headers['content-length'])) {
+
+ // If we got more than one Content-Length header (see ZF-9404) use
+ // the last value sent
+ if (is_array($headers['content-length'])) {
+ $contentLength = $headers['content-length'][count($headers['content-length']) - 1];
+ } else {
+ $contentLength = $headers['content-length'];
+ }
+
+ $current_pos = ftell($this->socket);
+ $chunk = '';
+
+ for ($read_to = $current_pos + $contentLength;
+ $read_to > $current_pos;
+ $current_pos = ftell($this->socket)) {
+
+ if($this->out_stream) {
+ if(@stream_copy_to_stream($this->socket, $this->out_stream, $read_to - $current_pos) == 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+ } else {
+ $chunk = @fread($this->socket, $read_to - $current_pos);
+ if ($chunk === false || strlen($chunk) === 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+
+ $response .= $chunk;
+ }
+
+ // Break if the connection ended prematurely
+ if (feof($this->socket)) break;
+ }
+
+ // Fallback: just read the response until EOF
+ } else {
+
+ do {
+ if($this->out_stream) {
+ if(@stream_copy_to_stream($this->socket, $this->out_stream) == 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ }
+ } else {
+ $buff = @fread($this->socket, 8192);
+ if ($buff === false || strlen($buff) === 0) {
+ $this->_checkSocketReadTimeout();
+ break;
+ } else {
+ $response .= $buff;
+ }
+ }
+
+ } while (feof($this->socket) === false);
+
+ $this->close();
+ }
+
+ // Close the connection if requested to do so by the server
+ if (isset($headers['connection']) && $headers['connection'] == 'close') {
+ $this->close();
+ }
+
+ return $response;
+ }
+
+ /**
+ * Close the connection to the server
+ *
+ */
+ public function close()
+ {
+ if (is_resource($this->socket)) @fclose($this->socket);
+ $this->socket = null;
+ $this->connected_to = array(null, null);
+ }
+
+ /**
+ * Check if the socket has timed out - if so close connection and throw
+ * an exception
+ *
+ * @throws Zend_Http_Client_Adapter_Exception with READ_TIMEOUT code
+ */
+ protected function _checkSocketReadTimeout()
+ {
+ if ($this->socket) {
+ $info = stream_get_meta_data($this->socket);
+ $timedout = $info['timed_out'];
+ if ($timedout) {
+ $this->close();
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ "Read timed out after {$this->config['timeout']} seconds",
+ Zend_Http_Client_Adapter_Exception::READ_TIMEOUT
+ );
+ }
+ }
+ }
+
+ /**
+ * Set output stream for the response
+ *
+ * @param resource $stream
+ * @return Zend_Http_Client_Adapter_Socket
+ */
+ public function setOutputStream($stream)
+ {
+ $this->out_stream = $stream;
+ return $this;
+ }
+
+ /**
+ * Destructor: make sure the socket is disconnected
+ *
+ * If we are in persistent TCP mode, will not close the connection
+ *
+ */
+ public function __destruct()
+ {
+ if (! $this->config['persistent']) {
+ if ($this->socket) $this->close();
+ }
+ }
+}
diff --git a/zend/library/Zend/Http/Client/Adapter/Stream.php b/zend/library/Zend/Http/Client/Adapter/Stream.php
new file mode 100755
index 0000000..98f4410
--- /dev/null
+++ b/zend/library/Zend/Http/Client/Adapter/Stream.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @version $Id: Stream.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * An interface description for Zend_Http_Client_Adapter_Stream classes.
+ *
+ * This interface decribes Zend_Http_Client_Adapter which supports streaming.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+interface Zend_Http_Client_Adapter_Stream
+{
+ /**
+ * Set output stream
+ *
+ * This function sets output stream where the result will be stored.
+ *
+ * @param resource $stream Stream to write the output to
+ *
+ */
+ public function setOutputStream($stream);
+}
diff --git a/zend/library/Zend/Http/Client/Adapter/Test.php b/zend/library/Zend/Http/Client/Adapter/Test.php
new file mode 100644
index 0000000..aa041af
--- /dev/null
+++ b/zend/library/Zend/Http/Client/Adapter/Test.php
@@ -0,0 +1,248 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @version $Id: Test.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Uri_Http
+ */
+require_once 'Zend/Uri/Http.php';
+/**
+ * @see Zend_Http_Response
+ */
+require_once 'Zend/Http/Response.php';
+/**
+ * @see Zend_Http_Client_Adapter_Interface
+ */
+require_once 'Zend/Http/Client/Adapter/Interface.php';
+
+/**
+ * A testing-purposes adapter.
+ *
+ * Should be used to test all components that rely on Zend_Http_Client,
+ * without actually performing an HTTP request. You should instantiate this
+ * object manually, and then set it as the client's adapter. Then, you can
+ * set the expected response using the setResponse() method.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Adapter
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Client_Adapter_Test implements Zend_Http_Client_Adapter_Interface
+{
+ /**
+ * Parameters array
+ *
+ * @var array
+ */
+ protected $config = array();
+
+ /**
+ * Buffer of responses to be returned by the read() method. Can be
+ * set using setResponse() and addResponse().
+ *
+ * @var array
+ */
+ protected $responses = array("HTTP/1.1 400 Bad Request\r\n\r\n");
+
+ /**
+ * Current position in the response buffer
+ *
+ * @var integer
+ */
+ protected $responseIndex = 0;
+
+ /**
+ * Wether or not the next request will fail with an exception
+ *
+ * @var boolean
+ */
+ protected $_nextRequestWillFail = false;
+
+ /**
+ * Adapter constructor, currently empty. Config is set using setConfig()
+ *
+ */
+ public function __construct()
+ { }
+
+ /**
+ * Set the nextRequestWillFail flag
+ *
+ * @param boolean $flag
+ * @return Zend_Http_Client_Adapter_Test
+ */
+ public function setNextRequestWillFail($flag)
+ {
+ $this->_nextRequestWillFail = (bool) $flag;
+
+ return $this;
+ }
+
+ /**
+ * Set the configuration array for the adapter
+ *
+ * @param Zend_Config | array $config
+ */
+ public function setConfig($config = array())
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+
+ } elseif (! is_array($config)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Array or Zend_Config object expected, got ' . gettype($config)
+ );
+ }
+
+ foreach ($config as $k => $v) {
+ $this->config[strtolower($k)] = $v;
+ }
+ }
+
+
+ /**
+ * Connect to the remote server
+ *
+ * @param string $host
+ * @param int $port
+ * @param boolean $secure
+ * @param int $timeout
+ * @throws Zend_Http_Client_Adapter_Exception
+ */
+ public function connect($host, $port = 80, $secure = false)
+ {
+ if ($this->_nextRequestWillFail) {
+ $this->_nextRequestWillFail = false;
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception('Request failed');
+ }
+ }
+
+ /**
+ * Send request to the remote server
+ *
+ * @param string $method
+ * @param Zend_Uri_Http $uri
+ * @param string $http_ver
+ * @param array $headers
+ * @param string $body
+ * @return string Request as string
+ */
+ public function write($method, $uri, $http_ver = '1.1', $headers = array(), $body = '')
+ {
+ $host = $uri->getHost();
+ $host = (strtolower($uri->getScheme()) == 'https' ? 'sslv2://' . $host : $host);
+
+ // Build request headers
+ $path = $uri->getPath();
+ if ($uri->getQuery()) $path .= '?' . $uri->getQuery();
+ $request = "{$method} {$path} HTTP/{$http_ver}\r\n";
+ foreach ($headers as $k => $v) {
+ if (is_string($k)) $v = ucfirst($k) . ": $v";
+ $request .= "$v\r\n";
+ }
+
+ // Add the request body
+ $request .= "\r\n" . $body;
+
+ // Do nothing - just return the request as string
+
+ return $request;
+ }
+
+ /**
+ * Return the response set in $this->setResponse()
+ *
+ * @return string
+ */
+ public function read()
+ {
+ if ($this->responseIndex >= count($this->responses)) {
+ $this->responseIndex = 0;
+ }
+ return $this->responses[$this->responseIndex++];
+ }
+
+ /**
+ * Close the connection (dummy)
+ *
+ */
+ public function close()
+ { }
+
+ /**
+ * Set the HTTP response(s) to be returned by this adapter
+ *
+ * @param Zend_Http_Response|array|string $response
+ */
+ public function setResponse($response)
+ {
+ if ($response instanceof Zend_Http_Response) {
+ $response = $response->asString("\r\n");
+ }
+
+ $this->responses = (array)$response;
+ $this->responseIndex = 0;
+ }
+
+ /**
+ * Add another response to the response buffer.
+ *
+ * @param string Zend_Http_Response|$response
+ */
+ public function addResponse($response)
+ {
+ if ($response instanceof Zend_Http_Response) {
+ $response = $response->asString("\r\n");
+ }
+
+ $this->responses[] = $response;
+ }
+
+ /**
+ * Sets the position of the response buffer. Selects which
+ * response will be returned on the next call to read().
+ *
+ * @param integer $index
+ */
+ public function setResponseIndex($index)
+ {
+ if ($index < 0 || $index >= count($this->responses)) {
+ require_once 'Zend/Http/Client/Adapter/Exception.php';
+ throw new Zend_Http_Client_Adapter_Exception(
+ 'Index out of range of response buffer size');
+ }
+ $this->responseIndex = $index;
+ }
+
+ /**
+ * Retrieve the array of all configuration options
+ *
+ * @return array
+ */
+ public function getConfig()
+ {
+ return $this->config;
+ }
+}
diff --git a/zend/library/Zend/Http/Client/Exception.php b/zend/library/Zend/Http/Client/Exception.php
new file mode 100644
index 0000000..278b90b
--- /dev/null
+++ b/zend/library/Zend/Http/Client/Exception.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client_Exception
+ * @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Http_Exception
+ */
+require_once 'Zend/Http/Exception.php';
+
+/**
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Client_Exception extends Zend_Http_Exception
+{}
diff --git a/zend/library/Zend/Http/Exception.php b/zend/library/Zend/Http/Exception.php
new file mode 100644
index 0000000..b780074
--- /dev/null
+++ b/zend/library/Zend/Http/Exception.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Exception
+ * @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Client
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Exception extends Zend_Exception
+{}
diff --git a/zend/library/Zend/Http/Response.php b/zend/library/Zend/Http/Response.php
new file mode 100644
index 0000000..acc6955
--- /dev/null
+++ b/zend/library/Zend/Http/Response.php
@@ -0,0 +1,667 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Response
+ * @version $Id: Response.php 25081 2012-11-06 20:59:47Z rob $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * Zend_Http_Response represents an HTTP 1.0 / 1.1 response message. It
+ * includes easy access to all the response's different elemts, as well as some
+ * convenience methods for parsing and validating HTTP responses.
+ *
+ * @package Zend_Http
+ * @subpackage Response
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Response
+{
+ /**
+ * List of all known HTTP response codes - used by responseCodeAsText() to
+ * translate numeric codes to messages.
+ *
+ * @var array
+ */
+ protected static $messages = array(
+ // Informational 1xx
+ 100 => 'Continue',
+ 101 => 'Switching Protocols',
+
+ // Success 2xx
+ 200 => 'OK',
+ 201 => 'Created',
+ 202 => 'Accepted',
+ 203 => 'Non-Authoritative Information',
+ 204 => 'No Content',
+ 205 => 'Reset Content',
+ 206 => 'Partial Content',
+
+ // Redirection 3xx
+ 300 => 'Multiple Choices',
+ 301 => 'Moved Permanently',
+ 302 => 'Found', // 1.1
+ 303 => 'See Other',
+ 304 => 'Not Modified',
+ 305 => 'Use Proxy',
+ // 306 is deprecated but reserved
+ 307 => 'Temporary Redirect',
+
+ // Client Error 4xx
+ 400 => 'Bad Request',
+ 401 => 'Unauthorized',
+ 402 => 'Payment Required',
+ 403 => 'Forbidden',
+ 404 => 'Not Found',
+ 405 => 'Method Not Allowed',
+ 406 => 'Not Acceptable',
+ 407 => 'Proxy Authentication Required',
+ 408 => 'Request Timeout',
+ 409 => 'Conflict',
+ 410 => 'Gone',
+ 411 => 'Length Required',
+ 412 => 'Precondition Failed',
+ 413 => 'Request Entity Too Large',
+ 414 => 'Request-URI Too Long',
+ 415 => 'Unsupported Media Type',
+ 416 => 'Requested Range Not Satisfiable',
+ 417 => 'Expectation Failed',
+
+ // Server Error 5xx
+ 500 => 'Internal Server Error',
+ 501 => 'Not Implemented',
+ 502 => 'Bad Gateway',
+ 503 => 'Service Unavailable',
+ 504 => 'Gateway Timeout',
+ 505 => 'HTTP Version Not Supported',
+ 509 => 'Bandwidth Limit Exceeded'
+ );
+
+ /**
+ * The HTTP version (1.0, 1.1)
+ *
+ * @var string
+ */
+ protected $version;
+
+ /**
+ * The HTTP response code
+ *
+ * @var int
+ */
+ protected $code;
+
+ /**
+ * The HTTP response code as string
+ * (e.g. 'Not Found' for 404 or 'Internal Server Error' for 500)
+ *
+ * @var string
+ */
+ protected $message;
+
+ /**
+ * The HTTP response headers array
+ *
+ * @var array
+ */
+ protected $headers = array();
+
+ /**
+ * The HTTP response body
+ *
+ * @var string
+ */
+ protected $body;
+
+ /**
+ * HTTP response constructor
+ *
+ * In most cases, you would use Zend_Http_Response::fromString to parse an HTTP
+ * response string and create a new Zend_Http_Response object.
+ *
+ * NOTE: The constructor no longer accepts nulls or empty values for the code and
+ * headers and will throw an exception if the passed values do not form a valid HTTP
+ * responses.
+ *
+ * If no message is passed, the message will be guessed according to the response code.
+ *
+ * @param int $code Response code (200, 404, ...)
+ * @param array $headers Headers array
+ * @param string $body Response body
+ * @param string $version HTTP version
+ * @param string $message Response code as text
+ * @throws Zend_Http_Exception
+ */
+ public function __construct($code, array $headers, $body = null, $version = '1.1', $message = null)
+ {
+ // Make sure the response code is valid and set it
+ if (self::responseCodeAsText($code) === null) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception("{$code} is not a valid HTTP response code");
+ }
+
+ $this->code = $code;
+
+ foreach ($headers as $name => $value) {
+ if (is_int($name)) {
+ $header = explode(":", $value, 2);
+ if (count($header) != 2) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception("'{$value}' is not a valid HTTP header");
+ }
+
+ $name = trim($header[0]);
+ $value = trim($header[1]);
+ }
+
+ $this->headers[ucwords(strtolower($name))] = $value;
+ }
+
+ // Set the body
+ $this->body = $body;
+
+ // Set the HTTP version
+ if (! preg_match('|^\d\.\d$|', $version)) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception("Invalid HTTP response version: $version");
+ }
+
+ $this->version = $version;
+
+ // If we got the response message, set it. Else, set it according to
+ // the response code
+ if (is_string($message)) {
+ $this->message = $message;
+ } else {
+ $this->message = self::responseCodeAsText($code);
+ }
+ }
+
+ /**
+ * Check whether the response is an error
+ *
+ * @return boolean
+ */
+ public function isError()
+ {
+ $restype = floor($this->code / 100);
+ if ($restype == 4 || $restype == 5) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Check whether the response in successful
+ *
+ * @return boolean
+ */
+ public function isSuccessful()
+ {
+ $restype = floor($this->code / 100);
+ if ($restype == 2 || $restype == 1) { // Shouldn't 3xx count as success as well ???
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Check whether the response is a redirection
+ *
+ * @return boolean
+ */
+ public function isRedirect()
+ {
+ $restype = floor($this->code / 100);
+ if ($restype == 3) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the response body as string
+ *
+ * This method returns the body of the HTTP response (the content), as it
+ * should be in it's readable version - that is, after decoding it (if it
+ * was decoded), deflating it (if it was gzip compressed), etc.
+ *
+ * If you want to get the raw body (as transfered on wire) use
+ * $this->getRawBody() instead.
+ *
+ * @return string
+ */
+ public function getBody()
+ {
+ $body = '';
+
+ // Decode the body if it was transfer-encoded
+ switch (strtolower($this->getHeader('transfer-encoding'))) {
+
+ // Handle chunked body
+ case 'chunked':
+ $body = self::decodeChunkedBody($this->body);
+ break;
+
+ // No transfer encoding, or unknown encoding extension:
+ // return body as is
+ default:
+ $body = $this->body;
+ break;
+ }
+
+ // Decode any content-encoding (gzip or deflate) if needed
+ switch (strtolower($this->getHeader('content-encoding'))) {
+
+ // Handle gzip encoding
+ case 'gzip':
+ $body = self::decodeGzip($body);
+ break;
+
+ // Handle deflate encoding
+ case 'deflate':
+ $body = self::decodeDeflate($body);
+ break;
+
+ default:
+ break;
+ }
+
+ return $body;
+ }
+
+ /**
+ * Get the raw response body (as transfered "on wire") as string
+ *
+ * If the body is encoded (with Transfer-Encoding, not content-encoding -
+ * IE "chunked" body), gzip compressed, etc. it will not be decoded.
+ *
+ * @return string
+ */
+ public function getRawBody()
+ {
+ return $this->body;
+ }
+
+ /**
+ * Get the HTTP version of the response
+ *
+ * @return string
+ */
+ public function getVersion()
+ {
+ return $this->version;
+ }
+
+ /**
+ * Get the HTTP response status code
+ *
+ * @return int
+ */
+ public function getStatus()
+ {
+ return $this->code;
+ }
+
+ /**
+ * Return a message describing the HTTP response code
+ * (Eg. "OK", "Not Found", "Moved Permanently")
+ *
+ * @return string
+ */
+ public function getMessage()
+ {
+ return $this->message;
+ }
+
+ /**
+ * Get the response headers
+ *
+ * @return array
+ */
+ public function getHeaders()
+ {
+ return $this->headers;
+ }
+
+ /**
+ * Get a specific header as string, or null if it is not set
+ *
+ * @param string$header
+ * @return string|array|null
+ */
+ public function getHeader($header)
+ {
+ $header = ucwords(strtolower($header));
+ if (! is_string($header) || ! isset($this->headers[$header])) return null;
+
+ return $this->headers[$header];
+ }
+
+ /**
+ * Get all headers as string
+ *
+ * @param boolean $status_line Whether to return the first status line (IE "HTTP 200 OK")
+ * @param string $br Line breaks (eg. "\n", "\r\n", "<br />")
+ * @return string
+ */
+ public function getHeadersAsString($status_line = true, $br = "\n")
+ {
+ $str = '';
+
+ if ($status_line) {
+ $str = "HTTP/{$this->version} {$this->code} {$this->message}{$br}";
+ }
+
+ // Iterate over the headers and stringify them
+ foreach ($this->headers as $name => $value)
+ {
+ if (is_string($value))
+ $str .= "{$name}: {$value}{$br}";
+
+ elseif (is_array($value)) {
+ foreach ($value as $subval) {
+ $str .= "{$name}: {$subval}{$br}";
+ }
+ }
+ }
+
+ return $str;
+ }
+
+ /**
+ * Get the entire response as string
+ *
+ * @param string $br Line breaks (eg. "\n", "\r\n", "<br />")
+ * @return string
+ */
+ public function asString($br = "\n")
+ {
+ return $this->getHeadersAsString(true, $br) . $br . $this->getRawBody();
+ }
+
+ /**
+ * Implements magic __toString()
+ *
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->asString();
+ }
+
+ /**
+ * A convenience function that returns a text representation of
+ * HTTP response codes. Returns 'Unknown' for unknown codes.
+ * Returns array of all codes, if $code is not specified.
+ *
+ * Conforms to HTTP/1.1 as defined in RFC 2616 (except for 'Unknown')
+ * See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10 for reference
+ *
+ * @param int $code HTTP response code
+ * @param boolean $http11 Use HTTP version 1.1
+ * @return string
+ */
+ public static function responseCodeAsText($code = null, $http11 = true)
+ {
+ $messages = self::$messages;
+ if (! $http11) $messages[302] = 'Moved Temporarily';
+
+ if ($code === null) {
+ return $messages;
+ } elseif (isset($messages[$code])) {
+ return $messages[$code];
+ } else {
+ return 'Unknown';
+ }
+ }
+
+ /**
+ * Extract the response code from a response string
+ *
+ * @param string $response_str
+ * @return int
+ */
+ public static function extractCode($response_str)
+ {
+ preg_match("|^HTTP/[\d\.x]+ (\d+)|", $response_str, $m);
+
+ if (isset($m[1])) {
+ return (int) $m[1];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Extract the HTTP message from a response
+ *
+ * @param string $response_str
+ * @return string
+ */
+ public static function extractMessage($response_str)
+ {
+ preg_match("|^HTTP/[\d\.x]+ \d+ ([^\r\n]+)|", $response_str, $m);
+
+ if (isset($m[1])) {
+ return $m[1];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Extract the HTTP version from a response
+ *
+ * @param string $response_str
+ * @return string
+ */
+ public static function extractVersion($response_str)
+ {
+ preg_match("|^HTTP/([\d\.x]+) \d+|", $response_str, $m);
+
+ if (isset($m[1])) {
+ return $m[1];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Extract the headers from a response string
+ *
+ * @param string $response_str
+ * @return array
+ */
+ public static function extractHeaders($response_str)
+ {
+ $headers = array();
+
+ // First, split body and headers
+ $parts = preg_split('|(?:\r?\n){2}|m', $response_str, 2);
+ if (! $parts[0]) return $headers;
+
+ // Split headers part to lines
+ $lines = explode("\n", $parts[0]);
+ unset($parts);
+ $last_header = null;
+
+ foreach($lines as $line) {
+ $line = trim($line, "\r\n");
+ if ($line == "") break;
+
+ // Locate headers like 'Location: ...' and 'Location:...' (note the missing space)
+ if (preg_match("|^([\w-]+):\s*(.+)|", $line, $m)) {
+ unset($last_header);
+ $h_name = strtolower($m[1]);
+ $h_value = $m[2];
+
+ if (isset($headers[$h_name])) {
+ if (! is_array($headers[$h_name])) {
+ $headers[$h_name] = array($headers[$h_name]);
+ }
+
+ $headers[$h_name][] = $h_value;
+ } else {
+ $headers[$h_name] = $h_value;
+ }
+ $last_header = $h_name;
+ } elseif (preg_match("|^\s+(.+)$|", $line, $m) && $last_header !== null) {
+ if (is_array($headers[$last_header])) {
+ end($headers[$last_header]);
+ $last_header_key = key($headers[$last_header]);
+ $headers[$last_header][$last_header_key] .= $m[1];
+ } else {
+ $headers[$last_header] .= $m[1];
+ }
+ }
+ }
+
+ return $headers;
+ }
+
+ /**
+ * Extract the body from a response string
+ *
+ * @param string $response_str
+ * @return string
+ */
+ public static function extractBody($response_str)
+ {
+ $parts = preg_split('|(?:\r?\n){2}|m', $response_str, 2);
+ if (isset($parts[1])) {
+ return $parts[1];
+ }
+ return '';
+ }
+
+ /**
+ * Decode a "chunked" transfer-encoded body and return the decoded text
+ *
+ * @param string $body
+ * @return string
+ */
+ public static function decodeChunkedBody($body)
+ {
+ $decBody = '';
+
+ // If mbstring overloads substr and strlen functions, we have to
+ // override it's internal encoding
+ if (function_exists('mb_internal_encoding') &&
+ ((int) ini_get('mbstring.func_overload')) & 2) {
+
+ $mbIntEnc = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ }
+
+ while (trim($body)) {
+ if (! preg_match("/^([\da-fA-F]+)[^\r\n]*\r\n/sm", $body, $m)) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception("Error parsing body - doesn't seem to be a chunked message");
+ }
+
+ $length = hexdec(trim($m[1]));
+ $cut = strlen($m[0]);
+ $decBody .= substr($body, $cut, $length);
+ $body = substr($body, $cut + $length + 2);
+ }
+
+ if (isset($mbIntEnc)) {
+ mb_internal_encoding($mbIntEnc);
+ }
+
+ return $decBody;
+ }
+
+ /**
+ * Decode a gzip encoded message (when Content-encoding = gzip)
+ *
+ * Currently requires PHP with zlib support
+ *
+ * @param string $body
+ * @return string
+ */
+ public static function decodeGzip($body)
+ {
+ if (! function_exists('gzinflate')) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception(
+ 'zlib extension is required in order to decode "gzip" encoding'
+ );
+ }
+
+ return gzinflate(substr($body, 10));
+ }
+
+ /**
+ * Decode a zlib deflated message (when Content-encoding = deflate)
+ *
+ * Currently requires PHP with zlib support
+ *
+ * @param string $body
+ * @return string
+ */
+ public static function decodeDeflate($body)
+ {
+ if (! function_exists('gzuncompress')) {
+ require_once 'Zend/Http/Exception.php';
+ throw new Zend_Http_Exception(
+ 'zlib extension is required in order to decode "deflate" encoding'
+ );
+ }
+
+ /**
+ * Some servers (IIS ?) send a broken deflate response, without the
+ * RFC-required zlib header.
+ *
+ * We try to detect the zlib header, and if it does not exsit we
+ * teat the body is plain DEFLATE content.
+ *
+ * This method was adapted from PEAR HTTP_Request2 by (c) Alexey Borzov
+ *
+ * @link http://framework.zend.com/issues/browse/ZF-6040
+ */
+ $zlibHeader = unpack('n', substr($body, 0, 2));
+ if ($zlibHeader[1] % 31 == 0 && ord($body[0]) == 0x78 && in_array(ord($body[1]), array(0x01, 0x5e, 0x9c, 0xda))) {
+ return gzuncompress($body);
+ } else {
+ return gzinflate($body);
+ }
+ }
+
+ /**
+ * Create a new Zend_Http_Response object from a string
+ *
+ * @param string $response_str
+ * @return Zend_Http_Response
+ */
+ public static function fromString($response_str)
+ {
+ $code = self::extractCode($response_str);
+ $headers = self::extractHeaders($response_str);
+ $body = self::extractBody($response_str);
+ $version = self::extractVersion($response_str);
+ $message = self::extractMessage($response_str);
+
+ return new Zend_Http_Response($code, $headers, $body, $version, $message);
+ }
+}
diff --git a/zend/library/Zend/Http/Response/Stream.php b/zend/library/Zend/Http/Response/Stream.php
new file mode 100755
index 0000000..d5e17d5
--- /dev/null
+++ b/zend/library/Zend/Http/Response/Stream.php
@@ -0,0 +1,235 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Http
+ * @subpackage Response
+ * @version $Id: Stream.php 24593 2012-01-05 20:35:02Z matthew $
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * Zend_Http_Response represents an HTTP 1.0 / 1.1 response message. It
+ * includes easy access to all the response's different elemts, as well as some
+ * convenience methods for parsing and validating HTTP responses.
+ *
+ * @package Zend_Http
+ * @subpackage Response
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Http_Response_Stream extends Zend_Http_Response
+{
+ /**
+ * Response as stream
+ *
+ * @var resource
+ */
+ protected $stream;
+
+ /**
+ * The name of the file containing the stream
+ *
+ * Will be empty if stream is not file-based.
+ *
+ * @var string
+ */
+ protected $stream_name;
+
+ /**
+ * Should we clean up the stream file when this response is closed?
+ *
+ * @var boolean
+ */
+ protected $_cleanup;
+
+ /**
+ * Get the response as stream
+ *
+ * @return resourse
+ */
+ public function getStream()
+ {
+ return $this->stream;
+ }
+
+ /**
+ * Set the response stream
+ *
+ * @param resourse $stream
+ * @return Zend_Http_Response_Stream
+ */
+ public function setStream($stream)
+ {
+ $this->stream = $stream;
+ return $this;
+ }
+
+ /**
+ * Get the cleanup trigger
+ *
+ * @return boolean
+ */
+ public function getCleanup() {
+ return $this->_cleanup;
+ }
+
+ /**
+ * Set the cleanup trigger
+ *
+ * @param bool $cleanup Set cleanup trigger
+ */
+ public function setCleanup($cleanup = true) {
+ $this->_cleanup = $cleanup;
+ }
+
+ /**
+ * Get file name associated with the stream
+ *
+ * @return string
+ */
+ public function getStreamName() {
+ return $this->stream_name;
+ }
+
+ /**
+ * Set file name associated with the stream
+ *
+ * @param string $stream_name Name to set
+ * @return Zend_Http_Response_Stream
+ */
+ public function setStreamName($stream_name) {
+ $this->stream_name = $stream_name;
+ return $this;
+ }
+
+
+ /**
+ * HTTP response constructor
+ *
+ * In most cases, you would use Zend_Http_Response::fromString to parse an HTTP
+ * response string and create a new Zend_Http_Response object.
+ *
+ * NOTE: The constructor no longer accepts nulls or empty values for the code and
+ * headers and will throw an exception if the passed values do not form a valid HTTP
+ * responses.
+ *
+ * If no message is passed, the message will be guessed according to the response code.
+ *
+ * @param int $code Response code (200, 404, ...)
+ * @param array $headers Headers array
+ * @param string $body Response body
+ * @param string $version HTTP version
+ * @param string $message Response code as text
+ * @throws Zend_Http_Exception
+ */
+ public function __construct($code, $headers, $body = null, $version = '1.1', $message = null)
+ {
+
+ if(is_resource($body)) {
+ $this->setStream($body);
+ $body = '';
+ }
+ parent::__construct($code, $headers, $body, $version, $message);
+ }
+
+ /**
+ * Create a new Zend_Http_Response_Stream object from a string
+ *
+ * @param string $response_str
+ * @param resource $stream
+ * @return Zend_Http_Response_Stream
+ */
+ public static function fromStream($response_str, $stream)
+ {
+ $code = self::extractCode($response_str);
+ $headers = self::extractHeaders($response_str);
+ $version = self::extractVersion($response_str);
+ $message = self::extractMessage($response_str);
+
+ return new self($code, $headers, $stream, $version, $message);
+ }
+
+ /**
+ * Get the response body as string
+ *
+ * This method returns the body of the HTTP response (the content), as it
+ * should be in it's readable version - that is, after decoding it (if it
+ * was decoded), deflating it (if it was gzip compressed), etc.
+ *
+ * If you want to get the raw body (as transfered on wire) use
+ * $this->getRawBody() instead.
+ *
+ * @return string
+ */
+ public function getBody()
+ {
+ if($this->stream != null) {
+ $this->readStream();
+ }
+ return parent::getBody();
+ }
+
+ /**
+ * Get the raw response body (as transfered "on wire") as string
+ *
+ * If the body is encoded (with Transfer-Encoding, not content-encoding -
+ * IE "chunked" body), gzip compressed, etc. it will not be decoded.
+ *
+ * @return string
+ */
+ public function getRawBody()
+ {
+ if($this->stream) {
+ $this->readStream();
+ }
+ return $this->body;
+ }
+
+ /**
+ * Read stream content and return it as string
+ *
+ * Function reads the remainder of the body from the stream and closes the stream.
+ *
+ * @return string
+ */
+ protected function readStream()
+ {
+ if(!is_resource($this->stream)) {
+ return '';
+ }
+
+ if(isset($headers['content-length'])) {
+ $this->body = stream_get_contents($this->stream, $headers['content-length']);
+ } else {
+ $this->body = stream_get_contents($this->stream);
+ }
+ fclose($this->stream);
+ $this->stream = null;
+ }
+
+ public function __destruct()
+ {
+ if(is_resource($this->stream)) {
+ fclose($this->stream);
+ $this->stream = null;
+ }
+ if($this->_cleanup) {
+ @unlink($this->stream_name);
+ }
+ }
+
+}
diff --git a/zend/library/Zend/Loader.php b/zend/library/Zend/Loader.php
new file mode 100644
index 0000000..dd08640
--- /dev/null
+++ b/zend/library/Zend/Loader.php
@@ -0,0 +1,343 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Loader
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Loader.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Static methods for loading classes and files.
+ *
+ * @category Zend
+ * @package Zend_Loader
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Loader
+{
+ /**
+ * Loads a class from a PHP file. The filename must be formatted
+ * as "$class.php".
+ *
+ * If $dirs is a string or an array, it will search the directories
+ * in the order supplied, and attempt to load the first matching file.
+ *
+ * If $dirs is null, it will split the class name at underscores to
+ * generate a path hierarchy (e.g., "Zend_Example_Class" will map
+ * to "Zend/Example/Class.php").
+ *
+ * If the file was not found in the $dirs, or if no $dirs were specified,
+ * it will attempt to load it from PHP's include_path.
+ *
+ * @param string $class - The full class name of a Zend component.
+ * @param string|array $dirs - OPTIONAL Either a path or an array of paths
+ * to search.
+ * @return void
+ * @throws Zend_Exception
+ */
+ public static function loadClass($class, $dirs = null)
+ {
+ if (class_exists($class, false) || interface_exists($class, false)) {
+ return;
+ }
+
+ if ((null !== $dirs) && !is_string($dirs) && !is_array($dirs)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception('Directory argument must be a string or an array');
+ }
+
+ $file = self::standardiseFile($class);
+
+ if (!empty($dirs)) {
+ // use the autodiscovered path
+ $dirPath = dirname($file);
+ if (is_string($dirs)) {
+ $dirs = explode(PATH_SEPARATOR, $dirs);
+ }
+ foreach ($dirs as $key => $dir) {
+ if ($dir == '.') {
+ $dirs[$key] = $dirPath;
+ } else {
+ $dir = rtrim($dir, '\\/');
+ $dirs[$key] = $dir . DIRECTORY_SEPARATOR . $dirPath;
+ }
+ }
+ $file = basename($file);
+ self::loadFile($file, $dirs, true);
+ } else {
+ self::loadFile($file, null, true);
+ }
+
+ if (!class_exists($class, false) && !interface_exists($class, false)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception("File \"$file\" does not exist or class \"$class\" was not found in the file");
+ }
+ }
+
+ /**
+ * Loads a PHP file. This is a wrapper for PHP's include() function.
+ *
+ * $filename must be the complete filename, including any
+ * extension such as ".php". Note that a security check is performed that
+ * does not permit extended characters in the filename. This method is
+ * intended for loading Zend Framework files.
+ *
+ * If $dirs is a string or an array, it will search the directories
+ * in the order supplied, and attempt to load the first matching file.
+ *
+ * If the file was not found in the $dirs, or if no $dirs were specified,
+ * it will attempt to load it from PHP's include_path.
+ *
+ * If $once is TRUE, it will use include_once() instead of include().
+ *
+ * @param string $filename
+ * @param string|array $dirs - OPTIONAL either a path or array of paths
+ * to search.
+ * @param boolean $once
+ * @return boolean
+ * @throws Zend_Exception
+ */
+ public static function loadFile($filename, $dirs = null, $once = false)
+ {
+ self::_securityCheck($filename);
+
+ /**
+ * Search in provided directories, as well as include_path
+ */
+ $incPath = false;
+ if (!empty($dirs) && (is_array($dirs) || is_string($dirs))) {
+ if (is_array($dirs)) {
+ $dirs = implode(PATH_SEPARATOR, $dirs);
+ }
+ $incPath = get_include_path();
+ set_include_path($dirs . PATH_SEPARATOR . $incPath);
+ }
+
+ /**
+ * Try finding for the plain filename in the include_path.
+ */
+ if ($once) {
+ include_once $filename;
+ } else {
+ include $filename;
+ }
+
+ /**
+ * If searching in directories, reset include_path
+ */
+ if ($incPath) {
+ set_include_path($incPath);
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns TRUE if the $filename is readable, or FALSE otherwise.
+ * This function uses the PHP include_path, where PHP's is_readable()
+ * does not.
+ *
+ * Note from ZF-2900:
+ * If you use custom error handler, please check whether return value
+ * from error_reporting() is zero or not.
+ * At mark of fopen() can not suppress warning if the handler is used.
+ *
+ * @param string $filename
+ * @return boolean
+ */
+ public static function isReadable($filename)
+ {
+ if (is_readable($filename)) {
+ // Return early if the filename is readable without needing the
+ // include_path
+ return true;
+ }
+
+ if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'
+ && preg_match('/^[a-z]:/i', $filename)
+ ) {
+ // If on windows, and path provided is clearly an absolute path,
+ // return false immediately
+ return false;
+ }
+
+ foreach (self::explodeIncludePath() as $path) {
+ if ($path == '.') {
+ if (is_readable($filename)) {
+ return true;
+ }
+ continue;
+ }
+ $file = $path . '/' . $filename;
+ if (is_readable($file)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Explode an include path into an array
+ *
+ * If no path provided, uses current include_path. Works around issues that
+ * occur when the path includes stream schemas.
+ *
+ * @param string|null $path
+ * @return array
+ */
+ public static function explodeIncludePath($path = null)
+ {
+ if (null === $path) {
+ $path = get_include_path();
+ }
+
+ if (PATH_SEPARATOR == ':') {
+ // On *nix systems, include_paths which include paths with a stream
+ // schema cannot be safely explode'd, so we have to be a bit more
+ // intelligent in the approach.
+ $paths = preg_split('#:(?!//)#', $path);
+ } else {
+ $paths = explode(PATH_SEPARATOR, $path);
+ }
+ return $paths;
+ }
+
+ /**
+ * spl_autoload() suitable implementation for supporting class autoloading.
+ *
+ * Attach to spl_autoload() using the following:
+ * <code>
+ * spl_autoload_register(array('Zend_Loader', 'autoload'));
+ * </code>
+ *
+ * @deprecated Since 1.8.0
+ * @param string $class
+ * @return string|false Class name on success; false on failure
+ */
+ public static function autoload($class)
+ {
+ trigger_error(__CLASS__ . '::' . __METHOD__ . ' is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead', E_USER_NOTICE);
+ try {
+ @self::loadClass($class);
+ return $class;
+ } catch (Exception $e) {
+ return false;
+ }
+ }
+
+ /**
+ * Register {@link autoload()} with spl_autoload()
+ *
+ * @deprecated Since 1.8.0
+ * @param string $class (optional)
+ * @param boolean $enabled (optional)
+ * @return void
+ * @throws Zend_Exception if spl_autoload() is not found
+ * or if the specified class does not have an autoload() method.
+ */
+ public static function registerAutoload($class = 'Zend_Loader', $enabled = true)
+ {
+ trigger_error(__CLASS__ . '::' . __METHOD__ . ' is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead', E_USER_NOTICE);
+ require_once 'Zend/Loader/Autoloader.php';
+ $autoloader = Zend_Loader_Autoloader::getInstance();
+ $autoloader->setFallbackAutoloader(true);
+
+ if ('Zend_Loader' != $class) {
+ self::loadClass($class);
+ $methods = get_class_methods($class);
+ if (!in_array('autoload', (array) $methods)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception("The class \"$class\" does not have an autoload() method");
+ }
+
+ $callback = array($class, 'autoload');
+
+ if ($enabled) {
+ $autoloader->pushAutoloader($callback);
+ } else {
+ $autoloader->removeAutoloader($callback);
+ }
+ }
+ }
+
+ /**
+ * Ensure that filename does not contain exploits
+ *
+ * @param string $filename
+ * @return void
+ * @throws Zend_Exception
+ */
+ protected static function _securityCheck($filename)
+ {
+ /**
+ * Security check
+ */
+ if (preg_match('/[^a-z0-9\\/\\\\_.:-]/i', $filename)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception('Security check: Illegal character in filename');
+ }
+ }
+
+ /**
+ * Attempt to include() the file.
+ *
+ * include() is not prefixed with the @ operator because if
+ * the file is loaded and contains a parse error, execution
+ * will halt silently and this is difficult to debug.
+ *
+ * Always set display_errors = Off on production servers!
+ *
+ * @param string $filespec
+ * @param boolean $once
+ * @return boolean
+ * @deprecated Since 1.5.0; use loadFile() instead
+ */
+ protected static function _includeFile($filespec, $once = false)
+ {
+ if ($once) {
+ return include_once $filespec;
+ } else {
+ return include $filespec ;
+ }
+ }
+
+ /**
+ * Standardise the filename.
+ *
+ * Convert the supplied filename into the namespace-aware standard,
+ * based on the Framework Interop Group reference implementation:
+ * http://groups.google.com/group/php-standards/web/psr-0-final-proposal
+ *
+ * The filename must be formatted as "$file.php".
+ *
+ * @param string $file - The file name to be loaded.
+ * @return string
+ */
+ public static function standardiseFile($file)
+ {
+ $fileName = ltrim($file, '\\');
+ $file = '';
+ $namespace = '';
+ if ($lastNsPos = strripos($fileName, '\\')) {
+ $namespace = substr($fileName, 0, $lastNsPos);
+ $fileName = substr($fileName, $lastNsPos + 1);
+ $file = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
+ }
+ $file .= str_replace('_', DIRECTORY_SEPARATOR, $fileName) . '.php';
+ return $file;
+ }
+}
diff --git a/zend/library/Zend/Registry.php b/zend/library/Zend/Registry.php
new file mode 100644
index 0000000..686a554
--- /dev/null
+++ b/zend/library/Zend/Registry.php
@@ -0,0 +1,209 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Registry
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Registry.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Generic storage class helps to manage global data.
+ *
+ * @category Zend
+ * @package Zend_Registry
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Registry extends ArrayObject
+{
+ /**
+ * Class name of the singleton registry object.
+ * @var string
+ */
+ private static $_registryClassName = 'Zend_Registry';
+
+ /**
+ * Registry object provides storage for shared objects.
+ * @var Zend_Registry
+ */
+ private static $_registry = null;
+
+ /**
+ * Retrieves the default registry instance.
+ *
+ * @return Zend_Registry
+ */
+ public static function getInstance()
+ {
+ if (self::$_registry === null) {
+ self::init();
+ }
+
+ return self::$_registry;
+ }
+
+ /**
+ * Set the default registry instance to a specified instance.
+ *
+ * @param Zend_Registry $registry An object instance of type Zend_Registry,
+ * or a subclass.
+ * @return void
+ * @throws Zend_Exception if registry is already initialized.
+ */
+ public static function setInstance(Zend_Registry $registry)
+ {
+ if (self::$_registry !== null) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception('Registry is already initialized');
+ }
+
+ self::setClassName(get_class($registry));
+ self::$_registry = $registry;
+ }
+
+ /**
+ * Initialize the default registry instance.
+ *
+ * @return void
+ */
+ protected static function init()
+ {
+ self::setInstance(new self::$_registryClassName());
+ }
+
+ /**
+ * Set the class name to use for the default registry instance.
+ * Does not affect the currently initialized instance, it only applies
+ * for the next time you instantiate.
+ *
+ * @param string $registryClassName
+ * @return void
+ * @throws Zend_Exception if the registry is initialized or if the
+ * class name is not valid.
+ */
+ public static function setClassName($registryClassName = 'Zend_Registry')
+ {
+ if (self::$_registry !== null) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception('Registry is already initialized');
+ }
+
+ if (!is_string($registryClassName)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception("Argument is not a class name");
+ }
+
+ /**
+ * @see Zend_Loader
+ */
+ if (!class_exists($registryClassName)) {
+ require_once 'Zend/Loader.php';
+ Zend_Loader::loadClass($registryClassName);
+ }
+
+ self::$_registryClassName = $registryClassName;
+ }
+
+ /**
+ * Unset the default registry instance.
+ * Primarily used in tearDown() in unit tests.
+ * @returns void
+ */
+ public static function _unsetInstance()
+ {
+ self::$_registry = null;
+ }
+
+ /**
+ * getter method, basically same as offsetGet().
+ *
+ * This method can be called from an object of type Zend_Registry, or it
+ * can be called statically. In the latter case, it uses the default
+ * static instance stored in the class.
+ *
+ * @param string $index - get the value associated with $index
+ * @return mixed
+ * @throws Zend_Exception if no entry is registerd for $index.
+ */
+ public static function get($index)
+ {
+ $instance = self::getInstance();
+
+ if (!$instance->offsetExists($index)) {
+ require_once 'Zend/Exception.php';
+ throw new Zend_Exception("No entry is registered for key '$index'");
+ }
+
+ return $instance->offsetGet($index);
+ }
+
+ /**
+ * setter method, basically same as offsetSet().
+ *
+ * This method can be called from an object of type Zend_Registry, or it
+ * can be called statically. In the latter case, it uses the default
+ * static instance stored in the class.
+ *
+ * @param string $index The location in the ArrayObject in which to store
+ * the value.
+ * @param mixed $value The object to store in the ArrayObject.
+ * @return void
+ */
+ public static function set($index, $value)
+ {
+ $instance = self::getInstance();
+ $instance->offsetSet($index, $value);
+ }
+
+ /**
+ * Returns TRUE if the $index is a named value in the registry,
+ * or FALSE if $index was not found in the registry.
+ *
+ * @param string $index
+ * @return boolean
+ */
+ public static function isRegistered($index)
+ {
+ if (self::$_registry === null) {
+ return false;
+ }
+ return self::$_registry->offsetExists($index);
+ }
+
+ /**
+ * Constructs a parent ArrayObject with default
+ * ARRAY_AS_PROPS to allow acces as an object
+ *
+ * @param array $array data array
+ * @param integer $flags ArrayObject flags
+ */
+ public function __construct($array = array(), $flags = parent::ARRAY_AS_PROPS)
+ {
+ parent::__construct($array, $flags);
+ }
+
+ /**
+ * @param string $index
+ * @returns mixed
+ *
+ * Workaround for http://bugs.php.net/bug.php?id=40442 (ZF-960).
+ */
+ public function offsetExists($index)
+ {
+ return array_key_exists($index, $this);
+ }
+
+}
diff --git a/zend/library/Zend/Uri.php b/zend/library/Zend/Uri.php
new file mode 100644
index 0000000..f5307fe
--- /dev/null
+++ b/zend/library/Zend/Uri.php
@@ -0,0 +1,207 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Uri
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Uri.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Abstract class for all Zend_Uri handlers
+ *
+ * @category Zend
+ * @package Zend_Uri
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Uri
+{
+ /**
+ * Scheme of this URI (http, ftp, etc.)
+ *
+ * @var string
+ */
+ protected $_scheme = '';
+
+ /**
+ * Global configuration array
+ *
+ * @var array
+ */
+ static protected $_config = array(
+ 'allow_unwise' => false
+ );
+
+ /**
+ * Return a string representation of this URI.
+ *
+ * @see getUri()
+ * @return string
+ */
+ public function __toString()
+ {
+ try {
+ return $this->getUri();
+ } catch (Exception $e) {
+ trigger_error($e->getMessage(), E_USER_WARNING);
+ return '';
+ }
+ }
+
+ /**
+ * Convenience function, checks that a $uri string is well-formed
+ * by validating it but not returning an object. Returns TRUE if
+ * $uri is a well-formed URI, or FALSE otherwise.
+ *
+ * @param string $uri The URI to check
+ * @return boolean
+ */
+ public static function check($uri)
+ {
+ try {
+ $uri = self::factory($uri);
+ } catch (Exception $e) {
+ return false;
+ }
+
+ return $uri->valid();
+ }
+
+ /**
+ * Create a new Zend_Uri object for a URI. If building a new URI, then $uri should contain
+ * only the scheme (http, ftp, etc). Otherwise, supply $uri with the complete URI.
+ *
+ * @param string $uri The URI form which a Zend_Uri instance is created
+ * @param string $className The name of the class to use in order to manipulate URI
+ * @throws Zend_Uri_Exception When an empty string was supplied for the scheme
+ * @throws Zend_Uri_Exception When an illegal scheme is supplied
+ * @throws Zend_Uri_Exception When the scheme is not supported
+ * @throws Zend_Uri_Exception When $className doesn't exist or doesn't implements Zend_Uri
+ * @return Zend_Uri
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public static function factory($uri = 'http', $className = null)
+ {
+ // Separate the scheme from the scheme-specific parts
+ $uri = explode(':', $uri, 2);
+ $scheme = strtolower($uri[0]);
+ $schemeSpecific = isset($uri[1]) === true ? $uri[1] : '';
+
+ if (strlen($scheme) === 0) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('An empty string was supplied for the scheme');
+ }
+
+ // Security check: $scheme is used to load a class file, so only alphanumerics are allowed.
+ if (ctype_alnum($scheme) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Illegal scheme supplied, only alphanumeric characters are permitted');
+ }
+
+ if ($className === null) {
+ /**
+ * Create a new Zend_Uri object for the $uri. If a subclass of Zend_Uri exists for the
+ * scheme, return an instance of that class. Otherwise, a Zend_Uri_Exception is thrown.
+ */
+ switch ($scheme) {
+ case 'http':
+ // Break intentionally omitted
+ case 'https':
+ $className = 'Zend_Uri_Http';
+ break;
+
+ case 'mailto':
+ // TODO
+ default:
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Scheme \"$scheme\" is not supported");
+ break;
+ }
+ }
+
+ require_once 'Zend/Loader.php';
+ try {
+ Zend_Loader::loadClass($className);
+ } catch (Exception $e) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("\"$className\" not found");
+ }
+
+ $schemeHandler = new $className($scheme, $schemeSpecific);
+
+ if (! $schemeHandler instanceof Zend_Uri) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("\"$className\" is not an instance of Zend_Uri");
+ }
+
+ return $schemeHandler;
+ }
+
+ /**
+ * Get the URI's scheme
+ *
+ * @return string|false Scheme or false if no scheme is set.
+ */
+ public function getScheme()
+ {
+ if (empty($this->_scheme) === false) {
+ return $this->_scheme;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Set global configuration options
+ *
+ * @param Zend_Config|array $config
+ */
+ static public function setConfig($config)
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+ } elseif (!is_array($config)) {
+ throw new Zend_Uri_Exception("Config must be an array or an instance of Zend_Config.");
+ }
+
+ foreach ($config as $k => $v) {
+ self::$_config[$k] = $v;
+ }
+ }
+
+ /**
+ * Zend_Uri and its subclasses cannot be instantiated directly.
+ * Use Zend_Uri::factory() to return a new Zend_Uri object.
+ *
+ * @param string $scheme The scheme of the URI
+ * @param string $schemeSpecific The scheme-specific part of the URI
+ */
+ abstract protected function __construct($scheme, $schemeSpecific = '');
+
+ /**
+ * Return a string representation of this URI.
+ *
+ * @return string
+ */
+ abstract public function getUri();
+
+ /**
+ * Returns TRUE if this URI is valid, or FALSE otherwise.
+ *
+ * @return boolean
+ */
+ abstract public function valid();
+}
diff --git a/zend/library/Zend/Uri/Exception.php b/zend/library/Zend/Uri/Exception.php
new file mode 100644
index 0000000..334685b
--- /dev/null
+++ b/zend/library/Zend/Uri/Exception.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Uri
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * Exceptions for Zend_Uri
+ *
+ * @category Zend
+ * @package Zend_Uri
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Uri_Exception extends Zend_Exception
+{
+}
diff --git a/zend/library/Zend/Uri/Http.php b/zend/library/Zend/Uri/Http.php
new file mode 100644
index 0000000..d618506
--- /dev/null
+++ b/zend/library/Zend/Uri/Http.php
@@ -0,0 +1,765 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Uri
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Http.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Uri
+ */
+require_once 'Zend/Uri.php';
+
+/**
+ * @see Zend_Validate_Hostname
+ */
+require_once 'Zend/Validate/Hostname.php';
+
+/**
+ * HTTP(S) URI handler
+ *
+ * @category Zend
+ * @package Zend_Uri
+ * @uses Zend_Uri
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Uri_Http extends Zend_Uri
+{
+ /**
+ * Character classes for validation regular expressions
+ */
+ const CHAR_ALNUM = 'A-Za-z0-9';
+ const CHAR_MARK = '-_.!~*\'()\[\]';
+ const CHAR_RESERVED = ';\/?:@&=+$,';
+ const CHAR_SEGMENT = ':@&=+$,;';
+ const CHAR_UNWISE = '{}|\\\\^`';
+
+ /**
+ * HTTP username
+ *
+ * @var string
+ */
+ protected $_username = '';
+
+ /**
+ * HTTP password
+ *
+ * @var string
+ */
+ protected $_password = '';
+
+ /**
+ * HTTP host
+ *
+ * @var string
+ */
+ protected $_host = '';
+
+ /**
+ * HTTP post
+ *
+ * @var string
+ */
+ protected $_port = '';
+
+ /**
+ * HTTP part
+ *
+ * @var string
+ */
+ protected $_path = '';
+
+ /**
+ * HTTP query
+ *
+ * @var string
+ */
+ protected $_query = '';
+
+ /**
+ * HTTP fragment
+ *
+ * @var string
+ */
+ protected $_fragment = '';
+
+ /**
+ * Regular expression grammar rules for validation; values added by constructor
+ *
+ * @var array
+ */
+ protected $_regex = array();
+
+ /**
+ * Constructor accepts a string $scheme (e.g., http, https) and a scheme-specific part of the URI
+ * (e.g., example.com/path/to/resource?query=param#fragment)
+ *
+ * @param string $scheme The scheme of the URI
+ * @param string $schemeSpecific The scheme-specific part of the URI
+ * @throws Zend_Uri_Exception When the URI is not valid
+ */
+ protected function __construct($scheme, $schemeSpecific = '')
+ {
+ // Set the scheme
+ $this->_scheme = $scheme;
+
+ // Set up grammar rules for validation via regular expressions. These
+ // are to be used with slash-delimited regular expression strings.
+
+ // Escaped special characters (eg. '%25' for '%')
+ $this->_regex['escaped'] = '%[[:xdigit:]]{2}';
+
+ // Unreserved characters
+ $this->_regex['unreserved'] = '[' . self::CHAR_ALNUM . self::CHAR_MARK . ']';
+
+ // Segment can use escaped, unreserved or a set of additional chars
+ $this->_regex['segment'] = '(?:' . $this->_regex['escaped'] . '|[' .
+ self::CHAR_ALNUM . self::CHAR_MARK . self::CHAR_SEGMENT . '])*';
+
+ // Path can be a series of segmets char strings seperated by '/'
+ $this->_regex['path'] = '(?:\/(?:' . $this->_regex['segment'] . ')?)+';
+
+ // URI characters can be escaped, alphanumeric, mark or reserved chars
+ $this->_regex['uric'] = '(?:' . $this->_regex['escaped'] . '|[' .
+ self::CHAR_ALNUM . self::CHAR_MARK . self::CHAR_RESERVED .
+
+ // If unwise chars are allowed, add them to the URI chars class
+ (self::$_config['allow_unwise'] ? self::CHAR_UNWISE : '') . '])';
+
+ // If no scheme-specific part was supplied, the user intends to create
+ // a new URI with this object. No further parsing is required.
+ if (strlen($schemeSpecific) === 0) {
+ return;
+ }
+
+ // Parse the scheme-specific URI parts into the instance variables.
+ $this->_parseUri($schemeSpecific);
+
+ // Validate the URI
+ if ($this->valid() === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Invalid URI supplied');
+ }
+ }
+
+ /**
+ * Creates a Zend_Uri_Http from the given string
+ *
+ * @param string $uri String to create URI from, must start with
+ * 'http://' or 'https://'
+ * @throws InvalidArgumentException When the given $uri is not a string or
+ * does not start with http:// or https://
+ * @throws Zend_Uri_Exception When the given $uri is invalid
+ * @return Zend_Uri_Http
+ */
+ public static function fromString($uri)
+ {
+ if (is_string($uri) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('$uri is not a string');
+ }
+
+ $uri = explode(':', $uri, 2);
+ $scheme = strtolower($uri[0]);
+ $schemeSpecific = isset($uri[1]) === true ? $uri[1] : '';
+
+ if (in_array($scheme, array('http', 'https')) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Invalid scheme: '$scheme'");
+ }
+
+ $schemeHandler = new Zend_Uri_Http($scheme, $schemeSpecific);
+ return $schemeHandler;
+ }
+
+ /**
+ * Parse the scheme-specific portion of the URI and place its parts into instance variables.
+ *
+ * @param string $schemeSpecific The scheme-specific portion to parse
+ * @throws Zend_Uri_Exception When scheme-specific decoposition fails
+ * @throws Zend_Uri_Exception When authority decomposition fails
+ * @return void
+ */
+ protected function _parseUri($schemeSpecific)
+ {
+ // High-level decomposition parser
+ $pattern = '~^((//)([^/?#]*))([^?#]*)(\?([^#]*))?(#(.*))?$~';
+ $status = @preg_match($pattern, $schemeSpecific, $matches);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: scheme-specific decomposition failed');
+ }
+
+ // Failed decomposition; no further processing needed
+ if ($status === false) {
+ return;
+ }
+
+ // Save URI components that need no further decomposition
+ $this->_path = isset($matches[4]) === true ? $matches[4] : '';
+ $this->_query = isset($matches[6]) === true ? $matches[6] : '';
+ $this->_fragment = isset($matches[8]) === true ? $matches[8] : '';
+
+ // Additional decomposition to get username, password, host, and port
+ $combo = isset($matches[3]) === true ? $matches[3] : '';
+ $pattern = '~^(([^:@]*)(:([^@]*))?@)?((?(?=[[])[[][^]]+[]]|[^:]+))(:(.*))?$~';
+ $status = @preg_match($pattern, $combo, $matches);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: authority decomposition failed');
+ }
+
+ // Save remaining URI components
+ $this->_username = isset($matches[2]) === true ? $matches[2] : '';
+ $this->_password = isset($matches[4]) === true ? $matches[4] : '';
+ $this->_host = isset($matches[5]) === true
+ ? preg_replace('~^\[([^]]+)\]$~', '\1', $matches[5]) // Strip wrapper [] from IPv6 literal
+ : '';
+ $this->_port = isset($matches[7]) === true ? $matches[7] : '';
+ }
+
+ /**
+ * Returns a URI based on current values of the instance variables. If any
+ * part of the URI does not pass validation, then an exception is thrown.
+ *
+ * @throws Zend_Uri_Exception When one or more parts of the URI are invalid
+ * @return string
+ */
+ public function getUri()
+ {
+ if ($this->valid() === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('One or more parts of the URI are invalid');
+ }
+
+ $password = strlen($this->_password) > 0 ? ":$this->_password" : '';
+ $auth = strlen($this->_username) > 0 ? "$this->_username$password@" : '';
+ $port = strlen($this->_port) > 0 ? ":$this->_port" : '';
+ $query = strlen($this->_query) > 0 ? "?$this->_query" : '';
+ $fragment = strlen($this->_fragment) > 0 ? "#$this->_fragment" : '';
+
+ return $this->_scheme
+ . '://'
+ . $auth
+ . $this->_host
+ . $port
+ . $this->_path
+ . $query
+ . $fragment;
+ }
+
+ /**
+ * Validate the current URI from the instance variables. Returns true if and only if all
+ * parts pass validation.
+ *
+ * @return boolean
+ */
+ public function valid()
+ {
+ // Return true if and only if all parts of the URI have passed validation
+ return $this->validateUsername()
+ and $this->validatePassword()
+ and $this->validateHost()
+ and $this->validatePort()
+ and $this->validatePath()
+ and $this->validateQuery()
+ and $this->validateFragment();
+ }
+
+ /**
+ * Returns the username portion of the URL, or FALSE if none.
+ *
+ * @return string
+ */
+ public function getUsername()
+ {
+ return strlen($this->_username) > 0 ? $this->_username : false;
+ }
+
+ /**
+ * Returns true if and only if the username passes validation. If no username is passed,
+ * then the username contained in the instance variable is used.
+ *
+ * @param string $username The HTTP username
+ * @throws Zend_Uri_Exception When username validation fails
+ * @return boolean
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public function validateUsername($username = null)
+ {
+ if ($username === null) {
+ $username = $this->_username;
+ }
+
+ // If the username is empty, then it is considered valid
+ if (strlen($username) === 0) {
+ return true;
+ }
+
+ // Check the username against the allowed values
+ $status = @preg_match('/^(?:' . $this->_regex['escaped'] . '|[' .
+ self::CHAR_ALNUM . self::CHAR_MARK . ';:&=+$,' . '])+$/', $username);
+
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: username validation failed');
+ }
+
+ return $status === 1;
+ }
+
+ /**
+ * Sets the username for the current URI, and returns the old username
+ *
+ * @param string $username The HTTP username
+ * @throws Zend_Uri_Exception When $username is not a valid HTTP username
+ * @return string
+ */
+ public function setUsername($username)
+ {
+ if ($this->validateUsername($username) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Username \"$username\" is not a valid HTTP username");
+ }
+
+ $oldUsername = $this->_username;
+ $this->_username = $username;
+
+ return $oldUsername;
+ }
+
+ /**
+ * Returns the password portion of the URL, or FALSE if none.
+ *
+ * @return string
+ */
+ public function getPassword()
+ {
+ return strlen($this->_password) > 0 ? $this->_password : false;
+ }
+
+ /**
+ * Returns true if and only if the password passes validation. If no password is passed,
+ * then the password contained in the instance variable is used.
+ *
+ * @param string $password The HTTP password
+ * @throws Zend_Uri_Exception When password validation fails
+ * @return boolean
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public function validatePassword($password = null)
+ {
+ if ($password === null) {
+ $password = $this->_password;
+ }
+
+ // If the password is empty, then it is considered valid
+ if (strlen($password) === 0) {
+ return true;
+ }
+
+ // If the password is nonempty, but there is no username, then it is considered invalid
+ if (strlen($password) > 0 and strlen($this->_username) === 0) {
+ return false;
+ }
+
+ // Check the password against the allowed values
+ $status = @preg_match('/^(?:' . $this->_regex['escaped'] . '|[' .
+ self::CHAR_ALNUM . self::CHAR_MARK . ';:&=+$,' . '])+$/', $password);
+
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: password validation failed.');
+ }
+
+ return $status == 1;
+ }
+
+ /**
+ * Sets the password for the current URI, and returns the old password
+ *
+ * @param string $password The HTTP password
+ * @throws Zend_Uri_Exception When $password is not a valid HTTP password
+ * @return string
+ */
+ public function setPassword($password)
+ {
+ if ($this->validatePassword($password) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Password \"$password\" is not a valid HTTP password.");
+ }
+
+ $oldPassword = $this->_password;
+ $this->_password = $password;
+
+ return $oldPassword;
+ }
+
+ /**
+ * Returns the domain or host IP portion of the URL, or FALSE if none.
+ *
+ * @return string
+ */
+ public function getHost()
+ {
+ return strlen($this->_host) > 0 ? $this->_host : false;
+ }
+
+ /**
+ * Returns true if and only if the host string passes validation. If no host is passed,
+ * then the host contained in the instance variable is used.
+ *
+ * @param string $host The HTTP host
+ * @return boolean
+ * @uses Zend_Filter
+ */
+ public function validateHost($host = null)
+ {
+ if ($host === null) {
+ $host = $this->_host;
+ }
+
+ // If the host is empty, then it is considered invalid
+ if (strlen($host) === 0) {
+ return false;
+ }
+
+ // Check the host against the allowed values; delegated to Zend_Filter.
+ $validate = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_ALL);
+
+ return $validate->isValid($host);
+ }
+
+ /**
+ * Sets the host for the current URI, and returns the old host
+ *
+ * @param string $host The HTTP host
+ * @throws Zend_Uri_Exception When $host is nota valid HTTP host
+ * @return string
+ */
+ public function setHost($host)
+ {
+ if ($this->validateHost($host) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Host \"$host\" is not a valid HTTP host");
+ }
+
+ $oldHost = $this->_host;
+ $this->_host = $host;
+
+ return $oldHost;
+ }
+
+ /**
+ * Returns the TCP port, or FALSE if none.
+ *
+ * @return string
+ */
+ public function getPort()
+ {
+ return strlen($this->_port) > 0 ? $this->_port : false;
+ }
+
+ /**
+ * Returns true if and only if the TCP port string passes validation. If no port is passed,
+ * then the port contained in the instance variable is used.
+ *
+ * @param string $port The HTTP port
+ * @return boolean
+ */
+ public function validatePort($port = null)
+ {
+ if ($port === null) {
+ $port = $this->_port;
+ }
+
+ // If the port is empty, then it is considered valid
+ if (strlen($port) === 0) {
+ return true;
+ }
+
+ // Check the port against the allowed values
+ return ctype_digit((string) $port) and 1 <= $port and $port <= 65535;
+ }
+
+ /**
+ * Sets the port for the current URI, and returns the old port
+ *
+ * @param string $port The HTTP port
+ * @throws Zend_Uri_Exception When $port is not a valid HTTP port
+ * @return string
+ */
+ public function setPort($port)
+ {
+ if ($this->validatePort($port) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Port \"$port\" is not a valid HTTP port.");
+ }
+
+ $oldPort = $this->_port;
+ $this->_port = $port;
+
+ return $oldPort;
+ }
+
+ /**
+ * Returns the path and filename portion of the URL.
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return strlen($this->_path) > 0 ? $this->_path : '/';
+ }
+
+ /**
+ * Returns true if and only if the path string passes validation. If no path is passed,
+ * then the path contained in the instance variable is used.
+ *
+ * @param string $path The HTTP path
+ * @throws Zend_Uri_Exception When path validation fails
+ * @return boolean
+ */
+ public function validatePath($path = null)
+ {
+ if ($path === null) {
+ $path = $this->_path;
+ }
+
+ // If the path is empty, then it is considered valid
+ if (strlen($path) === 0) {
+ return true;
+ }
+
+ // Determine whether the path is well-formed
+ $pattern = '/^' . $this->_regex['path'] . '$/';
+ $status = @preg_match($pattern, $path);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: path validation failed');
+ }
+
+ return (boolean) $status;
+ }
+
+ /**
+ * Sets the path for the current URI, and returns the old path
+ *
+ * @param string $path The HTTP path
+ * @throws Zend_Uri_Exception When $path is not a valid HTTP path
+ * @return string
+ */
+ public function setPath($path)
+ {
+ if ($this->validatePath($path) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Path \"$path\" is not a valid HTTP path");
+ }
+
+ $oldPath = $this->_path;
+ $this->_path = $path;
+
+ return $oldPath;
+ }
+
+ /**
+ * Returns the query portion of the URL (after ?), or FALSE if none.
+ *
+ * @return string
+ */
+ public function getQuery()
+ {
+ return strlen($this->_query) > 0 ? $this->_query : false;
+ }
+
+ /**
+ * Returns the query portion of the URL (after ?) as a
+ * key-value-array. If the query is empty an empty array
+ * is returned
+ *
+ * @return array
+ */
+ public function getQueryAsArray()
+ {
+ $query = $this->getQuery();
+ $querryArray = array();
+ if ($query !== false) {
+ parse_str($query, $querryArray);
+ }
+ return $querryArray;
+ }
+
+ /**
+ * Returns true if and only if the query string passes validation. If no query is passed,
+ * then the query string contained in the instance variable is used.
+ *
+ * @param string $query The query to validate
+ * @throws Zend_Uri_Exception When query validation fails
+ * @return boolean
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public function validateQuery($query = null)
+ {
+ if ($query === null) {
+ $query = $this->_query;
+ }
+
+ // If query is empty, it is considered to be valid
+ if (strlen($query) === 0) {
+ return true;
+ }
+
+ // Determine whether the query is well-formed
+ $pattern = '/^' . $this->_regex['uric'] . '*$/';
+ $status = @preg_match($pattern, $query);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: query validation failed');
+ }
+
+ return $status == 1;
+ }
+
+ /**
+ * Add or replace params in the query string for the current URI, and
+ * return the old query.
+ *
+ * @param array $queryParams
+ * @return string Old query string
+ */
+ public function addReplaceQueryParameters(array $queryParams)
+ {
+ $queryParams = array_merge($this->getQueryAsArray(), $queryParams);
+ return $this->setQuery($queryParams);
+ }
+
+ /**
+ * Remove params in the query string for the current URI, and
+ * return the old query.
+ *
+ * @param array $queryParamKeys
+ * @return string Old query string
+ */
+ public function removeQueryParameters(array $queryParamKeys)
+ {
+ $queryParams = array_diff_key($this->getQueryAsArray(), array_fill_keys($queryParamKeys, 0));
+ return $this->setQuery($queryParams);
+ }
+
+ /**
+ * Set the query string for the current URI, and return the old query
+ * string This method accepts both strings and arrays.
+ *
+ * @param string|array $query The query string or array
+ * @throws Zend_Uri_Exception When $query is not a valid query string
+ * @return string Old query string
+ */
+ public function setQuery($query)
+ {
+ $oldQuery = $this->_query;
+
+ // If query is empty, set an empty string
+ if (empty($query) === true) {
+ $this->_query = '';
+ return $oldQuery;
+ }
+
+ // If query is an array, make a string out of it
+ if (is_array($query) === true) {
+ $query = http_build_query($query, '', '&');
+ } else {
+ // If it is a string, make sure it is valid. If not parse and encode it
+ $query = (string) $query;
+ if ($this->validateQuery($query) === false) {
+ parse_str($query, $queryArray);
+ $query = http_build_query($queryArray, '', '&');
+ }
+ }
+
+ // Make sure the query is valid, and set it
+ if ($this->validateQuery($query) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("'$query' is not a valid query string");
+ }
+
+ $this->_query = $query;
+
+ return $oldQuery;
+ }
+
+ /**
+ * Returns the fragment portion of the URL (after #), or FALSE if none.
+ *
+ * @return string|false
+ */
+ public function getFragment()
+ {
+ return strlen($this->_fragment) > 0 ? $this->_fragment : false;
+ }
+
+ /**
+ * Returns true if and only if the fragment passes validation. If no fragment is passed,
+ * then the fragment contained in the instance variable is used.
+ *
+ * @param string $fragment Fragment of an URI
+ * @throws Zend_Uri_Exception When fragment validation fails
+ * @return boolean
+ * @link http://www.faqs.org/rfcs/rfc2396.html
+ */
+ public function validateFragment($fragment = null)
+ {
+ if ($fragment === null) {
+ $fragment = $this->_fragment;
+ }
+
+ // If fragment is empty, it is considered to be valid
+ if (strlen($fragment) === 0) {
+ return true;
+ }
+
+ // Determine whether the fragment is well-formed
+ $pattern = '/^' . $this->_regex['uric'] . '*$/';
+ $status = @preg_match($pattern, $fragment);
+ if ($status === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception('Internal error: fragment validation failed');
+ }
+
+ return (boolean) $status;
+ }
+
+ /**
+ * Sets the fragment for the current URI, and returns the old fragment
+ *
+ * @param string $fragment Fragment of the current URI
+ * @throws Zend_Uri_Exception When $fragment is not a valid HTTP fragment
+ * @return string
+ */
+ public function setFragment($fragment)
+ {
+ if ($this->validateFragment($fragment) === false) {
+ require_once 'Zend/Uri/Exception.php';
+ throw new Zend_Uri_Exception("Fragment \"$fragment\" is not a valid HTTP fragment");
+ }
+
+ $oldFragment = $this->_fragment;
+ $this->_fragment = $fragment;
+
+ return $oldFragment;
+ }
+}
diff --git a/zend/library/Zend/Validate/Abstract.php b/zend/library/Zend/Validate/Abstract.php
new file mode 100644
index 0000000..2644217
--- /dev/null
+++ b/zend/library/Zend/Validate/Abstract.php
@@ -0,0 +1,460 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Abstract.php 25105 2012-11-07 20:33:22Z rob $
+ */
+
+/**
+ * @see Zend_Validate_Interface
+ */
+require_once 'Zend/Validate/Interface.php';
+
+/**
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+abstract class Zend_Validate_Abstract implements Zend_Validate_Interface
+{
+ /**
+ * The value to be validated
+ *
+ * @var mixed
+ */
+ protected $_value;
+
+ /**
+ * Additional variables available for validation failure messages
+ *
+ * @var array
+ */
+ protected $_messageVariables = array();
+
+ /**
+ * Validation failure message template definitions
+ *
+ * @var array
+ */
+ protected $_messageTemplates = array();
+
+ /**
+ * Array of validation failure messages
+ *
+ * @var array
+ */
+ protected $_messages = array();
+
+ /**
+ * Flag indidcating whether or not value should be obfuscated in error
+ * messages
+ * @var bool
+ */
+ protected $_obscureValue = false;
+
+ /**
+ * Array of validation failure message codes
+ *
+ * @var array
+ * @deprecated Since 1.5.0
+ */
+ protected $_errors = array();
+
+ /**
+ * Translation object
+ * @var Zend_Translate
+ */
+ protected $_translator;
+
+ /**
+ * Default translation object for all validate objects
+ * @var Zend_Translate
+ */
+ protected static $_defaultTranslator;
+
+ /**
+ * Is translation disabled?
+ * @var Boolean
+ */
+ protected $_translatorDisabled = false;
+
+ /**
+ * Limits the maximum returned length of a error message
+ *
+ * @var Integer
+ */
+ protected static $_messageLength = -1;
+
+ /**
+ * Returns array of validation failure messages
+ *
+ * @return array
+ */
+ public function getMessages()
+ {
+ return $this->_messages;
+ }
+
+ /**
+ * Returns an array of the names of variables that are used in constructing validation failure messages
+ *
+ * @return array
+ */
+ public function getMessageVariables()
+ {
+ return array_keys($this->_messageVariables);
+ }
+
+ /**
+ * Returns the message templates from the validator
+ *
+ * @return array
+ */
+ public function getMessageTemplates()
+ {
+ return $this->_messageTemplates;
+ }
+
+ /**
+ * Sets the validation failure message template for a particular key
+ *
+ * @param string $messageString
+ * @param string $messageKey OPTIONAL
+ * @return Zend_Validate_Abstract Provides a fluent interface
+ * @throws Zend_Validate_Exception
+ */
+ public function setMessage($messageString, $messageKey = null)
+ {
+ if ($messageKey === null) {
+ $keys = array_keys($this->_messageTemplates);
+ foreach($keys as $key) {
+ $this->setMessage($messageString, $key);
+ }
+ return $this;
+ }
+
+ if (!isset($this->_messageTemplates[$messageKey])) {
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception("No message template exists for key '$messageKey'");
+ }
+
+ $this->_messageTemplates[$messageKey] = $messageString;
+ return $this;
+ }
+
+ /**
+ * Sets validation failure message templates given as an array, where the array keys are the message keys,
+ * and the array values are the message template strings.
+ *
+ * @param array $messages
+ * @return Zend_Validate_Abstract
+ */
+ public function setMessages(array $messages)
+ {
+ foreach ($messages as $key => $message) {
+ $this->setMessage($message, $key);
+ }
+ return $this;
+ }
+
+ /**
+ * Magic function returns the value of the requested property, if and only if it is the value or a
+ * message variable.
+ *
+ * @param string $property
+ * @return mixed
+ * @throws Zend_Validate_Exception
+ */
+ public function __get($property)
+ {
+ if ($property == 'value') {
+ return $this->_value;
+ }
+ if (array_key_exists($property, $this->_messageVariables)) {
+ return $this->{$this->_messageVariables[$property]};
+ }
+ /**
+ * @see Zend_Validate_Exception
+ */
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception("No property exists by the name '$property'");
+ }
+
+ /**
+ * Constructs and returns a validation failure message with the given message key and value.
+ *
+ * Returns null if and only if $messageKey does not correspond to an existing template.
+ *
+ * If a translator is available and a translation exists for $messageKey,
+ * the translation will be used.
+ *
+ * @param string $messageKey
+ * @param string $value
+ * @return string
+ */
+ protected function _createMessage($messageKey, $value)
+ {
+ if (!isset($this->_messageTemplates[$messageKey])) {
+ return null;
+ }
+
+ $message = $this->_messageTemplates[$messageKey];
+
+ if (null !== ($translator = $this->getTranslator())) {
+ if ($translator->isTranslated($messageKey)) {
+ $message = $translator->translate($messageKey);
+ } else {
+ $message = $translator->translate($message);
+ }
+ }
+
+ if (is_object($value)) {
+ if (!in_array('__toString', get_class_methods($value))) {
+ $value = get_class($value) . ' object';
+ } else {
+ $value = $value->__toString();
+ }
+ } else {
+ $value = implode((array) $value);
+ }
+
+ if ($this->getObscureValue()) {
+ $value = str_repeat('*', strlen($value));
+ }
+
+ $message = str_replace('%value%', $value, $message);
+ foreach ($this->_messageVariables as $ident => $property) {
+ $message = str_replace(
+ "%$ident%",
+ implode(' ', (array) $this->$property),
+ $message
+ );
+ }
+
+ $length = self::getMessageLength();
+ if (($length > -1) && (strlen($message) > $length)) {
+ $message = substr($message, 0, (self::getMessageLength() - 3)) . '...';
+ }
+
+ return $message;
+ }
+
+ /**
+ * @param string $messageKey
+ * @param string $value OPTIONAL
+ * @return void
+ */
+ protected function _error($messageKey, $value = null)
+ {
+ if ($messageKey === null) {
+ $keys = array_keys($this->_messageTemplates);
+ $messageKey = current($keys);
+ }
+ if ($value === null) {
+ $value = $this->_value;
+ }
+ $this->_errors[] = $messageKey;
+ $this->_messages[$messageKey] = $this->_createMessage($messageKey, $value);
+ }
+
+ /**
+ * Sets the value to be validated and clears the messages and errors arrays
+ *
+ * @param mixed $value
+ * @return void
+ */
+ protected function _setValue($value)
+ {
+ $this->_value = $value;
+ $this->_messages = array();
+ $this->_errors = array();
+ }
+
+ /**
+ * Returns array of validation failure message codes
+ *
+ * @return array
+ * @deprecated Since 1.5.0
+ */
+ public function getErrors()
+ {
+ return $this->_errors;
+ }
+
+ /**
+ * Set flag indicating whether or not value should be obfuscated in messages
+ *
+ * @param bool $flag
+ * @return Zend_Validate_Abstract
+ */
+ public function setObscureValue($flag)
+ {
+ $this->_obscureValue = (bool) $flag;
+ return $this;
+ }
+
+ /**
+ * Retrieve flag indicating whether or not value should be obfuscated in
+ * messages
+ *
+ * @return bool
+ */
+ public function getObscureValue()
+ {
+ return $this->_obscureValue;
+ }
+
+ /**
+ * Set translation object
+ *
+ * @param Zend_Translate|Zend_Translate_Adapter|null $translator
+ * @return Zend_Validate_Abstract
+ */
+ public function setTranslator($translator = null)
+ {
+ if ((null === $translator) || ($translator instanceof Zend_Translate_Adapter)) {
+ $this->_translator = $translator;
+ } elseif ($translator instanceof Zend_Translate) {
+ $this->_translator = $translator->getAdapter();
+ } else {
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception('Invalid translator specified');
+ }
+ return $this;
+ }
+
+ /**
+ * Return translation object
+ *
+ * @return Zend_Translate_Adapter|null
+ */
+ public function getTranslator()
+ {
+ if ($this->translatorIsDisabled()) {
+ return null;
+ }
+
+ if (null === $this->_translator) {
+ return self::getDefaultTranslator();
+ }
+
+ return $this->_translator;
+ }
+
+ /**
+ * Does this validator have its own specific translator?
+ *
+ * @return bool
+ */
+ public function hasTranslator()
+ {
+ return (bool)$this->_translator;
+ }
+
+ /**
+ * Set default translation object for all validate objects
+ *
+ * @param Zend_Translate|Zend_Translate_Adapter|null $translator
+ * @return void
+ */
+ public static function setDefaultTranslator($translator = null)
+ {
+ if ((null === $translator) || ($translator instanceof Zend_Translate_Adapter)) {
+ self::$_defaultTranslator = $translator;
+ } elseif ($translator instanceof Zend_Translate) {
+ self::$_defaultTranslator = $translator->getAdapter();
+ } else {
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception('Invalid translator specified');
+ }
+ }
+
+ /**
+ * Get default translation object for all validate objects
+ *
+ * @return Zend_Translate_Adapter|null
+ */
+ public static function getDefaultTranslator()
+ {
+ if (null === self::$_defaultTranslator) {
+ require_once 'Zend/Registry.php';
+ if (Zend_Registry::isRegistered('Zend_Translate')) {
+ $translator = Zend_Registry::get('Zend_Translate');
+ if ($translator instanceof Zend_Translate_Adapter) {
+ return $translator;
+ } elseif ($translator instanceof Zend_Translate) {
+ return $translator->getAdapter();
+ }
+ }
+ }
+
+ return self::$_defaultTranslator;
+ }
+
+ /**
+ * Is there a default translation object set?
+ *
+ * @return boolean
+ */
+ public static function hasDefaultTranslator()
+ {
+ return (bool)self::$_defaultTranslator;
+ }
+
+ /**
+ * Indicate whether or not translation should be disabled
+ *
+ * @param bool $flag
+ * @return Zend_Validate_Abstract
+ */
+ public function setDisableTranslator($flag)
+ {
+ $this->_translatorDisabled = (bool) $flag;
+ return $this;
+ }
+
+ /**
+ * Is translation disabled?
+ *
+ * @return bool
+ */
+ public function translatorIsDisabled()
+ {
+ return $this->_translatorDisabled;
+ }
+
+ /**
+ * Returns the maximum allowed message length
+ *
+ * @return integer
+ */
+ public static function getMessageLength()
+ {
+ return self::$_messageLength;
+ }
+
+ /**
+ * Sets the maximum allowed message length
+ *
+ * @param integer $length
+ */
+ public static function setMessageLength($length = -1)
+ {
+ self::$_messageLength = $length;
+ }
+}
diff --git a/zend/library/Zend/Validate/Hostname.php b/zend/library/Zend/Validate/Hostname.php
new file mode 100644
index 0000000..9b6bf15
--- /dev/null
+++ b/zend/library/Zend/Validate/Hostname.php
@@ -0,0 +1,788 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Hostname.php 25061 2012-11-02 21:24:09Z rob $
+ */
+
+/**
+ * @see Zend_Validate_Abstract
+ */
+require_once 'Zend/Validate/Abstract.php';
+
+/**
+ * @see Zend_Validate_Ip
+ */
+require_once 'Zend/Validate/Ip.php';
+
+/**
+ * Please note there are two standalone test scripts for testing IDN characters due to problems
+ * with file encoding.
+ *
+ * The first is tests/Zend/Validate/HostnameTestStandalone.php which is designed to be run on
+ * the command line.
+ *
+ * The second is tests/Zend/Validate/HostnameTestForm.php which is designed to be run via HTML
+ * to allow users to test entering UTF-8 characters in a form.
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Validate_Hostname extends Zend_Validate_Abstract
+{
+ const CANNOT_DECODE_PUNYCODE = 'hostnameCannotDecodePunycode';
+ const INVALID = 'hostnameInvalid';
+ const INVALID_DASH = 'hostnameDashCharacter';
+ const INVALID_HOSTNAME = 'hostnameInvalidHostname';
+ const INVALID_HOSTNAME_SCHEMA = 'hostnameInvalidHostnameSchema';
+ const INVALID_LOCAL_NAME = 'hostnameInvalidLocalName';
+ const INVALID_URI = 'hostnameInvalidUri';
+ const IP_ADDRESS_NOT_ALLOWED = 'hostnameIpAddressNotAllowed';
+ const LOCAL_NAME_NOT_ALLOWED = 'hostnameLocalNameNotAllowed';
+ const UNDECIPHERABLE_TLD = 'hostnameUndecipherableTld';
+ const UNKNOWN_TLD = 'hostnameUnknownTld';
+
+ /**
+ * @var array
+ */
+ protected $_messageTemplates = array(
+ self::CANNOT_DECODE_PUNYCODE => "'%value%' appears to be a DNS hostname but the given punycode notation cannot be decoded",
+ self::INVALID => "Invalid type given. String expected",
+ self::INVALID_DASH => "'%value%' appears to be a DNS hostname but contains a dash in an invalid position",
+ self::INVALID_HOSTNAME => "'%value%' does not match the expected structure for a DNS hostname",
+ self::INVALID_HOSTNAME_SCHEMA => "'%value%' appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%'",
+ self::INVALID_LOCAL_NAME => "'%value%' does not appear to be a valid local network name",
+ self::INVALID_URI => "'%value%' does not appear to be a valid URI hostname",
+ self::IP_ADDRESS_NOT_ALLOWED => "'%value%' appears to be an IP address, but IP addresses are not allowed",
+ self::LOCAL_NAME_NOT_ALLOWED => "'%value%' appears to be a local network name but local network names are not allowed",
+ self::UNDECIPHERABLE_TLD => "'%value%' appears to be a DNS hostname but cannot extract TLD part",
+ self::UNKNOWN_TLD => "'%value%' appears to be a DNS hostname but cannot match TLD against known list",
+ );
+
+ /**
+ * @var array
+ */
+ protected $_messageVariables = array(
+ 'tld' => '_tld'
+ );
+
+ /**
+ * Allows Internet domain names (e.g., example.com)
+ */
+ const ALLOW_DNS = 1;
+
+ /**
+ * Allows IP addresses
+ */
+ const ALLOW_IP = 2;
+
+ /**
+ * Allows local network names (e.g., localhost, www.localdomain)
+ */
+ const ALLOW_LOCAL = 4;
+
+ /**
+ * Allows all types of hostnames
+ */
+ const ALLOW_URI = 8;
+
+ /**
+ * Allows all types of hostnames
+ */
+ const ALLOW_ALL = 15;
+
+ /**
+ * Array of valid top-level-domains
+ *
+ * @see ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt List of all TLDs by domain
+ * @see http://www.iana.org/domains/root/db/ Official list of supported TLDs
+ * @var array
+ */
+ protected $_validTlds = array(
+ 'ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa',
+ 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi',
+ 'biz', 'bj', 'bm', 'bn', 'bo', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc',
+ 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop', 'cr', 'cu',
+ 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'edu', 'ee', 'eg', 'er',
+ 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg',
+ 'gh', 'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk',
+ 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'info', 'int', 'io', 'iq',
+ 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp',
+ 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly',
+ 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'mp',
+ 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc',
+ 'ne', 'net', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe',
+ 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're',
+ 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl',
+ 'sm', 'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th',
+ 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw', 'tz', 'ua',
+ 'ug', 'uk', 'um', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws',
+ 'xxx', 'ye', 'yt', 'yu', 'za', 'zm', 'zw'
+ );
+
+ /**
+ * @var string
+ */
+ protected $_tld;
+
+ /**
+ * Array for valid Idns
+ * @see http://www.iana.org/domains/idn-tables/ Official list of supported IDN Chars
+ * (.AC) Ascension Island http://www.nic.ac/pdf/AC-IDN-Policy.pdf
+ * (.AR) Argentinia http://www.nic.ar/faqidn.html
+ * (.AS) American Samoa http://www.nic.as/idn/chars.cfm
+ * (.AT) Austria http://www.nic.at/en/service/technical_information/idn/charset_converter/
+ * (.BIZ) International http://www.iana.org/domains/idn-tables/
+ * (.BR) Brazil http://registro.br/faq/faq6.html
+ * (.BV) Bouvett Island http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
+ * (.CAT) Catalan http://www.iana.org/domains/idn-tables/tables/cat_ca_1.0.html
+ * (.CH) Switzerland https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1
+ * (.CL) Chile http://www.iana.org/domains/idn-tables/tables/cl_latn_1.0.html
+ * (.COM) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html
+ * (.DE) Germany http://www.denic.de/en/domains/idns/liste.html
+ * (.DK) Danmark http://www.dk-hostmaster.dk/index.php?id=151
+ * (.ES) Spain https://www.nic.es/media/2008-05/1210147705287.pdf
+ * (.FI) Finland http://www.ficora.fi/en/index/palvelut/fiverkkotunnukset/aakkostenkaytto.html
+ * (.GR) Greece https://grweb.ics.forth.gr/CharacterTable1_en.jsp
+ * (.HU) Hungary http://www.domain.hu/domain/English/szabalyzat/szabalyzat.html
+ * (.INFO) International http://www.nic.info/info/idn
+ * (.IO) British Indian Ocean Territory http://www.nic.io/IO-IDN-Policy.pdf
+ * (.IR) Iran http://www.nic.ir/Allowable_Characters_dot-iran
+ * (.IS) Iceland http://www.isnic.is/domain/rules.php
+ * (.KR) Korea http://www.iana.org/domains/idn-tables/tables/kr_ko-kr_1.0.html
+ * (.LI) Liechtenstein https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1
+ * (.LT) Lithuania http://www.domreg.lt/static/doc/public/idn_symbols-en.pdf
+ * (.MD) Moldova http://www.register.md/
+ * (.MUSEUM) International http://www.iana.org/domains/idn-tables/tables/museum_latn_1.0.html
+ * (.NET) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html
+ * (.NO) Norway http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
+ * (.NU) Niue http://www.worldnames.net/
+ * (.ORG) International http://www.pir.org/index.php?db=content/FAQs&tbl=FAQs_Registrant&id=2
+ * (.PE) Peru https://www.nic.pe/nuevas_politicas_faq_2.php
+ * (.PL) Poland http://www.dns.pl/IDN/allowed_character_sets.pdf
+ * (.PR) Puerto Rico http://www.nic.pr/idn_rules.asp
+ * (.PT) Portugal https://online.dns.pt/dns_2008/do?com=DS;8216320233;111;+PAGE(4000058)+K-CAT-CODIGO(C.125)+RCNT(100);
+ * (.RU) Russia http://www.iana.org/domains/idn-tables/tables/ru_ru-ru_1.0.html
+ * (.SA) Saudi Arabia http://www.iana.org/domains/idn-tables/tables/sa_ar_1.0.html
+ * (.SE) Sweden http://www.iis.se/english/IDN_campaignsite.shtml?lang=en
+ * (.SH) Saint Helena http://www.nic.sh/SH-IDN-Policy.pdf
+ * (.SJ) Svalbard and Jan Mayen http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
+ * (.TH) Thailand http://www.iana.org/domains/idn-tables/tables/th_th-th_1.0.html
+ * (.TM) Turkmenistan http://www.nic.tm/TM-IDN-Policy.pdf
+ * (.TR) Turkey https://www.nic.tr/index.php
+ * (.VE) Venice http://www.iana.org/domains/idn-tables/tables/ve_es_1.0.html
+ * (.VN) Vietnam http://www.vnnic.vn/english/5-6-300-2-2-04-20071115.htm#1.%20Introduction
+ *
+ * @var array
+ */
+ protected $_validIdns = array(
+ 'AC' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu'),
+ 'AR' => array(1 => '/^[\x{002d}0-9a-zà-ãç-êìíñ-õü]{1,63}$/iu'),
+ 'AS' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźż]{1,63}$/iu'),
+ 'AT' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿœšž]{1,63}$/iu'),
+ 'BIZ' => 'Hostname/Biz.php',
+ 'BR' => array(1 => '/^[\x{002d}0-9a-zà-ãçéíó-õúü]{1,63}$/iu'),
+ 'BV' => array(1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'),
+ 'CAT' => array(1 => '/^[\x{002d}0-9a-z·àç-éíïòóúü]{1,63}$/iu'),
+ 'CH' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'),
+ 'CL' => array(1 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu'),
+ 'CN' => 'Hostname/Cn.php',
+ 'COM' => 'Zend/Validate/Hostname/Com.php',
+ 'DE' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'),
+ 'DK' => array(1 => '/^[\x{002d}0-9a-zäéöüæøå]{1,63}$/iu'),
+ 'ES' => array(1 => '/^[\x{002d}0-9a-zàáçèéíïñòóúü·]{1,63}$/iu'),
+ 'EU' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿ]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9a-zāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĺļľŀłńņňʼnŋōŏőœŕŗřśŝšťŧũūŭůűųŵŷźżž]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-zșț]{1,63}$/iu',
+ 4 => '/^[\x{002d}0-9a-zΐάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ]{1,63}$/iu',
+ 5 => '/^[\x{002d}0-9a-zабвгдежзийклмнопрстуфхцчшщъыьэюя]{1,63}$/iu',
+ 6 => '/^[\x{002d}0-9a-zἀ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶᾷῂῃῄῆῇῐ-ΐῖῗῠ-ῧῲῳῴῶῷ]{1,63}$/iu'),
+ 'FI' => array(1 => '/^[\x{002d}0-9a-zäåö]{1,63}$/iu'),
+ 'GR' => array(1 => '/^[\x{002d}0-9a-zΆΈΉΊΌΎ-ΡΣ-ώἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼῂῃῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲῳῴῶ-ῼ]{1,63}$/iu'),
+ 'HK' => 'Zend/Validate/Hostname/Cn.php',
+ 'HU' => array(1 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu'),
+ 'INFO'=> array(1 => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-záæéíðóöúýþ]{1,63}$/iu',
+ 4 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu',
+ 5 => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu',
+ 6 => '/^[\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',
+ 7 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',
+ 8 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu'),
+ 'IO' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'),
+ 'IS' => array(1 => '/^[\x{002d}0-9a-záéýúíóþæöð]{1,63}$/iu'),
+ 'JP' => 'Zend/Validate/Hostname/Jp.php',
+ 'KR' => array(1 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu'),
+ 'LI' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'),
+ 'LT' => array(1 => '/^[\x{002d}0-9ąčęėįšųūž]{1,63}$/iu'),
+ 'MD' => array(1 => '/^[\x{002d}0-9ăâîşţ]{1,63}$/iu'),
+ 'MUSEUM' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćċčďđēėęěğġģħīįıķĺļľłńņňŋōőœŕŗřśşšţťŧūůűųŵŷźżžǎǐǒǔ\x{01E5}\x{01E7}\x{01E9}\x{01EF}ə\x{0292}ẁẃẅỳ]{1,63}$/iu'),
+ 'NET' => 'Zend/Validate/Hostname/Com.php',
+ 'NO' => array(1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'),
+ 'NU' => 'Zend/Validate/Hostname/Com.php',
+ 'ORG' => array(1 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-záäåæéëíðóöøúüýþ]{1,63}$/iu',
+ 4 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu',
+ 5 => '/^[\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',
+ 6 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu',
+ 7 => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu'),
+ 'PE' => array(1 => '/^[\x{002d}0-9a-zñáéíóúü]{1,63}$/iu'),
+ 'PL' => array(1 => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu',
+ 2 => '/^[\x{002d}а-ик-ш\x{0450}ѓѕјљњќџ]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-zâîăşţ]{1,63}$/iu',
+ 4 => '/^[\x{002d}0-9а-яё\x{04C2}]{1,63}$/iu',
+ 5 => '/^[\x{002d}0-9a-zàáâèéêìíîòóôùúûċġħż]{1,63}$/iu',
+ 6 => '/^[\x{002d}0-9a-zàäåæéêòóôöøü]{1,63}$/iu',
+ 7 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',
+ 8 => '/^[\x{002d}0-9a-zàáâãçéêíòóôõúü]{1,63}$/iu',
+ 9 => '/^[\x{002d}0-9a-zâîăşţ]{1,63}$/iu',
+ 10=> '/^[\x{002d}0-9a-záäéíóôúýčďĺľňŕšťž]{1,63}$/iu',
+ 11=> '/^[\x{002d}0-9a-zçë]{1,63}$/iu',
+ 12=> '/^[\x{002d}0-9а-ик-шђјљњћџ]{1,63}$/iu',
+ 13=> '/^[\x{002d}0-9a-zćčđšž]{1,63}$/iu',
+ 14=> '/^[\x{002d}0-9a-zâçöûüğış]{1,63}$/iu',
+ 15=> '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu',
+ 16=> '/^[\x{002d}0-9a-zäõöüšž]{1,63}$/iu',
+ 17=> '/^[\x{002d}0-9a-zĉĝĥĵŝŭ]{1,63}$/iu',
+ 18=> '/^[\x{002d}0-9a-zâäéëîô]{1,63}$/iu',
+ 19=> '/^[\x{002d}0-9a-zàáâäåæçèéêëìíîïðñòôöøùúûüýćčłńřśš]{1,63}$/iu',
+ 20=> '/^[\x{002d}0-9a-zäåæõöøüšž]{1,63}$/iu',
+ 21=> '/^[\x{002d}0-9a-zàáçèéìíòóùú]{1,63}$/iu',
+ 22=> '/^[\x{002d}0-9a-zàáéíóöúüőű]{1,63}$/iu',
+ 23=> '/^[\x{002d}0-9ΐά-ώ]{1,63}$/iu',
+ 24=> '/^[\x{002d}0-9a-zàáâåæçèéêëðóôöøüþœ]{1,63}$/iu',
+ 25=> '/^[\x{002d}0-9a-záäéíóöúüýčďěňřšťůž]{1,63}$/iu',
+ 26=> '/^[\x{002d}0-9a-z·àçèéíïòóúü]{1,63}$/iu',
+ 27=> '/^[\x{002d}0-9а-ъьюя\x{0450}\x{045D}]{1,63}$/iu',
+ 28=> '/^[\x{002d}0-9а-яёіў]{1,63}$/iu',
+ 29=> '/^[\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',
+ 30=> '/^[\x{002d}0-9a-záäåæéëíðóöøúüýþ]{1,63}$/iu',
+ 31=> '/^[\x{002d}0-9a-zàâæçèéêëîïñôùûüÿœ]{1,63}$/iu',
+ 32=> '/^[\x{002d}0-9а-щъыьэюяёєіїґ]{1,63}$/iu',
+ 33=> '/^[\x{002d}0-9א-ת]{1,63}$/iu'),
+ 'PR' => array(1 => '/^[\x{002d}0-9a-záéíóúñäëïüöâêîôûàèùæçœãõ]{1,63}$/iu'),
+ 'PT' => array(1 => '/^[\x{002d}0-9a-záàâãçéêíóôõú]{1,63}$/iu'),
+ 'RU' => array(1 => '/^[\x{002d}0-9а-яё]{1,63}$/iu'),
+ 'SA' => array(1 => '/^[\x{002d}.0-9\x{0621}-\x{063A}\x{0641}-\x{064A}\x{0660}-\x{0669}]{1,63}$/iu'),
+ 'SE' => array(1 => '/^[\x{002d}0-9a-zäåéöü]{1,63}$/iu'),
+ 'SH' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'),
+ 'SI' => array(
+ 1 => '/^[\x{002d}0-9a-zà-öø-ÿ]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9a-zāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĺļľŀłńņňʼnŋōŏőœŕŗřśŝšťŧũūŭůűųŵŷźżž]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-zșț]{1,63}$/iu'),
+ 'SJ' => array(1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'),
+ 'TH' => array(1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu'),
+ 'TM' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu'),
+ 'TW' => 'Zend/Validate/Hostname/Cn.php',
+ 'TR' => array(1 => '/^[\x{002d}0-9a-zğıüşöç]{1,63}$/iu'),
+ 'VE' => array(1 => '/^[\x{002d}0-9a-záéíóúüñ]{1,63}$/iu'),
+ 'VN' => array(1 => '/^[ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíòóôõùúýĂăĐđĨĩŨũƠơƯư\x{1EA0}-\x{1EF9}]{1,63}$/iu'),
+ 'ایران' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
+ '中国' => 'Zend/Validate/Hostname/Cn.php',
+ '公司' => 'Zend/Validate/Hostname/Cn.php',
+ '网络' => 'Zend/Validate/Hostname/Cn.php'
+ );
+
+ protected $_idnLength = array(
+ 'BIZ' => array(5 => 17, 11 => 15, 12 => 20),
+ 'CN' => array(1 => 20),
+ 'COM' => array(3 => 17, 5 => 20),
+ 'HK' => array(1 => 15),
+ 'INFO'=> array(4 => 17),
+ 'KR' => array(1 => 17),
+ 'NET' => array(3 => 17, 5 => 20),
+ 'ORG' => array(6 => 17),
+ 'TW' => array(1 => 20),
+ 'ایران' => array(1 => 30),
+ '中国' => array(1 => 20),
+ '公司' => array(1 => 20),
+ '网络' => array(1 => 20),
+ );
+
+ protected $_options = array(
+ 'allow' => self::ALLOW_DNS,
+ 'idn' => true,
+ 'tld' => true,
+ 'ip' => null
+ );
+
+ /**
+ * Sets validator options
+ *
+ * @param integer $allow OPTIONAL Set what types of hostname to allow (default ALLOW_DNS)
+ * @param boolean $validateIdn OPTIONAL Set whether IDN domains are validated (default true)
+ * @param boolean $validateTld OPTIONAL Set whether the TLD element of a hostname is validated (default true)
+ * @param Zend_Validate_Ip $ipValidator OPTIONAL
+ * @return void
+ * @see http://www.iana.org/cctld/specifications-policies-cctlds-01apr02.htm Technical Specifications for ccTLDs
+ */
+ public function __construct($options = array())
+ {
+ if ($options instanceof Zend_Config) {
+ $options = $options->toArray();
+ } else if (!is_array($options)) {
+ $options = func_get_args();
+ $temp['allow'] = array_shift($options);
+ if (!empty($options)) {
+ $temp['idn'] = array_shift($options);
+ }
+
+ if (!empty($options)) {
+ $temp['tld'] = array_shift($options);
+ }
+
+ if (!empty($options)) {
+ $temp['ip'] = array_shift($options);
+ }
+
+ $options = $temp;
+ }
+
+ $options += $this->_options;
+ $this->setOptions($options);
+ }
+
+ /**
+ * Returns all set options
+ *
+ * @return array
+ */
+ public function getOptions()
+ {
+ return $this->_options;
+ }
+
+ /**
+ * Sets the options for this validator
+ *
+ * @param array $options
+ * @return Zend_Validate_Hostname
+ */
+ public function setOptions($options)
+ {
+ if (array_key_exists('allow', $options)) {
+ $this->setAllow($options['allow']);
+ }
+
+ if (array_key_exists('idn', $options)) {
+ $this->setValidateIdn($options['idn']);
+ }
+
+ if (array_key_exists('tld', $options)) {
+ $this->setValidateTld($options['tld']);
+ }
+
+ if (array_key_exists('ip', $options)) {
+ $this->setIpValidator($options['ip']);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Returns the set ip validator
+ *
+ * @return Zend_Validate_Ip
+ */
+ public function getIpValidator()
+ {
+ return $this->_options['ip'];
+ }
+
+ /**
+ * @param Zend_Validate_Ip $ipValidator OPTIONAL
+ * @return void;
+ */
+ public function setIpValidator(Zend_Validate_Ip $ipValidator = null)
+ {
+ if ($ipValidator === null) {
+ $ipValidator = new Zend_Validate_Ip();
+ }
+
+ $this->_options['ip'] = $ipValidator;
+ return $this;
+ }
+
+ /**
+ * Returns the allow option
+ *
+ * @return integer
+ */
+ public function getAllow()
+ {
+ return $this->_options['allow'];
+ }
+
+ /**
+ * Sets the allow option
+ *
+ * @param integer $allow
+ * @return Zend_Validate_Hostname Provides a fluent interface
+ */
+ public function setAllow($allow)
+ {
+ $this->_options['allow'] = $allow;
+ return $this;
+ }
+
+ /**
+ * Returns the set idn option
+ *
+ * @return boolean
+ */
+ public function getValidateIdn()
+ {
+ return $this->_options['idn'];
+ }
+
+ /**
+ * Set whether IDN domains are validated
+ *
+ * This only applies when DNS hostnames are validated
+ *
+ * @param boolean $allowed Set allowed to true to validate IDNs, and false to not validate them
+ */
+ public function setValidateIdn ($allowed)
+ {
+ $this->_options['idn'] = (bool) $allowed;
+ return $this;
+ }
+
+ /**
+ * Returns the set tld option
+ *
+ * @return boolean
+ */
+ public function getValidateTld()
+ {
+ return $this->_options['tld'];
+ }
+
+ /**
+ * Set whether the TLD element of a hostname is validated
+ *
+ * This only applies when DNS hostnames are validated
+ *
+ * @param boolean $allowed Set allowed to true to validate TLDs, and false to not validate them
+ */
+ public function setValidateTld ($allowed)
+ {
+ $this->_options['tld'] = (bool) $allowed;
+ return $this;
+ }
+
+ /**
+ * Defined by Zend_Validate_Interface
+ *
+ * Returns true if and only if the $value is a valid hostname with respect to the current allow option
+ *
+ * @param string $value
+ * @throws Zend_Validate_Exception if a fatal error occurs for validation process
+ * @return boolean
+ */
+ public function isValid($value)
+ {
+ if (!is_string($value)) {
+ $this->_error(self::INVALID);
+ return false;
+ }
+
+ $this->_setValue($value);
+ // Check input against IP address schema
+ if (preg_match('/^[0-9a-f:.]*$/i', $value) &&
+ $this->_options['ip']->setTranslator($this->getTranslator())->isValid($value)) {
+ if (!($this->_options['allow'] & self::ALLOW_IP)) {
+ $this->_error(self::IP_ADDRESS_NOT_ALLOWED);
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ // RFC3986 3.2.2 states:
+ //
+ // The rightmost domain label of a fully qualified domain name
+ // in DNS may be followed by a single "." and should be if it is
+ // necessary to distinguish between the complete domain name and
+ // some local domain.
+ //
+ // (see ZF-6363)
+
+ // Local hostnames are allowed to be partitial (ending '.')
+ if ($this->_options['allow'] & self::ALLOW_LOCAL) {
+ if (substr($value, -1) === '.') {
+ $value = substr($value, 0, -1);
+ if (substr($value, -1) === '.') {
+ // Empty hostnames (ending '..') are not allowed
+ $this->_error(self::INVALID_LOCAL_NAME);
+ return false;
+ }
+ }
+ }
+
+ $domainParts = explode('.', $value);
+
+ // Prevent partitial IP V4 adresses (ending '.')
+ if ((count($domainParts) == 4) && preg_match('/^[0-9.a-e:.]*$/i', $value) &&
+ $this->_options['ip']->setTranslator($this->getTranslator())->isValid($value)) {
+ $this->_error(self::INVALID_LOCAL_NAME);
+ }
+
+ // Check input against DNS hostname schema
+ if ((count($domainParts) > 1) && (strlen($value) >= 4) && (strlen($value) <= 254)) {
+ $status = false;
+
+ $origenc = iconv_get_encoding('internal_encoding');
+ iconv_set_encoding('internal_encoding', 'UTF-8');
+ do {
+ // First check TLD
+ $matches = array();
+ if (preg_match('/([^.]{2,10})$/i', end($domainParts), $matches) ||
+ (end($domainParts) == 'ایران') || (end($domainParts) == '中国') ||
+ (end($domainParts) == '公司') || (end($domainParts) == '网络')) {
+
+ reset($domainParts);
+
+ // Hostname characters are: *(label dot)(label dot label); max 254 chars
+ // label: id-prefix [*ldh{61} id-prefix]; max 63 chars
+ // id-prefix: alpha / digit
+ // ldh: alpha / digit / dash
+
+ // Match TLD against known list
+ $this->_tld = strtolower($matches[1]);
+ if ($this->_options['tld']) {
+ if (!in_array($this->_tld, $this->_validTlds)) {
+ $this->_error(self::UNKNOWN_TLD);
+ $status = false;
+ break;
+ }
+ }
+
+ /**
+ * Match against IDN hostnames
+ * Note: Keep label regex short to avoid issues with long patterns when matching IDN hostnames
+ * @see Zend_Validate_Hostname_Interface
+ */
+ $regexChars = array(0 => '/^[a-z0-9\x2d]{1,63}$/i');
+ if ($this->_options['idn'] && isset($this->_validIdns[strtoupper($this->_tld)])) {
+ if (is_string($this->_validIdns[strtoupper($this->_tld)])) {
+ $regexChars += include($this->_validIdns[strtoupper($this->_tld)]);
+ } else {
+ $regexChars += $this->_validIdns[strtoupper($this->_tld)];
+ }
+ }
+
+ // Check each hostname part
+ $check = 0;
+ foreach ($domainParts as $domainPart) {
+ // Decode Punycode domainnames to IDN
+ if (strpos($domainPart, 'xn--') === 0) {
+ $domainPart = $this->decodePunycode(substr($domainPart, 4));
+ if ($domainPart === false) {
+ return false;
+ }
+ }
+
+ // Check dash (-) does not start, end or appear in 3rd and 4th positions
+ if ((strpos($domainPart, '-') === 0)
+ || ((strlen($domainPart) > 2) && (strpos($domainPart, '-', 2) == 2) && (strpos($domainPart, '-', 3) == 3))
+ || (strpos($domainPart, '-') === (strlen($domainPart) - 1))) {
+ $this->_error(self::INVALID_DASH);
+ $status = false;
+ break 2;
+ }
+
+ // Check each domain part
+ $checked = false;
+ foreach($regexChars as $regexKey => $regexChar) {
+ $status = @preg_match($regexChar, $domainPart);
+ if ($status > 0) {
+ $length = 63;
+ if (array_key_exists(strtoupper($this->_tld), $this->_idnLength)
+ && (array_key_exists($regexKey, $this->_idnLength[strtoupper($this->_tld)]))) {
+ $length = $this->_idnLength[strtoupper($this->_tld)];
+ }
+
+ if (iconv_strlen($domainPart, 'UTF-8') > $length) {
+ $this->_error(self::INVALID_HOSTNAME);
+ } else {
+ $checked = true;
+ break;
+ }
+ }
+ }
+
+ if ($checked) {
+ ++$check;
+ }
+ }
+
+ // If one of the labels doesn't match, the hostname is invalid
+ if ($check !== count($domainParts)) {
+ $this->_error(self::INVALID_HOSTNAME_SCHEMA);
+ $status = false;
+ }
+ } else {
+ // Hostname not long enough
+ $this->_error(self::UNDECIPHERABLE_TLD);
+ $status = false;
+ }
+ } while (false);
+
+ iconv_set_encoding('internal_encoding', $origenc);
+ // If the input passes as an Internet domain name, and domain names are allowed, then the hostname
+ // passes validation
+ if ($status && ($this->_options['allow'] & self::ALLOW_DNS)) {
+ return true;
+ }
+ } else if ($this->_options['allow'] & self::ALLOW_DNS) {
+ $this->_error(self::INVALID_HOSTNAME);
+ }
+
+ // Check for URI Syntax (RFC3986)
+ if ($this->_options['allow'] & self::ALLOW_URI) {
+ if (preg_match("/^([a-zA-Z0-9-._~!$&\'()*+,;=]|%[[:xdigit:]]{2}){1,254}$/i", $value)) {
+ return true;
+ } else {
+ $this->_error(self::INVALID_URI);
+ }
+ }
+
+ // Check input against local network name schema; last chance to pass validation
+ $regexLocal = '/^(([a-zA-Z0-9\x2d]{1,63}\x2e)*[a-zA-Z0-9\x2d]{1,63}[\x2e]{0,1}){1,254}$/';
+ $status = @preg_match($regexLocal, $value);
+
+ // If the input passes as a local network name, and local network names are allowed, then the
+ // hostname passes validation
+ $allowLocal = $this->_options['allow'] & self::ALLOW_LOCAL;
+ if ($status && $allowLocal) {
+ return true;
+ }
+
+ // If the input does not pass as a local network name, add a message
+ if (!$status) {
+ $this->_error(self::INVALID_LOCAL_NAME);
+ }
+
+ // If local network names are not allowed, add a message
+ if ($status && !$allowLocal) {
+ $this->_error(self::LOCAL_NAME_NOT_ALLOWED);
+ }
+
+ return false;
+ }
+
+ /**
+ * Decodes a punycode encoded string to it's original utf8 string
+ * In case of a decoding failure the original string is returned
+ *
+ * @param string $encoded Punycode encoded string to decode
+ * @return string
+ */
+ protected function decodePunycode($encoded)
+ {
+ $found = preg_match('/([^a-z0-9\x2d]{1,10})$/i', $encoded);
+ if (empty($encoded) || ($found > 0)) {
+ // no punycode encoded string, return as is
+ $this->_error(self::CANNOT_DECODE_PUNYCODE);
+ return false;
+ }
+
+ $separator = strrpos($encoded, '-');
+ if ($separator > 0) {
+ for ($x = 0; $x < $separator; ++$x) {
+ // prepare decoding matrix
+ $decoded[] = ord($encoded[$x]);
+ }
+ } else {
+ $this->_error(self::CANNOT_DECODE_PUNYCODE);
+ return false;
+ }
+
+ $lengthd = count($decoded);
+ $lengthe = strlen($encoded);
+
+ // decoding
+ $init = true;
+ $base = 72;
+ $index = 0;
+ $char = 0x80;
+
+ for ($indexe = ($separator) ? ($separator + 1) : 0; $indexe < $lengthe; ++$lengthd) {
+ for ($old_index = $index, $pos = 1, $key = 36; 1 ; $key += 36) {
+ $hex = ord($encoded[$indexe++]);
+ $digit = ($hex - 48 < 10) ? $hex - 22
+ : (($hex - 65 < 26) ? $hex - 65
+ : (($hex - 97 < 26) ? $hex - 97
+ : 36));
+
+ $index += $digit * $pos;
+ $tag = ($key <= $base) ? 1 : (($key >= $base + 26) ? 26 : ($key - $base));
+ if ($digit < $tag) {
+ break;
+ }
+
+ $pos = (int) ($pos * (36 - $tag));
+ }
+
+ $delta = intval($init ? (($index - $old_index) / 700) : (($index - $old_index) / 2));
+ $delta += intval($delta / ($lengthd + 1));
+ for ($key = 0; $delta > 910 / 2; $key += 36) {
+ $delta = intval($delta / 35);
+ }
+
+ $base = intval($key + 36 * $delta / ($delta + 38));
+ $init = false;
+ $char += (int) ($index / ($lengthd + 1));
+ $index %= ($lengthd + 1);
+ if ($lengthd > 0) {
+ for ($i = $lengthd; $i > $index; $i--) {
+ $decoded[$i] = $decoded[($i - 1)];
+ }
+ }
+
+ $decoded[$index++] = $char;
+ }
+
+ // convert decoded ucs4 to utf8 string
+ foreach ($decoded as $key => $value) {
+ if ($value < 128) {
+ $decoded[$key] = chr($value);
+ } elseif ($value < (1 << 11)) {
+ $decoded[$key] = chr(192 + ($value >> 6));
+ $decoded[$key] .= chr(128 + ($value & 63));
+ } elseif ($value < (1 << 16)) {
+ $decoded[$key] = chr(224 + ($value >> 12));
+ $decoded[$key] .= chr(128 + (($value >> 6) & 63));
+ $decoded[$key] .= chr(128 + ($value & 63));
+ } elseif ($value < (1 << 21)) {
+ $decoded[$key] = chr(240 + ($value >> 18));
+ $decoded[$key] .= chr(128 + (($value >> 12) & 63));
+ $decoded[$key] .= chr(128 + (($value >> 6) & 63));
+ $decoded[$key] .= chr(128 + ($value & 63));
+ } else {
+ $this->_error(self::CANNOT_DECODE_PUNYCODE);
+ return false;
+ }
+ }
+
+ return implode($decoded);
+ }
+}
diff --git a/zend/library/Zend/Validate/Hostname/Biz.php b/zend/library/Zend/Validate/Hostname/Biz.php
new file mode 100644
index 0000000..a9cfc07
--- /dev/null
+++ b/zend/library/Zend/Validate/Hostname/Biz.php
@@ -0,0 +1,2917 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Biz.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Ressource file for biz idn validation
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+return array(
+ 1 => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu',
+ 4 => '/^[\x{002d}0-9a-záæéíðóöúýþ]{1,63}$/iu',
+ 5 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu',
+ 6 => '/^[\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',
+ 7 => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu',
+ 8 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu',
+ 9 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',
+ 10 => '/^[\x{002d}0-9a-záàâãçéêíóôõú]{1,63}$/iu',
+ 11 => '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}\x{30A1}-\x{30F6}\x{30FC}' .
+'\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
+'\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' .
+'\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' .
+'\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' .
+'\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' .
+'\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' .
+'\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' .
+'\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' .
+'\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' .
+'\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' .
+'\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' .
+'\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' .
+'\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' .
+'\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' .
+'\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' .
+'\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' .
+'\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' .
+'\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' .
+'\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' .
+'\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' .
+'\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' .
+'\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' .
+'\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' .
+'\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' .
+'\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' .
+'\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' .
+'\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' .
+'\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' .
+'\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' .
+'\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' .
+'\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' .
+'\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' .
+'\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' .
+'\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' .
+'\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
+'\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' .
+'\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' .
+'\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' .
+'\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' .
+'\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' .
+'\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' .
+'\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' .
+'\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' .
+'\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' .
+'\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' .
+'\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' .
+'\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' .
+'\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' .
+'\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' .
+'\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' .
+'\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' .
+'\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' .
+'\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' .
+'\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' .
+'\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' .
+'\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' .
+'\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' .
+'\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' .
+'\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' .
+'\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' .
+'\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' .
+'\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' .
+'\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' .
+'\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' .
+'\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' .
+'\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' .
+'\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' .
+'\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' .
+'\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' .
+'\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' .
+'\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' .
+'\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' .
+'\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' .
+'\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' .
+'\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' .
+'\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' .
+'\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' .
+'\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' .
+'\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' .
+'\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' .
+'\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' .
+'\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' .
+'\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' .
+'\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' .
+'\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' .
+'\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' .
+'\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' .
+'\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' .
+'\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' .
+'\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' .
+'\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' .
+'\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' .
+'\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' .
+'\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' .
+'\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' .
+'\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' .
+'\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' .
+'\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' .
+'\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' .
+'\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' .
+'\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' .
+'\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' .
+'\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' .
+'\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' .
+'\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' .
+'\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' .
+'\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' .
+'\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' .
+'\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' .
+'\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' .
+'\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' .
+'\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' .
+'\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' .
+'\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' .
+'\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' .
+'\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' .
+'\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' .
+'\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' .
+'\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' .
+'\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' .
+'\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' .
+'\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' .
+'\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' .
+'\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' .
+'\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' .
+'\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' .
+'\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' .
+'\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' .
+'\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' .
+'\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' .
+'\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' .
+'\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' .
+'\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' .
+'\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' .
+'\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' .
+'\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' .
+'\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' .
+'\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' .
+'\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' .
+'\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' .
+'\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' .
+'\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' .
+'\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' .
+'\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' .
+'\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' .
+'\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' .
+'\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' .
+'\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' .
+'\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' .
+'\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' .
+'\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' .
+'\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' .
+'\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' .
+'\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' .
+'\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' .
+'\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' .
+'\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' .
+'\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' .
+'\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' .
+'\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' .
+'\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' .
+'\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' .
+'\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' .
+'\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' .
+'\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' .
+'\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' .
+'\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' .
+'\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' .
+'\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' .
+'\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' .
+'\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' .
+'\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' .
+'\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' .
+'\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' .
+'\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' .
+'\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' .
+'\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' .
+'\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' .
+'\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' .
+'\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' .
+'\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' .
+'\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' .
+'\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' .
+'\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' .
+'\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' .
+'\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' .
+'\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' .
+'\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' .
+'\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' .
+'\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' .
+'\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' .
+'\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' .
+'\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' .
+'\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' .
+'\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' .
+'\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' .
+'\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
+'\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' .
+'\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' .
+'\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' .
+'\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' .
+'\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' .
+'\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' .
+'\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' .
+'\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' .
+'\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' .
+'\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' .
+'\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' .
+'\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' .
+'\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' .
+'\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' .
+'\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' .
+'\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' .
+'\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' .
+'\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' .
+'\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' .
+'\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' .
+'\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' .
+'\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' .
+'\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' .
+'\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' .
+'\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' .
+'\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' .
+'\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' .
+'\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' .
+'\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' .
+'\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' .
+'\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' .
+'\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' .
+'\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' .
+'\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' .
+'\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' .
+'\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' .
+'\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' .
+'\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' .
+'\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' .
+'\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' .
+'\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' .
+'\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' .
+'\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' .
+'\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' .
+'\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' .
+'\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' .
+'\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' .
+'\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' .
+'\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' .
+'\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' .
+'\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' .
+'\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' .
+'\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' .
+'\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' .
+'\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' .
+'\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
+'\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' .
+'\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' .
+'\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' .
+'\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' .
+'\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' .
+'\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' .
+'\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' .
+'\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' .
+'\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' .
+'\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' .
+'\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' .
+'\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' .
+'\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' .
+'\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' .
+'\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' .
+'\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' .
+'\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' .
+'\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' .
+'\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' .
+'\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' .
+'\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' .
+'\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' .
+'\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' .
+'\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' .
+'\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' .
+'\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' .
+'\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' .
+'\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' .
+'\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' .
+'\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' .
+'\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' .
+'\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' .
+'\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' .
+'\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' .
+'\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' .
+'\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' .
+'\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' .
+'\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' .
+'\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' .
+'\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' .
+'\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' .
+'\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' .
+'\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' .
+'\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' .
+'\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' .
+'\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' .
+'\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' .
+'\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' .
+'\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' .
+'\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' .
+'\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' .
+'\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' .
+'\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' .
+'\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' .
+'\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' .
+'\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' .
+'\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' .
+'\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' .
+'\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' .
+'\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' .
+'\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' .
+'\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' .
+'\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' .
+'\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' .
+'\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' .
+'\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' .
+'\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' .
+'\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' .
+'\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' .
+'\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' .
+'\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' .
+'\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' .
+'\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' .
+'\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' .
+'\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' .
+'\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' .
+'\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' .
+'\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' .
+'\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' .
+'\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' .
+'\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' .
+'\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' .
+'\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' .
+'\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' .
+'\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' .
+'\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' .
+'\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' .
+'\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' .
+'\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' .
+'\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' .
+'\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' .
+'\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' .
+'\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' .
+'\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' .
+'\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' .
+'\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' .
+'\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' .
+'\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' .
+'\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' .
+'\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' .
+'\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' .
+'\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' .
+'\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' .
+'\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' .
+'\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' .
+'\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' .
+'\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' .
+'\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' .
+'\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' .
+'\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' .
+'\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' .
+'\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' .
+'\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' .
+'\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' .
+'\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' .
+'\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' .
+'\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' .
+'\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' .
+'\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' .
+'\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' .
+'\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' .
+'\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' .
+'\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' .
+'\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' .
+'\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' .
+'\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' .
+'\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' .
+'\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' .
+'\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' .
+'\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' .
+'\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' .
+'\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' .
+'\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' .
+'\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' .
+'\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' .
+'\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' .
+'\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' .
+'\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' .
+'\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' .
+'\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' .
+'\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' .
+'\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' .
+'\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' .
+'\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' .
+'\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' .
+'\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' .
+'\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' .
+'\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' .
+'\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' .
+'\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' .
+'\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' .
+'\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' .
+'\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' .
+'\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' .
+'\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' .
+'\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' .
+'\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' .
+'\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
+'\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' .
+'\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' .
+'\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' .
+'\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' .
+'\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' .
+'\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' .
+'\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' .
+'\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' .
+'\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' .
+'\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' .
+'\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' .
+'\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' .
+'\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' .
+'\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' .
+'\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' .
+'\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' .
+'\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' .
+'\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' .
+'\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' .
+'\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' .
+'\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' .
+'\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' .
+'\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' .
+'\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' .
+'\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' .
+'\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' .
+'\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' .
+'\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' .
+'\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' .
+'\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' .
+'\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' .
+'\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' .
+'\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' .
+'\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' .
+'\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' .
+'\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' .
+'\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' .
+'\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' .
+'\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' .
+'\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' .
+'\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' .
+'\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' .
+'\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' .
+'\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' .
+'\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' .
+'\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' .
+'\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' .
+'\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' .
+'\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' .
+'\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' .
+'\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' .
+'\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' .
+'\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' .
+'\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' .
+'\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' .
+'\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' .
+'\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' .
+'\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' .
+'\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' .
+'\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' .
+'\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' .
+'\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' .
+'\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' .
+'\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' .
+'\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' .
+'\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' .
+'\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' .
+'\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' .
+'\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' .
+'\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' .
+'\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' .
+'\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' .
+'\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' .
+'\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' .
+'\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' .
+'\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' .
+'\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' .
+'\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' .
+'\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' .
+'\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' .
+'\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' .
+'\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' .
+'\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' .
+'\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' .
+'\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' .
+'\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' .
+'\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' .
+'\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' .
+'\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' .
+'\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' .
+'\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' .
+'\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' .
+'\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' .
+'\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' .
+'\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' .
+'\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' .
+'\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' .
+'\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' .
+'\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' .
+'\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' .
+'\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' .
+'\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' .
+'\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' .
+'\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' .
+'\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' .
+'\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' .
+'\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' .
+'\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' .
+'\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' .
+'\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' .
+'\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' .
+'\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' .
+'\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' .
+'\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' .
+'\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' .
+'\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' .
+'\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' .
+'\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' .
+'\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' .
+'\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' .
+'\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' .
+'\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' .
+'\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' .
+'\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' .
+'\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' .
+'\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' .
+'\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' .
+'\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' .
+'\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' .
+'\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' .
+'\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' .
+'\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' .
+'\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' .
+'\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' .
+'\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' .
+'\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' .
+'\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' .
+'\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' .
+'\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' .
+'\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' .
+'\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' .
+'\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' .
+'\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' .
+'\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' .
+'\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' .
+'\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' .
+'\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' .
+'\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' .
+'\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' .
+'\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' .
+'\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' .
+'\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' .
+'\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' .
+'\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' .
+'\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' .
+'\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' .
+'\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' .
+'\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' .
+'\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' .
+'\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' .
+'\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' .
+'\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' .
+'\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' .
+'\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' .
+'\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' .
+'\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' .
+'\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' .
+'\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' .
+'\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' .
+'\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' .
+'\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' .
+'\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' .
+'\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' .
+'\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' .
+'\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' .
+'\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' .
+'\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' .
+'\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' .
+'\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' .
+'\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' .
+'\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' .
+'\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' .
+'\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' .
+'\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' .
+'\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' .
+'\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' .
+'\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' .
+'\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' .
+'\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' .
+'\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' .
+'\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' .
+'\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' .
+'\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' .
+'\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' .
+'\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' .
+'\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' .
+'\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' .
+'\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' .
+'\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' .
+'\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' .
+'\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' .
+'\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' .
+'\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' .
+'\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' .
+'\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' .
+'\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' .
+'\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' .
+'\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' .
+'\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' .
+'\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' .
+'\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' .
+'\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' .
+'\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' .
+'\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' .
+'\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' .
+'\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' .
+'\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' .
+'\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' .
+'\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' .
+'\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' .
+'\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' .
+'\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' .
+'\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' .
+'\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' .
+'\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' .
+'\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' .
+'\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' .
+'\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' .
+'\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' .
+'\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' .
+'\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' .
+'\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' .
+'\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' .
+'\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' .
+'\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' .
+'\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' .
+'\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' .
+'\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' .
+'\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' .
+'\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' .
+'\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' .
+'\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' .
+'\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' .
+'\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' .
+'\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' .
+'\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' .
+'\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' .
+'\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' .
+'\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' .
+'\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' .
+'\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' .
+'\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' .
+'\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' .
+'\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' .
+'\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' .
+'\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' .
+'\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' .
+'\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' .
+'\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' .
+'\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' .
+'\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' .
+'\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' .
+'\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' .
+'\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' .
+'\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' .
+'\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' .
+'\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' .
+'\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' .
+'\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' .
+'\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' .
+'\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' .
+'\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' .
+'\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' .
+'\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' .
+'\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' .
+'\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' .
+'\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' .
+'\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' .
+'\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
+'\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' .
+'\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' .
+'\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' .
+'\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' .
+'\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' .
+'\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' .
+'\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' .
+'\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' .
+'\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' .
+'\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' .
+'\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' .
+'\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' .
+'\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' .
+'\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' .
+'\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' .
+'\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' .
+'\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu',
+ 12 => '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' .
+'\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' .
+'\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' .
+'\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' .
+'\x{49B6}\x{49B7}\x{4C77}\x{4C9F}\x{4CA0}\x{4CA1}\x{4CA2}\x{4CA3}\x{4D13}' .
+'\x{4D14}\x{4D15}\x{4D16}\x{4D17}\x{4D18}\x{4D19}\x{4DAE}\x{4E00}\x{4E01}' .
+'\x{4E02}\x{4E03}\x{4E04}\x{4E05}\x{4E06}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
+'\x{4E0B}\x{4E0C}\x{4E0D}\x{4E0E}\x{4E0F}\x{4E10}\x{4E11}\x{4E13}\x{4E14}' .
+'\x{4E15}\x{4E16}\x{4E17}\x{4E18}\x{4E19}\x{4E1A}\x{4E1B}\x{4E1C}\x{4E1D}' .
+'\x{4E1E}\x{4E1F}\x{4E20}\x{4E21}\x{4E22}\x{4E23}\x{4E24}\x{4E25}\x{4E26}' .
+'\x{4E27}\x{4E28}\x{4E2A}\x{4E2B}\x{4E2C}\x{4E2D}\x{4E2E}\x{4E2F}\x{4E30}' .
+'\x{4E31}\x{4E32}\x{4E33}\x{4E34}\x{4E35}\x{4E36}\x{4E37}\x{4E38}\x{4E39}' .
+'\x{4E3A}\x{4E3B}\x{4E3C}\x{4E3D}\x{4E3E}\x{4E3F}\x{4E40}\x{4E41}\x{4E42}' .
+'\x{4E43}\x{4E44}\x{4E45}\x{4E46}\x{4E47}\x{4E48}\x{4E49}\x{4E4A}\x{4E4B}' .
+'\x{4E4C}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E50}\x{4E51}\x{4E52}\x{4E53}\x{4E54}' .
+'\x{4E56}\x{4E57}\x{4E58}\x{4E59}\x{4E5A}\x{4E5B}\x{4E5C}\x{4E5D}\x{4E5E}' .
+'\x{4E5F}\x{4E60}\x{4E61}\x{4E62}\x{4E63}\x{4E64}\x{4E65}\x{4E66}\x{4E67}' .
+'\x{4E69}\x{4E6A}\x{4E6B}\x{4E6C}\x{4E6D}\x{4E6E}\x{4E6F}\x{4E70}\x{4E71}' .
+'\x{4E72}\x{4E73}\x{4E74}\x{4E75}\x{4E76}\x{4E77}\x{4E78}\x{4E7A}\x{4E7B}' .
+'\x{4E7C}\x{4E7D}\x{4E7E}\x{4E7F}\x{4E80}\x{4E81}\x{4E82}\x{4E83}\x{4E84}' .
+'\x{4E85}\x{4E86}\x{4E87}\x{4E88}\x{4E89}\x{4E8B}\x{4E8C}\x{4E8D}\x{4E8E}' .
+'\x{4E8F}\x{4E90}\x{4E91}\x{4E92}\x{4E93}\x{4E94}\x{4E95}\x{4E97}\x{4E98}' .
+'\x{4E99}\x{4E9A}\x{4E9B}\x{4E9C}\x{4E9D}\x{4E9E}\x{4E9F}\x{4EA0}\x{4EA1}' .
+'\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA7}\x{4EA8}\x{4EA9}\x{4EAA}\x{4EAB}' .
+'\x{4EAC}\x{4EAD}\x{4EAE}\x{4EAF}\x{4EB0}\x{4EB1}\x{4EB2}\x{4EB3}\x{4EB4}' .
+'\x{4EB5}\x{4EB6}\x{4EB7}\x{4EB8}\x{4EB9}\x{4EBA}\x{4EBB}\x{4EBD}\x{4EBE}' .
+'\x{4EBF}\x{4EC0}\x{4EC1}\x{4EC2}\x{4EC3}\x{4EC4}\x{4EC5}\x{4EC6}\x{4EC7}' .
+'\x{4EC8}\x{4EC9}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED0}\x{4ED1}' .
+'\x{4ED2}\x{4ED3}\x{4ED4}\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDA}' .
+'\x{4EDB}\x{4EDC}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE0}\x{4EE1}\x{4EE2}\x{4EE3}' .
+'\x{4EE4}\x{4EE5}\x{4EE6}\x{4EE8}\x{4EE9}\x{4EEA}\x{4EEB}\x{4EEC}\x{4EEF}' .
+'\x{4EF0}\x{4EF1}\x{4EF2}\x{4EF3}\x{4EF4}\x{4EF5}\x{4EF6}\x{4EF7}\x{4EFB}' .
+'\x{4EFD}\x{4EFF}\x{4F00}\x{4F01}\x{4F02}\x{4F03}\x{4F04}\x{4F05}\x{4F06}' .
+'\x{4F08}\x{4F09}\x{4F0A}\x{4F0B}\x{4F0C}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}' .
+'\x{4F11}\x{4F12}\x{4F13}\x{4F14}\x{4F15}\x{4F17}\x{4F18}\x{4F19}\x{4F1A}' .
+'\x{4F1B}\x{4F1C}\x{4F1D}\x{4F1E}\x{4F1F}\x{4F20}\x{4F21}\x{4F22}\x{4F23}' .
+'\x{4F24}\x{4F25}\x{4F26}\x{4F27}\x{4F29}\x{4F2A}\x{4F2B}\x{4F2C}\x{4F2D}' .
+'\x{4F2E}\x{4F2F}\x{4F30}\x{4F32}\x{4F33}\x{4F34}\x{4F36}\x{4F38}\x{4F39}' .
+'\x{4F3A}\x{4F3B}\x{4F3C}\x{4F3D}\x{4F3E}\x{4F3F}\x{4F41}\x{4F42}\x{4F43}' .
+'\x{4F45}\x{4F46}\x{4F47}\x{4F48}\x{4F49}\x{4F4A}\x{4F4B}\x{4F4C}\x{4F4D}' .
+'\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}\x{4F52}\x{4F53}\x{4F54}\x{4F55}\x{4F56}' .
+'\x{4F57}\x{4F58}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}\x{4F5F}' .
+'\x{4F60}\x{4F61}\x{4F62}\x{4F63}\x{4F64}\x{4F65}\x{4F66}\x{4F67}\x{4F68}' .
+'\x{4F69}\x{4F6A}\x{4F6B}\x{4F6C}\x{4F6D}\x{4F6E}\x{4F6F}\x{4F70}\x{4F72}' .
+'\x{4F73}\x{4F74}\x{4F75}\x{4F76}\x{4F77}\x{4F78}\x{4F79}\x{4F7A}\x{4F7B}' .
+'\x{4F7C}\x{4F7D}\x{4F7E}\x{4F7F}\x{4F80}\x{4F81}\x{4F82}\x{4F83}\x{4F84}' .
+'\x{4F85}\x{4F86}\x{4F87}\x{4F88}\x{4F89}\x{4F8A}\x{4F8B}\x{4F8D}\x{4F8F}' .
+'\x{4F90}\x{4F91}\x{4F92}\x{4F93}\x{4F94}\x{4F95}\x{4F96}\x{4F97}\x{4F98}' .
+'\x{4F99}\x{4F9A}\x{4F9B}\x{4F9C}\x{4F9D}\x{4F9E}\x{4F9F}\x{4FA0}\x{4FA1}' .
+'\x{4FA3}\x{4FA4}\x{4FA5}\x{4FA6}\x{4FA7}\x{4FA8}\x{4FA9}\x{4FAA}\x{4FAB}' .
+'\x{4FAC}\x{4FAE}\x{4FAF}\x{4FB0}\x{4FB1}\x{4FB2}\x{4FB3}\x{4FB4}\x{4FB5}' .
+'\x{4FB6}\x{4FB7}\x{4FB8}\x{4FB9}\x{4FBA}\x{4FBB}\x{4FBC}\x{4FBE}\x{4FBF}' .
+'\x{4FC0}\x{4FC1}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FC5}\x{4FC7}\x{4FC9}\x{4FCA}' .
+'\x{4FCB}\x{4FCD}\x{4FCE}\x{4FCF}\x{4FD0}\x{4FD1}\x{4FD2}\x{4FD3}\x{4FD4}' .
+'\x{4FD5}\x{4FD6}\x{4FD7}\x{4FD8}\x{4FD9}\x{4FDA}\x{4FDB}\x{4FDC}\x{4FDD}' .
+'\x{4FDE}\x{4FDF}\x{4FE0}\x{4FE1}\x{4FE3}\x{4FE4}\x{4FE5}\x{4FE6}\x{4FE7}' .
+'\x{4FE8}\x{4FE9}\x{4FEA}\x{4FEB}\x{4FEC}\x{4FED}\x{4FEE}\x{4FEF}\x{4FF0}' .
+'\x{4FF1}\x{4FF2}\x{4FF3}\x{4FF4}\x{4FF5}\x{4FF6}\x{4FF7}\x{4FF8}\x{4FF9}' .
+'\x{4FFA}\x{4FFB}\x{4FFE}\x{4FFF}\x{5000}\x{5001}\x{5002}\x{5003}\x{5004}' .
+'\x{5005}\x{5006}\x{5007}\x{5008}\x{5009}\x{500A}\x{500B}\x{500C}\x{500D}' .
+'\x{500E}\x{500F}\x{5011}\x{5012}\x{5013}\x{5014}\x{5015}\x{5016}\x{5017}' .
+'\x{5018}\x{5019}\x{501A}\x{501B}\x{501C}\x{501D}\x{501E}\x{501F}\x{5020}' .
+'\x{5021}\x{5022}\x{5023}\x{5024}\x{5025}\x{5026}\x{5027}\x{5028}\x{5029}' .
+'\x{502A}\x{502B}\x{502C}\x{502D}\x{502E}\x{502F}\x{5030}\x{5031}\x{5032}' .
+'\x{5033}\x{5035}\x{5036}\x{5037}\x{5039}\x{503A}\x{503B}\x{503C}\x{503E}' .
+'\x{503F}\x{5040}\x{5041}\x{5043}\x{5044}\x{5045}\x{5046}\x{5047}\x{5048}' .
+'\x{5049}\x{504A}\x{504B}\x{504C}\x{504D}\x{504E}\x{504F}\x{5051}\x{5053}' .
+'\x{5054}\x{5055}\x{5056}\x{5057}\x{5059}\x{505A}\x{505B}\x{505C}\x{505D}' .
+'\x{505E}\x{505F}\x{5060}\x{5061}\x{5062}\x{5063}\x{5064}\x{5065}\x{5066}' .
+'\x{5067}\x{5068}\x{5069}\x{506A}\x{506B}\x{506C}\x{506D}\x{506E}\x{506F}' .
+'\x{5070}\x{5071}\x{5072}\x{5073}\x{5074}\x{5075}\x{5076}\x{5077}\x{5078}' .
+'\x{5079}\x{507A}\x{507B}\x{507D}\x{507E}\x{507F}\x{5080}\x{5082}\x{5083}' .
+'\x{5084}\x{5085}\x{5086}\x{5087}\x{5088}\x{5089}\x{508A}\x{508B}\x{508C}' .
+'\x{508D}\x{508E}\x{508F}\x{5090}\x{5091}\x{5092}\x{5094}\x{5095}\x{5096}' .
+'\x{5098}\x{5099}\x{509A}\x{509B}\x{509C}\x{509D}\x{509E}\x{50A2}\x{50A3}' .
+'\x{50A4}\x{50A5}\x{50A6}\x{50A7}\x{50A8}\x{50A9}\x{50AA}\x{50AB}\x{50AC}' .
+'\x{50AD}\x{50AE}\x{50AF}\x{50B0}\x{50B1}\x{50B2}\x{50B3}\x{50B4}\x{50B5}' .
+'\x{50B6}\x{50B7}\x{50B8}\x{50BA}\x{50BB}\x{50BC}\x{50BD}\x{50BE}\x{50BF}' .
+'\x{50C0}\x{50C1}\x{50C2}\x{50C4}\x{50C5}\x{50C6}\x{50C7}\x{50C8}\x{50C9}' .
+'\x{50CA}\x{50CB}\x{50CC}\x{50CD}\x{50CE}\x{50CF}\x{50D0}\x{50D1}\x{50D2}' .
+'\x{50D3}\x{50D4}\x{50D5}\x{50D6}\x{50D7}\x{50D9}\x{50DA}\x{50DB}\x{50DC}' .
+'\x{50DD}\x{50DE}\x{50E0}\x{50E3}\x{50E4}\x{50E5}\x{50E6}\x{50E7}\x{50E8}' .
+'\x{50E9}\x{50EA}\x{50EC}\x{50ED}\x{50EE}\x{50EF}\x{50F0}\x{50F1}\x{50F2}' .
+'\x{50F3}\x{50F5}\x{50F6}\x{50F8}\x{50F9}\x{50FA}\x{50FB}\x{50FC}\x{50FD}' .
+'\x{50FE}\x{50FF}\x{5100}\x{5101}\x{5102}\x{5103}\x{5104}\x{5105}\x{5106}' .
+'\x{5107}\x{5108}\x{5109}\x{510A}\x{510B}\x{510C}\x{510D}\x{510E}\x{510F}' .
+'\x{5110}\x{5111}\x{5112}\x{5113}\x{5114}\x{5115}\x{5116}\x{5117}\x{5118}' .
+'\x{5119}\x{511A}\x{511C}\x{511D}\x{511E}\x{511F}\x{5120}\x{5121}\x{5122}' .
+'\x{5123}\x{5124}\x{5125}\x{5126}\x{5127}\x{5129}\x{512A}\x{512C}\x{512D}' .
+'\x{512E}\x{512F}\x{5130}\x{5131}\x{5132}\x{5133}\x{5134}\x{5135}\x{5136}' .
+'\x{5137}\x{5138}\x{5139}\x{513A}\x{513B}\x{513C}\x{513D}\x{513E}\x{513F}' .
+'\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
+'\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5151}\x{5152}\x{5154}\x{5155}' .
+'\x{5156}\x{5157}\x{5159}\x{515A}\x{515B}\x{515C}\x{515D}\x{515E}\x{515F}' .
+'\x{5161}\x{5162}\x{5163}\x{5165}\x{5166}\x{5167}\x{5168}\x{5169}\x{516A}' .
+'\x{516B}\x{516C}\x{516D}\x{516E}\x{516F}\x{5170}\x{5171}\x{5173}\x{5174}' .
+'\x{5175}\x{5176}\x{5177}\x{5178}\x{5179}\x{517A}\x{517B}\x{517C}\x{517D}' .
+'\x{517F}\x{5180}\x{5181}\x{5182}\x{5185}\x{5186}\x{5187}\x{5188}\x{5189}' .
+'\x{518A}\x{518B}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}\x{5193}' .
+'\x{5194}\x{5195}\x{5196}\x{5197}\x{5198}\x{5199}\x{519A}\x{519B}\x{519C}' .
+'\x{519D}\x{519E}\x{519F}\x{51A0}\x{51A2}\x{51A4}\x{51A5}\x{51A6}\x{51A7}' .
+'\x{51A8}\x{51AA}\x{51AB}\x{51AC}\x{51AE}\x{51AF}\x{51B0}\x{51B1}\x{51B2}' .
+'\x{51B3}\x{51B5}\x{51B6}\x{51B7}\x{51B9}\x{51BB}\x{51BC}\x{51BD}\x{51BE}' .
+'\x{51BF}\x{51C0}\x{51C1}\x{51C3}\x{51C4}\x{51C5}\x{51C6}\x{51C7}\x{51C8}' .
+'\x{51C9}\x{51CA}\x{51CB}\x{51CC}\x{51CD}\x{51CE}\x{51CF}\x{51D0}\x{51D1}' .
+'\x{51D4}\x{51D5}\x{51D6}\x{51D7}\x{51D8}\x{51D9}\x{51DA}\x{51DB}\x{51DC}' .
+'\x{51DD}\x{51DE}\x{51E0}\x{51E1}\x{51E2}\x{51E3}\x{51E4}\x{51E5}\x{51E7}' .
+'\x{51E8}\x{51E9}\x{51EA}\x{51EB}\x{51ED}\x{51EF}\x{51F0}\x{51F1}\x{51F3}' .
+'\x{51F4}\x{51F5}\x{51F6}\x{51F7}\x{51F8}\x{51F9}\x{51FA}\x{51FB}\x{51FC}' .
+'\x{51FD}\x{51FE}\x{51FF}\x{5200}\x{5201}\x{5202}\x{5203}\x{5204}\x{5205}' .
+'\x{5206}\x{5207}\x{5208}\x{5209}\x{520A}\x{520B}\x{520C}\x{520D}\x{520E}' .
+'\x{520F}\x{5210}\x{5211}\x{5212}\x{5213}\x{5214}\x{5215}\x{5216}\x{5217}' .
+'\x{5218}\x{5219}\x{521A}\x{521B}\x{521C}\x{521D}\x{521E}\x{521F}\x{5220}' .
+'\x{5221}\x{5222}\x{5223}\x{5224}\x{5225}\x{5226}\x{5228}\x{5229}\x{522A}' .
+'\x{522B}\x{522C}\x{522D}\x{522E}\x{522F}\x{5230}\x{5231}\x{5232}\x{5233}' .
+'\x{5234}\x{5235}\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{523C}' .
+'\x{523D}\x{523E}\x{523F}\x{5240}\x{5241}\x{5242}\x{5243}\x{5244}\x{5245}' .
+'\x{5246}\x{5247}\x{5248}\x{5249}\x{524A}\x{524B}\x{524C}\x{524D}\x{524E}' .
+'\x{5250}\x{5251}\x{5252}\x{5254}\x{5255}\x{5256}\x{5257}\x{5258}\x{5259}' .
+'\x{525A}\x{525B}\x{525C}\x{525D}\x{525E}\x{525F}\x{5260}\x{5261}\x{5262}' .
+'\x{5263}\x{5264}\x{5265}\x{5267}\x{5268}\x{5269}\x{526A}\x{526B}\x{526C}' .
+'\x{526D}\x{526E}\x{526F}\x{5270}\x{5272}\x{5273}\x{5274}\x{5275}\x{5276}' .
+'\x{5277}\x{5278}\x{527A}\x{527B}\x{527C}\x{527D}\x{527E}\x{527F}\x{5280}' .
+'\x{5281}\x{5282}\x{5283}\x{5284}\x{5286}\x{5287}\x{5288}\x{5289}\x{528A}' .
+'\x{528B}\x{528C}\x{528D}\x{528F}\x{5290}\x{5291}\x{5292}\x{5293}\x{5294}' .
+'\x{5295}\x{5296}\x{5297}\x{5298}\x{5299}\x{529A}\x{529B}\x{529C}\x{529D}' .
+'\x{529E}\x{529F}\x{52A0}\x{52A1}\x{52A2}\x{52A3}\x{52A5}\x{52A6}\x{52A7}' .
+'\x{52A8}\x{52A9}\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52AE}\x{52AF}\x{52B0}' .
+'\x{52B1}\x{52B2}\x{52B3}\x{52B4}\x{52B5}\x{52B6}\x{52B7}\x{52B8}\x{52B9}' .
+'\x{52BA}\x{52BB}\x{52BC}\x{52BD}\x{52BE}\x{52BF}\x{52C0}\x{52C1}\x{52C2}' .
+'\x{52C3}\x{52C6}\x{52C7}\x{52C9}\x{52CA}\x{52CB}\x{52CD}\x{52CF}\x{52D0}' .
+'\x{52D2}\x{52D3}\x{52D5}\x{52D6}\x{52D7}\x{52D8}\x{52D9}\x{52DA}\x{52DB}' .
+'\x{52DC}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}\x{52E4}\x{52E6}' .
+'\x{52E7}\x{52E8}\x{52E9}\x{52EA}\x{52EB}\x{52EC}\x{52ED}\x{52EF}\x{52F0}' .
+'\x{52F1}\x{52F2}\x{52F3}\x{52F4}\x{52F5}\x{52F6}\x{52F7}\x{52F8}\x{52F9}' .
+'\x{52FA}\x{52FB}\x{52FC}\x{52FD}\x{52FE}\x{52FF}\x{5300}\x{5301}\x{5302}' .
+'\x{5305}\x{5306}\x{5307}\x{5308}\x{5309}\x{530A}\x{530B}\x{530C}\x{530D}' .
+'\x{530E}\x{530F}\x{5310}\x{5311}\x{5312}\x{5313}\x{5314}\x{5315}\x{5316}' .
+'\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}\x{5320}\x{5321}\x{5322}' .
+'\x{5323}\x{5324}\x{5325}\x{5326}\x{5328}\x{532A}\x{532B}\x{532C}\x{532D}' .
+'\x{532E}\x{532F}\x{5330}\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}\x{533A}' .
+'\x{533B}\x{533C}\x{533D}\x{533E}\x{533F}\x{5340}\x{5341}\x{5343}\x{5344}' .
+'\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}\x{534A}\x{534B}\x{534C}\x{534D}' .
+'\x{534E}\x{534F}\x{5350}\x{5351}\x{5352}\x{5353}\x{5354}\x{5355}\x{5356}' .
+'\x{5357}\x{5358}\x{5359}\x{535A}\x{535C}\x{535E}\x{535F}\x{5360}\x{5361}' .
+'\x{5362}\x{5363}\x{5364}\x{5365}\x{5366}\x{5367}\x{5369}\x{536B}\x{536C}' .
+'\x{536E}\x{536F}\x{5370}\x{5371}\x{5372}\x{5373}\x{5374}\x{5375}\x{5376}' .
+'\x{5377}\x{5378}\x{5379}\x{537A}\x{537B}\x{537C}\x{537D}\x{537E}\x{537F}' .
+'\x{5381}\x{5382}\x{5383}\x{5384}\x{5385}\x{5386}\x{5387}\x{5388}\x{5389}' .
+'\x{538A}\x{538B}\x{538C}\x{538D}\x{538E}\x{538F}\x{5390}\x{5391}\x{5392}' .
+'\x{5393}\x{5394}\x{5395}\x{5396}\x{5397}\x{5398}\x{5399}\x{539A}\x{539B}' .
+'\x{539C}\x{539D}\x{539E}\x{539F}\x{53A0}\x{53A2}\x{53A3}\x{53A4}\x{53A5}' .
+'\x{53A6}\x{53A7}\x{53A8}\x{53A9}\x{53AC}\x{53AD}\x{53AE}\x{53B0}\x{53B1}' .
+'\x{53B2}\x{53B3}\x{53B4}\x{53B5}\x{53B6}\x{53B7}\x{53B8}\x{53B9}\x{53BB}' .
+'\x{53BC}\x{53BD}\x{53BE}\x{53BF}\x{53C0}\x{53C1}\x{53C2}\x{53C3}\x{53C4}' .
+'\x{53C6}\x{53C7}\x{53C8}\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}' .
+'\x{53D0}\x{53D1}\x{53D2}\x{53D3}\x{53D4}\x{53D5}\x{53D6}\x{53D7}\x{53D8}' .
+'\x{53D9}\x{53DB}\x{53DC}\x{53DF}\x{53E0}\x{53E1}\x{53E2}\x{53E3}\x{53E4}' .
+'\x{53E5}\x{53E6}\x{53E8}\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}' .
+'\x{53EF}\x{53F0}\x{53F1}\x{53F2}\x{53F3}\x{53F4}\x{53F5}\x{53F6}\x{53F7}' .
+'\x{53F8}\x{53F9}\x{53FA}\x{53FB}\x{53FC}\x{53FD}\x{53FE}\x{5401}\x{5402}' .
+'\x{5403}\x{5404}\x{5405}\x{5406}\x{5407}\x{5408}\x{5409}\x{540A}\x{540B}' .
+'\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}\x{5411}\x{5412}\x{5413}\x{5414}' .
+'\x{5415}\x{5416}\x{5417}\x{5418}\x{5419}\x{541B}\x{541C}\x{541D}\x{541E}' .
+'\x{541F}\x{5420}\x{5421}\x{5423}\x{5424}\x{5425}\x{5426}\x{5427}\x{5428}' .
+'\x{5429}\x{542A}\x{542B}\x{542C}\x{542D}\x{542E}\x{542F}\x{5430}\x{5431}' .
+'\x{5432}\x{5433}\x{5434}\x{5435}\x{5436}\x{5437}\x{5438}\x{5439}\x{543A}' .
+'\x{543B}\x{543C}\x{543D}\x{543E}\x{543F}\x{5440}\x{5441}\x{5442}\x{5443}' .
+'\x{5444}\x{5445}\x{5446}\x{5447}\x{5448}\x{5449}\x{544A}\x{544B}\x{544D}' .
+'\x{544E}\x{544F}\x{5450}\x{5451}\x{5452}\x{5453}\x{5454}\x{5455}\x{5456}' .
+'\x{5457}\x{5458}\x{5459}\x{545A}\x{545B}\x{545C}\x{545E}\x{545F}\x{5460}' .
+'\x{5461}\x{5462}\x{5463}\x{5464}\x{5465}\x{5466}\x{5467}\x{5468}\x{546A}' .
+'\x{546B}\x{546C}\x{546D}\x{546E}\x{546F}\x{5470}\x{5471}\x{5472}\x{5473}' .
+'\x{5474}\x{5475}\x{5476}\x{5477}\x{5478}\x{5479}\x{547A}\x{547B}\x{547C}' .
+'\x{547D}\x{547E}\x{547F}\x{5480}\x{5481}\x{5482}\x{5483}\x{5484}\x{5485}' .
+'\x{5486}\x{5487}\x{5488}\x{5489}\x{548B}\x{548C}\x{548D}\x{548E}\x{548F}' .
+'\x{5490}\x{5491}\x{5492}\x{5493}\x{5494}\x{5495}\x{5496}\x{5497}\x{5498}' .
+'\x{5499}\x{549A}\x{549B}\x{549C}\x{549D}\x{549E}\x{549F}\x{54A0}\x{54A1}' .
+'\x{54A2}\x{54A3}\x{54A4}\x{54A5}\x{54A6}\x{54A7}\x{54A8}\x{54A9}\x{54AA}' .
+'\x{54AB}\x{54AC}\x{54AD}\x{54AE}\x{54AF}\x{54B0}\x{54B1}\x{54B2}\x{54B3}' .
+'\x{54B4}\x{54B6}\x{54B7}\x{54B8}\x{54B9}\x{54BA}\x{54BB}\x{54BC}\x{54BD}' .
+'\x{54BE}\x{54BF}\x{54C0}\x{54C1}\x{54C2}\x{54C3}\x{54C4}\x{54C5}\x{54C6}' .
+'\x{54C7}\x{54C8}\x{54C9}\x{54CA}\x{54CB}\x{54CC}\x{54CD}\x{54CE}\x{54CF}' .
+'\x{54D0}\x{54D1}\x{54D2}\x{54D3}\x{54D4}\x{54D5}\x{54D6}\x{54D7}\x{54D8}' .
+'\x{54D9}\x{54DA}\x{54DB}\x{54DC}\x{54DD}\x{54DE}\x{54DF}\x{54E0}\x{54E1}' .
+'\x{54E2}\x{54E3}\x{54E4}\x{54E5}\x{54E6}\x{54E7}\x{54E8}\x{54E9}\x{54EA}' .
+'\x{54EB}\x{54EC}\x{54ED}\x{54EE}\x{54EF}\x{54F0}\x{54F1}\x{54F2}\x{54F3}' .
+'\x{54F4}\x{54F5}\x{54F7}\x{54F8}\x{54F9}\x{54FA}\x{54FB}\x{54FC}\x{54FD}' .
+'\x{54FE}\x{54FF}\x{5500}\x{5501}\x{5502}\x{5503}\x{5504}\x{5505}\x{5506}' .
+'\x{5507}\x{5508}\x{5509}\x{550A}\x{550B}\x{550C}\x{550D}\x{550E}\x{550F}' .
+'\x{5510}\x{5511}\x{5512}\x{5513}\x{5514}\x{5516}\x{5517}\x{551A}\x{551B}' .
+'\x{551C}\x{551D}\x{551E}\x{551F}\x{5520}\x{5521}\x{5522}\x{5523}\x{5524}' .
+'\x{5525}\x{5526}\x{5527}\x{5528}\x{5529}\x{552A}\x{552B}\x{552C}\x{552D}' .
+'\x{552E}\x{552F}\x{5530}\x{5531}\x{5532}\x{5533}\x{5534}\x{5535}\x{5536}' .
+'\x{5537}\x{5538}\x{5539}\x{553A}\x{553B}\x{553C}\x{553D}\x{553E}\x{553F}' .
+'\x{5540}\x{5541}\x{5542}\x{5543}\x{5544}\x{5545}\x{5546}\x{5548}\x{5549}' .
+'\x{554A}\x{554B}\x{554C}\x{554D}\x{554E}\x{554F}\x{5550}\x{5551}\x{5552}' .
+'\x{5553}\x{5554}\x{5555}\x{5556}\x{5557}\x{5558}\x{5559}\x{555A}\x{555B}' .
+'\x{555C}\x{555D}\x{555E}\x{555F}\x{5561}\x{5562}\x{5563}\x{5564}\x{5565}' .
+'\x{5566}\x{5567}\x{5568}\x{5569}\x{556A}\x{556B}\x{556C}\x{556D}\x{556E}' .
+'\x{556F}\x{5570}\x{5571}\x{5572}\x{5573}\x{5574}\x{5575}\x{5576}\x{5577}' .
+'\x{5578}\x{5579}\x{557B}\x{557C}\x{557D}\x{557E}\x{557F}\x{5580}\x{5581}' .
+'\x{5582}\x{5583}\x{5584}\x{5585}\x{5586}\x{5587}\x{5588}\x{5589}\x{558A}' .
+'\x{558B}\x{558C}\x{558D}\x{558E}\x{558F}\x{5590}\x{5591}\x{5592}\x{5593}' .
+'\x{5594}\x{5595}\x{5596}\x{5597}\x{5598}\x{5599}\x{559A}\x{559B}\x{559C}' .
+'\x{559D}\x{559E}\x{559F}\x{55A0}\x{55A1}\x{55A2}\x{55A3}\x{55A4}\x{55A5}' .
+'\x{55A6}\x{55A7}\x{55A8}\x{55A9}\x{55AA}\x{55AB}\x{55AC}\x{55AD}\x{55AE}' .
+'\x{55AF}\x{55B0}\x{55B1}\x{55B2}\x{55B3}\x{55B4}\x{55B5}\x{55B6}\x{55B7}' .
+'\x{55B8}\x{55B9}\x{55BA}\x{55BB}\x{55BC}\x{55BD}\x{55BE}\x{55BF}\x{55C0}' .
+'\x{55C1}\x{55C2}\x{55C3}\x{55C4}\x{55C5}\x{55C6}\x{55C7}\x{55C8}\x{55C9}' .
+'\x{55CA}\x{55CB}\x{55CC}\x{55CD}\x{55CE}\x{55CF}\x{55D0}\x{55D1}\x{55D2}' .
+'\x{55D3}\x{55D4}\x{55D5}\x{55D6}\x{55D7}\x{55D8}\x{55D9}\x{55DA}\x{55DB}' .
+'\x{55DC}\x{55DD}\x{55DE}\x{55DF}\x{55E1}\x{55E2}\x{55E3}\x{55E4}\x{55E5}' .
+'\x{55E6}\x{55E7}\x{55E8}\x{55E9}\x{55EA}\x{55EB}\x{55EC}\x{55ED}\x{55EE}' .
+'\x{55EF}\x{55F0}\x{55F1}\x{55F2}\x{55F3}\x{55F4}\x{55F5}\x{55F6}\x{55F7}' .
+'\x{55F9}\x{55FA}\x{55FB}\x{55FC}\x{55FD}\x{55FE}\x{55FF}\x{5600}\x{5601}' .
+'\x{5602}\x{5603}\x{5604}\x{5606}\x{5607}\x{5608}\x{5609}\x{560C}\x{560D}' .
+'\x{560E}\x{560F}\x{5610}\x{5611}\x{5612}\x{5613}\x{5614}\x{5615}\x{5616}' .
+'\x{5617}\x{5618}\x{5619}\x{561A}\x{561B}\x{561C}\x{561D}\x{561E}\x{561F}' .
+'\x{5621}\x{5622}\x{5623}\x{5624}\x{5625}\x{5626}\x{5627}\x{5628}\x{5629}' .
+'\x{562A}\x{562C}\x{562D}\x{562E}\x{562F}\x{5630}\x{5631}\x{5632}\x{5633}' .
+'\x{5634}\x{5635}\x{5636}\x{5638}\x{5639}\x{563A}\x{563B}\x{563D}\x{563E}' .
+'\x{563F}\x{5640}\x{5641}\x{5642}\x{5643}\x{5645}\x{5646}\x{5647}\x{5648}' .
+'\x{5649}\x{564A}\x{564C}\x{564D}\x{564E}\x{564F}\x{5650}\x{5652}\x{5653}' .
+'\x{5654}\x{5655}\x{5657}\x{5658}\x{5659}\x{565A}\x{565B}\x{565C}\x{565D}' .
+'\x{565E}\x{5660}\x{5662}\x{5663}\x{5664}\x{5665}\x{5666}\x{5667}\x{5668}' .
+'\x{5669}\x{566A}\x{566B}\x{566C}\x{566D}\x{566E}\x{566F}\x{5670}\x{5671}' .
+'\x{5672}\x{5673}\x{5674}\x{5676}\x{5677}\x{5678}\x{5679}\x{567A}\x{567B}' .
+'\x{567C}\x{567E}\x{567F}\x{5680}\x{5681}\x{5682}\x{5683}\x{5684}\x{5685}' .
+'\x{5686}\x{5687}\x{568A}\x{568C}\x{568D}\x{568E}\x{568F}\x{5690}\x{5691}' .
+'\x{5692}\x{5693}\x{5694}\x{5695}\x{5697}\x{5698}\x{5699}\x{569A}\x{569B}' .
+'\x{569C}\x{569D}\x{569F}\x{56A0}\x{56A1}\x{56A3}\x{56A4}\x{56A5}\x{56A6}' .
+'\x{56A7}\x{56A8}\x{56A9}\x{56AA}\x{56AB}\x{56AC}\x{56AD}\x{56AE}\x{56AF}' .
+'\x{56B0}\x{56B1}\x{56B2}\x{56B3}\x{56B4}\x{56B5}\x{56B6}\x{56B7}\x{56B8}' .
+'\x{56B9}\x{56BB}\x{56BC}\x{56BD}\x{56BE}\x{56BF}\x{56C0}\x{56C1}\x{56C2}' .
+'\x{56C3}\x{56C4}\x{56C5}\x{56C6}\x{56C7}\x{56C8}\x{56C9}\x{56CA}\x{56CB}' .
+'\x{56CC}\x{56CD}\x{56CE}\x{56D0}\x{56D1}\x{56D2}\x{56D3}\x{56D4}\x{56D5}' .
+'\x{56D6}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DC}\x{56DD}\x{56DE}\x{56DF}' .
+'\x{56E0}\x{56E1}\x{56E2}\x{56E3}\x{56E4}\x{56E5}\x{56E7}\x{56E8}\x{56E9}' .
+'\x{56EA}\x{56EB}\x{56EC}\x{56ED}\x{56EE}\x{56EF}\x{56F0}\x{56F1}\x{56F2}' .
+'\x{56F3}\x{56F4}\x{56F5}\x{56F7}\x{56F9}\x{56FA}\x{56FD}\x{56FE}\x{56FF}' .
+'\x{5700}\x{5701}\x{5702}\x{5703}\x{5704}\x{5706}\x{5707}\x{5708}\x{5709}' .
+'\x{570A}\x{570B}\x{570C}\x{570D}\x{570E}\x{570F}\x{5710}\x{5712}\x{5713}' .
+'\x{5714}\x{5715}\x{5716}\x{5718}\x{5719}\x{571A}\x{571B}\x{571C}\x{571D}' .
+'\x{571E}\x{571F}\x{5720}\x{5722}\x{5723}\x{5725}\x{5726}\x{5727}\x{5728}' .
+'\x{5729}\x{572A}\x{572B}\x{572C}\x{572D}\x{572E}\x{572F}\x{5730}\x{5731}' .
+'\x{5732}\x{5733}\x{5734}\x{5735}\x{5736}\x{5737}\x{5738}\x{5739}\x{573A}' .
+'\x{573B}\x{573C}\x{573E}\x{573F}\x{5740}\x{5741}\x{5742}\x{5744}\x{5745}' .
+'\x{5746}\x{5747}\x{5749}\x{574A}\x{574B}\x{574C}\x{574D}\x{574E}\x{574F}' .
+'\x{5750}\x{5751}\x{5752}\x{5753}\x{5754}\x{5757}\x{5759}\x{575A}\x{575B}' .
+'\x{575C}\x{575D}\x{575E}\x{575F}\x{5760}\x{5761}\x{5762}\x{5764}\x{5765}' .
+'\x{5766}\x{5767}\x{5768}\x{5769}\x{576A}\x{576B}\x{576C}\x{576D}\x{576F}' .
+'\x{5770}\x{5771}\x{5772}\x{5773}\x{5774}\x{5775}\x{5776}\x{5777}\x{5779}' .
+'\x{577A}\x{577B}\x{577C}\x{577D}\x{577E}\x{577F}\x{5780}\x{5782}\x{5783}' .
+'\x{5784}\x{5785}\x{5786}\x{5788}\x{5789}\x{578A}\x{578B}\x{578C}\x{578D}' .
+'\x{578E}\x{578F}\x{5790}\x{5791}\x{5792}\x{5793}\x{5794}\x{5795}\x{5797}' .
+'\x{5798}\x{5799}\x{579A}\x{579B}\x{579C}\x{579D}\x{579E}\x{579F}\x{57A0}' .
+'\x{57A1}\x{57A2}\x{57A3}\x{57A4}\x{57A5}\x{57A6}\x{57A7}\x{57A9}\x{57AA}' .
+'\x{57AB}\x{57AC}\x{57AD}\x{57AE}\x{57AF}\x{57B0}\x{57B1}\x{57B2}\x{57B3}' .
+'\x{57B4}\x{57B5}\x{57B6}\x{57B7}\x{57B8}\x{57B9}\x{57BA}\x{57BB}\x{57BC}' .
+'\x{57BD}\x{57BE}\x{57BF}\x{57C0}\x{57C1}\x{57C2}\x{57C3}\x{57C4}\x{57C5}' .
+'\x{57C6}\x{57C7}\x{57C8}\x{57C9}\x{57CB}\x{57CC}\x{57CD}\x{57CE}\x{57CF}' .
+'\x{57D0}\x{57D2}\x{57D3}\x{57D4}\x{57D5}\x{57D6}\x{57D8}\x{57D9}\x{57DA}' .
+'\x{57DC}\x{57DD}\x{57DF}\x{57E0}\x{57E1}\x{57E2}\x{57E3}\x{57E4}\x{57E5}' .
+'\x{57E6}\x{57E7}\x{57E8}\x{57E9}\x{57EA}\x{57EB}\x{57EC}\x{57ED}\x{57EE}' .
+'\x{57EF}\x{57F0}\x{57F1}\x{57F2}\x{57F3}\x{57F4}\x{57F5}\x{57F6}\x{57F7}' .
+'\x{57F8}\x{57F9}\x{57FA}\x{57FB}\x{57FC}\x{57FD}\x{57FE}\x{57FF}\x{5800}' .
+'\x{5801}\x{5802}\x{5803}\x{5804}\x{5805}\x{5806}\x{5807}\x{5808}\x{5809}' .
+'\x{580A}\x{580B}\x{580C}\x{580D}\x{580E}\x{580F}\x{5810}\x{5811}\x{5812}' .
+'\x{5813}\x{5814}\x{5815}\x{5816}\x{5819}\x{581A}\x{581B}\x{581C}\x{581D}' .
+'\x{581E}\x{581F}\x{5820}\x{5821}\x{5822}\x{5823}\x{5824}\x{5825}\x{5826}' .
+'\x{5827}\x{5828}\x{5829}\x{582A}\x{582B}\x{582C}\x{582D}\x{582E}\x{582F}' .
+'\x{5830}\x{5831}\x{5832}\x{5833}\x{5834}\x{5835}\x{5836}\x{5837}\x{5838}' .
+'\x{5839}\x{583A}\x{583B}\x{583C}\x{583D}\x{583E}\x{583F}\x{5840}\x{5842}' .
+'\x{5843}\x{5844}\x{5845}\x{5846}\x{5847}\x{5848}\x{5849}\x{584A}\x{584B}' .
+'\x{584C}\x{584D}\x{584E}\x{584F}\x{5851}\x{5852}\x{5853}\x{5854}\x{5855}' .
+'\x{5857}\x{5858}\x{5859}\x{585A}\x{585B}\x{585C}\x{585D}\x{585E}\x{585F}' .
+'\x{5861}\x{5862}\x{5863}\x{5864}\x{5865}\x{5868}\x{5869}\x{586A}\x{586B}' .
+'\x{586C}\x{586D}\x{586E}\x{586F}\x{5870}\x{5871}\x{5872}\x{5873}\x{5874}' .
+'\x{5875}\x{5876}\x{5878}\x{5879}\x{587A}\x{587B}\x{587C}\x{587D}\x{587E}' .
+'\x{587F}\x{5880}\x{5881}\x{5882}\x{5883}\x{5884}\x{5885}\x{5886}\x{5887}' .
+'\x{5888}\x{5889}\x{588A}\x{588B}\x{588C}\x{588D}\x{588E}\x{588F}\x{5890}' .
+'\x{5891}\x{5892}\x{5893}\x{5894}\x{5896}\x{5897}\x{5898}\x{5899}\x{589A}' .
+'\x{589B}\x{589C}\x{589D}\x{589E}\x{589F}\x{58A0}\x{58A1}\x{58A2}\x{58A3}' .
+'\x{58A4}\x{58A5}\x{58A6}\x{58A7}\x{58A8}\x{58A9}\x{58AB}\x{58AC}\x{58AD}' .
+'\x{58AE}\x{58AF}\x{58B0}\x{58B1}\x{58B2}\x{58B3}\x{58B4}\x{58B7}\x{58B8}' .
+'\x{58B9}\x{58BA}\x{58BB}\x{58BC}\x{58BD}\x{58BE}\x{58BF}\x{58C1}\x{58C2}' .
+'\x{58C5}\x{58C6}\x{58C7}\x{58C8}\x{58C9}\x{58CA}\x{58CB}\x{58CE}\x{58CF}' .
+'\x{58D1}\x{58D2}\x{58D3}\x{58D4}\x{58D5}\x{58D6}\x{58D7}\x{58D8}\x{58D9}' .
+'\x{58DA}\x{58DB}\x{58DD}\x{58DE}\x{58DF}\x{58E0}\x{58E2}\x{58E3}\x{58E4}' .
+'\x{58E5}\x{58E7}\x{58E8}\x{58E9}\x{58EA}\x{58EB}\x{58EC}\x{58ED}\x{58EE}' .
+'\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F3}\x{58F4}\x{58F6}\x{58F7}\x{58F8}' .
+'\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{58FE}\x{58FF}\x{5900}\x{5902}' .
+'\x{5903}\x{5904}\x{5906}\x{5907}\x{5909}\x{590A}\x{590B}\x{590C}\x{590D}' .
+'\x{590E}\x{590F}\x{5910}\x{5912}\x{5914}\x{5915}\x{5916}\x{5917}\x{5918}' .
+'\x{5919}\x{591A}\x{591B}\x{591C}\x{591D}\x{591E}\x{591F}\x{5920}\x{5921}' .
+'\x{5922}\x{5924}\x{5925}\x{5926}\x{5927}\x{5928}\x{5929}\x{592A}\x{592B}' .
+'\x{592C}\x{592D}\x{592E}\x{592F}\x{5930}\x{5931}\x{5932}\x{5934}\x{5935}' .
+'\x{5937}\x{5938}\x{5939}\x{593A}\x{593B}\x{593C}\x{593D}\x{593E}\x{593F}' .
+'\x{5940}\x{5941}\x{5942}\x{5943}\x{5944}\x{5945}\x{5946}\x{5947}\x{5948}' .
+'\x{5949}\x{594A}\x{594B}\x{594C}\x{594D}\x{594E}\x{594F}\x{5950}\x{5951}' .
+'\x{5952}\x{5953}\x{5954}\x{5955}\x{5956}\x{5957}\x{5958}\x{595A}\x{595C}' .
+'\x{595D}\x{595E}\x{595F}\x{5960}\x{5961}\x{5962}\x{5963}\x{5964}\x{5965}' .
+'\x{5966}\x{5967}\x{5968}\x{5969}\x{596A}\x{596B}\x{596C}\x{596D}\x{596E}' .
+'\x{596F}\x{5970}\x{5971}\x{5972}\x{5973}\x{5974}\x{5975}\x{5976}\x{5977}' .
+'\x{5978}\x{5979}\x{597A}\x{597B}\x{597C}\x{597D}\x{597E}\x{597F}\x{5980}' .
+'\x{5981}\x{5982}\x{5983}\x{5984}\x{5985}\x{5986}\x{5987}\x{5988}\x{5989}' .
+'\x{598A}\x{598B}\x{598C}\x{598D}\x{598E}\x{598F}\x{5990}\x{5991}\x{5992}' .
+'\x{5993}\x{5994}\x{5995}\x{5996}\x{5997}\x{5998}\x{5999}\x{599A}\x{599C}' .
+'\x{599D}\x{599E}\x{599F}\x{59A0}\x{59A1}\x{59A2}\x{59A3}\x{59A4}\x{59A5}' .
+'\x{59A6}\x{59A7}\x{59A8}\x{59A9}\x{59AA}\x{59AB}\x{59AC}\x{59AD}\x{59AE}' .
+'\x{59AF}\x{59B0}\x{59B1}\x{59B2}\x{59B3}\x{59B4}\x{59B5}\x{59B6}\x{59B8}' .
+'\x{59B9}\x{59BA}\x{59BB}\x{59BC}\x{59BD}\x{59BE}\x{59BF}\x{59C0}\x{59C1}' .
+'\x{59C2}\x{59C3}\x{59C4}\x{59C5}\x{59C6}\x{59C7}\x{59C8}\x{59C9}\x{59CA}' .
+'\x{59CB}\x{59CC}\x{59CD}\x{59CE}\x{59CF}\x{59D0}\x{59D1}\x{59D2}\x{59D3}' .
+'\x{59D4}\x{59D5}\x{59D6}\x{59D7}\x{59D8}\x{59D9}\x{59DA}\x{59DB}\x{59DC}' .
+'\x{59DD}\x{59DE}\x{59DF}\x{59E0}\x{59E1}\x{59E2}\x{59E3}\x{59E4}\x{59E5}' .
+'\x{59E6}\x{59E8}\x{59E9}\x{59EA}\x{59EB}\x{59EC}\x{59ED}\x{59EE}\x{59EF}' .
+'\x{59F0}\x{59F1}\x{59F2}\x{59F3}\x{59F4}\x{59F5}\x{59F6}\x{59F7}\x{59F8}' .
+'\x{59F9}\x{59FA}\x{59FB}\x{59FC}\x{59FD}\x{59FE}\x{59FF}\x{5A00}\x{5A01}' .
+'\x{5A02}\x{5A03}\x{5A04}\x{5A05}\x{5A06}\x{5A07}\x{5A08}\x{5A09}\x{5A0A}' .
+'\x{5A0B}\x{5A0C}\x{5A0D}\x{5A0E}\x{5A0F}\x{5A10}\x{5A11}\x{5A12}\x{5A13}' .
+'\x{5A14}\x{5A15}\x{5A16}\x{5A17}\x{5A18}\x{5A19}\x{5A1A}\x{5A1B}\x{5A1C}' .
+'\x{5A1D}\x{5A1E}\x{5A1F}\x{5A20}\x{5A21}\x{5A22}\x{5A23}\x{5A25}\x{5A27}' .
+'\x{5A28}\x{5A29}\x{5A2A}\x{5A2B}\x{5A2D}\x{5A2E}\x{5A2F}\x{5A31}\x{5A32}' .
+'\x{5A33}\x{5A34}\x{5A35}\x{5A36}\x{5A37}\x{5A38}\x{5A39}\x{5A3A}\x{5A3B}' .
+'\x{5A3C}\x{5A3D}\x{5A3E}\x{5A3F}\x{5A40}\x{5A41}\x{5A42}\x{5A43}\x{5A44}' .
+'\x{5A45}\x{5A46}\x{5A47}\x{5A48}\x{5A49}\x{5A4A}\x{5A4B}\x{5A4C}\x{5A4D}' .
+'\x{5A4E}\x{5A4F}\x{5A50}\x{5A51}\x{5A52}\x{5A53}\x{5A55}\x{5A56}\x{5A57}' .
+'\x{5A58}\x{5A5A}\x{5A5B}\x{5A5C}\x{5A5D}\x{5A5E}\x{5A5F}\x{5A60}\x{5A61}' .
+'\x{5A62}\x{5A63}\x{5A64}\x{5A65}\x{5A66}\x{5A67}\x{5A68}\x{5A69}\x{5A6A}' .
+'\x{5A6B}\x{5A6C}\x{5A6D}\x{5A6E}\x{5A70}\x{5A72}\x{5A73}\x{5A74}\x{5A75}' .
+'\x{5A76}\x{5A77}\x{5A78}\x{5A79}\x{5A7A}\x{5A7B}\x{5A7C}\x{5A7D}\x{5A7E}' .
+'\x{5A7F}\x{5A80}\x{5A81}\x{5A82}\x{5A83}\x{5A84}\x{5A85}\x{5A86}\x{5A88}' .
+'\x{5A89}\x{5A8A}\x{5A8B}\x{5A8C}\x{5A8E}\x{5A8F}\x{5A90}\x{5A91}\x{5A92}' .
+'\x{5A93}\x{5A94}\x{5A95}\x{5A96}\x{5A97}\x{5A98}\x{5A99}\x{5A9A}\x{5A9B}' .
+'\x{5A9C}\x{5A9D}\x{5A9E}\x{5A9F}\x{5AA0}\x{5AA1}\x{5AA2}\x{5AA3}\x{5AA4}' .
+'\x{5AA5}\x{5AA6}\x{5AA7}\x{5AA8}\x{5AA9}\x{5AAA}\x{5AAC}\x{5AAD}\x{5AAE}' .
+'\x{5AAF}\x{5AB0}\x{5AB1}\x{5AB2}\x{5AB3}\x{5AB4}\x{5AB5}\x{5AB6}\x{5AB7}' .
+'\x{5AB8}\x{5AB9}\x{5ABA}\x{5ABB}\x{5ABC}\x{5ABD}\x{5ABE}\x{5ABF}\x{5AC0}' .
+'\x{5AC1}\x{5AC2}\x{5AC3}\x{5AC4}\x{5AC5}\x{5AC6}\x{5AC7}\x{5AC8}\x{5AC9}' .
+'\x{5ACA}\x{5ACB}\x{5ACC}\x{5ACD}\x{5ACE}\x{5ACF}\x{5AD1}\x{5AD2}\x{5AD4}' .
+'\x{5AD5}\x{5AD6}\x{5AD7}\x{5AD8}\x{5AD9}\x{5ADA}\x{5ADB}\x{5ADC}\x{5ADD}' .
+'\x{5ADE}\x{5ADF}\x{5AE0}\x{5AE1}\x{5AE2}\x{5AE3}\x{5AE4}\x{5AE5}\x{5AE6}' .
+'\x{5AE7}\x{5AE8}\x{5AE9}\x{5AEA}\x{5AEB}\x{5AEC}\x{5AED}\x{5AEE}\x{5AF1}' .
+'\x{5AF2}\x{5AF3}\x{5AF4}\x{5AF5}\x{5AF6}\x{5AF7}\x{5AF8}\x{5AF9}\x{5AFA}' .
+'\x{5AFB}\x{5AFC}\x{5AFD}\x{5AFE}\x{5AFF}\x{5B00}\x{5B01}\x{5B02}\x{5B03}' .
+'\x{5B04}\x{5B05}\x{5B06}\x{5B07}\x{5B08}\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}' .
+'\x{5B0F}\x{5B10}\x{5B11}\x{5B12}\x{5B13}\x{5B14}\x{5B15}\x{5B16}\x{5B17}' .
+'\x{5B18}\x{5B19}\x{5B1A}\x{5B1B}\x{5B1C}\x{5B1D}\x{5B1E}\x{5B1F}\x{5B20}' .
+'\x{5B21}\x{5B22}\x{5B23}\x{5B24}\x{5B25}\x{5B26}\x{5B27}\x{5B28}\x{5B29}' .
+'\x{5B2A}\x{5B2B}\x{5B2C}\x{5B2D}\x{5B2E}\x{5B2F}\x{5B30}\x{5B31}\x{5B32}' .
+'\x{5B33}\x{5B34}\x{5B35}\x{5B36}\x{5B37}\x{5B38}\x{5B3A}\x{5B3B}\x{5B3C}' .
+'\x{5B3D}\x{5B3E}\x{5B3F}\x{5B40}\x{5B41}\x{5B42}\x{5B43}\x{5B44}\x{5B45}' .
+'\x{5B47}\x{5B48}\x{5B49}\x{5B4A}\x{5B4B}\x{5B4C}\x{5B4D}\x{5B4E}\x{5B50}' .
+'\x{5B51}\x{5B53}\x{5B54}\x{5B55}\x{5B56}\x{5B57}\x{5B58}\x{5B59}\x{5B5A}' .
+'\x{5B5B}\x{5B5C}\x{5B5D}\x{5B5E}\x{5B5F}\x{5B62}\x{5B63}\x{5B64}\x{5B65}' .
+'\x{5B66}\x{5B67}\x{5B68}\x{5B69}\x{5B6A}\x{5B6B}\x{5B6C}\x{5B6D}\x{5B6E}' .
+'\x{5B70}\x{5B71}\x{5B72}\x{5B73}\x{5B74}\x{5B75}\x{5B76}\x{5B77}\x{5B78}' .
+'\x{5B7A}\x{5B7B}\x{5B7C}\x{5B7D}\x{5B7F}\x{5B80}\x{5B81}\x{5B82}\x{5B83}' .
+'\x{5B84}\x{5B85}\x{5B87}\x{5B88}\x{5B89}\x{5B8A}\x{5B8B}\x{5B8C}\x{5B8D}' .
+'\x{5B8E}\x{5B8F}\x{5B91}\x{5B92}\x{5B93}\x{5B94}\x{5B95}\x{5B96}\x{5B97}' .
+'\x{5B98}\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9E}\x{5B9F}\x{5BA0}' .
+'\x{5BA1}\x{5BA2}\x{5BA3}\x{5BA4}\x{5BA5}\x{5BA6}\x{5BA7}\x{5BA8}\x{5BAA}' .
+'\x{5BAB}\x{5BAC}\x{5BAD}\x{5BAE}\x{5BAF}\x{5BB0}\x{5BB1}\x{5BB3}\x{5BB4}' .
+'\x{5BB5}\x{5BB6}\x{5BB8}\x{5BB9}\x{5BBA}\x{5BBB}\x{5BBD}\x{5BBE}\x{5BBF}' .
+'\x{5BC0}\x{5BC1}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BCA}' .
+'\x{5BCB}\x{5BCC}\x{5BCD}\x{5BCE}\x{5BCF}\x{5BD0}\x{5BD1}\x{5BD2}\x{5BD3}' .
+'\x{5BD4}\x{5BD5}\x{5BD6}\x{5BD8}\x{5BD9}\x{5BDB}\x{5BDC}\x{5BDD}\x{5BDE}' .
+'\x{5BDF}\x{5BE0}\x{5BE1}\x{5BE2}\x{5BE3}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}' .
+'\x{5BE8}\x{5BE9}\x{5BEA}\x{5BEB}\x{5BEC}\x{5BED}\x{5BEE}\x{5BEF}\x{5BF0}' .
+'\x{5BF1}\x{5BF2}\x{5BF3}\x{5BF4}\x{5BF5}\x{5BF6}\x{5BF7}\x{5BF8}\x{5BF9}' .
+'\x{5BFA}\x{5BFB}\x{5BFC}\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}\x{5C04}\x{5C05}' .
+'\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}\x{5C0B}\x{5C0C}\x{5C0D}\x{5C0E}' .
+'\x{5C0F}\x{5C10}\x{5C11}\x{5C12}\x{5C13}\x{5C14}\x{5C15}\x{5C16}\x{5C17}' .
+'\x{5C18}\x{5C19}\x{5C1A}\x{5C1C}\x{5C1D}\x{5C1E}\x{5C1F}\x{5C20}\x{5C21}' .
+'\x{5C22}\x{5C24}\x{5C25}\x{5C27}\x{5C28}\x{5C2A}\x{5C2B}\x{5C2C}\x{5C2D}' .
+'\x{5C2E}\x{5C2F}\x{5C30}\x{5C31}\x{5C32}\x{5C33}\x{5C34}\x{5C35}\x{5C37}' .
+'\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}' .
+'\x{5C41}\x{5C42}\x{5C43}\x{5C44}\x{5C45}\x{5C46}\x{5C47}\x{5C48}\x{5C49}' .
+'\x{5C4A}\x{5C4B}\x{5C4C}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C52}' .
+'\x{5C53}\x{5C54}\x{5C55}\x{5C56}\x{5C57}\x{5C58}\x{5C59}\x{5C5B}\x{5C5C}' .
+'\x{5C5D}\x{5C5E}\x{5C5F}\x{5C60}\x{5C61}\x{5C62}\x{5C63}\x{5C64}\x{5C65}' .
+'\x{5C66}\x{5C67}\x{5C68}\x{5C69}\x{5C6A}\x{5C6B}\x{5C6C}\x{5C6D}\x{5C6E}' .
+'\x{5C6F}\x{5C70}\x{5C71}\x{5C72}\x{5C73}\x{5C74}\x{5C75}\x{5C76}\x{5C77}' .
+'\x{5C78}\x{5C79}\x{5C7A}\x{5C7B}\x{5C7C}\x{5C7D}\x{5C7E}\x{5C7F}\x{5C80}' .
+'\x{5C81}\x{5C82}\x{5C83}\x{5C84}\x{5C86}\x{5C87}\x{5C88}\x{5C89}\x{5C8A}' .
+'\x{5C8B}\x{5C8C}\x{5C8D}\x{5C8E}\x{5C8F}\x{5C90}\x{5C91}\x{5C92}\x{5C93}' .
+'\x{5C94}\x{5C95}\x{5C96}\x{5C97}\x{5C98}\x{5C99}\x{5C9A}\x{5C9B}\x{5C9C}' .
+'\x{5C9D}\x{5C9E}\x{5C9F}\x{5CA0}\x{5CA1}\x{5CA2}\x{5CA3}\x{5CA4}\x{5CA5}' .
+'\x{5CA6}\x{5CA7}\x{5CA8}\x{5CA9}\x{5CAA}\x{5CAB}\x{5CAC}\x{5CAD}\x{5CAE}' .
+'\x{5CAF}\x{5CB0}\x{5CB1}\x{5CB2}\x{5CB3}\x{5CB5}\x{5CB6}\x{5CB7}\x{5CB8}' .
+'\x{5CBA}\x{5CBB}\x{5CBC}\x{5CBD}\x{5CBE}\x{5CBF}\x{5CC1}\x{5CC2}\x{5CC3}' .
+'\x{5CC4}\x{5CC5}\x{5CC6}\x{5CC7}\x{5CC8}\x{5CC9}\x{5CCA}\x{5CCB}\x{5CCC}' .
+'\x{5CCD}\x{5CCE}\x{5CCF}\x{5CD0}\x{5CD1}\x{5CD2}\x{5CD3}\x{5CD4}\x{5CD6}' .
+'\x{5CD7}\x{5CD8}\x{5CD9}\x{5CDA}\x{5CDB}\x{5CDC}\x{5CDE}\x{5CDF}\x{5CE0}' .
+'\x{5CE1}\x{5CE2}\x{5CE3}\x{5CE4}\x{5CE5}\x{5CE6}\x{5CE7}\x{5CE8}\x{5CE9}' .
+'\x{5CEA}\x{5CEB}\x{5CEC}\x{5CED}\x{5CEE}\x{5CEF}\x{5CF0}\x{5CF1}\x{5CF2}' .
+'\x{5CF3}\x{5CF4}\x{5CF6}\x{5CF7}\x{5CF8}\x{5CF9}\x{5CFA}\x{5CFB}\x{5CFC}' .
+'\x{5CFD}\x{5CFE}\x{5CFF}\x{5D00}\x{5D01}\x{5D02}\x{5D03}\x{5D04}\x{5D05}' .
+'\x{5D06}\x{5D07}\x{5D08}\x{5D09}\x{5D0A}\x{5D0B}\x{5D0C}\x{5D0D}\x{5D0E}' .
+'\x{5D0F}\x{5D10}\x{5D11}\x{5D12}\x{5D13}\x{5D14}\x{5D15}\x{5D16}\x{5D17}' .
+'\x{5D18}\x{5D19}\x{5D1A}\x{5D1B}\x{5D1C}\x{5D1D}\x{5D1E}\x{5D1F}\x{5D20}' .
+'\x{5D21}\x{5D22}\x{5D23}\x{5D24}\x{5D25}\x{5D26}\x{5D27}\x{5D28}\x{5D29}' .
+'\x{5D2A}\x{5D2C}\x{5D2D}\x{5D2E}\x{5D30}\x{5D31}\x{5D32}\x{5D33}\x{5D34}' .
+'\x{5D35}\x{5D36}\x{5D37}\x{5D38}\x{5D39}\x{5D3A}\x{5D3C}\x{5D3D}\x{5D3E}' .
+'\x{5D3F}\x{5D40}\x{5D41}\x{5D42}\x{5D43}\x{5D44}\x{5D45}\x{5D46}\x{5D47}' .
+'\x{5D48}\x{5D49}\x{5D4A}\x{5D4B}\x{5D4C}\x{5D4D}\x{5D4E}\x{5D4F}\x{5D50}' .
+'\x{5D51}\x{5D52}\x{5D54}\x{5D55}\x{5D56}\x{5D58}\x{5D59}\x{5D5A}\x{5D5B}' .
+'\x{5D5D}\x{5D5E}\x{5D5F}\x{5D61}\x{5D62}\x{5D63}\x{5D64}\x{5D65}\x{5D66}' .
+'\x{5D67}\x{5D68}\x{5D69}\x{5D6A}\x{5D6B}\x{5D6C}\x{5D6D}\x{5D6E}\x{5D6F}' .
+'\x{5D70}\x{5D71}\x{5D72}\x{5D73}\x{5D74}\x{5D75}\x{5D76}\x{5D77}\x{5D78}' .
+'\x{5D79}\x{5D7A}\x{5D7B}\x{5D7C}\x{5D7D}\x{5D7E}\x{5D7F}\x{5D80}\x{5D81}' .
+'\x{5D82}\x{5D84}\x{5D85}\x{5D86}\x{5D87}\x{5D88}\x{5D89}\x{5D8A}\x{5D8B}' .
+'\x{5D8C}\x{5D8D}\x{5D8E}\x{5D8F}\x{5D90}\x{5D91}\x{5D92}\x{5D93}\x{5D94}' .
+'\x{5D95}\x{5D97}\x{5D98}\x{5D99}\x{5D9A}\x{5D9B}\x{5D9C}\x{5D9D}\x{5D9E}' .
+'\x{5D9F}\x{5DA0}\x{5DA1}\x{5DA2}\x{5DA5}\x{5DA6}\x{5DA7}\x{5DA8}\x{5DA9}' .
+'\x{5DAA}\x{5DAC}\x{5DAD}\x{5DAE}\x{5DAF}\x{5DB0}\x{5DB1}\x{5DB2}\x{5DB4}' .
+'\x{5DB5}\x{5DB6}\x{5DB7}\x{5DB8}\x{5DBA}\x{5DBB}\x{5DBC}\x{5DBD}\x{5DBE}' .
+'\x{5DBF}\x{5DC0}\x{5DC1}\x{5DC2}\x{5DC3}\x{5DC5}\x{5DC6}\x{5DC7}\x{5DC8}' .
+'\x{5DC9}\x{5DCA}\x{5DCB}\x{5DCC}\x{5DCD}\x{5DCE}\x{5DCF}\x{5DD0}\x{5DD1}' .
+'\x{5DD2}\x{5DD3}\x{5DD4}\x{5DD5}\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}' .
+'\x{5DDE}\x{5DDF}\x{5DE0}\x{5DE1}\x{5DE2}\x{5DE3}\x{5DE4}\x{5DE5}\x{5DE6}' .
+'\x{5DE7}\x{5DE8}\x{5DE9}\x{5DEA}\x{5DEB}\x{5DEC}\x{5DED}\x{5DEE}\x{5DEF}' .
+'\x{5DF0}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DF8}\x{5DF9}' .
+'\x{5DFA}\x{5DFB}\x{5DFC}\x{5DFD}\x{5DFE}\x{5DFF}\x{5E00}\x{5E01}\x{5E02}' .
+'\x{5E03}\x{5E04}\x{5E05}\x{5E06}\x{5E07}\x{5E08}\x{5E09}\x{5E0A}\x{5E0B}' .
+'\x{5E0C}\x{5E0D}\x{5E0E}\x{5E0F}\x{5E10}\x{5E11}\x{5E13}\x{5E14}\x{5E15}' .
+'\x{5E16}\x{5E17}\x{5E18}\x{5E19}\x{5E1A}\x{5E1B}\x{5E1C}\x{5E1D}\x{5E1E}' .
+'\x{5E1F}\x{5E20}\x{5E21}\x{5E22}\x{5E23}\x{5E24}\x{5E25}\x{5E26}\x{5E27}' .
+'\x{5E28}\x{5E29}\x{5E2A}\x{5E2B}\x{5E2C}\x{5E2D}\x{5E2E}\x{5E2F}\x{5E30}' .
+'\x{5E31}\x{5E32}\x{5E33}\x{5E34}\x{5E35}\x{5E36}\x{5E37}\x{5E38}\x{5E39}' .
+'\x{5E3A}\x{5E3B}\x{5E3C}\x{5E3D}\x{5E3E}\x{5E40}\x{5E41}\x{5E42}\x{5E43}' .
+'\x{5E44}\x{5E45}\x{5E46}\x{5E47}\x{5E49}\x{5E4A}\x{5E4B}\x{5E4C}\x{5E4D}' .
+'\x{5E4E}\x{5E4F}\x{5E50}\x{5E52}\x{5E53}\x{5E54}\x{5E55}\x{5E56}\x{5E57}' .
+'\x{5E58}\x{5E59}\x{5E5A}\x{5E5B}\x{5E5C}\x{5E5D}\x{5E5E}\x{5E5F}\x{5E60}' .
+'\x{5E61}\x{5E62}\x{5E63}\x{5E64}\x{5E65}\x{5E66}\x{5E67}\x{5E68}\x{5E69}' .
+'\x{5E6A}\x{5E6B}\x{5E6C}\x{5E6D}\x{5E6E}\x{5E6F}\x{5E70}\x{5E71}\x{5E72}' .
+'\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E77}\x{5E78}\x{5E79}\x{5E7A}\x{5E7B}' .
+'\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E80}\x{5E81}\x{5E82}\x{5E83}\x{5E84}' .
+'\x{5E85}\x{5E86}\x{5E87}\x{5E88}\x{5E89}\x{5E8A}\x{5E8B}\x{5E8C}\x{5E8D}' .
+'\x{5E8E}\x{5E8F}\x{5E90}\x{5E91}\x{5E93}\x{5E94}\x{5E95}\x{5E96}\x{5E97}' .
+'\x{5E98}\x{5E99}\x{5E9A}\x{5E9B}\x{5E9C}\x{5E9D}\x{5E9E}\x{5E9F}\x{5EA0}' .
+'\x{5EA1}\x{5EA2}\x{5EA3}\x{5EA4}\x{5EA5}\x{5EA6}\x{5EA7}\x{5EA8}\x{5EA9}' .
+'\x{5EAA}\x{5EAB}\x{5EAC}\x{5EAD}\x{5EAE}\x{5EAF}\x{5EB0}\x{5EB1}\x{5EB2}' .
+'\x{5EB3}\x{5EB4}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EB9}\x{5EBB}\x{5EBC}' .
+'\x{5EBD}\x{5EBE}\x{5EBF}\x{5EC1}\x{5EC2}\x{5EC3}\x{5EC4}\x{5EC5}\x{5EC6}' .
+'\x{5EC7}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECB}\x{5ECC}\x{5ECD}\x{5ECE}\x{5ECF}' .
+'\x{5ED0}\x{5ED1}\x{5ED2}\x{5ED3}\x{5ED4}\x{5ED5}\x{5ED6}\x{5ED7}\x{5ED8}' .
+'\x{5ED9}\x{5EDA}\x{5EDB}\x{5EDC}\x{5EDD}\x{5EDE}\x{5EDF}\x{5EE0}\x{5EE1}' .
+'\x{5EE2}\x{5EE3}\x{5EE4}\x{5EE5}\x{5EE6}\x{5EE7}\x{5EE8}\x{5EE9}\x{5EEA}' .
+'\x{5EEC}\x{5EED}\x{5EEE}\x{5EEF}\x{5EF0}\x{5EF1}\x{5EF2}\x{5EF3}\x{5EF4}' .
+'\x{5EF5}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}\x{5EFB}\x{5EFC}\x{5EFD}\x{5EFE}' .
+'\x{5EFF}\x{5F00}\x{5F01}\x{5F02}\x{5F03}\x{5F04}\x{5F05}\x{5F06}\x{5F07}' .
+'\x{5F08}\x{5F0A}\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F11}\x{5F12}\x{5F13}' .
+'\x{5F14}\x{5F15}\x{5F16}\x{5F17}\x{5F18}\x{5F19}\x{5F1A}\x{5F1B}\x{5F1C}' .
+'\x{5F1D}\x{5F1E}\x{5F1F}\x{5F20}\x{5F21}\x{5F22}\x{5F23}\x{5F24}\x{5F25}' .
+'\x{5F26}\x{5F27}\x{5F28}\x{5F29}\x{5F2A}\x{5F2B}\x{5F2C}\x{5F2D}\x{5F2E}' .
+'\x{5F2F}\x{5F30}\x{5F31}\x{5F32}\x{5F33}\x{5F34}\x{5F35}\x{5F36}\x{5F37}' .
+'\x{5F38}\x{5F39}\x{5F3A}\x{5F3C}\x{5F3E}\x{5F3F}\x{5F40}\x{5F41}\x{5F42}' .
+'\x{5F43}\x{5F44}\x{5F45}\x{5F46}\x{5F47}\x{5F48}\x{5F49}\x{5F4A}\x{5F4B}' .
+'\x{5F4C}\x{5F4D}\x{5F4E}\x{5F4F}\x{5F50}\x{5F51}\x{5F52}\x{5F53}\x{5F54}' .
+'\x{5F55}\x{5F56}\x{5F57}\x{5F58}\x{5F59}\x{5F5A}\x{5F5B}\x{5F5C}\x{5F5D}' .
+'\x{5F5E}\x{5F5F}\x{5F60}\x{5F61}\x{5F62}\x{5F63}\x{5F64}\x{5F65}\x{5F66}' .
+'\x{5F67}\x{5F68}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}\x{5F6D}\x{5F6E}\x{5F6F}' .
+'\x{5F70}\x{5F71}\x{5F72}\x{5F73}\x{5F74}\x{5F75}\x{5F76}\x{5F77}\x{5F78}' .
+'\x{5F79}\x{5F7A}\x{5F7B}\x{5F7C}\x{5F7D}\x{5F7E}\x{5F7F}\x{5F80}\x{5F81}' .
+'\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F86}\x{5F87}\x{5F88}\x{5F89}\x{5F8A}' .
+'\x{5F8B}\x{5F8C}\x{5F8D}\x{5F8E}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F94}' .
+'\x{5F95}\x{5F96}\x{5F97}\x{5F98}\x{5F99}\x{5F9B}\x{5F9C}\x{5F9D}\x{5F9E}' .
+'\x{5F9F}\x{5FA0}\x{5FA1}\x{5FA2}\x{5FA5}\x{5FA6}\x{5FA7}\x{5FA8}\x{5FA9}' .
+'\x{5FAA}\x{5FAB}\x{5FAC}\x{5FAD}\x{5FAE}\x{5FAF}\x{5FB1}\x{5FB2}\x{5FB3}' .
+'\x{5FB4}\x{5FB5}\x{5FB6}\x{5FB7}\x{5FB8}\x{5FB9}\x{5FBA}\x{5FBB}\x{5FBC}' .
+'\x{5FBD}\x{5FBE}\x{5FBF}\x{5FC0}\x{5FC1}\x{5FC3}\x{5FC4}\x{5FC5}\x{5FC6}' .
+'\x{5FC7}\x{5FC8}\x{5FC9}\x{5FCA}\x{5FCB}\x{5FCC}\x{5FCD}\x{5FCF}\x{5FD0}' .
+'\x{5FD1}\x{5FD2}\x{5FD3}\x{5FD4}\x{5FD5}\x{5FD6}\x{5FD7}\x{5FD8}\x{5FD9}' .
+'\x{5FDA}\x{5FDC}\x{5FDD}\x{5FDE}\x{5FE0}\x{5FE1}\x{5FE3}\x{5FE4}\x{5FE5}' .
+'\x{5FE6}\x{5FE7}\x{5FE8}\x{5FE9}\x{5FEA}\x{5FEB}\x{5FED}\x{5FEE}\x{5FEF}' .
+'\x{5FF0}\x{5FF1}\x{5FF2}\x{5FF3}\x{5FF4}\x{5FF5}\x{5FF6}\x{5FF7}\x{5FF8}' .
+'\x{5FF9}\x{5FFA}\x{5FFB}\x{5FFD}\x{5FFE}\x{5FFF}\x{6000}\x{6001}\x{6002}' .
+'\x{6003}\x{6004}\x{6005}\x{6006}\x{6007}\x{6008}\x{6009}\x{600A}\x{600B}' .
+'\x{600C}\x{600D}\x{600E}\x{600F}\x{6010}\x{6011}\x{6012}\x{6013}\x{6014}' .
+'\x{6015}\x{6016}\x{6017}\x{6018}\x{6019}\x{601A}\x{601B}\x{601C}\x{601D}' .
+'\x{601E}\x{601F}\x{6020}\x{6021}\x{6022}\x{6024}\x{6025}\x{6026}\x{6027}' .
+'\x{6028}\x{6029}\x{602A}\x{602B}\x{602C}\x{602D}\x{602E}\x{602F}\x{6030}' .
+'\x{6031}\x{6032}\x{6033}\x{6034}\x{6035}\x{6036}\x{6037}\x{6038}\x{6039}' .
+'\x{603A}\x{603B}\x{603C}\x{603D}\x{603E}\x{603F}\x{6040}\x{6041}\x{6042}' .
+'\x{6043}\x{6044}\x{6045}\x{6046}\x{6047}\x{6048}\x{6049}\x{604A}\x{604B}' .
+'\x{604C}\x{604D}\x{604E}\x{604F}\x{6050}\x{6051}\x{6052}\x{6053}\x{6054}' .
+'\x{6055}\x{6057}\x{6058}\x{6059}\x{605A}\x{605B}\x{605C}\x{605D}\x{605E}' .
+'\x{605F}\x{6062}\x{6063}\x{6064}\x{6065}\x{6066}\x{6067}\x{6068}\x{6069}' .
+'\x{606A}\x{606B}\x{606C}\x{606D}\x{606E}\x{606F}\x{6070}\x{6072}\x{6073}' .
+'\x{6075}\x{6076}\x{6077}\x{6078}\x{6079}\x{607A}\x{607B}\x{607C}\x{607D}' .
+'\x{607E}\x{607F}\x{6080}\x{6081}\x{6082}\x{6083}\x{6084}\x{6085}\x{6086}' .
+'\x{6087}\x{6088}\x{6089}\x{608A}\x{608B}\x{608C}\x{608D}\x{608E}\x{608F}' .
+'\x{6090}\x{6092}\x{6094}\x{6095}\x{6096}\x{6097}\x{6098}\x{6099}\x{609A}' .
+'\x{609B}\x{609C}\x{609D}\x{609E}\x{609F}\x{60A0}\x{60A1}\x{60A2}\x{60A3}' .
+'\x{60A4}\x{60A6}\x{60A7}\x{60A8}\x{60AA}\x{60AB}\x{60AC}\x{60AD}\x{60AE}' .
+'\x{60AF}\x{60B0}\x{60B1}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B7}' .
+'\x{60B8}\x{60B9}\x{60BA}\x{60BB}\x{60BC}\x{60BD}\x{60BE}\x{60BF}\x{60C0}' .
+'\x{60C1}\x{60C2}\x{60C3}\x{60C4}\x{60C5}\x{60C6}\x{60C7}\x{60C8}\x{60C9}' .
+'\x{60CA}\x{60CB}\x{60CC}\x{60CD}\x{60CE}\x{60CF}\x{60D0}\x{60D1}\x{60D3}' .
+'\x{60D4}\x{60D5}\x{60D7}\x{60D8}\x{60D9}\x{60DA}\x{60DB}\x{60DC}\x{60DD}' .
+'\x{60DF}\x{60E0}\x{60E1}\x{60E2}\x{60E4}\x{60E6}\x{60E7}\x{60E8}\x{60E9}' .
+'\x{60EA}\x{60EB}\x{60EC}\x{60ED}\x{60EE}\x{60EF}\x{60F0}\x{60F1}\x{60F2}' .
+'\x{60F3}\x{60F4}\x{60F5}\x{60F6}\x{60F7}\x{60F8}\x{60F9}\x{60FA}\x{60FB}' .
+'\x{60FC}\x{60FE}\x{60FF}\x{6100}\x{6101}\x{6103}\x{6104}\x{6105}\x{6106}' .
+'\x{6108}\x{6109}\x{610A}\x{610B}\x{610C}\x{610D}\x{610E}\x{610F}\x{6110}' .
+'\x{6112}\x{6113}\x{6114}\x{6115}\x{6116}\x{6117}\x{6118}\x{6119}\x{611A}' .
+'\x{611B}\x{611C}\x{611D}\x{611F}\x{6120}\x{6122}\x{6123}\x{6124}\x{6125}' .
+'\x{6126}\x{6127}\x{6128}\x{6129}\x{612A}\x{612B}\x{612C}\x{612D}\x{612E}' .
+'\x{612F}\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}\x{613B}\x{613C}' .
+'\x{613D}\x{613E}\x{613F}\x{6140}\x{6141}\x{6142}\x{6143}\x{6144}\x{6145}' .
+'\x{6146}\x{6147}\x{6148}\x{6149}\x{614A}\x{614B}\x{614C}\x{614D}\x{614E}' .
+'\x{614F}\x{6150}\x{6151}\x{6152}\x{6153}\x{6154}\x{6155}\x{6156}\x{6157}' .
+'\x{6158}\x{6159}\x{615A}\x{615B}\x{615C}\x{615D}\x{615E}\x{615F}\x{6161}' .
+'\x{6162}\x{6163}\x{6164}\x{6165}\x{6166}\x{6167}\x{6168}\x{6169}\x{616A}' .
+'\x{616B}\x{616C}\x{616D}\x{616E}\x{6170}\x{6171}\x{6172}\x{6173}\x{6174}' .
+'\x{6175}\x{6176}\x{6177}\x{6178}\x{6179}\x{617A}\x{617C}\x{617E}\x{6180}' .
+'\x{6181}\x{6182}\x{6183}\x{6184}\x{6185}\x{6187}\x{6188}\x{6189}\x{618A}' .
+'\x{618B}\x{618C}\x{618D}\x{618E}\x{618F}\x{6190}\x{6191}\x{6192}\x{6193}' .
+'\x{6194}\x{6195}\x{6196}\x{6198}\x{6199}\x{619A}\x{619B}\x{619D}\x{619E}' .
+'\x{619F}\x{61A0}\x{61A1}\x{61A2}\x{61A3}\x{61A4}\x{61A5}\x{61A6}\x{61A7}' .
+'\x{61A8}\x{61A9}\x{61AA}\x{61AB}\x{61AC}\x{61AD}\x{61AE}\x{61AF}\x{61B0}' .
+'\x{61B1}\x{61B2}\x{61B3}\x{61B4}\x{61B5}\x{61B6}\x{61B7}\x{61B8}\x{61BA}' .
+'\x{61BC}\x{61BD}\x{61BE}\x{61BF}\x{61C0}\x{61C1}\x{61C2}\x{61C3}\x{61C4}' .
+'\x{61C5}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
+'\x{61CE}\x{61CF}\x{61D0}\x{61D1}\x{61D2}\x{61D4}\x{61D6}\x{61D7}\x{61D8}' .
+'\x{61D9}\x{61DA}\x{61DB}\x{61DC}\x{61DD}\x{61DE}\x{61DF}\x{61E0}\x{61E1}' .
+'\x{61E2}\x{61E3}\x{61E4}\x{61E5}\x{61E6}\x{61E7}\x{61E8}\x{61E9}\x{61EA}' .
+'\x{61EB}\x{61ED}\x{61EE}\x{61F0}\x{61F1}\x{61F2}\x{61F3}\x{61F5}\x{61F6}' .
+'\x{61F7}\x{61F8}\x{61F9}\x{61FA}\x{61FB}\x{61FC}\x{61FD}\x{61FE}\x{61FF}' .
+'\x{6200}\x{6201}\x{6202}\x{6203}\x{6204}\x{6206}\x{6207}\x{6208}\x{6209}' .
+'\x{620A}\x{620B}\x{620C}\x{620D}\x{620E}\x{620F}\x{6210}\x{6211}\x{6212}' .
+'\x{6213}\x{6214}\x{6215}\x{6216}\x{6217}\x{6218}\x{6219}\x{621A}\x{621B}' .
+'\x{621C}\x{621D}\x{621E}\x{621F}\x{6220}\x{6221}\x{6222}\x{6223}\x{6224}' .
+'\x{6225}\x{6226}\x{6227}\x{6228}\x{6229}\x{622A}\x{622B}\x{622C}\x{622D}' .
+'\x{622E}\x{622F}\x{6230}\x{6231}\x{6232}\x{6233}\x{6234}\x{6236}\x{6237}' .
+'\x{6238}\x{623A}\x{623B}\x{623C}\x{623D}\x{623E}\x{623F}\x{6240}\x{6241}' .
+'\x{6242}\x{6243}\x{6244}\x{6245}\x{6246}\x{6247}\x{6248}\x{6249}\x{624A}' .
+'\x{624B}\x{624C}\x{624D}\x{624E}\x{624F}\x{6250}\x{6251}\x{6252}\x{6253}' .
+'\x{6254}\x{6255}\x{6256}\x{6258}\x{6259}\x{625A}\x{625B}\x{625C}\x{625D}' .
+'\x{625E}\x{625F}\x{6260}\x{6261}\x{6262}\x{6263}\x{6264}\x{6265}\x{6266}' .
+'\x{6267}\x{6268}\x{6269}\x{626A}\x{626B}\x{626C}\x{626D}\x{626E}\x{626F}' .
+'\x{6270}\x{6271}\x{6272}\x{6273}\x{6274}\x{6275}\x{6276}\x{6277}\x{6278}' .
+'\x{6279}\x{627A}\x{627B}\x{627C}\x{627D}\x{627E}\x{627F}\x{6280}\x{6281}' .
+'\x{6283}\x{6284}\x{6285}\x{6286}\x{6287}\x{6288}\x{6289}\x{628A}\x{628B}' .
+'\x{628C}\x{628E}\x{628F}\x{6290}\x{6291}\x{6292}\x{6293}\x{6294}\x{6295}' .
+'\x{6296}\x{6297}\x{6298}\x{6299}\x{629A}\x{629B}\x{629C}\x{629E}\x{629F}' .
+'\x{62A0}\x{62A1}\x{62A2}\x{62A3}\x{62A4}\x{62A5}\x{62A7}\x{62A8}\x{62A9}' .
+'\x{62AA}\x{62AB}\x{62AC}\x{62AD}\x{62AE}\x{62AF}\x{62B0}\x{62B1}\x{62B2}' .
+'\x{62B3}\x{62B4}\x{62B5}\x{62B6}\x{62B7}\x{62B8}\x{62B9}\x{62BA}\x{62BB}' .
+'\x{62BC}\x{62BD}\x{62BE}\x{62BF}\x{62C0}\x{62C1}\x{62C2}\x{62C3}\x{62C4}' .
+'\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CB}\x{62CC}\x{62CD}' .
+'\x{62CE}\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D5}\x{62D6}' .
+'\x{62D7}\x{62D8}\x{62D9}\x{62DA}\x{62DB}\x{62DC}\x{62DD}\x{62DF}\x{62E0}' .
+'\x{62E1}\x{62E2}\x{62E3}\x{62E4}\x{62E5}\x{62E6}\x{62E7}\x{62E8}\x{62E9}' .
+'\x{62EB}\x{62EC}\x{62ED}\x{62EE}\x{62EF}\x{62F0}\x{62F1}\x{62F2}\x{62F3}' .
+'\x{62F4}\x{62F5}\x{62F6}\x{62F7}\x{62F8}\x{62F9}\x{62FA}\x{62FB}\x{62FC}' .
+'\x{62FD}\x{62FE}\x{62FF}\x{6300}\x{6301}\x{6302}\x{6303}\x{6304}\x{6305}' .
+'\x{6306}\x{6307}\x{6308}\x{6309}\x{630B}\x{630C}\x{630D}\x{630E}\x{630F}' .
+'\x{6310}\x{6311}\x{6312}\x{6313}\x{6314}\x{6315}\x{6316}\x{6318}\x{6319}' .
+'\x{631A}\x{631B}\x{631C}\x{631D}\x{631E}\x{631F}\x{6320}\x{6321}\x{6322}' .
+'\x{6323}\x{6324}\x{6325}\x{6326}\x{6327}\x{6328}\x{6329}\x{632A}\x{632B}' .
+'\x{632C}\x{632D}\x{632E}\x{632F}\x{6330}\x{6332}\x{6333}\x{6334}\x{6336}' .
+'\x{6338}\x{6339}\x{633A}\x{633B}\x{633C}\x{633D}\x{633E}\x{6340}\x{6341}' .
+'\x{6342}\x{6343}\x{6344}\x{6345}\x{6346}\x{6347}\x{6348}\x{6349}\x{634A}' .
+'\x{634B}\x{634C}\x{634D}\x{634E}\x{634F}\x{6350}\x{6351}\x{6352}\x{6353}' .
+'\x{6354}\x{6355}\x{6356}\x{6357}\x{6358}\x{6359}\x{635A}\x{635C}\x{635D}' .
+'\x{635E}\x{635F}\x{6360}\x{6361}\x{6362}\x{6363}\x{6364}\x{6365}\x{6366}' .
+'\x{6367}\x{6368}\x{6369}\x{636A}\x{636B}\x{636C}\x{636D}\x{636E}\x{636F}' .
+'\x{6370}\x{6371}\x{6372}\x{6373}\x{6374}\x{6375}\x{6376}\x{6377}\x{6378}' .
+'\x{6379}\x{637A}\x{637B}\x{637C}\x{637D}\x{637E}\x{6380}\x{6381}\x{6382}' .
+'\x{6383}\x{6384}\x{6385}\x{6386}\x{6387}\x{6388}\x{6389}\x{638A}\x{638C}' .
+'\x{638D}\x{638E}\x{638F}\x{6390}\x{6391}\x{6392}\x{6394}\x{6395}\x{6396}' .
+'\x{6397}\x{6398}\x{6399}\x{639A}\x{639B}\x{639C}\x{639D}\x{639E}\x{639F}' .
+'\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A4}\x{63A5}\x{63A6}\x{63A7}\x{63A8}' .
+'\x{63A9}\x{63AA}\x{63AB}\x{63AC}\x{63AD}\x{63AE}\x{63AF}\x{63B0}\x{63B1}' .
+'\x{63B2}\x{63B3}\x{63B4}\x{63B5}\x{63B6}\x{63B7}\x{63B8}\x{63B9}\x{63BA}' .
+'\x{63BC}\x{63BD}\x{63BE}\x{63BF}\x{63C0}\x{63C1}\x{63C2}\x{63C3}\x{63C4}' .
+'\x{63C5}\x{63C6}\x{63C7}\x{63C8}\x{63C9}\x{63CA}\x{63CB}\x{63CC}\x{63CD}' .
+'\x{63CE}\x{63CF}\x{63D0}\x{63D2}\x{63D3}\x{63D4}\x{63D5}\x{63D6}\x{63D7}' .
+'\x{63D8}\x{63D9}\x{63DA}\x{63DB}\x{63DC}\x{63DD}\x{63DE}\x{63DF}\x{63E0}' .
+'\x{63E1}\x{63E2}\x{63E3}\x{63E4}\x{63E5}\x{63E6}\x{63E7}\x{63E8}\x{63E9}' .
+'\x{63EA}\x{63EB}\x{63EC}\x{63ED}\x{63EE}\x{63EF}\x{63F0}\x{63F1}\x{63F2}' .
+'\x{63F3}\x{63F4}\x{63F5}\x{63F6}\x{63F7}\x{63F8}\x{63F9}\x{63FA}\x{63FB}' .
+'\x{63FC}\x{63FD}\x{63FE}\x{63FF}\x{6400}\x{6401}\x{6402}\x{6403}\x{6404}' .
+'\x{6405}\x{6406}\x{6408}\x{6409}\x{640A}\x{640B}\x{640C}\x{640D}\x{640E}' .
+'\x{640F}\x{6410}\x{6411}\x{6412}\x{6413}\x{6414}\x{6415}\x{6416}\x{6417}' .
+'\x{6418}\x{6419}\x{641A}\x{641B}\x{641C}\x{641D}\x{641E}\x{641F}\x{6420}' .
+'\x{6421}\x{6422}\x{6423}\x{6424}\x{6425}\x{6426}\x{6427}\x{6428}\x{6429}' .
+'\x{642A}\x{642B}\x{642C}\x{642D}\x{642E}\x{642F}\x{6430}\x{6431}\x{6432}' .
+'\x{6433}\x{6434}\x{6435}\x{6436}\x{6437}\x{6438}\x{6439}\x{643A}\x{643D}' .
+'\x{643E}\x{643F}\x{6440}\x{6441}\x{6443}\x{6444}\x{6445}\x{6446}\x{6447}' .
+'\x{6448}\x{644A}\x{644B}\x{644C}\x{644D}\x{644E}\x{644F}\x{6450}\x{6451}' .
+'\x{6452}\x{6453}\x{6454}\x{6455}\x{6456}\x{6457}\x{6458}\x{6459}\x{645B}' .
+'\x{645C}\x{645D}\x{645E}\x{645F}\x{6460}\x{6461}\x{6462}\x{6463}\x{6464}' .
+'\x{6465}\x{6466}\x{6467}\x{6468}\x{6469}\x{646A}\x{646B}\x{646C}\x{646D}' .
+'\x{646E}\x{646F}\x{6470}\x{6471}\x{6472}\x{6473}\x{6474}\x{6475}\x{6476}' .
+'\x{6477}\x{6478}\x{6479}\x{647A}\x{647B}\x{647C}\x{647D}\x{647F}\x{6480}' .
+'\x{6481}\x{6482}\x{6483}\x{6484}\x{6485}\x{6487}\x{6488}\x{6489}\x{648A}' .
+'\x{648B}\x{648C}\x{648D}\x{648E}\x{648F}\x{6490}\x{6491}\x{6492}\x{6493}' .
+'\x{6494}\x{6495}\x{6496}\x{6497}\x{6498}\x{6499}\x{649A}\x{649B}\x{649C}' .
+'\x{649D}\x{649E}\x{649F}\x{64A0}\x{64A2}\x{64A3}\x{64A4}\x{64A5}\x{64A6}' .
+'\x{64A7}\x{64A8}\x{64A9}\x{64AA}\x{64AB}\x{64AC}\x{64AD}\x{64AE}\x{64B0}' .
+'\x{64B1}\x{64B2}\x{64B3}\x{64B4}\x{64B5}\x{64B7}\x{64B8}\x{64B9}\x{64BA}' .
+'\x{64BB}\x{64BC}\x{64BD}\x{64BE}\x{64BF}\x{64C0}\x{64C1}\x{64C2}\x{64C3}' .
+'\x{64C4}\x{64C5}\x{64C6}\x{64C7}\x{64C9}\x{64CA}\x{64CB}\x{64CC}\x{64CD}' .
+'\x{64CE}\x{64CF}\x{64D0}\x{64D1}\x{64D2}\x{64D3}\x{64D4}\x{64D6}\x{64D7}' .
+'\x{64D8}\x{64D9}\x{64DA}\x{64DB}\x{64DC}\x{64DD}\x{64DE}\x{64DF}\x{64E0}' .
+'\x{64E2}\x{64E3}\x{64E4}\x{64E6}\x{64E7}\x{64E8}\x{64E9}\x{64EA}\x{64EB}' .
+'\x{64EC}\x{64ED}\x{64EF}\x{64F0}\x{64F1}\x{64F2}\x{64F3}\x{64F4}\x{64F6}' .
+'\x{64F7}\x{64F8}\x{64FA}\x{64FB}\x{64FC}\x{64FD}\x{64FE}\x{64FF}\x{6500}' .
+'\x{6501}\x{6503}\x{6504}\x{6505}\x{6506}\x{6507}\x{6508}\x{6509}\x{650B}' .
+'\x{650C}\x{650D}\x{650E}\x{650F}\x{6510}\x{6511}\x{6512}\x{6513}\x{6514}' .
+'\x{6515}\x{6516}\x{6517}\x{6518}\x{6519}\x{651A}\x{651B}\x{651C}\x{651D}' .
+'\x{651E}\x{6520}\x{6521}\x{6522}\x{6523}\x{6524}\x{6525}\x{6526}\x{6527}' .
+'\x{6529}\x{652A}\x{652B}\x{652C}\x{652D}\x{652E}\x{652F}\x{6530}\x{6531}' .
+'\x{6532}\x{6533}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}\x{653A}' .
+'\x{653B}\x{653C}\x{653D}\x{653E}\x{653F}\x{6541}\x{6543}\x{6544}\x{6545}' .
+'\x{6546}\x{6547}\x{6548}\x{6549}\x{654A}\x{654B}\x{654C}\x{654D}\x{654E}' .
+'\x{654F}\x{6550}\x{6551}\x{6552}\x{6553}\x{6554}\x{6555}\x{6556}\x{6557}' .
+'\x{6558}\x{6559}\x{655B}\x{655C}\x{655D}\x{655E}\x{6560}\x{6561}\x{6562}' .
+'\x{6563}\x{6564}\x{6565}\x{6566}\x{6567}\x{6568}\x{6569}\x{656A}\x{656B}' .
+'\x{656C}\x{656E}\x{656F}\x{6570}\x{6571}\x{6572}\x{6573}\x{6574}\x{6575}' .
+'\x{6576}\x{6577}\x{6578}\x{6579}\x{657A}\x{657B}\x{657C}\x{657E}\x{657F}' .
+'\x{6580}\x{6581}\x{6582}\x{6583}\x{6584}\x{6585}\x{6586}\x{6587}\x{6588}' .
+'\x{6589}\x{658B}\x{658C}\x{658D}\x{658E}\x{658F}\x{6590}\x{6591}\x{6592}' .
+'\x{6593}\x{6594}\x{6595}\x{6596}\x{6597}\x{6598}\x{6599}\x{659B}\x{659C}' .
+'\x{659D}\x{659E}\x{659F}\x{65A0}\x{65A1}\x{65A2}\x{65A3}\x{65A4}\x{65A5}' .
+'\x{65A6}\x{65A7}\x{65A8}\x{65A9}\x{65AA}\x{65AB}\x{65AC}\x{65AD}\x{65AE}' .
+'\x{65AF}\x{65B0}\x{65B1}\x{65B2}\x{65B3}\x{65B4}\x{65B6}\x{65B7}\x{65B8}' .
+'\x{65B9}\x{65BA}\x{65BB}\x{65BC}\x{65BD}\x{65BF}\x{65C0}\x{65C1}\x{65C2}' .
+'\x{65C3}\x{65C4}\x{65C5}\x{65C6}\x{65C7}\x{65CA}\x{65CB}\x{65CC}\x{65CD}' .
+'\x{65CE}\x{65CF}\x{65D0}\x{65D2}\x{65D3}\x{65D4}\x{65D5}\x{65D6}\x{65D7}' .
+'\x{65DA}\x{65DB}\x{65DD}\x{65DE}\x{65DF}\x{65E0}\x{65E1}\x{65E2}\x{65E3}' .
+'\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}\x{65EB}\x{65EC}\x{65ED}\x{65EE}' .
+'\x{65EF}\x{65F0}\x{65F1}\x{65F2}\x{65F3}\x{65F4}\x{65F5}\x{65F6}\x{65F7}' .
+'\x{65F8}\x{65FA}\x{65FB}\x{65FC}\x{65FD}\x{6600}\x{6601}\x{6602}\x{6603}' .
+'\x{6604}\x{6605}\x{6606}\x{6607}\x{6608}\x{6609}\x{660A}\x{660B}\x{660C}' .
+'\x{660D}\x{660E}\x{660F}\x{6610}\x{6611}\x{6612}\x{6613}\x{6614}\x{6615}' .
+'\x{6616}\x{6618}\x{6619}\x{661A}\x{661B}\x{661C}\x{661D}\x{661F}\x{6620}' .
+'\x{6621}\x{6622}\x{6623}\x{6624}\x{6625}\x{6626}\x{6627}\x{6628}\x{6629}' .
+'\x{662A}\x{662B}\x{662D}\x{662E}\x{662F}\x{6630}\x{6631}\x{6632}\x{6633}' .
+'\x{6634}\x{6635}\x{6636}\x{6639}\x{663A}\x{663C}\x{663D}\x{663E}\x{6640}' .
+'\x{6641}\x{6642}\x{6643}\x{6644}\x{6645}\x{6646}\x{6647}\x{6649}\x{664A}' .
+'\x{664B}\x{664C}\x{664E}\x{664F}\x{6650}\x{6651}\x{6652}\x{6653}\x{6654}' .
+'\x{6655}\x{6656}\x{6657}\x{6658}\x{6659}\x{665A}\x{665B}\x{665C}\x{665D}' .
+'\x{665E}\x{665F}\x{6661}\x{6662}\x{6664}\x{6665}\x{6666}\x{6668}\x{6669}' .
+'\x{666A}\x{666B}\x{666C}\x{666D}\x{666E}\x{666F}\x{6670}\x{6671}\x{6672}' .
+'\x{6673}\x{6674}\x{6675}\x{6676}\x{6677}\x{6678}\x{6679}\x{667A}\x{667B}' .
+'\x{667C}\x{667D}\x{667E}\x{667F}\x{6680}\x{6681}\x{6682}\x{6683}\x{6684}' .
+'\x{6685}\x{6686}\x{6687}\x{6688}\x{6689}\x{668A}\x{668B}\x{668C}\x{668D}' .
+'\x{668E}\x{668F}\x{6690}\x{6691}\x{6693}\x{6694}\x{6695}\x{6696}\x{6697}' .
+'\x{6698}\x{6699}\x{669A}\x{669B}\x{669D}\x{669F}\x{66A0}\x{66A1}\x{66A2}' .
+'\x{66A3}\x{66A4}\x{66A5}\x{66A6}\x{66A7}\x{66A8}\x{66A9}\x{66AA}\x{66AB}' .
+'\x{66AE}\x{66AF}\x{66B0}\x{66B1}\x{66B2}\x{66B3}\x{66B4}\x{66B5}\x{66B6}' .
+'\x{66B7}\x{66B8}\x{66B9}\x{66BA}\x{66BB}\x{66BC}\x{66BD}\x{66BE}\x{66BF}' .
+'\x{66C0}\x{66C1}\x{66C2}\x{66C3}\x{66C4}\x{66C5}\x{66C6}\x{66C7}\x{66C8}' .
+'\x{66C9}\x{66CA}\x{66CB}\x{66CC}\x{66CD}\x{66CE}\x{66CF}\x{66D1}\x{66D2}' .
+'\x{66D4}\x{66D5}\x{66D6}\x{66D8}\x{66D9}\x{66DA}\x{66DB}\x{66DC}\x{66DD}' .
+'\x{66DE}\x{66E0}\x{66E1}\x{66E2}\x{66E3}\x{66E4}\x{66E5}\x{66E6}\x{66E7}' .
+'\x{66E8}\x{66E9}\x{66EA}\x{66EB}\x{66EC}\x{66ED}\x{66EE}\x{66F0}\x{66F1}' .
+'\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F6}\x{66F7}\x{66F8}\x{66F9}\x{66FA}' .
+'\x{66FB}\x{66FC}\x{66FE}\x{66FF}\x{6700}\x{6701}\x{6703}\x{6704}\x{6705}' .
+'\x{6706}\x{6708}\x{6709}\x{670A}\x{670B}\x{670C}\x{670D}\x{670E}\x{670F}' .
+'\x{6710}\x{6711}\x{6712}\x{6713}\x{6714}\x{6715}\x{6716}\x{6717}\x{6718}' .
+'\x{671A}\x{671B}\x{671C}\x{671D}\x{671E}\x{671F}\x{6720}\x{6721}\x{6722}' .
+'\x{6723}\x{6725}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}\x{672D}' .
+'\x{672E}\x{672F}\x{6730}\x{6731}\x{6732}\x{6733}\x{6734}\x{6735}\x{6736}' .
+'\x{6737}\x{6738}\x{6739}\x{673A}\x{673B}\x{673C}\x{673D}\x{673E}\x{673F}' .
+'\x{6740}\x{6741}\x{6742}\x{6743}\x{6744}\x{6745}\x{6746}\x{6747}\x{6748}' .
+'\x{6749}\x{674A}\x{674B}\x{674C}\x{674D}\x{674E}\x{674F}\x{6750}\x{6751}' .
+'\x{6752}\x{6753}\x{6754}\x{6755}\x{6756}\x{6757}\x{6758}\x{6759}\x{675A}' .
+'\x{675B}\x{675C}\x{675D}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
+'\x{6764}\x{6765}\x{6766}\x{6768}\x{6769}\x{676A}\x{676B}\x{676C}\x{676D}' .
+'\x{676E}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}\x{6774}\x{6775}\x{6776}' .
+'\x{6777}\x{6778}\x{6779}\x{677A}\x{677B}\x{677C}\x{677D}\x{677E}\x{677F}' .
+'\x{6780}\x{6781}\x{6782}\x{6783}\x{6784}\x{6785}\x{6786}\x{6787}\x{6789}' .
+'\x{678A}\x{678B}\x{678C}\x{678D}\x{678E}\x{678F}\x{6790}\x{6791}\x{6792}' .
+'\x{6793}\x{6794}\x{6795}\x{6797}\x{6798}\x{6799}\x{679A}\x{679B}\x{679C}' .
+'\x{679D}\x{679E}\x{679F}\x{67A0}\x{67A1}\x{67A2}\x{67A3}\x{67A4}\x{67A5}' .
+'\x{67A6}\x{67A7}\x{67A8}\x{67AA}\x{67AB}\x{67AC}\x{67AD}\x{67AE}\x{67AF}' .
+'\x{67B0}\x{67B1}\x{67B2}\x{67B3}\x{67B4}\x{67B5}\x{67B6}\x{67B7}\x{67B8}' .
+'\x{67B9}\x{67BA}\x{67BB}\x{67BC}\x{67BE}\x{67C0}\x{67C1}\x{67C2}\x{67C3}' .
+'\x{67C4}\x{67C5}\x{67C6}\x{67C7}\x{67C8}\x{67C9}\x{67CA}\x{67CB}\x{67CC}' .
+'\x{67CD}\x{67CE}\x{67CF}\x{67D0}\x{67D1}\x{67D2}\x{67D3}\x{67D4}\x{67D6}' .
+'\x{67D8}\x{67D9}\x{67DA}\x{67DB}\x{67DC}\x{67DD}\x{67DE}\x{67DF}\x{67E0}' .
+'\x{67E1}\x{67E2}\x{67E3}\x{67E4}\x{67E5}\x{67E6}\x{67E7}\x{67E8}\x{67E9}' .
+'\x{67EA}\x{67EB}\x{67EC}\x{67ED}\x{67EE}\x{67EF}\x{67F0}\x{67F1}\x{67F2}' .
+'\x{67F3}\x{67F4}\x{67F5}\x{67F6}\x{67F7}\x{67F8}\x{67FA}\x{67FB}\x{67FC}' .
+'\x{67FD}\x{67FE}\x{67FF}\x{6800}\x{6802}\x{6803}\x{6804}\x{6805}\x{6806}' .
+'\x{6807}\x{6808}\x{6809}\x{680A}\x{680B}\x{680C}\x{680D}\x{680E}\x{680F}' .
+'\x{6810}\x{6811}\x{6812}\x{6813}\x{6814}\x{6816}\x{6817}\x{6818}\x{6819}' .
+'\x{681A}\x{681B}\x{681C}\x{681D}\x{681F}\x{6820}\x{6821}\x{6822}\x{6823}' .
+'\x{6824}\x{6825}\x{6826}\x{6828}\x{6829}\x{682A}\x{682B}\x{682C}\x{682D}' .
+'\x{682E}\x{682F}\x{6831}\x{6832}\x{6833}\x{6834}\x{6835}\x{6836}\x{6837}' .
+'\x{6838}\x{6839}\x{683A}\x{683B}\x{683C}\x{683D}\x{683E}\x{683F}\x{6840}' .
+'\x{6841}\x{6842}\x{6843}\x{6844}\x{6845}\x{6846}\x{6847}\x{6848}\x{6849}' .
+'\x{684A}\x{684B}\x{684C}\x{684D}\x{684E}\x{684F}\x{6850}\x{6851}\x{6852}' .
+'\x{6853}\x{6854}\x{6855}\x{6856}\x{6857}\x{685B}\x{685D}\x{6860}\x{6861}' .
+'\x{6862}\x{6863}\x{6864}\x{6865}\x{6866}\x{6867}\x{6868}\x{6869}\x{686A}' .
+'\x{686B}\x{686C}\x{686D}\x{686E}\x{686F}\x{6870}\x{6871}\x{6872}\x{6873}' .
+'\x{6874}\x{6875}\x{6876}\x{6877}\x{6878}\x{6879}\x{687B}\x{687C}\x{687D}' .
+'\x{687E}\x{687F}\x{6880}\x{6881}\x{6882}\x{6883}\x{6884}\x{6885}\x{6886}' .
+'\x{6887}\x{6888}\x{6889}\x{688A}\x{688B}\x{688C}\x{688D}\x{688E}\x{688F}' .
+'\x{6890}\x{6891}\x{6892}\x{6893}\x{6894}\x{6896}\x{6897}\x{6898}\x{689A}' .
+'\x{689B}\x{689C}\x{689D}\x{689E}\x{689F}\x{68A0}\x{68A1}\x{68A2}\x{68A3}' .
+'\x{68A4}\x{68A6}\x{68A7}\x{68A8}\x{68A9}\x{68AA}\x{68AB}\x{68AC}\x{68AD}' .
+'\x{68AE}\x{68AF}\x{68B0}\x{68B1}\x{68B2}\x{68B3}\x{68B4}\x{68B5}\x{68B6}' .
+'\x{68B7}\x{68B9}\x{68BB}\x{68BC}\x{68BD}\x{68BE}\x{68BF}\x{68C0}\x{68C1}' .
+'\x{68C2}\x{68C4}\x{68C6}\x{68C7}\x{68C8}\x{68C9}\x{68CA}\x{68CB}\x{68CC}' .
+'\x{68CD}\x{68CE}\x{68CF}\x{68D0}\x{68D1}\x{68D2}\x{68D3}\x{68D4}\x{68D5}' .
+'\x{68D6}\x{68D7}\x{68D8}\x{68DA}\x{68DB}\x{68DC}\x{68DD}\x{68DE}\x{68DF}' .
+'\x{68E0}\x{68E1}\x{68E3}\x{68E4}\x{68E6}\x{68E7}\x{68E8}\x{68E9}\x{68EA}' .
+'\x{68EB}\x{68EC}\x{68ED}\x{68EE}\x{68EF}\x{68F0}\x{68F1}\x{68F2}\x{68F3}' .
+'\x{68F4}\x{68F5}\x{68F6}\x{68F7}\x{68F8}\x{68F9}\x{68FA}\x{68FB}\x{68FC}' .
+'\x{68FD}\x{68FE}\x{68FF}\x{6901}\x{6902}\x{6903}\x{6904}\x{6905}\x{6906}' .
+'\x{6907}\x{6908}\x{690A}\x{690B}\x{690C}\x{690D}\x{690E}\x{690F}\x{6910}' .
+'\x{6911}\x{6912}\x{6913}\x{6914}\x{6915}\x{6916}\x{6917}\x{6918}\x{6919}' .
+'\x{691A}\x{691B}\x{691C}\x{691D}\x{691E}\x{691F}\x{6920}\x{6921}\x{6922}' .
+'\x{6923}\x{6924}\x{6925}\x{6926}\x{6927}\x{6928}\x{6929}\x{692A}\x{692B}' .
+'\x{692C}\x{692D}\x{692E}\x{692F}\x{6930}\x{6931}\x{6932}\x{6933}\x{6934}' .
+'\x{6935}\x{6936}\x{6937}\x{6938}\x{6939}\x{693A}\x{693B}\x{693C}\x{693D}' .
+'\x{693F}\x{6940}\x{6941}\x{6942}\x{6943}\x{6944}\x{6945}\x{6946}\x{6947}' .
+'\x{6948}\x{6949}\x{694A}\x{694B}\x{694C}\x{694E}\x{694F}\x{6950}\x{6951}' .
+'\x{6952}\x{6953}\x{6954}\x{6955}\x{6956}\x{6957}\x{6958}\x{6959}\x{695A}' .
+'\x{695B}\x{695C}\x{695D}\x{695E}\x{695F}\x{6960}\x{6961}\x{6962}\x{6963}' .
+'\x{6964}\x{6965}\x{6966}\x{6967}\x{6968}\x{6969}\x{696A}\x{696B}\x{696C}' .
+'\x{696D}\x{696E}\x{696F}\x{6970}\x{6971}\x{6972}\x{6973}\x{6974}\x{6975}' .
+'\x{6976}\x{6977}\x{6978}\x{6979}\x{697A}\x{697B}\x{697C}\x{697D}\x{697E}' .
+'\x{697F}\x{6980}\x{6981}\x{6982}\x{6983}\x{6984}\x{6985}\x{6986}\x{6987}' .
+'\x{6988}\x{6989}\x{698A}\x{698B}\x{698C}\x{698D}\x{698E}\x{698F}\x{6990}' .
+'\x{6991}\x{6992}\x{6993}\x{6994}\x{6995}\x{6996}\x{6997}\x{6998}\x{6999}' .
+'\x{699A}\x{699B}\x{699C}\x{699D}\x{699E}\x{69A0}\x{69A1}\x{69A3}\x{69A4}' .
+'\x{69A5}\x{69A6}\x{69A7}\x{69A8}\x{69A9}\x{69AA}\x{69AB}\x{69AC}\x{69AD}' .
+'\x{69AE}\x{69AF}\x{69B0}\x{69B1}\x{69B2}\x{69B3}\x{69B4}\x{69B5}\x{69B6}' .
+'\x{69B7}\x{69B8}\x{69B9}\x{69BA}\x{69BB}\x{69BC}\x{69BD}\x{69BE}\x{69BF}' .
+'\x{69C1}\x{69C2}\x{69C3}\x{69C4}\x{69C5}\x{69C6}\x{69C7}\x{69C8}\x{69C9}' .
+'\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}\x{69CF}\x{69D0}\x{69D3}\x{69D4}' .
+'\x{69D8}\x{69D9}\x{69DA}\x{69DB}\x{69DC}\x{69DD}\x{69DE}\x{69DF}\x{69E0}' .
+'\x{69E1}\x{69E2}\x{69E3}\x{69E4}\x{69E5}\x{69E6}\x{69E7}\x{69E8}\x{69E9}' .
+'\x{69EA}\x{69EB}\x{69EC}\x{69ED}\x{69EE}\x{69EF}\x{69F0}\x{69F1}\x{69F2}' .
+'\x{69F3}\x{69F4}\x{69F5}\x{69F6}\x{69F7}\x{69F8}\x{69FA}\x{69FB}\x{69FC}' .
+'\x{69FD}\x{69FE}\x{69FF}\x{6A00}\x{6A01}\x{6A02}\x{6A04}\x{6A05}\x{6A06}' .
+'\x{6A07}\x{6A08}\x{6A09}\x{6A0A}\x{6A0B}\x{6A0D}\x{6A0E}\x{6A0F}\x{6A10}' .
+'\x{6A11}\x{6A12}\x{6A13}\x{6A14}\x{6A15}\x{6A16}\x{6A17}\x{6A18}\x{6A19}' .
+'\x{6A1A}\x{6A1B}\x{6A1D}\x{6A1E}\x{6A1F}\x{6A20}\x{6A21}\x{6A22}\x{6A23}' .
+'\x{6A25}\x{6A26}\x{6A27}\x{6A28}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2C}\x{6A2D}' .
+'\x{6A2E}\x{6A2F}\x{6A30}\x{6A31}\x{6A32}\x{6A33}\x{6A34}\x{6A35}\x{6A36}' .
+'\x{6A38}\x{6A39}\x{6A3A}\x{6A3B}\x{6A3C}\x{6A3D}\x{6A3E}\x{6A3F}\x{6A40}' .
+'\x{6A41}\x{6A42}\x{6A43}\x{6A44}\x{6A45}\x{6A46}\x{6A47}\x{6A48}\x{6A49}' .
+'\x{6A4B}\x{6A4C}\x{6A4D}\x{6A4E}\x{6A4F}\x{6A50}\x{6A51}\x{6A52}\x{6A54}' .
+'\x{6A55}\x{6A56}\x{6A57}\x{6A58}\x{6A59}\x{6A5A}\x{6A5B}\x{6A5D}\x{6A5E}' .
+'\x{6A5F}\x{6A60}\x{6A61}\x{6A62}\x{6A63}\x{6A64}\x{6A65}\x{6A66}\x{6A67}' .
+'\x{6A68}\x{6A69}\x{6A6A}\x{6A6B}\x{6A6C}\x{6A6D}\x{6A6F}\x{6A71}\x{6A72}' .
+'\x{6A73}\x{6A74}\x{6A75}\x{6A76}\x{6A77}\x{6A78}\x{6A79}\x{6A7A}\x{6A7B}' .
+'\x{6A7C}\x{6A7D}\x{6A7E}\x{6A7F}\x{6A80}\x{6A81}\x{6A82}\x{6A83}\x{6A84}' .
+'\x{6A85}\x{6A87}\x{6A88}\x{6A89}\x{6A8B}\x{6A8C}\x{6A8D}\x{6A8E}\x{6A90}' .
+'\x{6A91}\x{6A92}\x{6A93}\x{6A94}\x{6A95}\x{6A96}\x{6A97}\x{6A98}\x{6A9A}' .
+'\x{6A9B}\x{6A9C}\x{6A9E}\x{6A9F}\x{6AA0}\x{6AA1}\x{6AA2}\x{6AA3}\x{6AA4}' .
+'\x{6AA5}\x{6AA6}\x{6AA7}\x{6AA8}\x{6AA9}\x{6AAB}\x{6AAC}\x{6AAD}\x{6AAE}' .
+'\x{6AAF}\x{6AB0}\x{6AB2}\x{6AB3}\x{6AB4}\x{6AB5}\x{6AB6}\x{6AB7}\x{6AB8}' .
+'\x{6AB9}\x{6ABA}\x{6ABB}\x{6ABC}\x{6ABD}\x{6ABF}\x{6AC1}\x{6AC2}\x{6AC3}' .
+'\x{6AC5}\x{6AC6}\x{6AC7}\x{6ACA}\x{6ACB}\x{6ACC}\x{6ACD}\x{6ACE}\x{6ACF}' .
+'\x{6AD0}\x{6AD1}\x{6AD2}\x{6AD3}\x{6AD4}\x{6AD5}\x{6AD6}\x{6AD7}\x{6AD9}' .
+'\x{6ADA}\x{6ADB}\x{6ADC}\x{6ADD}\x{6ADE}\x{6ADF}\x{6AE0}\x{6AE1}\x{6AE2}' .
+'\x{6AE3}\x{6AE4}\x{6AE5}\x{6AE6}\x{6AE7}\x{6AE8}\x{6AEA}\x{6AEB}\x{6AEC}' .
+'\x{6AED}\x{6AEE}\x{6AEF}\x{6AF0}\x{6AF1}\x{6AF2}\x{6AF3}\x{6AF4}\x{6AF5}' .
+'\x{6AF6}\x{6AF7}\x{6AF8}\x{6AF9}\x{6AFA}\x{6AFB}\x{6AFC}\x{6AFD}\x{6AFE}' .
+'\x{6AFF}\x{6B00}\x{6B01}\x{6B02}\x{6B03}\x{6B04}\x{6B05}\x{6B06}\x{6B07}' .
+'\x{6B08}\x{6B09}\x{6B0A}\x{6B0B}\x{6B0C}\x{6B0D}\x{6B0F}\x{6B10}\x{6B11}' .
+'\x{6B12}\x{6B13}\x{6B14}\x{6B15}\x{6B16}\x{6B17}\x{6B18}\x{6B19}\x{6B1A}' .
+'\x{6B1C}\x{6B1D}\x{6B1E}\x{6B1F}\x{6B20}\x{6B21}\x{6B22}\x{6B23}\x{6B24}' .
+'\x{6B25}\x{6B26}\x{6B27}\x{6B28}\x{6B29}\x{6B2A}\x{6B2B}\x{6B2C}\x{6B2D}' .
+'\x{6B2F}\x{6B30}\x{6B31}\x{6B32}\x{6B33}\x{6B34}\x{6B36}\x{6B37}\x{6B38}' .
+'\x{6B39}\x{6B3A}\x{6B3B}\x{6B3C}\x{6B3D}\x{6B3E}\x{6B3F}\x{6B41}\x{6B42}' .
+'\x{6B43}\x{6B44}\x{6B45}\x{6B46}\x{6B47}\x{6B48}\x{6B49}\x{6B4A}\x{6B4B}' .
+'\x{6B4C}\x{6B4D}\x{6B4E}\x{6B4F}\x{6B50}\x{6B51}\x{6B52}\x{6B53}\x{6B54}' .
+'\x{6B55}\x{6B56}\x{6B59}\x{6B5A}\x{6B5B}\x{6B5C}\x{6B5E}\x{6B5F}\x{6B60}' .
+'\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B65}\x{6B66}\x{6B67}\x{6B69}\x{6B6A}' .
+'\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}\x{6B73}\x{6B74}\x{6B76}\x{6B77}' .
+'\x{6B78}\x{6B79}\x{6B7A}\x{6B7B}\x{6B7C}\x{6B7E}\x{6B7F}\x{6B80}\x{6B81}' .
+'\x{6B82}\x{6B83}\x{6B84}\x{6B85}\x{6B86}\x{6B87}\x{6B88}\x{6B89}\x{6B8A}' .
+'\x{6B8B}\x{6B8C}\x{6B8D}\x{6B8E}\x{6B8F}\x{6B90}\x{6B91}\x{6B92}\x{6B93}' .
+'\x{6B94}\x{6B95}\x{6B96}\x{6B97}\x{6B98}\x{6B99}\x{6B9A}\x{6B9B}\x{6B9C}' .
+'\x{6B9D}\x{6B9E}\x{6B9F}\x{6BA0}\x{6BA1}\x{6BA2}\x{6BA3}\x{6BA4}\x{6BA5}' .
+'\x{6BA6}\x{6BA7}\x{6BA8}\x{6BA9}\x{6BAA}\x{6BAB}\x{6BAC}\x{6BAD}\x{6BAE}' .
+'\x{6BAF}\x{6BB0}\x{6BB2}\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB6}\x{6BB7}\x{6BB9}' .
+'\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBD}\x{6BBE}\x{6BBF}\x{6BC0}\x{6BC1}\x{6BC2}' .
+'\x{6BC3}\x{6BC4}\x{6BC5}\x{6BC6}\x{6BC7}\x{6BC8}\x{6BC9}\x{6BCA}\x{6BCB}' .
+'\x{6BCC}\x{6BCD}\x{6BCE}\x{6BCF}\x{6BD0}\x{6BD1}\x{6BD2}\x{6BD3}\x{6BD4}' .
+'\x{6BD5}\x{6BD6}\x{6BD7}\x{6BD8}\x{6BD9}\x{6BDA}\x{6BDB}\x{6BDC}\x{6BDD}' .
+'\x{6BDE}\x{6BDF}\x{6BE0}\x{6BE1}\x{6BE2}\x{6BE3}\x{6BE4}\x{6BE5}\x{6BE6}' .
+'\x{6BE7}\x{6BE8}\x{6BEA}\x{6BEB}\x{6BEC}\x{6BED}\x{6BEE}\x{6BEF}\x{6BF0}' .
+'\x{6BF2}\x{6BF3}\x{6BF5}\x{6BF6}\x{6BF7}\x{6BF8}\x{6BF9}\x{6BFB}\x{6BFC}' .
+'\x{6BFD}\x{6BFE}\x{6BFF}\x{6C00}\x{6C01}\x{6C02}\x{6C03}\x{6C04}\x{6C05}' .
+'\x{6C06}\x{6C07}\x{6C08}\x{6C09}\x{6C0B}\x{6C0C}\x{6C0D}\x{6C0E}\x{6C0F}' .
+'\x{6C10}\x{6C11}\x{6C12}\x{6C13}\x{6C14}\x{6C15}\x{6C16}\x{6C18}\x{6C19}' .
+'\x{6C1A}\x{6C1B}\x{6C1D}\x{6C1E}\x{6C1F}\x{6C20}\x{6C21}\x{6C22}\x{6C23}' .
+'\x{6C24}\x{6C25}\x{6C26}\x{6C27}\x{6C28}\x{6C29}\x{6C2A}\x{6C2B}\x{6C2C}' .
+'\x{6C2E}\x{6C2F}\x{6C30}\x{6C31}\x{6C32}\x{6C33}\x{6C34}\x{6C35}\x{6C36}' .
+'\x{6C37}\x{6C38}\x{6C3A}\x{6C3B}\x{6C3D}\x{6C3E}\x{6C3F}\x{6C40}\x{6C41}' .
+'\x{6C42}\x{6C43}\x{6C44}\x{6C46}\x{6C47}\x{6C48}\x{6C49}\x{6C4A}\x{6C4B}' .
+'\x{6C4C}\x{6C4D}\x{6C4E}\x{6C4F}\x{6C50}\x{6C51}\x{6C52}\x{6C53}\x{6C54}' .
+'\x{6C55}\x{6C56}\x{6C57}\x{6C58}\x{6C59}\x{6C5A}\x{6C5B}\x{6C5C}\x{6C5D}' .
+'\x{6C5E}\x{6C5F}\x{6C60}\x{6C61}\x{6C62}\x{6C63}\x{6C64}\x{6C65}\x{6C66}' .
+'\x{6C67}\x{6C68}\x{6C69}\x{6C6A}\x{6C6B}\x{6C6D}\x{6C6F}\x{6C70}\x{6C71}' .
+'\x{6C72}\x{6C73}\x{6C74}\x{6C75}\x{6C76}\x{6C77}\x{6C78}\x{6C79}\x{6C7A}' .
+'\x{6C7B}\x{6C7C}\x{6C7D}\x{6C7E}\x{6C7F}\x{6C80}\x{6C81}\x{6C82}\x{6C83}' .
+'\x{6C84}\x{6C85}\x{6C86}\x{6C87}\x{6C88}\x{6C89}\x{6C8A}\x{6C8B}\x{6C8C}' .
+'\x{6C8D}\x{6C8E}\x{6C8F}\x{6C90}\x{6C91}\x{6C92}\x{6C93}\x{6C94}\x{6C95}' .
+'\x{6C96}\x{6C97}\x{6C98}\x{6C99}\x{6C9A}\x{6C9B}\x{6C9C}\x{6C9D}\x{6C9E}' .
+'\x{6C9F}\x{6CA1}\x{6CA2}\x{6CA3}\x{6CA4}\x{6CA5}\x{6CA6}\x{6CA7}\x{6CA8}' .
+'\x{6CA9}\x{6CAA}\x{6CAB}\x{6CAC}\x{6CAD}\x{6CAE}\x{6CAF}\x{6CB0}\x{6CB1}' .
+'\x{6CB2}\x{6CB3}\x{6CB4}\x{6CB5}\x{6CB6}\x{6CB7}\x{6CB8}\x{6CB9}\x{6CBA}' .
+'\x{6CBB}\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC0}\x{6CC1}\x{6CC2}\x{6CC3}' .
+'\x{6CC4}\x{6CC5}\x{6CC6}\x{6CC7}\x{6CC8}\x{6CC9}\x{6CCA}\x{6CCB}\x{6CCC}' .
+'\x{6CCD}\x{6CCE}\x{6CCF}\x{6CD0}\x{6CD1}\x{6CD2}\x{6CD3}\x{6CD4}\x{6CD5}' .
+'\x{6CD6}\x{6CD7}\x{6CD9}\x{6CDA}\x{6CDB}\x{6CDC}\x{6CDD}\x{6CDE}\x{6CDF}' .
+'\x{6CE0}\x{6CE1}\x{6CE2}\x{6CE3}\x{6CE4}\x{6CE5}\x{6CE6}\x{6CE7}\x{6CE8}' .
+'\x{6CE9}\x{6CEA}\x{6CEB}\x{6CEC}\x{6CED}\x{6CEE}\x{6CEF}\x{6CF0}\x{6CF1}' .
+'\x{6CF2}\x{6CF3}\x{6CF5}\x{6CF6}\x{6CF7}\x{6CF8}\x{6CF9}\x{6CFA}\x{6CFB}' .
+'\x{6CFC}\x{6CFD}\x{6CFE}\x{6CFF}\x{6D00}\x{6D01}\x{6D03}\x{6D04}\x{6D05}' .
+'\x{6D06}\x{6D07}\x{6D08}\x{6D09}\x{6D0A}\x{6D0B}\x{6D0C}\x{6D0D}\x{6D0E}' .
+'\x{6D0F}\x{6D10}\x{6D11}\x{6D12}\x{6D13}\x{6D14}\x{6D15}\x{6D16}\x{6D17}' .
+'\x{6D18}\x{6D19}\x{6D1A}\x{6D1B}\x{6D1D}\x{6D1E}\x{6D1F}\x{6D20}\x{6D21}' .
+'\x{6D22}\x{6D23}\x{6D25}\x{6D26}\x{6D27}\x{6D28}\x{6D29}\x{6D2A}\x{6D2B}' .
+'\x{6D2C}\x{6D2D}\x{6D2E}\x{6D2F}\x{6D30}\x{6D31}\x{6D32}\x{6D33}\x{6D34}' .
+'\x{6D35}\x{6D36}\x{6D37}\x{6D38}\x{6D39}\x{6D3A}\x{6D3B}\x{6D3C}\x{6D3D}' .
+'\x{6D3E}\x{6D3F}\x{6D40}\x{6D41}\x{6D42}\x{6D43}\x{6D44}\x{6D45}\x{6D46}' .
+'\x{6D47}\x{6D48}\x{6D49}\x{6D4A}\x{6D4B}\x{6D4C}\x{6D4D}\x{6D4E}\x{6D4F}' .
+'\x{6D50}\x{6D51}\x{6D52}\x{6D53}\x{6D54}\x{6D55}\x{6D56}\x{6D57}\x{6D58}' .
+'\x{6D59}\x{6D5A}\x{6D5B}\x{6D5C}\x{6D5D}\x{6D5E}\x{6D5F}\x{6D60}\x{6D61}' .
+'\x{6D62}\x{6D63}\x{6D64}\x{6D65}\x{6D66}\x{6D67}\x{6D68}\x{6D69}\x{6D6A}' .
+'\x{6D6B}\x{6D6C}\x{6D6D}\x{6D6E}\x{6D6F}\x{6D70}\x{6D72}\x{6D73}\x{6D74}' .
+'\x{6D75}\x{6D76}\x{6D77}\x{6D78}\x{6D79}\x{6D7A}\x{6D7B}\x{6D7C}\x{6D7D}' .
+'\x{6D7E}\x{6D7F}\x{6D80}\x{6D82}\x{6D83}\x{6D84}\x{6D85}\x{6D86}\x{6D87}' .
+'\x{6D88}\x{6D89}\x{6D8A}\x{6D8B}\x{6D8C}\x{6D8D}\x{6D8E}\x{6D8F}\x{6D90}' .
+'\x{6D91}\x{6D92}\x{6D93}\x{6D94}\x{6D95}\x{6D97}\x{6D98}\x{6D99}\x{6D9A}' .
+'\x{6D9B}\x{6D9D}\x{6D9E}\x{6D9F}\x{6DA0}\x{6DA1}\x{6DA2}\x{6DA3}\x{6DA4}' .
+'\x{6DA5}\x{6DA6}\x{6DA7}\x{6DA8}\x{6DA9}\x{6DAA}\x{6DAB}\x{6DAC}\x{6DAD}' .
+'\x{6DAE}\x{6DAF}\x{6DB2}\x{6DB3}\x{6DB4}\x{6DB5}\x{6DB7}\x{6DB8}\x{6DB9}' .
+'\x{6DBA}\x{6DBB}\x{6DBC}\x{6DBD}\x{6DBE}\x{6DBF}\x{6DC0}\x{6DC1}\x{6DC2}' .
+'\x{6DC3}\x{6DC4}\x{6DC5}\x{6DC6}\x{6DC7}\x{6DC8}\x{6DC9}\x{6DCA}\x{6DCB}' .
+'\x{6DCC}\x{6DCD}\x{6DCE}\x{6DCF}\x{6DD0}\x{6DD1}\x{6DD2}\x{6DD3}\x{6DD4}' .
+'\x{6DD5}\x{6DD6}\x{6DD7}\x{6DD8}\x{6DD9}\x{6DDA}\x{6DDB}\x{6DDC}\x{6DDD}' .
+'\x{6DDE}\x{6DDF}\x{6DE0}\x{6DE1}\x{6DE2}\x{6DE3}\x{6DE4}\x{6DE5}\x{6DE6}' .
+'\x{6DE7}\x{6DE8}\x{6DE9}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DED}\x{6DEE}\x{6DEF}' .
+'\x{6DF0}\x{6DF1}\x{6DF2}\x{6DF3}\x{6DF4}\x{6DF5}\x{6DF6}\x{6DF7}\x{6DF8}' .
+'\x{6DF9}\x{6DFA}\x{6DFB}\x{6DFC}\x{6DFD}\x{6E00}\x{6E03}\x{6E04}\x{6E05}' .
+'\x{6E07}\x{6E08}\x{6E09}\x{6E0A}\x{6E0B}\x{6E0C}\x{6E0D}\x{6E0E}\x{6E0F}' .
+'\x{6E10}\x{6E11}\x{6E14}\x{6E15}\x{6E16}\x{6E17}\x{6E19}\x{6E1A}\x{6E1B}' .
+'\x{6E1C}\x{6E1D}\x{6E1E}\x{6E1F}\x{6E20}\x{6E21}\x{6E22}\x{6E23}\x{6E24}' .
+'\x{6E25}\x{6E26}\x{6E27}\x{6E28}\x{6E29}\x{6E2B}\x{6E2C}\x{6E2D}\x{6E2E}' .
+'\x{6E2F}\x{6E30}\x{6E31}\x{6E32}\x{6E33}\x{6E34}\x{6E35}\x{6E36}\x{6E37}' .
+'\x{6E38}\x{6E39}\x{6E3A}\x{6E3B}\x{6E3C}\x{6E3D}\x{6E3E}\x{6E3F}\x{6E40}' .
+'\x{6E41}\x{6E42}\x{6E43}\x{6E44}\x{6E45}\x{6E46}\x{6E47}\x{6E48}\x{6E49}' .
+'\x{6E4A}\x{6E4B}\x{6E4D}\x{6E4E}\x{6E4F}\x{6E50}\x{6E51}\x{6E52}\x{6E53}' .
+'\x{6E54}\x{6E55}\x{6E56}\x{6E57}\x{6E58}\x{6E59}\x{6E5A}\x{6E5B}\x{6E5C}' .
+'\x{6E5D}\x{6E5E}\x{6E5F}\x{6E60}\x{6E61}\x{6E62}\x{6E63}\x{6E64}\x{6E65}' .
+'\x{6E66}\x{6E67}\x{6E68}\x{6E69}\x{6E6A}\x{6E6B}\x{6E6D}\x{6E6E}\x{6E6F}' .
+'\x{6E70}\x{6E71}\x{6E72}\x{6E73}\x{6E74}\x{6E75}\x{6E77}\x{6E78}\x{6E79}' .
+'\x{6E7E}\x{6E7F}\x{6E80}\x{6E81}\x{6E82}\x{6E83}\x{6E84}\x{6E85}\x{6E86}' .
+'\x{6E87}\x{6E88}\x{6E89}\x{6E8A}\x{6E8D}\x{6E8E}\x{6E8F}\x{6E90}\x{6E91}' .
+'\x{6E92}\x{6E93}\x{6E94}\x{6E96}\x{6E97}\x{6E98}\x{6E99}\x{6E9A}\x{6E9B}' .
+'\x{6E9C}\x{6E9D}\x{6E9E}\x{6E9F}\x{6EA0}\x{6EA1}\x{6EA2}\x{6EA3}\x{6EA4}' .
+'\x{6EA5}\x{6EA6}\x{6EA7}\x{6EA8}\x{6EA9}\x{6EAA}\x{6EAB}\x{6EAC}\x{6EAD}' .
+'\x{6EAE}\x{6EAF}\x{6EB0}\x{6EB1}\x{6EB2}\x{6EB3}\x{6EB4}\x{6EB5}\x{6EB6}' .
+'\x{6EB7}\x{6EB8}\x{6EB9}\x{6EBA}\x{6EBB}\x{6EBC}\x{6EBD}\x{6EBE}\x{6EBF}' .
+'\x{6EC0}\x{6EC1}\x{6EC2}\x{6EC3}\x{6EC4}\x{6EC5}\x{6EC6}\x{6EC7}\x{6EC8}' .
+'\x{6EC9}\x{6ECA}\x{6ECB}\x{6ECC}\x{6ECD}\x{6ECE}\x{6ECF}\x{6ED0}\x{6ED1}' .
+'\x{6ED2}\x{6ED3}\x{6ED4}\x{6ED5}\x{6ED6}\x{6ED7}\x{6ED8}\x{6ED9}\x{6EDA}' .
+'\x{6EDC}\x{6EDE}\x{6EDF}\x{6EE0}\x{6EE1}\x{6EE2}\x{6EE4}\x{6EE5}\x{6EE6}' .
+'\x{6EE7}\x{6EE8}\x{6EE9}\x{6EEA}\x{6EEB}\x{6EEC}\x{6EED}\x{6EEE}\x{6EEF}' .
+'\x{6EF0}\x{6EF1}\x{6EF2}\x{6EF3}\x{6EF4}\x{6EF5}\x{6EF6}\x{6EF7}\x{6EF8}' .
+'\x{6EF9}\x{6EFA}\x{6EFB}\x{6EFC}\x{6EFD}\x{6EFE}\x{6EFF}\x{6F00}\x{6F01}' .
+'\x{6F02}\x{6F03}\x{6F05}\x{6F06}\x{6F07}\x{6F08}\x{6F09}\x{6F0A}\x{6F0C}' .
+'\x{6F0D}\x{6F0E}\x{6F0F}\x{6F10}\x{6F11}\x{6F12}\x{6F13}\x{6F14}\x{6F15}' .
+'\x{6F16}\x{6F17}\x{6F18}\x{6F19}\x{6F1A}\x{6F1B}\x{6F1C}\x{6F1D}\x{6F1E}' .
+'\x{6F1F}\x{6F20}\x{6F21}\x{6F22}\x{6F23}\x{6F24}\x{6F25}\x{6F26}\x{6F27}' .
+'\x{6F28}\x{6F29}\x{6F2A}\x{6F2B}\x{6F2C}\x{6F2D}\x{6F2E}\x{6F2F}\x{6F30}' .
+'\x{6F31}\x{6F32}\x{6F33}\x{6F34}\x{6F35}\x{6F36}\x{6F37}\x{6F38}\x{6F39}' .
+'\x{6F3A}\x{6F3B}\x{6F3C}\x{6F3D}\x{6F3E}\x{6F3F}\x{6F40}\x{6F41}\x{6F43}' .
+'\x{6F44}\x{6F45}\x{6F46}\x{6F47}\x{6F49}\x{6F4B}\x{6F4C}\x{6F4D}\x{6F4E}' .
+'\x{6F4F}\x{6F50}\x{6F51}\x{6F52}\x{6F53}\x{6F54}\x{6F55}\x{6F56}\x{6F57}' .
+'\x{6F58}\x{6F59}\x{6F5A}\x{6F5B}\x{6F5C}\x{6F5D}\x{6F5E}\x{6F5F}\x{6F60}' .
+'\x{6F61}\x{6F62}\x{6F63}\x{6F64}\x{6F65}\x{6F66}\x{6F67}\x{6F68}\x{6F69}' .
+'\x{6F6A}\x{6F6B}\x{6F6C}\x{6F6D}\x{6F6E}\x{6F6F}\x{6F70}\x{6F71}\x{6F72}' .
+'\x{6F73}\x{6F74}\x{6F75}\x{6F76}\x{6F77}\x{6F78}\x{6F7A}\x{6F7B}\x{6F7C}' .
+'\x{6F7D}\x{6F7E}\x{6F7F}\x{6F80}\x{6F81}\x{6F82}\x{6F83}\x{6F84}\x{6F85}' .
+'\x{6F86}\x{6F87}\x{6F88}\x{6F89}\x{6F8A}\x{6F8B}\x{6F8C}\x{6F8D}\x{6F8E}' .
+'\x{6F8F}\x{6F90}\x{6F91}\x{6F92}\x{6F93}\x{6F94}\x{6F95}\x{6F96}\x{6F97}' .
+'\x{6F99}\x{6F9B}\x{6F9C}\x{6F9D}\x{6F9E}\x{6FA0}\x{6FA1}\x{6FA2}\x{6FA3}' .
+'\x{6FA4}\x{6FA5}\x{6FA6}\x{6FA7}\x{6FA8}\x{6FA9}\x{6FAA}\x{6FAB}\x{6FAC}' .
+'\x{6FAD}\x{6FAE}\x{6FAF}\x{6FB0}\x{6FB1}\x{6FB2}\x{6FB3}\x{6FB4}\x{6FB5}' .
+'\x{6FB6}\x{6FB8}\x{6FB9}\x{6FBA}\x{6FBB}\x{6FBC}\x{6FBD}\x{6FBE}\x{6FBF}' .
+'\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC4}\x{6FC6}\x{6FC7}\x{6FC8}\x{6FC9}' .
+'\x{6FCA}\x{6FCB}\x{6FCC}\x{6FCD}\x{6FCE}\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}' .
+'\x{6FD5}\x{6FD6}\x{6FD7}\x{6FD8}\x{6FD9}\x{6FDA}\x{6FDB}\x{6FDC}\x{6FDD}' .
+'\x{6FDE}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE2}\x{6FE3}\x{6FE4}\x{6FE5}\x{6FE6}' .
+'\x{6FE7}\x{6FE8}\x{6FE9}\x{6FEA}\x{6FEB}\x{6FEC}\x{6FED}\x{6FEE}\x{6FEF}' .
+'\x{6FF0}\x{6FF1}\x{6FF2}\x{6FF3}\x{6FF4}\x{6FF6}\x{6FF7}\x{6FF8}\x{6FF9}' .
+'\x{6FFA}\x{6FFB}\x{6FFC}\x{6FFE}\x{6FFF}\x{7000}\x{7001}\x{7002}\x{7003}' .
+'\x{7004}\x{7005}\x{7006}\x{7007}\x{7008}\x{7009}\x{700A}\x{700B}\x{700C}' .
+'\x{700D}\x{700E}\x{700F}\x{7011}\x{7012}\x{7014}\x{7015}\x{7016}\x{7017}' .
+'\x{7018}\x{7019}\x{701A}\x{701B}\x{701C}\x{701D}\x{701F}\x{7020}\x{7021}' .
+'\x{7022}\x{7023}\x{7024}\x{7025}\x{7026}\x{7027}\x{7028}\x{7029}\x{702A}' .
+'\x{702B}\x{702C}\x{702D}\x{702E}\x{702F}\x{7030}\x{7031}\x{7032}\x{7033}' .
+'\x{7034}\x{7035}\x{7036}\x{7037}\x{7038}\x{7039}\x{703A}\x{703B}\x{703C}' .
+'\x{703D}\x{703E}\x{703F}\x{7040}\x{7041}\x{7042}\x{7043}\x{7044}\x{7045}' .
+'\x{7046}\x{7048}\x{7049}\x{704A}\x{704C}\x{704D}\x{704F}\x{7050}\x{7051}' .
+'\x{7052}\x{7053}\x{7054}\x{7055}\x{7056}\x{7057}\x{7058}\x{7059}\x{705A}' .
+'\x{705B}\x{705C}\x{705D}\x{705E}\x{705F}\x{7060}\x{7061}\x{7062}\x{7063}' .
+'\x{7064}\x{7065}\x{7066}\x{7067}\x{7068}\x{7069}\x{706A}\x{706B}\x{706C}' .
+'\x{706D}\x{706E}\x{706F}\x{7070}\x{7071}\x{7074}\x{7075}\x{7076}\x{7077}' .
+'\x{7078}\x{7079}\x{707A}\x{707C}\x{707D}\x{707E}\x{707F}\x{7080}\x{7082}' .
+'\x{7083}\x{7084}\x{7085}\x{7086}\x{7087}\x{7088}\x{7089}\x{708A}\x{708B}' .
+'\x{708C}\x{708E}\x{708F}\x{7090}\x{7091}\x{7092}\x{7093}\x{7094}\x{7095}' .
+'\x{7096}\x{7098}\x{7099}\x{709A}\x{709C}\x{709D}\x{709E}\x{709F}\x{70A0}' .
+'\x{70A1}\x{70A2}\x{70A3}\x{70A4}\x{70A5}\x{70A6}\x{70A7}\x{70A8}\x{70A9}' .
+'\x{70AB}\x{70AC}\x{70AD}\x{70AE}\x{70AF}\x{70B0}\x{70B1}\x{70B3}\x{70B4}' .
+'\x{70B5}\x{70B7}\x{70B8}\x{70B9}\x{70BA}\x{70BB}\x{70BC}\x{70BD}\x{70BE}' .
+'\x{70BF}\x{70C0}\x{70C1}\x{70C2}\x{70C3}\x{70C4}\x{70C5}\x{70C6}\x{70C7}' .
+'\x{70C8}\x{70C9}\x{70CA}\x{70CB}\x{70CC}\x{70CD}\x{70CE}\x{70CF}\x{70D0}' .
+'\x{70D1}\x{70D2}\x{70D3}\x{70D4}\x{70D6}\x{70D7}\x{70D8}\x{70D9}\x{70DA}' .
+'\x{70DB}\x{70DC}\x{70DD}\x{70DE}\x{70DF}\x{70E0}\x{70E1}\x{70E2}\x{70E3}' .
+'\x{70E4}\x{70E5}\x{70E6}\x{70E7}\x{70E8}\x{70E9}\x{70EA}\x{70EB}\x{70EC}' .
+'\x{70ED}\x{70EE}\x{70EF}\x{70F0}\x{70F1}\x{70F2}\x{70F3}\x{70F4}\x{70F5}' .
+'\x{70F6}\x{70F7}\x{70F8}\x{70F9}\x{70FA}\x{70FB}\x{70FC}\x{70FD}\x{70FF}' .
+'\x{7100}\x{7101}\x{7102}\x{7103}\x{7104}\x{7105}\x{7106}\x{7107}\x{7109}' .
+'\x{710A}\x{710B}\x{710C}\x{710D}\x{710E}\x{710F}\x{7110}\x{7111}\x{7112}' .
+'\x{7113}\x{7115}\x{7116}\x{7117}\x{7118}\x{7119}\x{711A}\x{711B}\x{711C}' .
+'\x{711D}\x{711E}\x{711F}\x{7120}\x{7121}\x{7122}\x{7123}\x{7125}\x{7126}' .
+'\x{7127}\x{7128}\x{7129}\x{712A}\x{712B}\x{712C}\x{712D}\x{712E}\x{712F}' .
+'\x{7130}\x{7131}\x{7132}\x{7135}\x{7136}\x{7137}\x{7138}\x{7139}\x{713A}' .
+'\x{713B}\x{713D}\x{713E}\x{713F}\x{7140}\x{7141}\x{7142}\x{7143}\x{7144}' .
+'\x{7145}\x{7146}\x{7147}\x{7148}\x{7149}\x{714A}\x{714B}\x{714C}\x{714D}' .
+'\x{714E}\x{714F}\x{7150}\x{7151}\x{7152}\x{7153}\x{7154}\x{7156}\x{7158}' .
+'\x{7159}\x{715A}\x{715B}\x{715C}\x{715D}\x{715E}\x{715F}\x{7160}\x{7161}' .
+'\x{7162}\x{7163}\x{7164}\x{7165}\x{7166}\x{7167}\x{7168}\x{7169}\x{716A}' .
+'\x{716C}\x{716E}\x{716F}\x{7170}\x{7171}\x{7172}\x{7173}\x{7174}\x{7175}' .
+'\x{7176}\x{7177}\x{7178}\x{7179}\x{717A}\x{717B}\x{717C}\x{717D}\x{717E}' .
+'\x{717F}\x{7180}\x{7181}\x{7182}\x{7183}\x{7184}\x{7185}\x{7186}\x{7187}' .
+'\x{7188}\x{7189}\x{718A}\x{718B}\x{718C}\x{718E}\x{718F}\x{7190}\x{7191}' .
+'\x{7192}\x{7193}\x{7194}\x{7195}\x{7197}\x{7198}\x{7199}\x{719A}\x{719B}' .
+'\x{719C}\x{719D}\x{719E}\x{719F}\x{71A0}\x{71A1}\x{71A2}\x{71A3}\x{71A4}' .
+'\x{71A5}\x{71A7}\x{71A8}\x{71A9}\x{71AA}\x{71AC}\x{71AD}\x{71AE}\x{71AF}' .
+'\x{71B0}\x{71B1}\x{71B2}\x{71B3}\x{71B4}\x{71B5}\x{71B7}\x{71B8}\x{71B9}' .
+'\x{71BA}\x{71BB}\x{71BC}\x{71BD}\x{71BE}\x{71BF}\x{71C0}\x{71C1}\x{71C2}' .
+'\x{71C3}\x{71C4}\x{71C5}\x{71C6}\x{71C7}\x{71C8}\x{71C9}\x{71CA}\x{71CB}' .
+'\x{71CD}\x{71CE}\x{71CF}\x{71D0}\x{71D1}\x{71D2}\x{71D4}\x{71D5}\x{71D6}' .
+'\x{71D7}\x{71D8}\x{71D9}\x{71DA}\x{71DB}\x{71DC}\x{71DD}\x{71DE}\x{71DF}' .
+'\x{71E0}\x{71E1}\x{71E2}\x{71E3}\x{71E4}\x{71E5}\x{71E6}\x{71E7}\x{71E8}' .
+'\x{71E9}\x{71EA}\x{71EB}\x{71EC}\x{71ED}\x{71EE}\x{71EF}\x{71F0}\x{71F1}' .
+'\x{71F2}\x{71F4}\x{71F5}\x{71F6}\x{71F7}\x{71F8}\x{71F9}\x{71FB}\x{71FC}' .
+'\x{71FD}\x{71FE}\x{71FF}\x{7201}\x{7202}\x{7203}\x{7204}\x{7205}\x{7206}' .
+'\x{7207}\x{7208}\x{7209}\x{720A}\x{720C}\x{720D}\x{720E}\x{720F}\x{7210}' .
+'\x{7212}\x{7213}\x{7214}\x{7216}\x{7218}\x{7219}\x{721A}\x{721B}\x{721C}' .
+'\x{721D}\x{721E}\x{721F}\x{7221}\x{7222}\x{7223}\x{7226}\x{7227}\x{7228}' .
+'\x{7229}\x{722A}\x{722B}\x{722C}\x{722D}\x{722E}\x{7230}\x{7231}\x{7232}' .
+'\x{7233}\x{7235}\x{7236}\x{7237}\x{7238}\x{7239}\x{723A}\x{723B}\x{723C}' .
+'\x{723D}\x{723E}\x{723F}\x{7240}\x{7241}\x{7242}\x{7243}\x{7244}\x{7246}' .
+'\x{7247}\x{7248}\x{7249}\x{724A}\x{724B}\x{724C}\x{724D}\x{724F}\x{7251}' .
+'\x{7252}\x{7253}\x{7254}\x{7256}\x{7257}\x{7258}\x{7259}\x{725A}\x{725B}' .
+'\x{725C}\x{725D}\x{725E}\x{725F}\x{7260}\x{7261}\x{7262}\x{7263}\x{7264}' .
+'\x{7265}\x{7266}\x{7267}\x{7268}\x{7269}\x{726A}\x{726B}\x{726C}\x{726D}' .
+'\x{726E}\x{726F}\x{7270}\x{7271}\x{7272}\x{7273}\x{7274}\x{7275}\x{7276}' .
+'\x{7277}\x{7278}\x{7279}\x{727A}\x{727B}\x{727C}\x{727D}\x{727E}\x{727F}' .
+'\x{7280}\x{7281}\x{7282}\x{7283}\x{7284}\x{7285}\x{7286}\x{7287}\x{7288}' .
+'\x{7289}\x{728A}\x{728B}\x{728C}\x{728D}\x{728E}\x{728F}\x{7290}\x{7291}' .
+'\x{7292}\x{7293}\x{7294}\x{7295}\x{7296}\x{7297}\x{7298}\x{7299}\x{729A}' .
+'\x{729B}\x{729C}\x{729D}\x{729E}\x{729F}\x{72A1}\x{72A2}\x{72A3}\x{72A4}' .
+'\x{72A5}\x{72A6}\x{72A7}\x{72A8}\x{72A9}\x{72AA}\x{72AC}\x{72AD}\x{72AE}' .
+'\x{72AF}\x{72B0}\x{72B1}\x{72B2}\x{72B3}\x{72B4}\x{72B5}\x{72B6}\x{72B7}' .
+'\x{72B8}\x{72B9}\x{72BA}\x{72BB}\x{72BC}\x{72BD}\x{72BF}\x{72C0}\x{72C1}' .
+'\x{72C2}\x{72C3}\x{72C4}\x{72C5}\x{72C6}\x{72C7}\x{72C8}\x{72C9}\x{72CA}' .
+'\x{72CB}\x{72CC}\x{72CD}\x{72CE}\x{72CF}\x{72D0}\x{72D1}\x{72D2}\x{72D3}' .
+'\x{72D4}\x{72D5}\x{72D6}\x{72D7}\x{72D8}\x{72D9}\x{72DA}\x{72DB}\x{72DC}' .
+'\x{72DD}\x{72DE}\x{72DF}\x{72E0}\x{72E1}\x{72E2}\x{72E3}\x{72E4}\x{72E5}' .
+'\x{72E6}\x{72E7}\x{72E8}\x{72E9}\x{72EA}\x{72EB}\x{72EC}\x{72ED}\x{72EE}' .
+'\x{72EF}\x{72F0}\x{72F1}\x{72F2}\x{72F3}\x{72F4}\x{72F5}\x{72F6}\x{72F7}' .
+'\x{72F8}\x{72F9}\x{72FA}\x{72FB}\x{72FC}\x{72FD}\x{72FE}\x{72FF}\x{7300}' .
+'\x{7301}\x{7303}\x{7304}\x{7305}\x{7306}\x{7307}\x{7308}\x{7309}\x{730A}' .
+'\x{730B}\x{730C}\x{730D}\x{730E}\x{730F}\x{7311}\x{7312}\x{7313}\x{7314}' .
+'\x{7315}\x{7316}\x{7317}\x{7318}\x{7319}\x{731A}\x{731B}\x{731C}\x{731D}' .
+'\x{731E}\x{7320}\x{7321}\x{7322}\x{7323}\x{7324}\x{7325}\x{7326}\x{7327}' .
+'\x{7329}\x{732A}\x{732B}\x{732C}\x{732D}\x{732E}\x{7330}\x{7331}\x{7332}' .
+'\x{7333}\x{7334}\x{7335}\x{7336}\x{7337}\x{7338}\x{7339}\x{733A}\x{733B}' .
+'\x{733C}\x{733D}\x{733E}\x{733F}\x{7340}\x{7341}\x{7342}\x{7343}\x{7344}' .
+'\x{7345}\x{7346}\x{7347}\x{7348}\x{7349}\x{734A}\x{734B}\x{734C}\x{734D}' .
+'\x{734E}\x{7350}\x{7351}\x{7352}\x{7354}\x{7355}\x{7356}\x{7357}\x{7358}' .
+'\x{7359}\x{735A}\x{735B}\x{735C}\x{735D}\x{735E}\x{735F}\x{7360}\x{7361}' .
+'\x{7362}\x{7364}\x{7365}\x{7366}\x{7367}\x{7368}\x{7369}\x{736A}\x{736B}' .
+'\x{736C}\x{736D}\x{736E}\x{736F}\x{7370}\x{7371}\x{7372}\x{7373}\x{7374}' .
+'\x{7375}\x{7376}\x{7377}\x{7378}\x{7379}\x{737A}\x{737B}\x{737C}\x{737D}' .
+'\x{737E}\x{737F}\x{7380}\x{7381}\x{7382}\x{7383}\x{7384}\x{7385}\x{7386}' .
+'\x{7387}\x{7388}\x{7389}\x{738A}\x{738B}\x{738C}\x{738D}\x{738E}\x{738F}' .
+'\x{7390}\x{7391}\x{7392}\x{7393}\x{7394}\x{7395}\x{7396}\x{7397}\x{7398}' .
+'\x{7399}\x{739A}\x{739B}\x{739D}\x{739E}\x{739F}\x{73A0}\x{73A1}\x{73A2}' .
+'\x{73A3}\x{73A4}\x{73A5}\x{73A6}\x{73A7}\x{73A8}\x{73A9}\x{73AA}\x{73AB}' .
+'\x{73AC}\x{73AD}\x{73AE}\x{73AF}\x{73B0}\x{73B1}\x{73B2}\x{73B3}\x{73B4}' .
+'\x{73B5}\x{73B6}\x{73B7}\x{73B8}\x{73B9}\x{73BA}\x{73BB}\x{73BC}\x{73BD}' .
+'\x{73BE}\x{73BF}\x{73C0}\x{73C2}\x{73C3}\x{73C4}\x{73C5}\x{73C6}\x{73C7}' .
+'\x{73C8}\x{73C9}\x{73CA}\x{73CB}\x{73CC}\x{73CD}\x{73CE}\x{73CF}\x{73D0}' .
+'\x{73D1}\x{73D2}\x{73D3}\x{73D4}\x{73D5}\x{73D6}\x{73D7}\x{73D8}\x{73D9}' .
+'\x{73DA}\x{73DB}\x{73DC}\x{73DD}\x{73DE}\x{73DF}\x{73E0}\x{73E2}\x{73E3}' .
+'\x{73E5}\x{73E6}\x{73E7}\x{73E8}\x{73E9}\x{73EA}\x{73EB}\x{73EC}\x{73ED}' .
+'\x{73EE}\x{73EF}\x{73F0}\x{73F1}\x{73F2}\x{73F4}\x{73F5}\x{73F6}\x{73F7}' .
+'\x{73F8}\x{73F9}\x{73FA}\x{73FC}\x{73FD}\x{73FE}\x{73FF}\x{7400}\x{7401}' .
+'\x{7402}\x{7403}\x{7404}\x{7405}\x{7406}\x{7407}\x{7408}\x{7409}\x{740A}' .
+'\x{740B}\x{740C}\x{740D}\x{740E}\x{740F}\x{7410}\x{7411}\x{7412}\x{7413}' .
+'\x{7414}\x{7415}\x{7416}\x{7417}\x{7419}\x{741A}\x{741B}\x{741C}\x{741D}' .
+'\x{741E}\x{741F}\x{7420}\x{7421}\x{7422}\x{7423}\x{7424}\x{7425}\x{7426}' .
+'\x{7427}\x{7428}\x{7429}\x{742A}\x{742B}\x{742C}\x{742D}\x{742E}\x{742F}' .
+'\x{7430}\x{7431}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{7437}\x{7438}' .
+'\x{743A}\x{743B}\x{743C}\x{743D}\x{743F}\x{7440}\x{7441}\x{7442}\x{7443}' .
+'\x{7444}\x{7445}\x{7446}\x{7448}\x{744A}\x{744B}\x{744C}\x{744D}\x{744E}' .
+'\x{744F}\x{7450}\x{7451}\x{7452}\x{7453}\x{7454}\x{7455}\x{7456}\x{7457}' .
+'\x{7459}\x{745A}\x{745B}\x{745C}\x{745D}\x{745E}\x{745F}\x{7461}\x{7462}' .
+'\x{7463}\x{7464}\x{7465}\x{7466}\x{7467}\x{7468}\x{7469}\x{746A}\x{746B}' .
+'\x{746C}\x{746D}\x{746E}\x{746F}\x{7470}\x{7471}\x{7472}\x{7473}\x{7474}' .
+'\x{7475}\x{7476}\x{7477}\x{7478}\x{7479}\x{747A}\x{747C}\x{747D}\x{747E}' .
+'\x{747F}\x{7480}\x{7481}\x{7482}\x{7483}\x{7485}\x{7486}\x{7487}\x{7488}' .
+'\x{7489}\x{748A}\x{748B}\x{748C}\x{748D}\x{748E}\x{748F}\x{7490}\x{7491}' .
+'\x{7492}\x{7493}\x{7494}\x{7495}\x{7497}\x{7498}\x{7499}\x{749A}\x{749B}' .
+'\x{749C}\x{749E}\x{749F}\x{74A0}\x{74A1}\x{74A3}\x{74A4}\x{74A5}\x{74A6}' .
+'\x{74A7}\x{74A8}\x{74A9}\x{74AA}\x{74AB}\x{74AC}\x{74AD}\x{74AE}\x{74AF}' .
+'\x{74B0}\x{74B1}\x{74B2}\x{74B3}\x{74B4}\x{74B5}\x{74B6}\x{74B7}\x{74B8}' .
+'\x{74B9}\x{74BA}\x{74BB}\x{74BC}\x{74BD}\x{74BE}\x{74BF}\x{74C0}\x{74C1}' .
+'\x{74C2}\x{74C3}\x{74C4}\x{74C5}\x{74C6}\x{74CA}\x{74CB}\x{74CD}\x{74CE}' .
+'\x{74CF}\x{74D0}\x{74D1}\x{74D2}\x{74D3}\x{74D4}\x{74D5}\x{74D6}\x{74D7}' .
+'\x{74D8}\x{74D9}\x{74DA}\x{74DB}\x{74DC}\x{74DD}\x{74DE}\x{74DF}\x{74E0}' .
+'\x{74E1}\x{74E2}\x{74E3}\x{74E4}\x{74E5}\x{74E6}\x{74E7}\x{74E8}\x{74E9}' .
+'\x{74EA}\x{74EC}\x{74ED}\x{74EE}\x{74EF}\x{74F0}\x{74F1}\x{74F2}\x{74F3}' .
+'\x{74F4}\x{74F5}\x{74F6}\x{74F7}\x{74F8}\x{74F9}\x{74FA}\x{74FB}\x{74FC}' .
+'\x{74FD}\x{74FE}\x{74FF}\x{7500}\x{7501}\x{7502}\x{7503}\x{7504}\x{7505}' .
+'\x{7506}\x{7507}\x{7508}\x{7509}\x{750A}\x{750B}\x{750C}\x{750D}\x{750F}' .
+'\x{7510}\x{7511}\x{7512}\x{7513}\x{7514}\x{7515}\x{7516}\x{7517}\x{7518}' .
+'\x{7519}\x{751A}\x{751B}\x{751C}\x{751D}\x{751E}\x{751F}\x{7521}\x{7522}' .
+'\x{7523}\x{7524}\x{7525}\x{7526}\x{7527}\x{7528}\x{7529}\x{752A}\x{752B}' .
+'\x{752C}\x{752D}\x{752E}\x{752F}\x{7530}\x{7531}\x{7532}\x{7533}\x{7535}' .
+'\x{7536}\x{7537}\x{7538}\x{7539}\x{753A}\x{753B}\x{753C}\x{753D}\x{753E}' .
+'\x{753F}\x{7540}\x{7542}\x{7543}\x{7544}\x{7545}\x{7546}\x{7547}\x{7548}' .
+'\x{7549}\x{754B}\x{754C}\x{754D}\x{754E}\x{754F}\x{7550}\x{7551}\x{7553}' .
+'\x{7554}\x{7556}\x{7557}\x{7558}\x{7559}\x{755A}\x{755B}\x{755C}\x{755D}' .
+'\x{755F}\x{7560}\x{7562}\x{7563}\x{7564}\x{7565}\x{7566}\x{7567}\x{7568}' .
+'\x{7569}\x{756A}\x{756B}\x{756C}\x{756D}\x{756E}\x{756F}\x{7570}\x{7572}' .
+'\x{7574}\x{7575}\x{7576}\x{7577}\x{7578}\x{7579}\x{757C}\x{757D}\x{757E}' .
+'\x{757F}\x{7580}\x{7581}\x{7582}\x{7583}\x{7584}\x{7586}\x{7587}\x{7588}' .
+'\x{7589}\x{758A}\x{758B}\x{758C}\x{758D}\x{758F}\x{7590}\x{7591}\x{7592}' .
+'\x{7593}\x{7594}\x{7595}\x{7596}\x{7597}\x{7598}\x{7599}\x{759A}\x{759B}' .
+'\x{759C}\x{759D}\x{759E}\x{759F}\x{75A0}\x{75A1}\x{75A2}\x{75A3}\x{75A4}' .
+'\x{75A5}\x{75A6}\x{75A7}\x{75A8}\x{75AA}\x{75AB}\x{75AC}\x{75AD}\x{75AE}' .
+'\x{75AF}\x{75B0}\x{75B1}\x{75B2}\x{75B3}\x{75B4}\x{75B5}\x{75B6}\x{75B8}' .
+'\x{75B9}\x{75BA}\x{75BB}\x{75BC}\x{75BD}\x{75BE}\x{75BF}\x{75C0}\x{75C1}' .
+'\x{75C2}\x{75C3}\x{75C4}\x{75C5}\x{75C6}\x{75C7}\x{75C8}\x{75C9}\x{75CA}' .
+'\x{75CB}\x{75CC}\x{75CD}\x{75CE}\x{75CF}\x{75D0}\x{75D1}\x{75D2}\x{75D3}' .
+'\x{75D4}\x{75D5}\x{75D6}\x{75D7}\x{75D8}\x{75D9}\x{75DA}\x{75DB}\x{75DD}' .
+'\x{75DE}\x{75DF}\x{75E0}\x{75E1}\x{75E2}\x{75E3}\x{75E4}\x{75E5}\x{75E6}' .
+'\x{75E7}\x{75E8}\x{75EA}\x{75EB}\x{75EC}\x{75ED}\x{75EF}\x{75F0}\x{75F1}' .
+'\x{75F2}\x{75F3}\x{75F4}\x{75F5}\x{75F6}\x{75F7}\x{75F8}\x{75F9}\x{75FA}' .
+'\x{75FB}\x{75FC}\x{75FD}\x{75FE}\x{75FF}\x{7600}\x{7601}\x{7602}\x{7603}' .
+'\x{7604}\x{7605}\x{7606}\x{7607}\x{7608}\x{7609}\x{760A}\x{760B}\x{760C}' .
+'\x{760D}\x{760E}\x{760F}\x{7610}\x{7611}\x{7612}\x{7613}\x{7614}\x{7615}' .
+'\x{7616}\x{7617}\x{7618}\x{7619}\x{761A}\x{761B}\x{761C}\x{761D}\x{761E}' .
+'\x{761F}\x{7620}\x{7621}\x{7622}\x{7623}\x{7624}\x{7625}\x{7626}\x{7627}' .
+'\x{7628}\x{7629}\x{762A}\x{762B}\x{762D}\x{762E}\x{762F}\x{7630}\x{7631}' .
+'\x{7632}\x{7633}\x{7634}\x{7635}\x{7636}\x{7637}\x{7638}\x{7639}\x{763A}' .
+'\x{763B}\x{763C}\x{763D}\x{763E}\x{763F}\x{7640}\x{7641}\x{7642}\x{7643}' .
+'\x{7646}\x{7647}\x{7648}\x{7649}\x{764A}\x{764B}\x{764C}\x{764D}\x{764F}' .
+'\x{7650}\x{7652}\x{7653}\x{7654}\x{7656}\x{7657}\x{7658}\x{7659}\x{765A}' .
+'\x{765B}\x{765C}\x{765D}\x{765E}\x{765F}\x{7660}\x{7661}\x{7662}\x{7663}' .
+'\x{7664}\x{7665}\x{7666}\x{7667}\x{7668}\x{7669}\x{766A}\x{766B}\x{766C}' .
+'\x{766D}\x{766E}\x{766F}\x{7670}\x{7671}\x{7672}\x{7674}\x{7675}\x{7676}' .
+'\x{7677}\x{7678}\x{7679}\x{767B}\x{767C}\x{767D}\x{767E}\x{767F}\x{7680}' .
+'\x{7681}\x{7682}\x{7683}\x{7684}\x{7685}\x{7686}\x{7687}\x{7688}\x{7689}' .
+'\x{768A}\x{768B}\x{768C}\x{768E}\x{768F}\x{7690}\x{7691}\x{7692}\x{7693}' .
+'\x{7694}\x{7695}\x{7696}\x{7697}\x{7698}\x{7699}\x{769A}\x{769B}\x{769C}' .
+'\x{769D}\x{769E}\x{769F}\x{76A0}\x{76A3}\x{76A4}\x{76A6}\x{76A7}\x{76A9}' .
+'\x{76AA}\x{76AB}\x{76AC}\x{76AD}\x{76AE}\x{76AF}\x{76B0}\x{76B1}\x{76B2}' .
+'\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}\x{76BB}\x{76BC}\x{76BD}\x{76BE}' .
+'\x{76BF}\x{76C0}\x{76C2}\x{76C3}\x{76C4}\x{76C5}\x{76C6}\x{76C7}\x{76C8}' .
+'\x{76C9}\x{76CA}\x{76CD}\x{76CE}\x{76CF}\x{76D0}\x{76D1}\x{76D2}\x{76D3}' .
+'\x{76D4}\x{76D5}\x{76D6}\x{76D7}\x{76D8}\x{76DA}\x{76DB}\x{76DC}\x{76DD}' .
+'\x{76DE}\x{76DF}\x{76E0}\x{76E1}\x{76E2}\x{76E3}\x{76E4}\x{76E5}\x{76E6}' .
+'\x{76E7}\x{76E8}\x{76E9}\x{76EA}\x{76EC}\x{76ED}\x{76EE}\x{76EF}\x{76F0}' .
+'\x{76F1}\x{76F2}\x{76F3}\x{76F4}\x{76F5}\x{76F6}\x{76F7}\x{76F8}\x{76F9}' .
+'\x{76FA}\x{76FB}\x{76FC}\x{76FD}\x{76FE}\x{76FF}\x{7701}\x{7703}\x{7704}' .
+'\x{7705}\x{7706}\x{7707}\x{7708}\x{7709}\x{770A}\x{770B}\x{770C}\x{770D}' .
+'\x{770F}\x{7710}\x{7711}\x{7712}\x{7713}\x{7714}\x{7715}\x{7716}\x{7717}' .
+'\x{7718}\x{7719}\x{771A}\x{771B}\x{771C}\x{771D}\x{771E}\x{771F}\x{7720}' .
+'\x{7722}\x{7723}\x{7725}\x{7726}\x{7727}\x{7728}\x{7729}\x{772A}\x{772C}' .
+'\x{772D}\x{772E}\x{772F}\x{7730}\x{7731}\x{7732}\x{7733}\x{7734}\x{7735}' .
+'\x{7736}\x{7737}\x{7738}\x{7739}\x{773A}\x{773B}\x{773C}\x{773D}\x{773E}' .
+'\x{7740}\x{7741}\x{7743}\x{7744}\x{7745}\x{7746}\x{7747}\x{7748}\x{7749}' .
+'\x{774A}\x{774B}\x{774C}\x{774D}\x{774E}\x{774F}\x{7750}\x{7751}\x{7752}' .
+'\x{7753}\x{7754}\x{7755}\x{7756}\x{7757}\x{7758}\x{7759}\x{775A}\x{775B}' .
+'\x{775C}\x{775D}\x{775E}\x{775F}\x{7760}\x{7761}\x{7762}\x{7763}\x{7765}' .
+'\x{7766}\x{7767}\x{7768}\x{7769}\x{776A}\x{776B}\x{776C}\x{776D}\x{776E}' .
+'\x{776F}\x{7770}\x{7771}\x{7772}\x{7773}\x{7774}\x{7775}\x{7776}\x{7777}' .
+'\x{7778}\x{7779}\x{777A}\x{777B}\x{777C}\x{777D}\x{777E}\x{777F}\x{7780}' .
+'\x{7781}\x{7782}\x{7783}\x{7784}\x{7785}\x{7786}\x{7787}\x{7788}\x{7789}' .
+'\x{778A}\x{778B}\x{778C}\x{778D}\x{778E}\x{778F}\x{7790}\x{7791}\x{7792}' .
+'\x{7793}\x{7794}\x{7795}\x{7797}\x{7798}\x{7799}\x{779A}\x{779B}\x{779C}' .
+'\x{779D}\x{779E}\x{779F}\x{77A0}\x{77A1}\x{77A2}\x{77A3}\x{77A5}\x{77A6}' .
+'\x{77A7}\x{77A8}\x{77A9}\x{77AA}\x{77AB}\x{77AC}\x{77AD}\x{77AE}\x{77AF}' .
+'\x{77B0}\x{77B1}\x{77B2}\x{77B3}\x{77B4}\x{77B5}\x{77B6}\x{77B7}\x{77B8}' .
+'\x{77B9}\x{77BA}\x{77BB}\x{77BC}\x{77BD}\x{77BF}\x{77C0}\x{77C2}\x{77C3}' .
+'\x{77C4}\x{77C5}\x{77C6}\x{77C7}\x{77C8}\x{77C9}\x{77CA}\x{77CB}\x{77CC}' .
+'\x{77CD}\x{77CE}\x{77CF}\x{77D0}\x{77D1}\x{77D3}\x{77D4}\x{77D5}\x{77D6}' .
+'\x{77D7}\x{77D8}\x{77D9}\x{77DA}\x{77DB}\x{77DC}\x{77DE}\x{77DF}\x{77E0}' .
+'\x{77E1}\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E8}\x{77E9}\x{77EA}\x{77EB}' .
+'\x{77EC}\x{77ED}\x{77EE}\x{77EF}\x{77F0}\x{77F1}\x{77F2}\x{77F3}\x{77F6}' .
+'\x{77F7}\x{77F8}\x{77F9}\x{77FA}\x{77FB}\x{77FC}\x{77FD}\x{77FE}\x{77FF}' .
+'\x{7800}\x{7801}\x{7802}\x{7803}\x{7804}\x{7805}\x{7806}\x{7808}\x{7809}' .
+'\x{780A}\x{780B}\x{780C}\x{780D}\x{780E}\x{780F}\x{7810}\x{7811}\x{7812}' .
+'\x{7813}\x{7814}\x{7815}\x{7816}\x{7817}\x{7818}\x{7819}\x{781A}\x{781B}' .
+'\x{781C}\x{781D}\x{781E}\x{781F}\x{7820}\x{7821}\x{7822}\x{7823}\x{7825}' .
+'\x{7826}\x{7827}\x{7828}\x{7829}\x{782A}\x{782B}\x{782C}\x{782D}\x{782E}' .
+'\x{782F}\x{7830}\x{7831}\x{7832}\x{7833}\x{7834}\x{7835}\x{7837}\x{7838}' .
+'\x{7839}\x{783A}\x{783B}\x{783C}\x{783D}\x{783E}\x{7840}\x{7841}\x{7843}' .
+'\x{7844}\x{7845}\x{7847}\x{7848}\x{7849}\x{784A}\x{784C}\x{784D}\x{784E}' .
+'\x{7850}\x{7851}\x{7852}\x{7853}\x{7854}\x{7855}\x{7856}\x{7857}\x{7858}' .
+'\x{7859}\x{785A}\x{785B}\x{785C}\x{785D}\x{785E}\x{785F}\x{7860}\x{7861}' .
+'\x{7862}\x{7863}\x{7864}\x{7865}\x{7866}\x{7867}\x{7868}\x{7869}\x{786A}' .
+'\x{786B}\x{786C}\x{786D}\x{786E}\x{786F}\x{7870}\x{7871}\x{7872}\x{7873}' .
+'\x{7874}\x{7875}\x{7877}\x{7878}\x{7879}\x{787A}\x{787B}\x{787C}\x{787D}' .
+'\x{787E}\x{787F}\x{7880}\x{7881}\x{7882}\x{7883}\x{7884}\x{7885}\x{7886}' .
+'\x{7887}\x{7889}\x{788A}\x{788B}\x{788C}\x{788D}\x{788E}\x{788F}\x{7890}' .
+'\x{7891}\x{7892}\x{7893}\x{7894}\x{7895}\x{7896}\x{7897}\x{7898}\x{7899}' .
+'\x{789A}\x{789B}\x{789C}\x{789D}\x{789E}\x{789F}\x{78A0}\x{78A1}\x{78A2}' .
+'\x{78A3}\x{78A4}\x{78A5}\x{78A6}\x{78A7}\x{78A8}\x{78A9}\x{78AA}\x{78AB}' .
+'\x{78AC}\x{78AD}\x{78AE}\x{78AF}\x{78B0}\x{78B1}\x{78B2}\x{78B3}\x{78B4}' .
+'\x{78B5}\x{78B6}\x{78B7}\x{78B8}\x{78B9}\x{78BA}\x{78BB}\x{78BC}\x{78BD}' .
+'\x{78BE}\x{78BF}\x{78C0}\x{78C1}\x{78C3}\x{78C4}\x{78C5}\x{78C6}\x{78C8}' .
+'\x{78C9}\x{78CA}\x{78CB}\x{78CC}\x{78CD}\x{78CE}\x{78CF}\x{78D0}\x{78D1}' .
+'\x{78D3}\x{78D4}\x{78D5}\x{78D6}\x{78D7}\x{78D8}\x{78D9}\x{78DA}\x{78DB}' .
+'\x{78DC}\x{78DD}\x{78DE}\x{78DF}\x{78E0}\x{78E1}\x{78E2}\x{78E3}\x{78E4}' .
+'\x{78E5}\x{78E6}\x{78E7}\x{78E8}\x{78E9}\x{78EA}\x{78EB}\x{78EC}\x{78ED}' .
+'\x{78EE}\x{78EF}\x{78F1}\x{78F2}\x{78F3}\x{78F4}\x{78F5}\x{78F6}\x{78F7}' .
+'\x{78F9}\x{78FA}\x{78FB}\x{78FC}\x{78FD}\x{78FE}\x{78FF}\x{7901}\x{7902}' .
+'\x{7903}\x{7904}\x{7905}\x{7906}\x{7907}\x{7909}\x{790A}\x{790B}\x{790C}' .
+'\x{790E}\x{790F}\x{7910}\x{7911}\x{7912}\x{7913}\x{7914}\x{7916}\x{7917}' .
+'\x{7918}\x{7919}\x{791A}\x{791B}\x{791C}\x{791D}\x{791E}\x{7921}\x{7922}' .
+'\x{7923}\x{7924}\x{7925}\x{7926}\x{7927}\x{7928}\x{7929}\x{792A}\x{792B}' .
+'\x{792C}\x{792D}\x{792E}\x{792F}\x{7930}\x{7931}\x{7933}\x{7934}\x{7935}' .
+'\x{7937}\x{7938}\x{7939}\x{793A}\x{793B}\x{793C}\x{793D}\x{793E}\x{793F}' .
+'\x{7940}\x{7941}\x{7942}\x{7943}\x{7944}\x{7945}\x{7946}\x{7947}\x{7948}' .
+'\x{7949}\x{794A}\x{794B}\x{794C}\x{794D}\x{794E}\x{794F}\x{7950}\x{7951}' .
+'\x{7952}\x{7953}\x{7954}\x{7955}\x{7956}\x{7957}\x{7958}\x{795A}\x{795B}' .
+'\x{795C}\x{795D}\x{795E}\x{795F}\x{7960}\x{7961}\x{7962}\x{7963}\x{7964}' .
+'\x{7965}\x{7966}\x{7967}\x{7968}\x{7969}\x{796A}\x{796B}\x{796D}\x{796F}' .
+'\x{7970}\x{7971}\x{7972}\x{7973}\x{7974}\x{7977}\x{7978}\x{7979}\x{797A}' .
+'\x{797B}\x{797C}\x{797D}\x{797E}\x{797F}\x{7980}\x{7981}\x{7982}\x{7983}' .
+'\x{7984}\x{7985}\x{7988}\x{7989}\x{798A}\x{798B}\x{798C}\x{798D}\x{798E}' .
+'\x{798F}\x{7990}\x{7991}\x{7992}\x{7993}\x{7994}\x{7995}\x{7996}\x{7997}' .
+'\x{7998}\x{7999}\x{799A}\x{799B}\x{799C}\x{799F}\x{79A0}\x{79A1}\x{79A2}' .
+'\x{79A3}\x{79A4}\x{79A5}\x{79A6}\x{79A7}\x{79A8}\x{79AA}\x{79AB}\x{79AC}' .
+'\x{79AD}\x{79AE}\x{79AF}\x{79B0}\x{79B1}\x{79B2}\x{79B3}\x{79B4}\x{79B5}' .
+'\x{79B6}\x{79B7}\x{79B8}\x{79B9}\x{79BA}\x{79BB}\x{79BD}\x{79BE}\x{79BF}' .
+'\x{79C0}\x{79C1}\x{79C2}\x{79C3}\x{79C5}\x{79C6}\x{79C8}\x{79C9}\x{79CA}' .
+'\x{79CB}\x{79CD}\x{79CE}\x{79CF}\x{79D0}\x{79D1}\x{79D2}\x{79D3}\x{79D5}' .
+'\x{79D6}\x{79D8}\x{79D9}\x{79DA}\x{79DB}\x{79DC}\x{79DD}\x{79DE}\x{79DF}' .
+'\x{79E0}\x{79E1}\x{79E2}\x{79E3}\x{79E4}\x{79E5}\x{79E6}\x{79E7}\x{79E8}' .
+'\x{79E9}\x{79EA}\x{79EB}\x{79EC}\x{79ED}\x{79EE}\x{79EF}\x{79F0}\x{79F1}' .
+'\x{79F2}\x{79F3}\x{79F4}\x{79F5}\x{79F6}\x{79F7}\x{79F8}\x{79F9}\x{79FA}' .
+'\x{79FB}\x{79FC}\x{79FD}\x{79FE}\x{79FF}\x{7A00}\x{7A02}\x{7A03}\x{7A04}' .
+'\x{7A05}\x{7A06}\x{7A08}\x{7A0A}\x{7A0B}\x{7A0C}\x{7A0D}\x{7A0E}\x{7A0F}' .
+'\x{7A10}\x{7A11}\x{7A12}\x{7A13}\x{7A14}\x{7A15}\x{7A16}\x{7A17}\x{7A18}' .
+'\x{7A19}\x{7A1A}\x{7A1B}\x{7A1C}\x{7A1D}\x{7A1E}\x{7A1F}\x{7A20}\x{7A21}' .
+'\x{7A22}\x{7A23}\x{7A24}\x{7A25}\x{7A26}\x{7A27}\x{7A28}\x{7A29}\x{7A2A}' .
+'\x{7A2B}\x{7A2D}\x{7A2E}\x{7A2F}\x{7A30}\x{7A31}\x{7A32}\x{7A33}\x{7A34}' .
+'\x{7A35}\x{7A37}\x{7A39}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
+'\x{7A41}\x{7A42}\x{7A43}\x{7A44}\x{7A45}\x{7A46}\x{7A47}\x{7A48}\x{7A49}' .
+'\x{7A4A}\x{7A4B}\x{7A4C}\x{7A4D}\x{7A4E}\x{7A50}\x{7A51}\x{7A52}\x{7A53}' .
+'\x{7A54}\x{7A55}\x{7A56}\x{7A57}\x{7A58}\x{7A59}\x{7A5A}\x{7A5B}\x{7A5C}' .
+'\x{7A5D}\x{7A5E}\x{7A5F}\x{7A60}\x{7A61}\x{7A62}\x{7A65}\x{7A66}\x{7A67}' .
+'\x{7A68}\x{7A69}\x{7A6B}\x{7A6C}\x{7A6D}\x{7A6E}\x{7A70}\x{7A71}\x{7A72}' .
+'\x{7A73}\x{7A74}\x{7A75}\x{7A76}\x{7A77}\x{7A78}\x{7A79}\x{7A7A}\x{7A7B}' .
+'\x{7A7C}\x{7A7D}\x{7A7E}\x{7A7F}\x{7A80}\x{7A81}\x{7A83}\x{7A84}\x{7A85}' .
+'\x{7A86}\x{7A87}\x{7A88}\x{7A89}\x{7A8A}\x{7A8B}\x{7A8C}\x{7A8D}\x{7A8E}' .
+'\x{7A8F}\x{7A90}\x{7A91}\x{7A92}\x{7A93}\x{7A94}\x{7A95}\x{7A96}\x{7A97}' .
+'\x{7A98}\x{7A99}\x{7A9C}\x{7A9D}\x{7A9E}\x{7A9F}\x{7AA0}\x{7AA1}\x{7AA2}' .
+'\x{7AA3}\x{7AA4}\x{7AA5}\x{7AA6}\x{7AA7}\x{7AA8}\x{7AA9}\x{7AAA}\x{7AAB}' .
+'\x{7AAC}\x{7AAD}\x{7AAE}\x{7AAF}\x{7AB0}\x{7AB1}\x{7AB2}\x{7AB3}\x{7AB4}' .
+'\x{7AB5}\x{7AB6}\x{7AB7}\x{7AB8}\x{7ABA}\x{7ABE}\x{7ABF}\x{7AC0}\x{7AC1}' .
+'\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}\x{7AC9}\x{7ACA}\x{7ACB}\x{7ACC}\x{7ACD}' .
+'\x{7ACE}\x{7ACF}\x{7AD0}\x{7AD1}\x{7AD2}\x{7AD3}\x{7AD4}\x{7AD5}\x{7AD6}' .
+'\x{7AD8}\x{7AD9}\x{7ADB}\x{7ADC}\x{7ADD}\x{7ADE}\x{7ADF}\x{7AE0}\x{7AE1}' .
+'\x{7AE2}\x{7AE3}\x{7AE4}\x{7AE5}\x{7AE6}\x{7AE7}\x{7AE8}\x{7AEA}\x{7AEB}' .
+'\x{7AEC}\x{7AED}\x{7AEE}\x{7AEF}\x{7AF0}\x{7AF1}\x{7AF2}\x{7AF3}\x{7AF4}' .
+'\x{7AF6}\x{7AF7}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFB}\x{7AFD}\x{7AFE}\x{7AFF}' .
+'\x{7B00}\x{7B01}\x{7B02}\x{7B03}\x{7B04}\x{7B05}\x{7B06}\x{7B08}\x{7B09}' .
+'\x{7B0A}\x{7B0B}\x{7B0C}\x{7B0D}\x{7B0E}\x{7B0F}\x{7B10}\x{7B11}\x{7B12}' .
+'\x{7B13}\x{7B14}\x{7B15}\x{7B16}\x{7B17}\x{7B18}\x{7B19}\x{7B1A}\x{7B1B}' .
+'\x{7B1C}\x{7B1D}\x{7B1E}\x{7B20}\x{7B21}\x{7B22}\x{7B23}\x{7B24}\x{7B25}' .
+'\x{7B26}\x{7B28}\x{7B2A}\x{7B2B}\x{7B2C}\x{7B2D}\x{7B2E}\x{7B2F}\x{7B30}' .
+'\x{7B31}\x{7B32}\x{7B33}\x{7B34}\x{7B35}\x{7B36}\x{7B37}\x{7B38}\x{7B39}' .
+'\x{7B3A}\x{7B3B}\x{7B3C}\x{7B3D}\x{7B3E}\x{7B3F}\x{7B40}\x{7B41}\x{7B43}' .
+'\x{7B44}\x{7B45}\x{7B46}\x{7B47}\x{7B48}\x{7B49}\x{7B4A}\x{7B4B}\x{7B4C}' .
+'\x{7B4D}\x{7B4E}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B55}\x{7B56}' .
+'\x{7B57}\x{7B58}\x{7B59}\x{7B5A}\x{7B5B}\x{7B5C}\x{7B5D}\x{7B5E}\x{7B5F}' .
+'\x{7B60}\x{7B61}\x{7B62}\x{7B63}\x{7B64}\x{7B65}\x{7B66}\x{7B67}\x{7B68}' .
+'\x{7B69}\x{7B6A}\x{7B6B}\x{7B6C}\x{7B6D}\x{7B6E}\x{7B70}\x{7B71}\x{7B72}' .
+'\x{7B73}\x{7B74}\x{7B75}\x{7B76}\x{7B77}\x{7B78}\x{7B79}\x{7B7B}\x{7B7C}' .
+'\x{7B7D}\x{7B7E}\x{7B7F}\x{7B80}\x{7B81}\x{7B82}\x{7B83}\x{7B84}\x{7B85}' .
+'\x{7B87}\x{7B88}\x{7B89}\x{7B8A}\x{7B8B}\x{7B8C}\x{7B8D}\x{7B8E}\x{7B8F}' .
+'\x{7B90}\x{7B91}\x{7B93}\x{7B94}\x{7B95}\x{7B96}\x{7B97}\x{7B98}\x{7B99}' .
+'\x{7B9A}\x{7B9B}\x{7B9C}\x{7B9D}\x{7B9E}\x{7B9F}\x{7BA0}\x{7BA1}\x{7BA2}' .
+'\x{7BA4}\x{7BA6}\x{7BA7}\x{7BA8}\x{7BA9}\x{7BAA}\x{7BAB}\x{7BAC}\x{7BAD}' .
+'\x{7BAE}\x{7BAF}\x{7BB1}\x{7BB3}\x{7BB4}\x{7BB5}\x{7BB6}\x{7BB7}\x{7BB8}' .
+'\x{7BB9}\x{7BBA}\x{7BBB}\x{7BBC}\x{7BBD}\x{7BBE}\x{7BBF}\x{7BC0}\x{7BC1}' .
+'\x{7BC2}\x{7BC3}\x{7BC4}\x{7BC5}\x{7BC6}\x{7BC7}\x{7BC8}\x{7BC9}\x{7BCA}' .
+'\x{7BCB}\x{7BCC}\x{7BCD}\x{7BCE}\x{7BD0}\x{7BD1}\x{7BD2}\x{7BD3}\x{7BD4}' .
+'\x{7BD5}\x{7BD6}\x{7BD7}\x{7BD8}\x{7BD9}\x{7BDA}\x{7BDB}\x{7BDC}\x{7BDD}' .
+'\x{7BDE}\x{7BDF}\x{7BE0}\x{7BE1}\x{7BE2}\x{7BE3}\x{7BE4}\x{7BE5}\x{7BE6}' .
+'\x{7BE7}\x{7BE8}\x{7BE9}\x{7BEA}\x{7BEB}\x{7BEC}\x{7BED}\x{7BEE}\x{7BEF}' .
+'\x{7BF0}\x{7BF1}\x{7BF2}\x{7BF3}\x{7BF4}\x{7BF5}\x{7BF6}\x{7BF7}\x{7BF8}' .
+'\x{7BF9}\x{7BFB}\x{7BFC}\x{7BFD}\x{7BFE}\x{7BFF}\x{7C00}\x{7C01}\x{7C02}' .
+'\x{7C03}\x{7C04}\x{7C05}\x{7C06}\x{7C07}\x{7C08}\x{7C09}\x{7C0A}\x{7C0B}' .
+'\x{7C0C}\x{7C0D}\x{7C0E}\x{7C0F}\x{7C10}\x{7C11}\x{7C12}\x{7C13}\x{7C15}' .
+'\x{7C16}\x{7C17}\x{7C18}\x{7C19}\x{7C1A}\x{7C1C}\x{7C1D}\x{7C1E}\x{7C1F}' .
+'\x{7C20}\x{7C21}\x{7C22}\x{7C23}\x{7C24}\x{7C25}\x{7C26}\x{7C27}\x{7C28}' .
+'\x{7C29}\x{7C2A}\x{7C2B}\x{7C2C}\x{7C2D}\x{7C30}\x{7C31}\x{7C32}\x{7C33}' .
+'\x{7C34}\x{7C35}\x{7C36}\x{7C37}\x{7C38}\x{7C39}\x{7C3A}\x{7C3B}\x{7C3C}' .
+'\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C41}\x{7C42}\x{7C43}\x{7C44}\x{7C45}' .
+'\x{7C46}\x{7C47}\x{7C48}\x{7C49}\x{7C4A}\x{7C4B}\x{7C4C}\x{7C4D}\x{7C4E}' .
+'\x{7C50}\x{7C51}\x{7C53}\x{7C54}\x{7C56}\x{7C57}\x{7C58}\x{7C59}\x{7C5A}' .
+'\x{7C5B}\x{7C5C}\x{7C5E}\x{7C5F}\x{7C60}\x{7C61}\x{7C62}\x{7C63}\x{7C64}' .
+'\x{7C65}\x{7C66}\x{7C67}\x{7C68}\x{7C69}\x{7C6A}\x{7C6B}\x{7C6C}\x{7C6D}' .
+'\x{7C6E}\x{7C6F}\x{7C70}\x{7C71}\x{7C72}\x{7C73}\x{7C74}\x{7C75}\x{7C77}' .
+'\x{7C78}\x{7C79}\x{7C7A}\x{7C7B}\x{7C7C}\x{7C7D}\x{7C7E}\x{7C7F}\x{7C80}' .
+'\x{7C81}\x{7C82}\x{7C84}\x{7C85}\x{7C86}\x{7C88}\x{7C89}\x{7C8A}\x{7C8B}' .
+'\x{7C8C}\x{7C8D}\x{7C8E}\x{7C8F}\x{7C90}\x{7C91}\x{7C92}\x{7C94}\x{7C95}' .
+'\x{7C96}\x{7C97}\x{7C98}\x{7C99}\x{7C9B}\x{7C9C}\x{7C9D}\x{7C9E}\x{7C9F}' .
+'\x{7CA0}\x{7CA1}\x{7CA2}\x{7CA3}\x{7CA4}\x{7CA5}\x{7CA6}\x{7CA7}\x{7CA8}' .
+'\x{7CA9}\x{7CAA}\x{7CAD}\x{7CAE}\x{7CAF}\x{7CB0}\x{7CB1}\x{7CB2}\x{7CB3}' .
+'\x{7CB4}\x{7CB5}\x{7CB6}\x{7CB7}\x{7CB8}\x{7CB9}\x{7CBA}\x{7CBB}\x{7CBC}' .
+'\x{7CBD}\x{7CBE}\x{7CBF}\x{7CC0}\x{7CC1}\x{7CC2}\x{7CC3}\x{7CC4}\x{7CC5}' .
+'\x{7CC6}\x{7CC7}\x{7CC8}\x{7CC9}\x{7CCA}\x{7CCB}\x{7CCC}\x{7CCD}\x{7CCE}' .
+'\x{7CCF}\x{7CD0}\x{7CD1}\x{7CD2}\x{7CD4}\x{7CD5}\x{7CD6}\x{7CD7}\x{7CD8}' .
+'\x{7CD9}\x{7CDC}\x{7CDD}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}' .
+'\x{7CE8}\x{7CE9}\x{7CEA}\x{7CEB}\x{7CEC}\x{7CED}\x{7CEE}\x{7CEF}\x{7CF0}' .
+'\x{7CF1}\x{7CF2}\x{7CF3}\x{7CF4}\x{7CF5}\x{7CF6}\x{7CF7}\x{7CF8}\x{7CF9}' .
+'\x{7CFA}\x{7CFB}\x{7CFD}\x{7CFE}\x{7D00}\x{7D01}\x{7D02}\x{7D03}\x{7D04}' .
+'\x{7D05}\x{7D06}\x{7D07}\x{7D08}\x{7D09}\x{7D0A}\x{7D0B}\x{7D0C}\x{7D0D}' .
+'\x{7D0E}\x{7D0F}\x{7D10}\x{7D11}\x{7D12}\x{7D13}\x{7D14}\x{7D15}\x{7D16}' .
+'\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D1D}\x{7D1E}\x{7D1F}' .
+'\x{7D20}\x{7D21}\x{7D22}\x{7D24}\x{7D25}\x{7D26}\x{7D27}\x{7D28}\x{7D29}' .
+'\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D31}\x{7D32}\x{7D33}\x{7D34}' .
+'\x{7D35}\x{7D36}\x{7D37}\x{7D38}\x{7D39}\x{7D3A}\x{7D3B}\x{7D3C}\x{7D3D}' .
+'\x{7D3E}\x{7D3F}\x{7D40}\x{7D41}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}' .
+'\x{7D47}\x{7D49}\x{7D4A}\x{7D4B}\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D51}' .
+'\x{7D52}\x{7D53}\x{7D54}\x{7D55}\x{7D56}\x{7D57}\x{7D58}\x{7D59}\x{7D5B}' .
+'\x{7D5C}\x{7D5D}\x{7D5E}\x{7D5F}\x{7D60}\x{7D61}\x{7D62}\x{7D63}\x{7D65}' .
+'\x{7D66}\x{7D67}\x{7D68}\x{7D69}\x{7D6A}\x{7D6B}\x{7D6C}\x{7D6D}\x{7D6E}' .
+'\x{7D6F}\x{7D70}\x{7D71}\x{7D72}\x{7D73}\x{7D74}\x{7D75}\x{7D76}\x{7D77}' .
+'\x{7D79}\x{7D7A}\x{7D7B}\x{7D7C}\x{7D7D}\x{7D7E}\x{7D7F}\x{7D80}\x{7D81}' .
+'\x{7D83}\x{7D84}\x{7D85}\x{7D86}\x{7D87}\x{7D88}\x{7D89}\x{7D8A}\x{7D8B}' .
+'\x{7D8C}\x{7D8D}\x{7D8E}\x{7D8F}\x{7D90}\x{7D91}\x{7D92}\x{7D93}\x{7D94}' .
+'\x{7D96}\x{7D97}\x{7D99}\x{7D9B}\x{7D9C}\x{7D9D}\x{7D9E}\x{7D9F}\x{7DA0}' .
+'\x{7DA1}\x{7DA2}\x{7DA3}\x{7DA5}\x{7DA6}\x{7DA7}\x{7DA9}\x{7DAA}\x{7DAB}' .
+'\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}\x{7DB1}\x{7DB2}\x{7DB3}\x{7DB4}' .
+'\x{7DB5}\x{7DB6}\x{7DB7}\x{7DB8}\x{7DB9}\x{7DBA}\x{7DBB}\x{7DBC}\x{7DBD}' .
+'\x{7DBE}\x{7DBF}\x{7DC0}\x{7DC1}\x{7DC2}\x{7DC3}\x{7DC4}\x{7DC5}\x{7DC6}' .
+'\x{7DC7}\x{7DC8}\x{7DC9}\x{7DCA}\x{7DCB}\x{7DCC}\x{7DCE}\x{7DCF}\x{7DD0}' .
+'\x{7DD1}\x{7DD2}\x{7DD4}\x{7DD5}\x{7DD6}\x{7DD7}\x{7DD8}\x{7DD9}\x{7DDA}' .
+'\x{7DDB}\x{7DDD}\x{7DDE}\x{7DDF}\x{7DE0}\x{7DE1}\x{7DE2}\x{7DE3}\x{7DE6}' .
+'\x{7DE7}\x{7DE8}\x{7DE9}\x{7DEA}\x{7DEC}\x{7DED}\x{7DEE}\x{7DEF}\x{7DF0}' .
+'\x{7DF1}\x{7DF2}\x{7DF3}\x{7DF4}\x{7DF5}\x{7DF6}\x{7DF7}\x{7DF8}\x{7DF9}' .
+'\x{7DFA}\x{7DFB}\x{7DFC}\x{7E00}\x{7E01}\x{7E02}\x{7E03}\x{7E04}\x{7E05}' .
+'\x{7E06}\x{7E07}\x{7E08}\x{7E09}\x{7E0A}\x{7E0B}\x{7E0C}\x{7E0D}\x{7E0E}' .
+'\x{7E0F}\x{7E10}\x{7E11}\x{7E12}\x{7E13}\x{7E14}\x{7E15}\x{7E16}\x{7E17}' .
+'\x{7E19}\x{7E1A}\x{7E1B}\x{7E1C}\x{7E1D}\x{7E1E}\x{7E1F}\x{7E20}\x{7E21}' .
+'\x{7E22}\x{7E23}\x{7E24}\x{7E25}\x{7E26}\x{7E27}\x{7E28}\x{7E29}\x{7E2A}' .
+'\x{7E2B}\x{7E2C}\x{7E2D}\x{7E2E}\x{7E2F}\x{7E30}\x{7E31}\x{7E32}\x{7E33}' .
+'\x{7E34}\x{7E35}\x{7E36}\x{7E37}\x{7E38}\x{7E39}\x{7E3A}\x{7E3B}\x{7E3C}' .
+'\x{7E3D}\x{7E3E}\x{7E3F}\x{7E40}\x{7E41}\x{7E42}\x{7E43}\x{7E44}\x{7E45}' .
+'\x{7E46}\x{7E47}\x{7E48}\x{7E49}\x{7E4C}\x{7E4D}\x{7E4E}\x{7E4F}\x{7E50}' .
+'\x{7E51}\x{7E52}\x{7E53}\x{7E54}\x{7E55}\x{7E56}\x{7E57}\x{7E58}\x{7E59}' .
+'\x{7E5A}\x{7E5C}\x{7E5D}\x{7E5E}\x{7E5F}\x{7E60}\x{7E61}\x{7E62}\x{7E63}' .
+'\x{7E65}\x{7E66}\x{7E67}\x{7E68}\x{7E69}\x{7E6A}\x{7E6B}\x{7E6C}\x{7E6D}' .
+'\x{7E6E}\x{7E6F}\x{7E70}\x{7E71}\x{7E72}\x{7E73}\x{7E74}\x{7E75}\x{7E76}' .
+'\x{7E77}\x{7E78}\x{7E79}\x{7E7A}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7E}\x{7E7F}' .
+'\x{7E80}\x{7E81}\x{7E82}\x{7E83}\x{7E84}\x{7E85}\x{7E86}\x{7E87}\x{7E88}' .
+'\x{7E89}\x{7E8A}\x{7E8B}\x{7E8C}\x{7E8D}\x{7E8E}\x{7E8F}\x{7E90}\x{7E91}' .
+'\x{7E92}\x{7E93}\x{7E94}\x{7E95}\x{7E96}\x{7E97}\x{7E98}\x{7E99}\x{7E9A}' .
+'\x{7E9B}\x{7E9C}\x{7E9E}\x{7E9F}\x{7EA0}\x{7EA1}\x{7EA2}\x{7EA3}\x{7EA4}' .
+'\x{7EA5}\x{7EA6}\x{7EA7}\x{7EA8}\x{7EA9}\x{7EAA}\x{7EAB}\x{7EAC}\x{7EAD}' .
+'\x{7EAE}\x{7EAF}\x{7EB0}\x{7EB1}\x{7EB2}\x{7EB3}\x{7EB4}\x{7EB5}\x{7EB6}' .
+'\x{7EB7}\x{7EB8}\x{7EB9}\x{7EBA}\x{7EBB}\x{7EBC}\x{7EBD}\x{7EBE}\x{7EBF}' .
+'\x{7EC0}\x{7EC1}\x{7EC2}\x{7EC3}\x{7EC4}\x{7EC5}\x{7EC6}\x{7EC7}\x{7EC8}' .
+'\x{7EC9}\x{7ECA}\x{7ECB}\x{7ECC}\x{7ECD}\x{7ECE}\x{7ECF}\x{7ED0}\x{7ED1}' .
+'\x{7ED2}\x{7ED3}\x{7ED4}\x{7ED5}\x{7ED6}\x{7ED7}\x{7ED8}\x{7ED9}\x{7EDA}' .
+'\x{7EDB}\x{7EDC}\x{7EDD}\x{7EDE}\x{7EDF}\x{7EE0}\x{7EE1}\x{7EE2}\x{7EE3}' .
+'\x{7EE4}\x{7EE5}\x{7EE6}\x{7EE7}\x{7EE8}\x{7EE9}\x{7EEA}\x{7EEB}\x{7EEC}' .
+'\x{7EED}\x{7EEE}\x{7EEF}\x{7EF0}\x{7EF1}\x{7EF2}\x{7EF3}\x{7EF4}\x{7EF5}' .
+'\x{7EF6}\x{7EF7}\x{7EF8}\x{7EF9}\x{7EFA}\x{7EFB}\x{7EFC}\x{7EFD}\x{7EFE}' .
+'\x{7EFF}\x{7F00}\x{7F01}\x{7F02}\x{7F03}\x{7F04}\x{7F05}\x{7F06}\x{7F07}' .
+'\x{7F08}\x{7F09}\x{7F0A}\x{7F0B}\x{7F0C}\x{7F0D}\x{7F0E}\x{7F0F}\x{7F10}' .
+'\x{7F11}\x{7F12}\x{7F13}\x{7F14}\x{7F15}\x{7F16}\x{7F17}\x{7F18}\x{7F19}' .
+'\x{7F1A}\x{7F1B}\x{7F1C}\x{7F1D}\x{7F1E}\x{7F1F}\x{7F20}\x{7F21}\x{7F22}' .
+'\x{7F23}\x{7F24}\x{7F25}\x{7F26}\x{7F27}\x{7F28}\x{7F29}\x{7F2A}\x{7F2B}' .
+'\x{7F2C}\x{7F2D}\x{7F2E}\x{7F2F}\x{7F30}\x{7F31}\x{7F32}\x{7F33}\x{7F34}' .
+'\x{7F35}\x{7F36}\x{7F37}\x{7F38}\x{7F39}\x{7F3A}\x{7F3D}\x{7F3E}\x{7F3F}' .
+'\x{7F40}\x{7F42}\x{7F43}\x{7F44}\x{7F45}\x{7F47}\x{7F48}\x{7F49}\x{7F4A}' .
+'\x{7F4B}\x{7F4C}\x{7F4D}\x{7F4E}\x{7F4F}\x{7F50}\x{7F51}\x{7F52}\x{7F53}' .
+'\x{7F54}\x{7F55}\x{7F56}\x{7F57}\x{7F58}\x{7F5A}\x{7F5B}\x{7F5C}\x{7F5D}' .
+'\x{7F5E}\x{7F5F}\x{7F60}\x{7F61}\x{7F62}\x{7F63}\x{7F64}\x{7F65}\x{7F66}' .
+'\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6C}\x{7F6D}\x{7F6E}\x{7F6F}' .
+'\x{7F70}\x{7F71}\x{7F72}\x{7F73}\x{7F74}\x{7F75}\x{7F76}\x{7F77}\x{7F78}' .
+'\x{7F79}\x{7F7A}\x{7F7B}\x{7F7C}\x{7F7D}\x{7F7E}\x{7F7F}\x{7F80}\x{7F81}' .
+'\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}\x{7F88}\x{7F89}\x{7F8A}\x{7F8B}' .
+'\x{7F8C}\x{7F8D}\x{7F8E}\x{7F8F}\x{7F91}\x{7F92}\x{7F93}\x{7F94}\x{7F95}' .
+'\x{7F96}\x{7F98}\x{7F9A}\x{7F9B}\x{7F9C}\x{7F9D}\x{7F9E}\x{7F9F}\x{7FA0}' .
+'\x{7FA1}\x{7FA2}\x{7FA3}\x{7FA4}\x{7FA5}\x{7FA6}\x{7FA7}\x{7FA8}\x{7FA9}' .
+'\x{7FAA}\x{7FAB}\x{7FAC}\x{7FAD}\x{7FAE}\x{7FAF}\x{7FB0}\x{7FB1}\x{7FB2}' .
+'\x{7FB3}\x{7FB5}\x{7FB6}\x{7FB7}\x{7FB8}\x{7FB9}\x{7FBA}\x{7FBB}\x{7FBC}' .
+'\x{7FBD}\x{7FBE}\x{7FBF}\x{7FC0}\x{7FC1}\x{7FC2}\x{7FC3}\x{7FC4}\x{7FC5}' .
+'\x{7FC6}\x{7FC7}\x{7FC8}\x{7FC9}\x{7FCA}\x{7FCB}\x{7FCC}\x{7FCD}\x{7FCE}' .
+'\x{7FCF}\x{7FD0}\x{7FD1}\x{7FD2}\x{7FD3}\x{7FD4}\x{7FD5}\x{7FD7}\x{7FD8}' .
+'\x{7FD9}\x{7FDA}\x{7FDB}\x{7FDC}\x{7FDE}\x{7FDF}\x{7FE0}\x{7FE1}\x{7FE2}' .
+'\x{7FE3}\x{7FE5}\x{7FE6}\x{7FE7}\x{7FE8}\x{7FE9}\x{7FEA}\x{7FEB}\x{7FEC}' .
+'\x{7FED}\x{7FEE}\x{7FEF}\x{7FF0}\x{7FF1}\x{7FF2}\x{7FF3}\x{7FF4}\x{7FF5}' .
+'\x{7FF6}\x{7FF7}\x{7FF8}\x{7FF9}\x{7FFA}\x{7FFB}\x{7FFC}\x{7FFD}\x{7FFE}' .
+'\x{7FFF}\x{8000}\x{8001}\x{8002}\x{8003}\x{8004}\x{8005}\x{8006}\x{8007}' .
+'\x{8008}\x{8009}\x{800B}\x{800C}\x{800D}\x{800E}\x{800F}\x{8010}\x{8011}' .
+'\x{8012}\x{8013}\x{8014}\x{8015}\x{8016}\x{8017}\x{8018}\x{8019}\x{801A}' .
+'\x{801B}\x{801C}\x{801D}\x{801E}\x{801F}\x{8020}\x{8021}\x{8022}\x{8023}' .
+'\x{8024}\x{8025}\x{8026}\x{8027}\x{8028}\x{8029}\x{802A}\x{802B}\x{802C}' .
+'\x{802D}\x{802E}\x{8030}\x{8031}\x{8032}\x{8033}\x{8034}\x{8035}\x{8036}' .
+'\x{8037}\x{8038}\x{8039}\x{803A}\x{803B}\x{803D}\x{803E}\x{803F}\x{8041}' .
+'\x{8042}\x{8043}\x{8044}\x{8045}\x{8046}\x{8047}\x{8048}\x{8049}\x{804A}' .
+'\x{804B}\x{804C}\x{804D}\x{804E}\x{804F}\x{8050}\x{8051}\x{8052}\x{8053}' .
+'\x{8054}\x{8055}\x{8056}\x{8057}\x{8058}\x{8059}\x{805A}\x{805B}\x{805C}' .
+'\x{805D}\x{805E}\x{805F}\x{8060}\x{8061}\x{8062}\x{8063}\x{8064}\x{8065}' .
+'\x{8067}\x{8068}\x{8069}\x{806A}\x{806B}\x{806C}\x{806D}\x{806E}\x{806F}' .
+'\x{8070}\x{8071}\x{8072}\x{8073}\x{8074}\x{8075}\x{8076}\x{8077}\x{8078}' .
+'\x{8079}\x{807A}\x{807B}\x{807C}\x{807D}\x{807E}\x{807F}\x{8080}\x{8081}' .
+'\x{8082}\x{8083}\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808A}\x{808B}' .
+'\x{808C}\x{808D}\x{808F}\x{8090}\x{8091}\x{8092}\x{8093}\x{8095}\x{8096}' .
+'\x{8097}\x{8098}\x{8099}\x{809A}\x{809B}\x{809C}\x{809D}\x{809E}\x{809F}' .
+'\x{80A0}\x{80A1}\x{80A2}\x{80A3}\x{80A4}\x{80A5}\x{80A9}\x{80AA}\x{80AB}' .
+'\x{80AD}\x{80AE}\x{80AF}\x{80B0}\x{80B1}\x{80B2}\x{80B4}\x{80B5}\x{80B6}' .
+'\x{80B7}\x{80B8}\x{80BA}\x{80BB}\x{80BC}\x{80BD}\x{80BE}\x{80BF}\x{80C0}' .
+'\x{80C1}\x{80C2}\x{80C3}\x{80C4}\x{80C5}\x{80C6}\x{80C7}\x{80C8}\x{80C9}' .
+'\x{80CA}\x{80CB}\x{80CC}\x{80CD}\x{80CE}\x{80CF}\x{80D0}\x{80D1}\x{80D2}' .
+'\x{80D3}\x{80D4}\x{80D5}\x{80D6}\x{80D7}\x{80D8}\x{80D9}\x{80DA}\x{80DB}' .
+'\x{80DC}\x{80DD}\x{80DE}\x{80E0}\x{80E1}\x{80E2}\x{80E3}\x{80E4}\x{80E5}' .
+'\x{80E6}\x{80E7}\x{80E8}\x{80E9}\x{80EA}\x{80EB}\x{80EC}\x{80ED}\x{80EE}' .
+'\x{80EF}\x{80F0}\x{80F1}\x{80F2}\x{80F3}\x{80F4}\x{80F5}\x{80F6}\x{80F7}' .
+'\x{80F8}\x{80F9}\x{80FA}\x{80FB}\x{80FC}\x{80FD}\x{80FE}\x{80FF}\x{8100}' .
+'\x{8101}\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{810B}' .
+'\x{810C}\x{810D}\x{810E}\x{810F}\x{8110}\x{8111}\x{8112}\x{8113}\x{8114}' .
+'\x{8115}\x{8116}\x{8118}\x{8119}\x{811A}\x{811B}\x{811C}\x{811D}\x{811E}' .
+'\x{811F}\x{8120}\x{8121}\x{8122}\x{8123}\x{8124}\x{8125}\x{8126}\x{8127}' .
+'\x{8128}\x{8129}\x{812A}\x{812B}\x{812C}\x{812D}\x{812E}\x{812F}\x{8130}' .
+'\x{8131}\x{8132}\x{8136}\x{8137}\x{8138}\x{8139}\x{813A}\x{813B}\x{813C}' .
+'\x{813D}\x{813E}\x{813F}\x{8140}\x{8141}\x{8142}\x{8143}\x{8144}\x{8145}' .
+'\x{8146}\x{8147}\x{8148}\x{8149}\x{814A}\x{814B}\x{814C}\x{814D}\x{814E}' .
+'\x{814F}\x{8150}\x{8151}\x{8152}\x{8153}\x{8154}\x{8155}\x{8156}\x{8157}' .
+'\x{8158}\x{8159}\x{815A}\x{815B}\x{815C}\x{815D}\x{815E}\x{8160}\x{8161}' .
+'\x{8162}\x{8163}\x{8164}\x{8165}\x{8166}\x{8167}\x{8168}\x{8169}\x{816A}' .
+'\x{816B}\x{816C}\x{816D}\x{816E}\x{816F}\x{8170}\x{8171}\x{8172}\x{8173}' .
+'\x{8174}\x{8175}\x{8176}\x{8177}\x{8178}\x{8179}\x{817A}\x{817B}\x{817C}' .
+'\x{817D}\x{817E}\x{817F}\x{8180}\x{8181}\x{8182}\x{8183}\x{8185}\x{8186}' .
+'\x{8187}\x{8188}\x{8189}\x{818A}\x{818B}\x{818C}\x{818D}\x{818E}\x{818F}' .
+'\x{8191}\x{8192}\x{8193}\x{8194}\x{8195}\x{8197}\x{8198}\x{8199}\x{819A}' .
+'\x{819B}\x{819C}\x{819D}\x{819E}\x{819F}\x{81A0}\x{81A1}\x{81A2}\x{81A3}' .
+'\x{81A4}\x{81A5}\x{81A6}\x{81A7}\x{81A8}\x{81A9}\x{81AA}\x{81AB}\x{81AC}' .
+'\x{81AD}\x{81AE}\x{81AF}\x{81B0}\x{81B1}\x{81B2}\x{81B3}\x{81B4}\x{81B5}' .
+'\x{81B6}\x{81B7}\x{81B8}\x{81B9}\x{81BA}\x{81BB}\x{81BC}\x{81BD}\x{81BE}' .
+'\x{81BF}\x{81C0}\x{81C1}\x{81C2}\x{81C3}\x{81C4}\x{81C5}\x{81C6}\x{81C7}' .
+'\x{81C8}\x{81C9}\x{81CA}\x{81CC}\x{81CD}\x{81CE}\x{81CF}\x{81D0}\x{81D1}' .
+'\x{81D2}\x{81D4}\x{81D5}\x{81D6}\x{81D7}\x{81D8}\x{81D9}\x{81DA}\x{81DB}' .
+'\x{81DC}\x{81DD}\x{81DE}\x{81DF}\x{81E0}\x{81E1}\x{81E2}\x{81E3}\x{81E5}' .
+'\x{81E6}\x{81E7}\x{81E8}\x{81E9}\x{81EA}\x{81EB}\x{81EC}\x{81ED}\x{81EE}' .
+'\x{81F1}\x{81F2}\x{81F3}\x{81F4}\x{81F5}\x{81F6}\x{81F7}\x{81F8}\x{81F9}' .
+'\x{81FA}\x{81FB}\x{81FC}\x{81FD}\x{81FE}\x{81FF}\x{8200}\x{8201}\x{8202}' .
+'\x{8203}\x{8204}\x{8205}\x{8206}\x{8207}\x{8208}\x{8209}\x{820A}\x{820B}' .
+'\x{820C}\x{820D}\x{820E}\x{820F}\x{8210}\x{8211}\x{8212}\x{8214}\x{8215}' .
+'\x{8216}\x{8218}\x{8219}\x{821A}\x{821B}\x{821C}\x{821D}\x{821E}\x{821F}' .
+'\x{8220}\x{8221}\x{8222}\x{8223}\x{8225}\x{8226}\x{8227}\x{8228}\x{8229}' .
+'\x{822A}\x{822B}\x{822C}\x{822D}\x{822F}\x{8230}\x{8231}\x{8232}\x{8233}' .
+'\x{8234}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{823A}\x{823B}\x{823C}' .
+'\x{823D}\x{823E}\x{823F}\x{8240}\x{8242}\x{8243}\x{8244}\x{8245}\x{8246}' .
+'\x{8247}\x{8248}\x{8249}\x{824A}\x{824B}\x{824C}\x{824D}\x{824E}\x{824F}' .
+'\x{8250}\x{8251}\x{8252}\x{8253}\x{8254}\x{8255}\x{8256}\x{8257}\x{8258}' .
+'\x{8259}\x{825A}\x{825B}\x{825C}\x{825D}\x{825E}\x{825F}\x{8260}\x{8261}' .
+'\x{8263}\x{8264}\x{8266}\x{8267}\x{8268}\x{8269}\x{826A}\x{826B}\x{826C}' .
+'\x{826D}\x{826E}\x{826F}\x{8270}\x{8271}\x{8272}\x{8273}\x{8274}\x{8275}' .
+'\x{8276}\x{8277}\x{8278}\x{8279}\x{827A}\x{827B}\x{827C}\x{827D}\x{827E}' .
+'\x{827F}\x{8280}\x{8281}\x{8282}\x{8283}\x{8284}\x{8285}\x{8286}\x{8287}' .
+'\x{8288}\x{8289}\x{828A}\x{828B}\x{828D}\x{828E}\x{828F}\x{8290}\x{8291}' .
+'\x{8292}\x{8293}\x{8294}\x{8295}\x{8296}\x{8297}\x{8298}\x{8299}\x{829A}' .
+'\x{829B}\x{829C}\x{829D}\x{829E}\x{829F}\x{82A0}\x{82A1}\x{82A2}\x{82A3}' .
+'\x{82A4}\x{82A5}\x{82A6}\x{82A7}\x{82A8}\x{82A9}\x{82AA}\x{82AB}\x{82AC}' .
+'\x{82AD}\x{82AE}\x{82AF}\x{82B0}\x{82B1}\x{82B3}\x{82B4}\x{82B5}\x{82B6}' .
+'\x{82B7}\x{82B8}\x{82B9}\x{82BA}\x{82BB}\x{82BC}\x{82BD}\x{82BE}\x{82BF}' .
+'\x{82C0}\x{82C1}\x{82C2}\x{82C3}\x{82C4}\x{82C5}\x{82C6}\x{82C7}\x{82C8}' .
+'\x{82C9}\x{82CA}\x{82CB}\x{82CC}\x{82CD}\x{82CE}\x{82CF}\x{82D0}\x{82D1}' .
+'\x{82D2}\x{82D3}\x{82D4}\x{82D5}\x{82D6}\x{82D7}\x{82D8}\x{82D9}\x{82DA}' .
+'\x{82DB}\x{82DC}\x{82DD}\x{82DE}\x{82DF}\x{82E0}\x{82E1}\x{82E3}\x{82E4}' .
+'\x{82E5}\x{82E6}\x{82E7}\x{82E8}\x{82E9}\x{82EA}\x{82EB}\x{82EC}\x{82ED}' .
+'\x{82EE}\x{82EF}\x{82F0}\x{82F1}\x{82F2}\x{82F3}\x{82F4}\x{82F5}\x{82F6}' .
+'\x{82F7}\x{82F8}\x{82F9}\x{82FA}\x{82FB}\x{82FD}\x{82FE}\x{82FF}\x{8300}' .
+'\x{8301}\x{8302}\x{8303}\x{8304}\x{8305}\x{8306}\x{8307}\x{8308}\x{8309}' .
+'\x{830B}\x{830C}\x{830D}\x{830E}\x{830F}\x{8311}\x{8312}\x{8313}\x{8314}' .
+'\x{8315}\x{8316}\x{8317}\x{8318}\x{8319}\x{831A}\x{831B}\x{831C}\x{831D}' .
+'\x{831E}\x{831F}\x{8320}\x{8321}\x{8322}\x{8323}\x{8324}\x{8325}\x{8326}' .
+'\x{8327}\x{8328}\x{8329}\x{832A}\x{832B}\x{832C}\x{832D}\x{832E}\x{832F}' .
+'\x{8331}\x{8332}\x{8333}\x{8334}\x{8335}\x{8336}\x{8337}\x{8338}\x{8339}' .
+'\x{833A}\x{833B}\x{833C}\x{833D}\x{833E}\x{833F}\x{8340}\x{8341}\x{8342}' .
+'\x{8343}\x{8344}\x{8345}\x{8346}\x{8347}\x{8348}\x{8349}\x{834A}\x{834B}' .
+'\x{834C}\x{834D}\x{834E}\x{834F}\x{8350}\x{8351}\x{8352}\x{8353}\x{8354}' .
+'\x{8356}\x{8357}\x{8358}\x{8359}\x{835A}\x{835B}\x{835C}\x{835D}\x{835E}' .
+'\x{835F}\x{8360}\x{8361}\x{8362}\x{8363}\x{8364}\x{8365}\x{8366}\x{8367}' .
+'\x{8368}\x{8369}\x{836A}\x{836B}\x{836C}\x{836D}\x{836E}\x{836F}\x{8370}' .
+'\x{8371}\x{8372}\x{8373}\x{8374}\x{8375}\x{8376}\x{8377}\x{8378}\x{8379}' .
+'\x{837A}\x{837B}\x{837C}\x{837D}\x{837E}\x{837F}\x{8380}\x{8381}\x{8382}' .
+'\x{8383}\x{8384}\x{8385}\x{8386}\x{8387}\x{8388}\x{8389}\x{838A}\x{838B}' .
+'\x{838C}\x{838D}\x{838E}\x{838F}\x{8390}\x{8391}\x{8392}\x{8393}\x{8394}' .
+'\x{8395}\x{8396}\x{8397}\x{8398}\x{8399}\x{839A}\x{839B}\x{839C}\x{839D}' .
+'\x{839E}\x{83A0}\x{83A1}\x{83A2}\x{83A3}\x{83A4}\x{83A5}\x{83A6}\x{83A7}' .
+'\x{83A8}\x{83A9}\x{83AA}\x{83AB}\x{83AC}\x{83AD}\x{83AE}\x{83AF}\x{83B0}' .
+'\x{83B1}\x{83B2}\x{83B3}\x{83B4}\x{83B6}\x{83B7}\x{83B8}\x{83B9}\x{83BA}' .
+'\x{83BB}\x{83BC}\x{83BD}\x{83BF}\x{83C0}\x{83C1}\x{83C2}\x{83C3}\x{83C4}' .
+'\x{83C5}\x{83C6}\x{83C7}\x{83C8}\x{83C9}\x{83CA}\x{83CB}\x{83CC}\x{83CD}' .
+'\x{83CE}\x{83CF}\x{83D0}\x{83D1}\x{83D2}\x{83D3}\x{83D4}\x{83D5}\x{83D6}' .
+'\x{83D7}\x{83D8}\x{83D9}\x{83DA}\x{83DB}\x{83DC}\x{83DD}\x{83DE}\x{83DF}' .
+'\x{83E0}\x{83E1}\x{83E2}\x{83E3}\x{83E4}\x{83E5}\x{83E7}\x{83E8}\x{83E9}' .
+'\x{83EA}\x{83EB}\x{83EC}\x{83EE}\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F3}' .
+'\x{83F4}\x{83F5}\x{83F6}\x{83F7}\x{83F8}\x{83F9}\x{83FA}\x{83FB}\x{83FC}' .
+'\x{83FD}\x{83FE}\x{83FF}\x{8400}\x{8401}\x{8402}\x{8403}\x{8404}\x{8405}' .
+'\x{8406}\x{8407}\x{8408}\x{8409}\x{840A}\x{840B}\x{840C}\x{840D}\x{840E}' .
+'\x{840F}\x{8410}\x{8411}\x{8412}\x{8413}\x{8415}\x{8418}\x{8419}\x{841A}' .
+'\x{841B}\x{841C}\x{841D}\x{841E}\x{8421}\x{8422}\x{8423}\x{8424}\x{8425}' .
+'\x{8426}\x{8427}\x{8428}\x{8429}\x{842A}\x{842B}\x{842C}\x{842D}\x{842E}' .
+'\x{842F}\x{8430}\x{8431}\x{8432}\x{8433}\x{8434}\x{8435}\x{8436}\x{8437}' .
+'\x{8438}\x{8439}\x{843A}\x{843B}\x{843C}\x{843D}\x{843E}\x{843F}\x{8440}' .
+'\x{8441}\x{8442}\x{8443}\x{8444}\x{8445}\x{8446}\x{8447}\x{8448}\x{8449}' .
+'\x{844A}\x{844B}\x{844C}\x{844D}\x{844E}\x{844F}\x{8450}\x{8451}\x{8452}' .
+'\x{8453}\x{8454}\x{8455}\x{8456}\x{8457}\x{8459}\x{845A}\x{845B}\x{845C}' .
+'\x{845D}\x{845E}\x{845F}\x{8460}\x{8461}\x{8462}\x{8463}\x{8464}\x{8465}' .
+'\x{8466}\x{8467}\x{8468}\x{8469}\x{846A}\x{846B}\x{846C}\x{846D}\x{846E}' .
+'\x{846F}\x{8470}\x{8471}\x{8472}\x{8473}\x{8474}\x{8475}\x{8476}\x{8477}' .
+'\x{8478}\x{8479}\x{847A}\x{847B}\x{847C}\x{847D}\x{847E}\x{847F}\x{8480}' .
+'\x{8481}\x{8482}\x{8484}\x{8485}\x{8486}\x{8487}\x{8488}\x{8489}\x{848A}' .
+'\x{848B}\x{848C}\x{848D}\x{848E}\x{848F}\x{8490}\x{8491}\x{8492}\x{8493}' .
+'\x{8494}\x{8496}\x{8497}\x{8498}\x{8499}\x{849A}\x{849B}\x{849C}\x{849D}' .
+'\x{849E}\x{849F}\x{84A0}\x{84A1}\x{84A2}\x{84A3}\x{84A4}\x{84A5}\x{84A6}' .
+'\x{84A7}\x{84A8}\x{84A9}\x{84AA}\x{84AB}\x{84AC}\x{84AE}\x{84AF}\x{84B0}' .
+'\x{84B1}\x{84B2}\x{84B3}\x{84B4}\x{84B5}\x{84B6}\x{84B8}\x{84B9}\x{84BA}' .
+'\x{84BB}\x{84BC}\x{84BD}\x{84BE}\x{84BF}\x{84C0}\x{84C1}\x{84C2}\x{84C4}' .
+'\x{84C5}\x{84C6}\x{84C7}\x{84C8}\x{84C9}\x{84CA}\x{84CB}\x{84CC}\x{84CD}' .
+'\x{84CE}\x{84CF}\x{84D0}\x{84D1}\x{84D2}\x{84D3}\x{84D4}\x{84D5}\x{84D6}' .
+'\x{84D7}\x{84D8}\x{84D9}\x{84DB}\x{84DC}\x{84DD}\x{84DE}\x{84DF}\x{84E0}' .
+'\x{84E1}\x{84E2}\x{84E3}\x{84E4}\x{84E5}\x{84E6}\x{84E7}\x{84E8}\x{84E9}' .
+'\x{84EA}\x{84EB}\x{84EC}\x{84EE}\x{84EF}\x{84F0}\x{84F1}\x{84F2}\x{84F3}' .
+'\x{84F4}\x{84F5}\x{84F6}\x{84F7}\x{84F8}\x{84F9}\x{84FA}\x{84FB}\x{84FC}' .
+'\x{84FD}\x{84FE}\x{84FF}\x{8500}\x{8501}\x{8502}\x{8503}\x{8504}\x{8506}' .
+'\x{8507}\x{8508}\x{8509}\x{850A}\x{850B}\x{850C}\x{850D}\x{850E}\x{850F}' .
+'\x{8511}\x{8512}\x{8513}\x{8514}\x{8515}\x{8516}\x{8517}\x{8518}\x{8519}' .
+'\x{851A}\x{851B}\x{851C}\x{851D}\x{851E}\x{851F}\x{8520}\x{8521}\x{8522}' .
+'\x{8523}\x{8524}\x{8525}\x{8526}\x{8527}\x{8528}\x{8529}\x{852A}\x{852B}' .
+'\x{852C}\x{852D}\x{852E}\x{852F}\x{8530}\x{8531}\x{8534}\x{8535}\x{8536}' .
+'\x{8537}\x{8538}\x{8539}\x{853A}\x{853B}\x{853C}\x{853D}\x{853E}\x{853F}' .
+'\x{8540}\x{8541}\x{8542}\x{8543}\x{8544}\x{8545}\x{8546}\x{8547}\x{8548}' .
+'\x{8549}\x{854A}\x{854B}\x{854D}\x{854E}\x{854F}\x{8551}\x{8552}\x{8553}' .
+'\x{8554}\x{8555}\x{8556}\x{8557}\x{8558}\x{8559}\x{855A}\x{855B}\x{855C}' .
+'\x{855D}\x{855E}\x{855F}\x{8560}\x{8561}\x{8562}\x{8563}\x{8564}\x{8565}' .
+'\x{8566}\x{8567}\x{8568}\x{8569}\x{856A}\x{856B}\x{856C}\x{856D}\x{856E}' .
+'\x{856F}\x{8570}\x{8571}\x{8572}\x{8573}\x{8574}\x{8575}\x{8576}\x{8577}' .
+'\x{8578}\x{8579}\x{857A}\x{857B}\x{857C}\x{857D}\x{857E}\x{8580}\x{8581}' .
+'\x{8582}\x{8583}\x{8584}\x{8585}\x{8586}\x{8587}\x{8588}\x{8589}\x{858A}' .
+'\x{858B}\x{858C}\x{858D}\x{858E}\x{858F}\x{8590}\x{8591}\x{8592}\x{8594}' .
+'\x{8595}\x{8596}\x{8598}\x{8599}\x{859A}\x{859B}\x{859C}\x{859D}\x{859E}' .
+'\x{859F}\x{85A0}\x{85A1}\x{85A2}\x{85A3}\x{85A4}\x{85A5}\x{85A6}\x{85A7}' .
+'\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AD}\x{85AE}\x{85AF}\x{85B0}' .
+'\x{85B1}\x{85B3}\x{85B4}\x{85B5}\x{85B6}\x{85B7}\x{85B8}\x{85B9}\x{85BA}' .
+'\x{85BC}\x{85BD}\x{85BE}\x{85BF}\x{85C0}\x{85C1}\x{85C2}\x{85C3}\x{85C4}' .
+'\x{85C5}\x{85C6}\x{85C7}\x{85C8}\x{85C9}\x{85CA}\x{85CB}\x{85CD}\x{85CE}' .
+'\x{85CF}\x{85D0}\x{85D1}\x{85D2}\x{85D3}\x{85D4}\x{85D5}\x{85D6}\x{85D7}' .
+'\x{85D8}\x{85D9}\x{85DA}\x{85DB}\x{85DC}\x{85DD}\x{85DE}\x{85DF}\x{85E0}' .
+'\x{85E1}\x{85E2}\x{85E3}\x{85E4}\x{85E5}\x{85E6}\x{85E7}\x{85E8}\x{85E9}' .
+'\x{85EA}\x{85EB}\x{85EC}\x{85ED}\x{85EF}\x{85F0}\x{85F1}\x{85F2}\x{85F4}' .
+'\x{85F5}\x{85F6}\x{85F7}\x{85F8}\x{85F9}\x{85FA}\x{85FB}\x{85FD}\x{85FE}' .
+'\x{85FF}\x{8600}\x{8601}\x{8602}\x{8604}\x{8605}\x{8606}\x{8607}\x{8608}' .
+'\x{8609}\x{860A}\x{860B}\x{860C}\x{860F}\x{8611}\x{8612}\x{8613}\x{8614}' .
+'\x{8616}\x{8617}\x{8618}\x{8619}\x{861A}\x{861B}\x{861C}\x{861E}\x{861F}' .
+'\x{8620}\x{8621}\x{8622}\x{8623}\x{8624}\x{8625}\x{8626}\x{8627}\x{8628}' .
+'\x{8629}\x{862A}\x{862B}\x{862C}\x{862D}\x{862E}\x{862F}\x{8630}\x{8631}' .
+'\x{8632}\x{8633}\x{8634}\x{8635}\x{8636}\x{8638}\x{8639}\x{863A}\x{863B}' .
+'\x{863C}\x{863D}\x{863E}\x{863F}\x{8640}\x{8641}\x{8642}\x{8643}\x{8644}' .
+'\x{8645}\x{8646}\x{8647}\x{8648}\x{8649}\x{864A}\x{864B}\x{864C}\x{864D}' .
+'\x{864E}\x{864F}\x{8650}\x{8651}\x{8652}\x{8653}\x{8654}\x{8655}\x{8656}' .
+'\x{8658}\x{8659}\x{865A}\x{865B}\x{865C}\x{865D}\x{865E}\x{865F}\x{8660}' .
+'\x{8661}\x{8662}\x{8663}\x{8664}\x{8665}\x{8666}\x{8667}\x{8668}\x{8669}' .
+'\x{866A}\x{866B}\x{866C}\x{866D}\x{866E}\x{866F}\x{8670}\x{8671}\x{8672}' .
+'\x{8673}\x{8674}\x{8676}\x{8677}\x{8678}\x{8679}\x{867A}\x{867B}\x{867C}' .
+'\x{867D}\x{867E}\x{867F}\x{8680}\x{8681}\x{8682}\x{8683}\x{8684}\x{8685}' .
+'\x{8686}\x{8687}\x{8688}\x{868A}\x{868B}\x{868C}\x{868D}\x{868E}\x{868F}' .
+'\x{8690}\x{8691}\x{8693}\x{8694}\x{8695}\x{8696}\x{8697}\x{8698}\x{8699}' .
+'\x{869A}\x{869B}\x{869C}\x{869D}\x{869E}\x{869F}\x{86A1}\x{86A2}\x{86A3}' .
+'\x{86A4}\x{86A5}\x{86A7}\x{86A8}\x{86A9}\x{86AA}\x{86AB}\x{86AC}\x{86AD}' .
+'\x{86AE}\x{86AF}\x{86B0}\x{86B1}\x{86B2}\x{86B3}\x{86B4}\x{86B5}\x{86B6}' .
+'\x{86B7}\x{86B8}\x{86B9}\x{86BA}\x{86BB}\x{86BC}\x{86BD}\x{86BE}\x{86BF}' .
+'\x{86C0}\x{86C1}\x{86C2}\x{86C3}\x{86C4}\x{86C5}\x{86C6}\x{86C7}\x{86C8}' .
+'\x{86C9}\x{86CA}\x{86CB}\x{86CC}\x{86CE}\x{86CF}\x{86D0}\x{86D1}\x{86D2}' .
+'\x{86D3}\x{86D4}\x{86D6}\x{86D7}\x{86D8}\x{86D9}\x{86DA}\x{86DB}\x{86DC}' .
+'\x{86DD}\x{86DE}\x{86DF}\x{86E1}\x{86E2}\x{86E3}\x{86E4}\x{86E5}\x{86E6}' .
+'\x{86E8}\x{86E9}\x{86EA}\x{86EB}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F0}' .
+'\x{86F1}\x{86F2}\x{86F3}\x{86F4}\x{86F5}\x{86F6}\x{86F7}\x{86F8}\x{86F9}' .
+'\x{86FA}\x{86FB}\x{86FC}\x{86FE}\x{86FF}\x{8700}\x{8701}\x{8702}\x{8703}' .
+'\x{8704}\x{8705}\x{8706}\x{8707}\x{8708}\x{8709}\x{870A}\x{870B}\x{870C}' .
+'\x{870D}\x{870E}\x{870F}\x{8710}\x{8711}\x{8712}\x{8713}\x{8714}\x{8715}' .
+'\x{8716}\x{8717}\x{8718}\x{8719}\x{871A}\x{871B}\x{871C}\x{871E}\x{871F}' .
+'\x{8720}\x{8721}\x{8722}\x{8723}\x{8724}\x{8725}\x{8726}\x{8727}\x{8728}' .
+'\x{8729}\x{872A}\x{872B}\x{872C}\x{872D}\x{872E}\x{8730}\x{8731}\x{8732}' .
+'\x{8733}\x{8734}\x{8735}\x{8736}\x{8737}\x{8738}\x{8739}\x{873A}\x{873B}' .
+'\x{873C}\x{873E}\x{873F}\x{8740}\x{8741}\x{8742}\x{8743}\x{8744}\x{8746}' .
+'\x{8747}\x{8748}\x{8749}\x{874A}\x{874C}\x{874D}\x{874E}\x{874F}\x{8750}' .
+'\x{8751}\x{8752}\x{8753}\x{8754}\x{8755}\x{8756}\x{8757}\x{8758}\x{8759}' .
+'\x{875A}\x{875B}\x{875C}\x{875D}\x{875E}\x{875F}\x{8760}\x{8761}\x{8762}' .
+'\x{8763}\x{8764}\x{8765}\x{8766}\x{8767}\x{8768}\x{8769}\x{876A}\x{876B}' .
+'\x{876C}\x{876D}\x{876E}\x{876F}\x{8770}\x{8772}\x{8773}\x{8774}\x{8775}' .
+'\x{8776}\x{8777}\x{8778}\x{8779}\x{877A}\x{877B}\x{877C}\x{877D}\x{877E}' .
+'\x{8780}\x{8781}\x{8782}\x{8783}\x{8784}\x{8785}\x{8786}\x{8787}\x{8788}' .
+'\x{8789}\x{878A}\x{878B}\x{878C}\x{878D}\x{878F}\x{8790}\x{8791}\x{8792}' .
+'\x{8793}\x{8794}\x{8795}\x{8796}\x{8797}\x{8798}\x{879A}\x{879B}\x{879C}' .
+'\x{879D}\x{879E}\x{879F}\x{87A0}\x{87A1}\x{87A2}\x{87A3}\x{87A4}\x{87A5}' .
+'\x{87A6}\x{87A7}\x{87A8}\x{87A9}\x{87AA}\x{87AB}\x{87AC}\x{87AD}\x{87AE}' .
+'\x{87AF}\x{87B0}\x{87B1}\x{87B2}\x{87B3}\x{87B4}\x{87B5}\x{87B6}\x{87B7}' .
+'\x{87B8}\x{87B9}\x{87BA}\x{87BB}\x{87BC}\x{87BD}\x{87BE}\x{87BF}\x{87C0}' .
+'\x{87C1}\x{87C2}\x{87C3}\x{87C4}\x{87C5}\x{87C6}\x{87C7}\x{87C8}\x{87C9}' .
+'\x{87CA}\x{87CB}\x{87CC}\x{87CD}\x{87CE}\x{87CF}\x{87D0}\x{87D1}\x{87D2}' .
+'\x{87D3}\x{87D4}\x{87D5}\x{87D6}\x{87D7}\x{87D8}\x{87D9}\x{87DB}\x{87DC}' .
+'\x{87DD}\x{87DE}\x{87DF}\x{87E0}\x{87E1}\x{87E2}\x{87E3}\x{87E4}\x{87E5}' .
+'\x{87E6}\x{87E7}\x{87E8}\x{87E9}\x{87EA}\x{87EB}\x{87EC}\x{87ED}\x{87EE}' .
+'\x{87EF}\x{87F1}\x{87F2}\x{87F3}\x{87F4}\x{87F5}\x{87F6}\x{87F7}\x{87F8}' .
+'\x{87F9}\x{87FA}\x{87FB}\x{87FC}\x{87FD}\x{87FE}\x{87FF}\x{8800}\x{8801}' .
+'\x{8802}\x{8803}\x{8804}\x{8805}\x{8806}\x{8808}\x{8809}\x{880A}\x{880B}' .
+'\x{880C}\x{880D}\x{880E}\x{880F}\x{8810}\x{8811}\x{8813}\x{8814}\x{8815}' .
+'\x{8816}\x{8817}\x{8818}\x{8819}\x{881A}\x{881B}\x{881C}\x{881D}\x{881E}' .
+'\x{881F}\x{8820}\x{8821}\x{8822}\x{8823}\x{8824}\x{8825}\x{8826}\x{8827}' .
+'\x{8828}\x{8829}\x{882A}\x{882B}\x{882C}\x{882E}\x{882F}\x{8830}\x{8831}' .
+'\x{8832}\x{8833}\x{8834}\x{8835}\x{8836}\x{8837}\x{8838}\x{8839}\x{883B}' .
+'\x{883C}\x{883D}\x{883E}\x{883F}\x{8840}\x{8841}\x{8842}\x{8843}\x{8844}' .
+'\x{8845}\x{8846}\x{8848}\x{8849}\x{884A}\x{884B}\x{884C}\x{884D}\x{884E}' .
+'\x{884F}\x{8850}\x{8851}\x{8852}\x{8853}\x{8854}\x{8855}\x{8856}\x{8857}' .
+'\x{8859}\x{885A}\x{885B}\x{885D}\x{885E}\x{8860}\x{8861}\x{8862}\x{8863}' .
+'\x{8864}\x{8865}\x{8866}\x{8867}\x{8868}\x{8869}\x{886A}\x{886B}\x{886C}' .
+'\x{886D}\x{886E}\x{886F}\x{8870}\x{8871}\x{8872}\x{8873}\x{8874}\x{8875}' .
+'\x{8876}\x{8877}\x{8878}\x{8879}\x{887B}\x{887C}\x{887D}\x{887E}\x{887F}' .
+'\x{8880}\x{8881}\x{8882}\x{8883}\x{8884}\x{8885}\x{8886}\x{8887}\x{8888}' .
+'\x{8889}\x{888A}\x{888B}\x{888C}\x{888D}\x{888E}\x{888F}\x{8890}\x{8891}' .
+'\x{8892}\x{8893}\x{8894}\x{8895}\x{8896}\x{8897}\x{8898}\x{8899}\x{889A}' .
+'\x{889B}\x{889C}\x{889D}\x{889E}\x{889F}\x{88A0}\x{88A1}\x{88A2}\x{88A3}' .
+'\x{88A4}\x{88A5}\x{88A6}\x{88A7}\x{88A8}\x{88A9}\x{88AA}\x{88AB}\x{88AC}' .
+'\x{88AD}\x{88AE}\x{88AF}\x{88B0}\x{88B1}\x{88B2}\x{88B3}\x{88B4}\x{88B6}' .
+'\x{88B7}\x{88B8}\x{88B9}\x{88BA}\x{88BB}\x{88BC}\x{88BD}\x{88BE}\x{88BF}' .
+'\x{88C0}\x{88C1}\x{88C2}\x{88C3}\x{88C4}\x{88C5}\x{88C6}\x{88C7}\x{88C8}' .
+'\x{88C9}\x{88CA}\x{88CB}\x{88CC}\x{88CD}\x{88CE}\x{88CF}\x{88D0}\x{88D1}' .
+'\x{88D2}\x{88D3}\x{88D4}\x{88D5}\x{88D6}\x{88D7}\x{88D8}\x{88D9}\x{88DA}' .
+'\x{88DB}\x{88DC}\x{88DD}\x{88DE}\x{88DF}\x{88E0}\x{88E1}\x{88E2}\x{88E3}' .
+'\x{88E4}\x{88E5}\x{88E7}\x{88E8}\x{88EA}\x{88EB}\x{88EC}\x{88EE}\x{88EF}' .
+'\x{88F0}\x{88F1}\x{88F2}\x{88F3}\x{88F4}\x{88F5}\x{88F6}\x{88F7}\x{88F8}' .
+'\x{88F9}\x{88FA}\x{88FB}\x{88FC}\x{88FD}\x{88FE}\x{88FF}\x{8900}\x{8901}' .
+'\x{8902}\x{8904}\x{8905}\x{8906}\x{8907}\x{8908}\x{8909}\x{890A}\x{890B}' .
+'\x{890C}\x{890D}\x{890E}\x{8910}\x{8911}\x{8912}\x{8913}\x{8914}\x{8915}' .
+'\x{8916}\x{8917}\x{8918}\x{8919}\x{891A}\x{891B}\x{891C}\x{891D}\x{891E}' .
+'\x{891F}\x{8920}\x{8921}\x{8922}\x{8923}\x{8925}\x{8926}\x{8927}\x{8928}' .
+'\x{8929}\x{892A}\x{892B}\x{892C}\x{892D}\x{892E}\x{892F}\x{8930}\x{8931}' .
+'\x{8932}\x{8933}\x{8934}\x{8935}\x{8936}\x{8937}\x{8938}\x{8939}\x{893A}' .
+'\x{893B}\x{893C}\x{893D}\x{893E}\x{893F}\x{8940}\x{8941}\x{8942}\x{8943}' .
+'\x{8944}\x{8945}\x{8946}\x{8947}\x{8948}\x{8949}\x{894A}\x{894B}\x{894C}' .
+'\x{894E}\x{894F}\x{8950}\x{8951}\x{8952}\x{8953}\x{8954}\x{8955}\x{8956}' .
+'\x{8957}\x{8958}\x{8959}\x{895A}\x{895B}\x{895C}\x{895D}\x{895E}\x{895F}' .
+'\x{8960}\x{8961}\x{8962}\x{8963}\x{8964}\x{8966}\x{8967}\x{8968}\x{8969}' .
+'\x{896A}\x{896B}\x{896C}\x{896D}\x{896E}\x{896F}\x{8970}\x{8971}\x{8972}' .
+'\x{8973}\x{8974}\x{8976}\x{8977}\x{8978}\x{8979}\x{897A}\x{897B}\x{897C}' .
+'\x{897E}\x{897F}\x{8980}\x{8981}\x{8982}\x{8983}\x{8984}\x{8985}\x{8986}' .
+'\x{8987}\x{8988}\x{8989}\x{898A}\x{898B}\x{898C}\x{898E}\x{898F}\x{8991}' .
+'\x{8992}\x{8993}\x{8995}\x{8996}\x{8997}\x{8998}\x{899A}\x{899B}\x{899C}' .
+'\x{899D}\x{899E}\x{899F}\x{89A0}\x{89A1}\x{89A2}\x{89A3}\x{89A4}\x{89A5}' .
+'\x{89A6}\x{89A7}\x{89A8}\x{89AA}\x{89AB}\x{89AC}\x{89AD}\x{89AE}\x{89AF}' .
+'\x{89B1}\x{89B2}\x{89B3}\x{89B5}\x{89B6}\x{89B7}\x{89B8}\x{89B9}\x{89BA}' .
+'\x{89BD}\x{89BE}\x{89BF}\x{89C0}\x{89C1}\x{89C2}\x{89C3}\x{89C4}\x{89C5}' .
+'\x{89C6}\x{89C7}\x{89C8}\x{89C9}\x{89CA}\x{89CB}\x{89CC}\x{89CD}\x{89CE}' .
+'\x{89CF}\x{89D0}\x{89D1}\x{89D2}\x{89D3}\x{89D4}\x{89D5}\x{89D6}\x{89D7}' .
+'\x{89D8}\x{89D9}\x{89DA}\x{89DB}\x{89DC}\x{89DD}\x{89DE}\x{89DF}\x{89E0}' .
+'\x{89E1}\x{89E2}\x{89E3}\x{89E4}\x{89E5}\x{89E6}\x{89E7}\x{89E8}\x{89E9}' .
+'\x{89EA}\x{89EB}\x{89EC}\x{89ED}\x{89EF}\x{89F0}\x{89F1}\x{89F2}\x{89F3}' .
+'\x{89F4}\x{89F6}\x{89F7}\x{89F8}\x{89FA}\x{89FB}\x{89FC}\x{89FE}\x{89FF}' .
+'\x{8A00}\x{8A01}\x{8A02}\x{8A03}\x{8A04}\x{8A07}\x{8A08}\x{8A09}\x{8A0A}' .
+'\x{8A0B}\x{8A0C}\x{8A0D}\x{8A0E}\x{8A0F}\x{8A10}\x{8A11}\x{8A12}\x{8A13}' .
+'\x{8A15}\x{8A16}\x{8A17}\x{8A18}\x{8A1A}\x{8A1B}\x{8A1C}\x{8A1D}\x{8A1E}' .
+'\x{8A1F}\x{8A22}\x{8A23}\x{8A24}\x{8A25}\x{8A26}\x{8A27}\x{8A28}\x{8A29}' .
+'\x{8A2A}\x{8A2C}\x{8A2D}\x{8A2E}\x{8A2F}\x{8A30}\x{8A31}\x{8A32}\x{8A34}' .
+'\x{8A35}\x{8A36}\x{8A37}\x{8A38}\x{8A39}\x{8A3A}\x{8A3B}\x{8A3C}\x{8A3E}' .
+'\x{8A3F}\x{8A40}\x{8A41}\x{8A42}\x{8A43}\x{8A44}\x{8A45}\x{8A46}\x{8A47}' .
+'\x{8A48}\x{8A49}\x{8A4A}\x{8A4C}\x{8A4D}\x{8A4E}\x{8A4F}\x{8A50}\x{8A51}' .
+'\x{8A52}\x{8A53}\x{8A54}\x{8A55}\x{8A56}\x{8A57}\x{8A58}\x{8A59}\x{8A5A}' .
+'\x{8A5B}\x{8A5C}\x{8A5D}\x{8A5E}\x{8A5F}\x{8A60}\x{8A61}\x{8A62}\x{8A63}' .
+'\x{8A65}\x{8A66}\x{8A67}\x{8A68}\x{8A69}\x{8A6A}\x{8A6B}\x{8A6C}\x{8A6D}' .
+'\x{8A6E}\x{8A6F}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A74}\x{8A75}\x{8A76}' .
+'\x{8A77}\x{8A79}\x{8A7A}\x{8A7B}\x{8A7C}\x{8A7E}\x{8A7F}\x{8A80}\x{8A81}' .
+'\x{8A82}\x{8A83}\x{8A84}\x{8A85}\x{8A86}\x{8A87}\x{8A89}\x{8A8A}\x{8A8B}' .
+'\x{8A8C}\x{8A8D}\x{8A8E}\x{8A8F}\x{8A90}\x{8A91}\x{8A92}\x{8A93}\x{8A94}' .
+'\x{8A95}\x{8A96}\x{8A97}\x{8A98}\x{8A99}\x{8A9A}\x{8A9B}\x{8A9C}\x{8A9D}' .
+'\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA2}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA7}' .
+'\x{8AA8}\x{8AA9}\x{8AAA}\x{8AAB}\x{8AAC}\x{8AAE}\x{8AB0}\x{8AB1}\x{8AB2}' .
+'\x{8AB3}\x{8AB4}\x{8AB5}\x{8AB6}\x{8AB8}\x{8AB9}\x{8ABA}\x{8ABB}\x{8ABC}' .
+'\x{8ABD}\x{8ABE}\x{8ABF}\x{8AC0}\x{8AC1}\x{8AC2}\x{8AC3}\x{8AC4}\x{8AC5}' .
+'\x{8AC6}\x{8AC7}\x{8AC8}\x{8AC9}\x{8ACA}\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACE}' .
+'\x{8ACF}\x{8AD1}\x{8AD2}\x{8AD3}\x{8AD4}\x{8AD5}\x{8AD6}\x{8AD7}\x{8AD8}' .
+'\x{8AD9}\x{8ADA}\x{8ADB}\x{8ADC}\x{8ADD}\x{8ADE}\x{8ADF}\x{8AE0}\x{8AE1}' .
+'\x{8AE2}\x{8AE3}\x{8AE4}\x{8AE5}\x{8AE6}\x{8AE7}\x{8AE8}\x{8AE9}\x{8AEA}' .
+'\x{8AEB}\x{8AED}\x{8AEE}\x{8AEF}\x{8AF0}\x{8AF1}\x{8AF2}\x{8AF3}\x{8AF4}' .
+'\x{8AF5}\x{8AF6}\x{8AF7}\x{8AF8}\x{8AF9}\x{8AFA}\x{8AFB}\x{8AFC}\x{8AFD}' .
+'\x{8AFE}\x{8AFF}\x{8B00}\x{8B01}\x{8B02}\x{8B03}\x{8B04}\x{8B05}\x{8B06}' .
+'\x{8B07}\x{8B08}\x{8B09}\x{8B0A}\x{8B0B}\x{8B0D}\x{8B0E}\x{8B0F}\x{8B10}' .
+'\x{8B11}\x{8B12}\x{8B13}\x{8B14}\x{8B15}\x{8B16}\x{8B17}\x{8B18}\x{8B19}' .
+'\x{8B1A}\x{8B1B}\x{8B1C}\x{8B1D}\x{8B1E}\x{8B1F}\x{8B20}\x{8B21}\x{8B22}' .
+'\x{8B23}\x{8B24}\x{8B25}\x{8B26}\x{8B27}\x{8B28}\x{8B2A}\x{8B2B}\x{8B2C}' .
+'\x{8B2D}\x{8B2E}\x{8B2F}\x{8B30}\x{8B31}\x{8B33}\x{8B34}\x{8B35}\x{8B36}' .
+'\x{8B37}\x{8B39}\x{8B3A}\x{8B3B}\x{8B3C}\x{8B3D}\x{8B3E}\x{8B40}\x{8B41}' .
+'\x{8B42}\x{8B43}\x{8B44}\x{8B45}\x{8B46}\x{8B47}\x{8B48}\x{8B49}\x{8B4A}' .
+'\x{8B4B}\x{8B4C}\x{8B4D}\x{8B4E}\x{8B4F}\x{8B50}\x{8B51}\x{8B52}\x{8B53}' .
+'\x{8B54}\x{8B55}\x{8B56}\x{8B57}\x{8B58}\x{8B59}\x{8B5A}\x{8B5B}\x{8B5C}' .
+'\x{8B5D}\x{8B5E}\x{8B5F}\x{8B60}\x{8B63}\x{8B64}\x{8B65}\x{8B66}\x{8B67}' .
+'\x{8B68}\x{8B6A}\x{8B6B}\x{8B6C}\x{8B6D}\x{8B6E}\x{8B6F}\x{8B70}\x{8B71}' .
+'\x{8B73}\x{8B74}\x{8B76}\x{8B77}\x{8B78}\x{8B79}\x{8B7A}\x{8B7B}\x{8B7D}' .
+'\x{8B7E}\x{8B7F}\x{8B80}\x{8B82}\x{8B83}\x{8B84}\x{8B85}\x{8B86}\x{8B88}' .
+'\x{8B89}\x{8B8A}\x{8B8B}\x{8B8C}\x{8B8E}\x{8B90}\x{8B91}\x{8B92}\x{8B93}' .
+'\x{8B94}\x{8B95}\x{8B96}\x{8B97}\x{8B98}\x{8B99}\x{8B9A}\x{8B9C}\x{8B9D}' .
+'\x{8B9E}\x{8B9F}\x{8BA0}\x{8BA1}\x{8BA2}\x{8BA3}\x{8BA4}\x{8BA5}\x{8BA6}' .
+'\x{8BA7}\x{8BA8}\x{8BA9}\x{8BAA}\x{8BAB}\x{8BAC}\x{8BAD}\x{8BAE}\x{8BAF}' .
+'\x{8BB0}\x{8BB1}\x{8BB2}\x{8BB3}\x{8BB4}\x{8BB5}\x{8BB6}\x{8BB7}\x{8BB8}' .
+'\x{8BB9}\x{8BBA}\x{8BBB}\x{8BBC}\x{8BBD}\x{8BBE}\x{8BBF}\x{8BC0}\x{8BC1}' .
+'\x{8BC2}\x{8BC3}\x{8BC4}\x{8BC5}\x{8BC6}\x{8BC7}\x{8BC8}\x{8BC9}\x{8BCA}' .
+'\x{8BCB}\x{8BCC}\x{8BCD}\x{8BCE}\x{8BCF}\x{8BD0}\x{8BD1}\x{8BD2}\x{8BD3}' .
+'\x{8BD4}\x{8BD5}\x{8BD6}\x{8BD7}\x{8BD8}\x{8BD9}\x{8BDA}\x{8BDB}\x{8BDC}' .
+'\x{8BDD}\x{8BDE}\x{8BDF}\x{8BE0}\x{8BE1}\x{8BE2}\x{8BE3}\x{8BE4}\x{8BE5}' .
+'\x{8BE6}\x{8BE7}\x{8BE8}\x{8BE9}\x{8BEA}\x{8BEB}\x{8BEC}\x{8BED}\x{8BEE}' .
+'\x{8BEF}\x{8BF0}\x{8BF1}\x{8BF2}\x{8BF3}\x{8BF4}\x{8BF5}\x{8BF6}\x{8BF7}' .
+'\x{8BF8}\x{8BF9}\x{8BFA}\x{8BFB}\x{8BFC}\x{8BFD}\x{8BFE}\x{8BFF}\x{8C00}' .
+'\x{8C01}\x{8C02}\x{8C03}\x{8C04}\x{8C05}\x{8C06}\x{8C07}\x{8C08}\x{8C09}' .
+'\x{8C0A}\x{8C0B}\x{8C0C}\x{8C0D}\x{8C0E}\x{8C0F}\x{8C10}\x{8C11}\x{8C12}' .
+'\x{8C13}\x{8C14}\x{8C15}\x{8C16}\x{8C17}\x{8C18}\x{8C19}\x{8C1A}\x{8C1B}' .
+'\x{8C1C}\x{8C1D}\x{8C1E}\x{8C1F}\x{8C20}\x{8C21}\x{8C22}\x{8C23}\x{8C24}' .
+'\x{8C25}\x{8C26}\x{8C27}\x{8C28}\x{8C29}\x{8C2A}\x{8C2B}\x{8C2C}\x{8C2D}' .
+'\x{8C2E}\x{8C2F}\x{8C30}\x{8C31}\x{8C32}\x{8C33}\x{8C34}\x{8C35}\x{8C36}' .
+'\x{8C37}\x{8C39}\x{8C3A}\x{8C3B}\x{8C3C}\x{8C3D}\x{8C3E}\x{8C3F}\x{8C41}' .
+'\x{8C42}\x{8C43}\x{8C45}\x{8C46}\x{8C47}\x{8C48}\x{8C49}\x{8C4A}\x{8C4B}' .
+'\x{8C4C}\x{8C4D}\x{8C4E}\x{8C4F}\x{8C50}\x{8C54}\x{8C55}\x{8C56}\x{8C57}' .
+'\x{8C59}\x{8C5A}\x{8C5B}\x{8C5C}\x{8C5D}\x{8C5E}\x{8C5F}\x{8C60}\x{8C61}' .
+'\x{8C62}\x{8C63}\x{8C64}\x{8C65}\x{8C66}\x{8C67}\x{8C68}\x{8C69}\x{8C6A}' .
+'\x{8C6B}\x{8C6C}\x{8C6D}\x{8C6E}\x{8C6F}\x{8C70}\x{8C71}\x{8C72}\x{8C73}' .
+'\x{8C75}\x{8C76}\x{8C77}\x{8C78}\x{8C79}\x{8C7A}\x{8C7B}\x{8C7D}\x{8C7E}' .
+'\x{8C80}\x{8C81}\x{8C82}\x{8C84}\x{8C85}\x{8C86}\x{8C88}\x{8C89}\x{8C8A}' .
+'\x{8C8C}\x{8C8D}\x{8C8F}\x{8C90}\x{8C91}\x{8C92}\x{8C93}\x{8C94}\x{8C95}' .
+'\x{8C96}\x{8C97}\x{8C98}\x{8C99}\x{8C9A}\x{8C9C}\x{8C9D}\x{8C9E}\x{8C9F}' .
+'\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA3}\x{8CA4}\x{8CA5}\x{8CA7}\x{8CA8}\x{8CA9}' .
+'\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}\x{8CB1}\x{8CB2}' .
+'\x{8CB3}\x{8CB4}\x{8CB5}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CB9}\x{8CBA}\x{8CBB}' .
+'\x{8CBC}\x{8CBD}\x{8CBE}\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}' .
+'\x{8CC5}\x{8CC6}\x{8CC7}\x{8CC8}\x{8CC9}\x{8CCA}\x{8CCC}\x{8CCE}\x{8CCF}' .
+'\x{8CD0}\x{8CD1}\x{8CD2}\x{8CD3}\x{8CD4}\x{8CD5}\x{8CD7}\x{8CD9}\x{8CDA}' .
+'\x{8CDB}\x{8CDC}\x{8CDD}\x{8CDE}\x{8CDF}\x{8CE0}\x{8CE1}\x{8CE2}\x{8CE3}' .
+'\x{8CE4}\x{8CE5}\x{8CE6}\x{8CE7}\x{8CE8}\x{8CEA}\x{8CEB}\x{8CEC}\x{8CED}' .
+'\x{8CEE}\x{8CEF}\x{8CF0}\x{8CF1}\x{8CF2}\x{8CF3}\x{8CF4}\x{8CF5}\x{8CF6}' .
+'\x{8CF8}\x{8CF9}\x{8CFA}\x{8CFB}\x{8CFC}\x{8CFD}\x{8CFE}\x{8CFF}\x{8D00}' .
+'\x{8D02}\x{8D03}\x{8D04}\x{8D05}\x{8D06}\x{8D07}\x{8D08}\x{8D09}\x{8D0A}' .
+'\x{8D0B}\x{8D0C}\x{8D0D}\x{8D0E}\x{8D0F}\x{8D10}\x{8D13}\x{8D14}\x{8D15}' .
+'\x{8D16}\x{8D17}\x{8D18}\x{8D19}\x{8D1A}\x{8D1B}\x{8D1C}\x{8D1D}\x{8D1E}' .
+'\x{8D1F}\x{8D20}\x{8D21}\x{8D22}\x{8D23}\x{8D24}\x{8D25}\x{8D26}\x{8D27}' .
+'\x{8D28}\x{8D29}\x{8D2A}\x{8D2B}\x{8D2C}\x{8D2D}\x{8D2E}\x{8D2F}\x{8D30}' .
+'\x{8D31}\x{8D32}\x{8D33}\x{8D34}\x{8D35}\x{8D36}\x{8D37}\x{8D38}\x{8D39}' .
+'\x{8D3A}\x{8D3B}\x{8D3C}\x{8D3D}\x{8D3E}\x{8D3F}\x{8D40}\x{8D41}\x{8D42}' .
+'\x{8D43}\x{8D44}\x{8D45}\x{8D46}\x{8D47}\x{8D48}\x{8D49}\x{8D4A}\x{8D4B}' .
+'\x{8D4C}\x{8D4D}\x{8D4E}\x{8D4F}\x{8D50}\x{8D51}\x{8D52}\x{8D53}\x{8D54}' .
+'\x{8D55}\x{8D56}\x{8D57}\x{8D58}\x{8D59}\x{8D5A}\x{8D5B}\x{8D5C}\x{8D5D}' .
+'\x{8D5E}\x{8D5F}\x{8D60}\x{8D61}\x{8D62}\x{8D63}\x{8D64}\x{8D65}\x{8D66}' .
+'\x{8D67}\x{8D68}\x{8D69}\x{8D6A}\x{8D6B}\x{8D6C}\x{8D6D}\x{8D6E}\x{8D6F}' .
+'\x{8D70}\x{8D71}\x{8D72}\x{8D73}\x{8D74}\x{8D75}\x{8D76}\x{8D77}\x{8D78}' .
+'\x{8D79}\x{8D7A}\x{8D7B}\x{8D7D}\x{8D7E}\x{8D7F}\x{8D80}\x{8D81}\x{8D82}' .
+'\x{8D83}\x{8D84}\x{8D85}\x{8D86}\x{8D87}\x{8D88}\x{8D89}\x{8D8A}\x{8D8B}' .
+'\x{8D8C}\x{8D8D}\x{8D8E}\x{8D8F}\x{8D90}\x{8D91}\x{8D92}\x{8D93}\x{8D94}' .
+'\x{8D95}\x{8D96}\x{8D97}\x{8D98}\x{8D99}\x{8D9A}\x{8D9B}\x{8D9C}\x{8D9D}' .
+'\x{8D9E}\x{8D9F}\x{8DA0}\x{8DA1}\x{8DA2}\x{8DA3}\x{8DA4}\x{8DA5}\x{8DA7}' .
+'\x{8DA8}\x{8DA9}\x{8DAA}\x{8DAB}\x{8DAC}\x{8DAD}\x{8DAE}\x{8DAF}\x{8DB0}' .
+'\x{8DB1}\x{8DB2}\x{8DB3}\x{8DB4}\x{8DB5}\x{8DB6}\x{8DB7}\x{8DB8}\x{8DB9}' .
+'\x{8DBA}\x{8DBB}\x{8DBC}\x{8DBD}\x{8DBE}\x{8DBF}\x{8DC1}\x{8DC2}\x{8DC3}' .
+'\x{8DC4}\x{8DC5}\x{8DC6}\x{8DC7}\x{8DC8}\x{8DC9}\x{8DCA}\x{8DCB}\x{8DCC}' .
+'\x{8DCD}\x{8DCE}\x{8DCF}\x{8DD0}\x{8DD1}\x{8DD2}\x{8DD3}\x{8DD4}\x{8DD5}' .
+'\x{8DD6}\x{8DD7}\x{8DD8}\x{8DD9}\x{8DDA}\x{8DDB}\x{8DDC}\x{8DDD}\x{8DDE}' .
+'\x{8DDF}\x{8DE0}\x{8DE1}\x{8DE2}\x{8DE3}\x{8DE4}\x{8DE6}\x{8DE7}\x{8DE8}' .
+'\x{8DE9}\x{8DEA}\x{8DEB}\x{8DEC}\x{8DED}\x{8DEE}\x{8DEF}\x{8DF0}\x{8DF1}' .
+'\x{8DF2}\x{8DF3}\x{8DF4}\x{8DF5}\x{8DF6}\x{8DF7}\x{8DF8}\x{8DF9}\x{8DFA}' .
+'\x{8DFB}\x{8DFC}\x{8DFD}\x{8DFE}\x{8DFF}\x{8E00}\x{8E02}\x{8E03}\x{8E04}' .
+'\x{8E05}\x{8E06}\x{8E07}\x{8E08}\x{8E09}\x{8E0A}\x{8E0C}\x{8E0D}\x{8E0E}' .
+'\x{8E0F}\x{8E10}\x{8E11}\x{8E12}\x{8E13}\x{8E14}\x{8E15}\x{8E16}\x{8E17}' .
+'\x{8E18}\x{8E19}\x{8E1A}\x{8E1B}\x{8E1C}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E20}' .
+'\x{8E21}\x{8E22}\x{8E23}\x{8E24}\x{8E25}\x{8E26}\x{8E27}\x{8E28}\x{8E29}' .
+'\x{8E2A}\x{8E2B}\x{8E2C}\x{8E2D}\x{8E2E}\x{8E2F}\x{8E30}\x{8E31}\x{8E33}' .
+'\x{8E34}\x{8E35}\x{8E36}\x{8E37}\x{8E38}\x{8E39}\x{8E3A}\x{8E3B}\x{8E3C}' .
+'\x{8E3D}\x{8E3E}\x{8E3F}\x{8E40}\x{8E41}\x{8E42}\x{8E43}\x{8E44}\x{8E45}' .
+'\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4B}\x{8E4C}\x{8E4D}\x{8E4E}\x{8E50}' .
+'\x{8E51}\x{8E52}\x{8E53}\x{8E54}\x{8E55}\x{8E56}\x{8E57}\x{8E58}\x{8E59}' .
+'\x{8E5A}\x{8E5B}\x{8E5C}\x{8E5D}\x{8E5E}\x{8E5F}\x{8E60}\x{8E61}\x{8E62}' .
+'\x{8E63}\x{8E64}\x{8E65}\x{8E66}\x{8E67}\x{8E68}\x{8E69}\x{8E6A}\x{8E6B}' .
+'\x{8E6C}\x{8E6D}\x{8E6F}\x{8E70}\x{8E71}\x{8E72}\x{8E73}\x{8E74}\x{8E76}' .
+'\x{8E78}\x{8E7A}\x{8E7B}\x{8E7C}\x{8E7D}\x{8E7E}\x{8E7F}\x{8E80}\x{8E81}' .
+'\x{8E82}\x{8E83}\x{8E84}\x{8E85}\x{8E86}\x{8E87}\x{8E88}\x{8E89}\x{8E8A}' .
+'\x{8E8B}\x{8E8C}\x{8E8D}\x{8E8E}\x{8E8F}\x{8E90}\x{8E91}\x{8E92}\x{8E93}' .
+'\x{8E94}\x{8E95}\x{8E96}\x{8E97}\x{8E98}\x{8E9A}\x{8E9C}\x{8E9D}\x{8E9E}' .
+'\x{8E9F}\x{8EA0}\x{8EA1}\x{8EA3}\x{8EA4}\x{8EA5}\x{8EA6}\x{8EA7}\x{8EA8}' .
+'\x{8EA9}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAD}\x{8EAE}\x{8EAF}\x{8EB0}\x{8EB1}' .
+'\x{8EB2}\x{8EB4}\x{8EB5}\x{8EB8}\x{8EB9}\x{8EBA}\x{8EBB}\x{8EBC}\x{8EBD}' .
+'\x{8EBE}\x{8EBF}\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}\x{8EC6}\x{8EC7}\x{8EC8}' .
+'\x{8EC9}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ECE}\x{8ECF}\x{8ED0}\x{8ED1}' .
+'\x{8ED2}\x{8ED3}\x{8ED4}\x{8ED5}\x{8ED6}\x{8ED7}\x{8ED8}\x{8EDA}\x{8EDB}' .
+'\x{8EDC}\x{8EDD}\x{8EDE}\x{8EDF}\x{8EE0}\x{8EE1}\x{8EE4}\x{8EE5}\x{8EE6}' .
+'\x{8EE7}\x{8EE8}\x{8EE9}\x{8EEA}\x{8EEB}\x{8EEC}\x{8EED}\x{8EEE}\x{8EEF}' .
+'\x{8EF1}\x{8EF2}\x{8EF3}\x{8EF4}\x{8EF5}\x{8EF6}\x{8EF7}\x{8EF8}\x{8EF9}' .
+'\x{8EFA}\x{8EFB}\x{8EFC}\x{8EFD}\x{8EFE}\x{8EFF}\x{8F00}\x{8F01}\x{8F02}' .
+'\x{8F03}\x{8F04}\x{8F05}\x{8F06}\x{8F07}\x{8F08}\x{8F09}\x{8F0A}\x{8F0B}' .
+'\x{8F0D}\x{8F0E}\x{8F10}\x{8F11}\x{8F12}\x{8F13}\x{8F14}\x{8F15}\x{8F16}' .
+'\x{8F17}\x{8F18}\x{8F1A}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1E}\x{8F1F}\x{8F20}' .
+'\x{8F21}\x{8F22}\x{8F23}\x{8F24}\x{8F25}\x{8F26}\x{8F27}\x{8F28}\x{8F29}' .
+'\x{8F2A}\x{8F2B}\x{8F2C}\x{8F2E}\x{8F2F}\x{8F30}\x{8F31}\x{8F32}\x{8F33}' .
+'\x{8F34}\x{8F35}\x{8F36}\x{8F37}\x{8F38}\x{8F39}\x{8F3B}\x{8F3C}\x{8F3D}' .
+'\x{8F3E}\x{8F3F}\x{8F40}\x{8F42}\x{8F43}\x{8F44}\x{8F45}\x{8F46}\x{8F47}' .
+'\x{8F48}\x{8F49}\x{8F4A}\x{8F4B}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F4F}\x{8F50}' .
+'\x{8F51}\x{8F52}\x{8F53}\x{8F54}\x{8F55}\x{8F56}\x{8F57}\x{8F58}\x{8F59}' .
+'\x{8F5A}\x{8F5B}\x{8F5D}\x{8F5E}\x{8F5F}\x{8F60}\x{8F61}\x{8F62}\x{8F63}' .
+'\x{8F64}\x{8F65}\x{8F66}\x{8F67}\x{8F68}\x{8F69}\x{8F6A}\x{8F6B}\x{8F6C}' .
+'\x{8F6D}\x{8F6E}\x{8F6F}\x{8F70}\x{8F71}\x{8F72}\x{8F73}\x{8F74}\x{8F75}' .
+'\x{8F76}\x{8F77}\x{8F78}\x{8F79}\x{8F7A}\x{8F7B}\x{8F7C}\x{8F7D}\x{8F7E}' .
+'\x{8F7F}\x{8F80}\x{8F81}\x{8F82}\x{8F83}\x{8F84}\x{8F85}\x{8F86}\x{8F87}' .
+'\x{8F88}\x{8F89}\x{8F8A}\x{8F8B}\x{8F8C}\x{8F8D}\x{8F8E}\x{8F8F}\x{8F90}' .
+'\x{8F91}\x{8F92}\x{8F93}\x{8F94}\x{8F95}\x{8F96}\x{8F97}\x{8F98}\x{8F99}' .
+'\x{8F9A}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA0}\x{8FA1}\x{8FA2}\x{8FA3}' .
+'\x{8FA5}\x{8FA6}\x{8FA7}\x{8FA8}\x{8FA9}\x{8FAA}\x{8FAB}\x{8FAC}\x{8FAD}' .
+'\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB4}\x{8FB5}\x{8FB6}\x{8FB7}' .
+'\x{8FB8}\x{8FB9}\x{8FBB}\x{8FBC}\x{8FBD}\x{8FBE}\x{8FBF}\x{8FC0}\x{8FC1}' .
+'\x{8FC2}\x{8FC4}\x{8FC5}\x{8FC6}\x{8FC7}\x{8FC8}\x{8FC9}\x{8FCB}\x{8FCC}' .
+'\x{8FCD}\x{8FCE}\x{8FCF}\x{8FD0}\x{8FD1}\x{8FD2}\x{8FD3}\x{8FD4}\x{8FD5}' .
+'\x{8FD6}\x{8FD7}\x{8FD8}\x{8FD9}\x{8FDA}\x{8FDB}\x{8FDC}\x{8FDD}\x{8FDE}' .
+'\x{8FDF}\x{8FE0}\x{8FE1}\x{8FE2}\x{8FE3}\x{8FE4}\x{8FE5}\x{8FE6}\x{8FE8}' .
+'\x{8FE9}\x{8FEA}\x{8FEB}\x{8FEC}\x{8FED}\x{8FEE}\x{8FEF}\x{8FF0}\x{8FF1}' .
+'\x{8FF2}\x{8FF3}\x{8FF4}\x{8FF5}\x{8FF6}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}' .
+'\x{8FFB}\x{8FFC}\x{8FFD}\x{8FFE}\x{8FFF}\x{9000}\x{9001}\x{9002}\x{9003}' .
+'\x{9004}\x{9005}\x{9006}\x{9007}\x{9008}\x{9009}\x{900A}\x{900B}\x{900C}' .
+'\x{900D}\x{900F}\x{9010}\x{9011}\x{9012}\x{9013}\x{9014}\x{9015}\x{9016}' .
+'\x{9017}\x{9018}\x{9019}\x{901A}\x{901B}\x{901C}\x{901D}\x{901E}\x{901F}' .
+'\x{9020}\x{9021}\x{9022}\x{9023}\x{9024}\x{9025}\x{9026}\x{9027}\x{9028}' .
+'\x{9029}\x{902B}\x{902D}\x{902E}\x{902F}\x{9030}\x{9031}\x{9032}\x{9033}' .
+'\x{9034}\x{9035}\x{9036}\x{9038}\x{903A}\x{903B}\x{903C}\x{903D}\x{903E}' .
+'\x{903F}\x{9041}\x{9042}\x{9043}\x{9044}\x{9045}\x{9047}\x{9048}\x{9049}' .
+'\x{904A}\x{904B}\x{904C}\x{904D}\x{904E}\x{904F}\x{9050}\x{9051}\x{9052}' .
+'\x{9053}\x{9054}\x{9055}\x{9056}\x{9057}\x{9058}\x{9059}\x{905A}\x{905B}' .
+'\x{905C}\x{905D}\x{905E}\x{905F}\x{9060}\x{9061}\x{9062}\x{9063}\x{9064}' .
+'\x{9065}\x{9066}\x{9067}\x{9068}\x{9069}\x{906A}\x{906B}\x{906C}\x{906D}' .
+'\x{906E}\x{906F}\x{9070}\x{9071}\x{9072}\x{9073}\x{9074}\x{9075}\x{9076}' .
+'\x{9077}\x{9078}\x{9079}\x{907A}\x{907B}\x{907C}\x{907D}\x{907E}\x{907F}' .
+'\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9085}\x{9086}\x{9087}\x{9088}' .
+'\x{9089}\x{908A}\x{908B}\x{908C}\x{908D}\x{908E}\x{908F}\x{9090}\x{9091}' .
+'\x{9092}\x{9093}\x{9094}\x{9095}\x{9096}\x{9097}\x{9098}\x{9099}\x{909A}' .
+'\x{909B}\x{909C}\x{909D}\x{909E}\x{909F}\x{90A0}\x{90A1}\x{90A2}\x{90A3}' .
+'\x{90A4}\x{90A5}\x{90A6}\x{90A7}\x{90A8}\x{90A9}\x{90AA}\x{90AC}\x{90AD}' .
+'\x{90AE}\x{90AF}\x{90B0}\x{90B1}\x{90B2}\x{90B3}\x{90B4}\x{90B5}\x{90B6}' .
+'\x{90B7}\x{90B8}\x{90B9}\x{90BA}\x{90BB}\x{90BC}\x{90BD}\x{90BE}\x{90BF}' .
+'\x{90C0}\x{90C1}\x{90C2}\x{90C3}\x{90C4}\x{90C5}\x{90C6}\x{90C7}\x{90C8}' .
+'\x{90C9}\x{90CA}\x{90CB}\x{90CE}\x{90CF}\x{90D0}\x{90D1}\x{90D3}\x{90D4}' .
+'\x{90D5}\x{90D6}\x{90D7}\x{90D8}\x{90D9}\x{90DA}\x{90DB}\x{90DC}\x{90DD}' .
+'\x{90DE}\x{90DF}\x{90E0}\x{90E1}\x{90E2}\x{90E3}\x{90E4}\x{90E5}\x{90E6}' .
+'\x{90E7}\x{90E8}\x{90E9}\x{90EA}\x{90EB}\x{90EC}\x{90ED}\x{90EE}\x{90EF}' .
+'\x{90F0}\x{90F1}\x{90F2}\x{90F3}\x{90F4}\x{90F5}\x{90F7}\x{90F8}\x{90F9}' .
+'\x{90FA}\x{90FB}\x{90FC}\x{90FD}\x{90FE}\x{90FF}\x{9100}\x{9101}\x{9102}' .
+'\x{9103}\x{9104}\x{9105}\x{9106}\x{9107}\x{9108}\x{9109}\x{910B}\x{910C}' .
+'\x{910D}\x{910E}\x{910F}\x{9110}\x{9111}\x{9112}\x{9113}\x{9114}\x{9115}' .
+'\x{9116}\x{9117}\x{9118}\x{9119}\x{911A}\x{911B}\x{911C}\x{911D}\x{911E}' .
+'\x{911F}\x{9120}\x{9121}\x{9122}\x{9123}\x{9124}\x{9125}\x{9126}\x{9127}' .
+'\x{9128}\x{9129}\x{912A}\x{912B}\x{912C}\x{912D}\x{912E}\x{912F}\x{9130}' .
+'\x{9131}\x{9132}\x{9133}\x{9134}\x{9135}\x{9136}\x{9137}\x{9138}\x{9139}' .
+'\x{913A}\x{913B}\x{913E}\x{913F}\x{9140}\x{9141}\x{9142}\x{9143}\x{9144}' .
+'\x{9145}\x{9146}\x{9147}\x{9148}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}' .
+'\x{914E}\x{914F}\x{9150}\x{9151}\x{9152}\x{9153}\x{9154}\x{9155}\x{9156}' .
+'\x{9157}\x{9158}\x{915A}\x{915B}\x{915C}\x{915D}\x{915E}\x{915F}\x{9160}' .
+'\x{9161}\x{9162}\x{9163}\x{9164}\x{9165}\x{9166}\x{9167}\x{9168}\x{9169}' .
+'\x{916A}\x{916B}\x{916C}\x{916D}\x{916E}\x{916F}\x{9170}\x{9171}\x{9172}' .
+'\x{9173}\x{9174}\x{9175}\x{9176}\x{9177}\x{9178}\x{9179}\x{917A}\x{917C}' .
+'\x{917D}\x{917E}\x{917F}\x{9180}\x{9181}\x{9182}\x{9183}\x{9184}\x{9185}' .
+'\x{9186}\x{9187}\x{9188}\x{9189}\x{918A}\x{918B}\x{918C}\x{918D}\x{918E}' .
+'\x{918F}\x{9190}\x{9191}\x{9192}\x{9193}\x{9194}\x{9196}\x{9199}\x{919A}' .
+'\x{919B}\x{919C}\x{919D}\x{919E}\x{919F}\x{91A0}\x{91A1}\x{91A2}\x{91A3}' .
+'\x{91A5}\x{91A6}\x{91A7}\x{91A8}\x{91AA}\x{91AB}\x{91AC}\x{91AD}\x{91AE}' .
+'\x{91AF}\x{91B0}\x{91B1}\x{91B2}\x{91B3}\x{91B4}\x{91B5}\x{91B6}\x{91B7}' .
+'\x{91B9}\x{91BA}\x{91BB}\x{91BC}\x{91BD}\x{91BE}\x{91C0}\x{91C1}\x{91C2}' .
+'\x{91C3}\x{91C5}\x{91C6}\x{91C7}\x{91C9}\x{91CA}\x{91CB}\x{91CC}\x{91CD}' .
+'\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D2}\x{91D3}\x{91D4}\x{91D5}\x{91D7}' .
+'\x{91D8}\x{91D9}\x{91DA}\x{91DB}\x{91DC}\x{91DD}\x{91DE}\x{91DF}\x{91E2}' .
+'\x{91E3}\x{91E4}\x{91E5}\x{91E6}\x{91E7}\x{91E8}\x{91E9}\x{91EA}\x{91EB}' .
+'\x{91EC}\x{91ED}\x{91EE}\x{91F0}\x{91F1}\x{91F2}\x{91F3}\x{91F4}\x{91F5}' .
+'\x{91F7}\x{91F8}\x{91F9}\x{91FA}\x{91FB}\x{91FD}\x{91FE}\x{91FF}\x{9200}' .
+'\x{9201}\x{9202}\x{9203}\x{9204}\x{9205}\x{9206}\x{9207}\x{9208}\x{9209}' .
+'\x{920A}\x{920B}\x{920C}\x{920D}\x{920E}\x{920F}\x{9210}\x{9211}\x{9212}' .
+'\x{9214}\x{9215}\x{9216}\x{9217}\x{9218}\x{9219}\x{921A}\x{921B}\x{921C}' .
+'\x{921D}\x{921E}\x{9220}\x{9221}\x{9223}\x{9224}\x{9225}\x{9226}\x{9227}' .
+'\x{9228}\x{9229}\x{922A}\x{922B}\x{922D}\x{922E}\x{922F}\x{9230}\x{9231}' .
+'\x{9232}\x{9233}\x{9234}\x{9235}\x{9236}\x{9237}\x{9238}\x{9239}\x{923A}' .
+'\x{923B}\x{923C}\x{923D}\x{923E}\x{923F}\x{9240}\x{9241}\x{9242}\x{9245}' .
+'\x{9246}\x{9247}\x{9248}\x{9249}\x{924A}\x{924B}\x{924C}\x{924D}\x{924E}' .
+'\x{924F}\x{9250}\x{9251}\x{9252}\x{9253}\x{9254}\x{9255}\x{9256}\x{9257}' .
+'\x{9258}\x{9259}\x{925A}\x{925B}\x{925C}\x{925D}\x{925E}\x{925F}\x{9260}' .
+'\x{9261}\x{9262}\x{9263}\x{9264}\x{9265}\x{9266}\x{9267}\x{9268}\x{926B}' .
+'\x{926C}\x{926D}\x{926E}\x{926F}\x{9270}\x{9272}\x{9273}\x{9274}\x{9275}' .
+'\x{9276}\x{9277}\x{9278}\x{9279}\x{927A}\x{927B}\x{927C}\x{927D}\x{927E}' .
+'\x{927F}\x{9280}\x{9282}\x{9283}\x{9285}\x{9286}\x{9287}\x{9288}\x{9289}' .
+'\x{928A}\x{928B}\x{928C}\x{928D}\x{928E}\x{928F}\x{9290}\x{9291}\x{9292}' .
+'\x{9293}\x{9294}\x{9295}\x{9296}\x{9297}\x{9298}\x{9299}\x{929A}\x{929B}' .
+'\x{929C}\x{929D}\x{929F}\x{92A0}\x{92A1}\x{92A2}\x{92A3}\x{92A4}\x{92A5}' .
+'\x{92A6}\x{92A7}\x{92A8}\x{92A9}\x{92AA}\x{92AB}\x{92AC}\x{92AD}\x{92AE}' .
+'\x{92AF}\x{92B0}\x{92B1}\x{92B2}\x{92B3}\x{92B4}\x{92B5}\x{92B6}\x{92B7}' .
+'\x{92B8}\x{92B9}\x{92BA}\x{92BB}\x{92BC}\x{92BE}\x{92BF}\x{92C0}\x{92C1}' .
+'\x{92C2}\x{92C3}\x{92C4}\x{92C5}\x{92C6}\x{92C7}\x{92C8}\x{92C9}\x{92CA}' .
+'\x{92CB}\x{92CC}\x{92CD}\x{92CE}\x{92CF}\x{92D0}\x{92D1}\x{92D2}\x{92D3}' .
+'\x{92D5}\x{92D6}\x{92D7}\x{92D8}\x{92D9}\x{92DA}\x{92DC}\x{92DD}\x{92DE}' .
+'\x{92DF}\x{92E0}\x{92E1}\x{92E3}\x{92E4}\x{92E5}\x{92E6}\x{92E7}\x{92E8}' .
+'\x{92E9}\x{92EA}\x{92EB}\x{92EC}\x{92ED}\x{92EE}\x{92EF}\x{92F0}\x{92F1}' .
+'\x{92F2}\x{92F3}\x{92F4}\x{92F5}\x{92F6}\x{92F7}\x{92F8}\x{92F9}\x{92FA}' .
+'\x{92FB}\x{92FC}\x{92FD}\x{92FE}\x{92FF}\x{9300}\x{9301}\x{9302}\x{9303}' .
+'\x{9304}\x{9305}\x{9306}\x{9307}\x{9308}\x{9309}\x{930A}\x{930B}\x{930C}' .
+'\x{930D}\x{930E}\x{930F}\x{9310}\x{9311}\x{9312}\x{9313}\x{9314}\x{9315}' .
+'\x{9316}\x{9317}\x{9318}\x{9319}\x{931A}\x{931B}\x{931D}\x{931E}\x{931F}' .
+'\x{9320}\x{9321}\x{9322}\x{9323}\x{9324}\x{9325}\x{9326}\x{9327}\x{9328}' .
+'\x{9329}\x{932A}\x{932B}\x{932D}\x{932E}\x{932F}\x{9332}\x{9333}\x{9334}' .
+'\x{9335}\x{9336}\x{9337}\x{9338}\x{9339}\x{933A}\x{933B}\x{933C}\x{933D}' .
+'\x{933E}\x{933F}\x{9340}\x{9341}\x{9342}\x{9343}\x{9344}\x{9345}\x{9346}' .
+'\x{9347}\x{9348}\x{9349}\x{934A}\x{934B}\x{934C}\x{934D}\x{934E}\x{934F}' .
+'\x{9350}\x{9351}\x{9352}\x{9353}\x{9354}\x{9355}\x{9356}\x{9357}\x{9358}' .
+'\x{9359}\x{935A}\x{935B}\x{935C}\x{935D}\x{935E}\x{935F}\x{9360}\x{9361}' .
+'\x{9363}\x{9364}\x{9365}\x{9366}\x{9367}\x{9369}\x{936A}\x{936C}\x{936D}' .
+'\x{936E}\x{9370}\x{9371}\x{9372}\x{9374}\x{9375}\x{9376}\x{9377}\x{9379}' .
+'\x{937A}\x{937B}\x{937C}\x{937D}\x{937E}\x{9380}\x{9382}\x{9383}\x{9384}' .
+'\x{9385}\x{9386}\x{9387}\x{9388}\x{9389}\x{938A}\x{938C}\x{938D}\x{938E}' .
+'\x{938F}\x{9390}\x{9391}\x{9392}\x{9393}\x{9394}\x{9395}\x{9396}\x{9397}' .
+'\x{9398}\x{9399}\x{939A}\x{939B}\x{939D}\x{939E}\x{939F}\x{93A1}\x{93A2}' .
+'\x{93A3}\x{93A4}\x{93A5}\x{93A6}\x{93A7}\x{93A8}\x{93A9}\x{93AA}\x{93AC}' .
+'\x{93AD}\x{93AE}\x{93AF}\x{93B0}\x{93B1}\x{93B2}\x{93B3}\x{93B4}\x{93B5}' .
+'\x{93B6}\x{93B7}\x{93B8}\x{93B9}\x{93BA}\x{93BC}\x{93BD}\x{93BE}\x{93BF}' .
+'\x{93C0}\x{93C1}\x{93C2}\x{93C3}\x{93C4}\x{93C5}\x{93C6}\x{93C7}\x{93C8}' .
+'\x{93C9}\x{93CA}\x{93CB}\x{93CC}\x{93CD}\x{93CE}\x{93CF}\x{93D0}\x{93D1}' .
+'\x{93D2}\x{93D3}\x{93D4}\x{93D5}\x{93D6}\x{93D7}\x{93D8}\x{93D9}\x{93DA}' .
+'\x{93DB}\x{93DC}\x{93DD}\x{93DE}\x{93DF}\x{93E1}\x{93E2}\x{93E3}\x{93E4}' .
+'\x{93E6}\x{93E7}\x{93E8}\x{93E9}\x{93EA}\x{93EB}\x{93EC}\x{93ED}\x{93EE}' .
+'\x{93EF}\x{93F0}\x{93F1}\x{93F2}\x{93F4}\x{93F5}\x{93F6}\x{93F7}\x{93F8}' .
+'\x{93F9}\x{93FA}\x{93FB}\x{93FC}\x{93FD}\x{93FE}\x{93FF}\x{9400}\x{9401}' .
+'\x{9403}\x{9404}\x{9405}\x{9406}\x{9407}\x{9408}\x{9409}\x{940A}\x{940B}' .
+'\x{940C}\x{940D}\x{940E}\x{940F}\x{9410}\x{9411}\x{9412}\x{9413}\x{9414}' .
+'\x{9415}\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}\x{9422}\x{9423}' .
+'\x{9425}\x{9426}\x{9427}\x{9428}\x{9429}\x{942A}\x{942B}\x{942C}\x{942D}' .
+'\x{942E}\x{942F}\x{9430}\x{9431}\x{9432}\x{9433}\x{9434}\x{9435}\x{9436}' .
+'\x{9437}\x{9438}\x{9439}\x{943A}\x{943B}\x{943C}\x{943D}\x{943E}\x{943F}' .
+'\x{9440}\x{9441}\x{9442}\x{9444}\x{9445}\x{9446}\x{9447}\x{9448}\x{9449}' .
+'\x{944A}\x{944B}\x{944C}\x{944D}\x{944F}\x{9450}\x{9451}\x{9452}\x{9453}' .
+'\x{9454}\x{9455}\x{9456}\x{9457}\x{9458}\x{9459}\x{945B}\x{945C}\x{945D}' .
+'\x{945E}\x{945F}\x{9460}\x{9461}\x{9462}\x{9463}\x{9464}\x{9465}\x{9466}' .
+'\x{9467}\x{9468}\x{9469}\x{946A}\x{946B}\x{946D}\x{946E}\x{946F}\x{9470}' .
+'\x{9471}\x{9472}\x{9473}\x{9474}\x{9475}\x{9476}\x{9477}\x{9478}\x{9479}' .
+'\x{947A}\x{947C}\x{947D}\x{947E}\x{947F}\x{9480}\x{9481}\x{9482}\x{9483}' .
+'\x{9484}\x{9485}\x{9486}\x{9487}\x{9488}\x{9489}\x{948A}\x{948B}\x{948C}' .
+'\x{948D}\x{948E}\x{948F}\x{9490}\x{9491}\x{9492}\x{9493}\x{9494}\x{9495}' .
+'\x{9496}\x{9497}\x{9498}\x{9499}\x{949A}\x{949B}\x{949C}\x{949D}\x{949E}' .
+'\x{949F}\x{94A0}\x{94A1}\x{94A2}\x{94A3}\x{94A4}\x{94A5}\x{94A6}\x{94A7}' .
+'\x{94A8}\x{94A9}\x{94AA}\x{94AB}\x{94AC}\x{94AD}\x{94AE}\x{94AF}\x{94B0}' .
+'\x{94B1}\x{94B2}\x{94B3}\x{94B4}\x{94B5}\x{94B6}\x{94B7}\x{94B8}\x{94B9}' .
+'\x{94BA}\x{94BB}\x{94BC}\x{94BD}\x{94BE}\x{94BF}\x{94C0}\x{94C1}\x{94C2}' .
+'\x{94C3}\x{94C4}\x{94C5}\x{94C6}\x{94C7}\x{94C8}\x{94C9}\x{94CA}\x{94CB}' .
+'\x{94CC}\x{94CD}\x{94CE}\x{94CF}\x{94D0}\x{94D1}\x{94D2}\x{94D3}\x{94D4}' .
+'\x{94D5}\x{94D6}\x{94D7}\x{94D8}\x{94D9}\x{94DA}\x{94DB}\x{94DC}\x{94DD}' .
+'\x{94DE}\x{94DF}\x{94E0}\x{94E1}\x{94E2}\x{94E3}\x{94E4}\x{94E5}\x{94E6}' .
+'\x{94E7}\x{94E8}\x{94E9}\x{94EA}\x{94EB}\x{94EC}\x{94ED}\x{94EE}\x{94EF}' .
+'\x{94F0}\x{94F1}\x{94F2}\x{94F3}\x{94F4}\x{94F5}\x{94F6}\x{94F7}\x{94F8}' .
+'\x{94F9}\x{94FA}\x{94FB}\x{94FC}\x{94FD}\x{94FE}\x{94FF}\x{9500}\x{9501}' .
+'\x{9502}\x{9503}\x{9504}\x{9505}\x{9506}\x{9507}\x{9508}\x{9509}\x{950A}' .
+'\x{950B}\x{950C}\x{950D}\x{950E}\x{950F}\x{9510}\x{9511}\x{9512}\x{9513}' .
+'\x{9514}\x{9515}\x{9516}\x{9517}\x{9518}\x{9519}\x{951A}\x{951B}\x{951C}' .
+'\x{951D}\x{951E}\x{951F}\x{9520}\x{9521}\x{9522}\x{9523}\x{9524}\x{9525}' .
+'\x{9526}\x{9527}\x{9528}\x{9529}\x{952A}\x{952B}\x{952C}\x{952D}\x{952E}' .
+'\x{952F}\x{9530}\x{9531}\x{9532}\x{9533}\x{9534}\x{9535}\x{9536}\x{9537}' .
+'\x{9538}\x{9539}\x{953A}\x{953B}\x{953C}\x{953D}\x{953E}\x{953F}\x{9540}' .
+'\x{9541}\x{9542}\x{9543}\x{9544}\x{9545}\x{9546}\x{9547}\x{9548}\x{9549}' .
+'\x{954A}\x{954B}\x{954C}\x{954D}\x{954E}\x{954F}\x{9550}\x{9551}\x{9552}' .
+'\x{9553}\x{9554}\x{9555}\x{9556}\x{9557}\x{9558}\x{9559}\x{955A}\x{955B}' .
+'\x{955C}\x{955D}\x{955E}\x{955F}\x{9560}\x{9561}\x{9562}\x{9563}\x{9564}' .
+'\x{9565}\x{9566}\x{9567}\x{9568}\x{9569}\x{956A}\x{956B}\x{956C}\x{956D}' .
+'\x{956E}\x{956F}\x{9570}\x{9571}\x{9572}\x{9573}\x{9574}\x{9575}\x{9576}' .
+'\x{9577}\x{957A}\x{957B}\x{957C}\x{957D}\x{957F}\x{9580}\x{9581}\x{9582}' .
+'\x{9583}\x{9584}\x{9586}\x{9587}\x{9588}\x{9589}\x{958A}\x{958B}\x{958C}' .
+'\x{958D}\x{958E}\x{958F}\x{9590}\x{9591}\x{9592}\x{9593}\x{9594}\x{9595}' .
+'\x{9596}\x{9598}\x{9599}\x{959A}\x{959B}\x{959C}\x{959D}\x{959E}\x{959F}' .
+'\x{95A1}\x{95A2}\x{95A3}\x{95A4}\x{95A5}\x{95A6}\x{95A7}\x{95A8}\x{95A9}' .
+'\x{95AA}\x{95AB}\x{95AC}\x{95AD}\x{95AE}\x{95AF}\x{95B0}\x{95B1}\x{95B2}' .
+'\x{95B5}\x{95B6}\x{95B7}\x{95B9}\x{95BA}\x{95BB}\x{95BC}\x{95BD}\x{95BE}' .
+'\x{95BF}\x{95C0}\x{95C2}\x{95C3}\x{95C4}\x{95C5}\x{95C6}\x{95C7}\x{95C8}' .
+'\x{95C9}\x{95CA}\x{95CB}\x{95CC}\x{95CD}\x{95CE}\x{95CF}\x{95D0}\x{95D1}' .
+'\x{95D2}\x{95D3}\x{95D4}\x{95D5}\x{95D6}\x{95D7}\x{95D8}\x{95DA}\x{95DB}' .
+'\x{95DC}\x{95DE}\x{95DF}\x{95E0}\x{95E1}\x{95E2}\x{95E3}\x{95E4}\x{95E5}' .
+'\x{95E6}\x{95E7}\x{95E8}\x{95E9}\x{95EA}\x{95EB}\x{95EC}\x{95ED}\x{95EE}' .
+'\x{95EF}\x{95F0}\x{95F1}\x{95F2}\x{95F3}\x{95F4}\x{95F5}\x{95F6}\x{95F7}' .
+'\x{95F8}\x{95F9}\x{95FA}\x{95FB}\x{95FC}\x{95FD}\x{95FE}\x{95FF}\x{9600}' .
+'\x{9601}\x{9602}\x{9603}\x{9604}\x{9605}\x{9606}\x{9607}\x{9608}\x{9609}' .
+'\x{960A}\x{960B}\x{960C}\x{960D}\x{960E}\x{960F}\x{9610}\x{9611}\x{9612}' .
+'\x{9613}\x{9614}\x{9615}\x{9616}\x{9617}\x{9618}\x{9619}\x{961A}\x{961B}' .
+'\x{961C}\x{961D}\x{961E}\x{961F}\x{9620}\x{9621}\x{9622}\x{9623}\x{9624}' .
+'\x{9627}\x{9628}\x{962A}\x{962B}\x{962C}\x{962D}\x{962E}\x{962F}\x{9630}' .
+'\x{9631}\x{9632}\x{9633}\x{9634}\x{9635}\x{9636}\x{9637}\x{9638}\x{9639}' .
+'\x{963A}\x{963B}\x{963C}\x{963D}\x{963F}\x{9640}\x{9641}\x{9642}\x{9643}' .
+'\x{9644}\x{9645}\x{9646}\x{9647}\x{9648}\x{9649}\x{964A}\x{964B}\x{964C}' .
+'\x{964D}\x{964E}\x{964F}\x{9650}\x{9651}\x{9652}\x{9653}\x{9654}\x{9655}' .
+'\x{9658}\x{9659}\x{965A}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9660}' .
+'\x{9661}\x{9662}\x{9663}\x{9664}\x{9666}\x{9667}\x{9668}\x{9669}\x{966A}' .
+'\x{966B}\x{966C}\x{966D}\x{966E}\x{966F}\x{9670}\x{9671}\x{9672}\x{9673}' .
+'\x{9674}\x{9675}\x{9676}\x{9677}\x{9678}\x{967C}\x{967D}\x{967E}\x{9680}' .
+'\x{9683}\x{9684}\x{9685}\x{9686}\x{9687}\x{9688}\x{9689}\x{968A}\x{968B}' .
+'\x{968D}\x{968E}\x{968F}\x{9690}\x{9691}\x{9692}\x{9693}\x{9694}\x{9695}' .
+'\x{9697}\x{9698}\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}\x{96A1}\x{96A2}' .
+'\x{96A3}\x{96A4}\x{96A5}\x{96A6}\x{96A7}\x{96A8}\x{96A9}\x{96AA}\x{96AC}' .
+'\x{96AD}\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}\x{96B7}\x{96B8}' .
+'\x{96B9}\x{96BA}\x{96BB}\x{96BC}\x{96BD}\x{96BE}\x{96BF}\x{96C0}\x{96C1}' .
+'\x{96C2}\x{96C3}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C8}\x{96C9}\x{96CA}' .
+'\x{96CB}\x{96CC}\x{96CD}\x{96CE}\x{96CF}\x{96D0}\x{96D1}\x{96D2}\x{96D3}' .
+'\x{96D4}\x{96D5}\x{96D6}\x{96D7}\x{96D8}\x{96D9}\x{96DA}\x{96DB}\x{96DC}' .
+'\x{96DD}\x{96DE}\x{96DF}\x{96E0}\x{96E1}\x{96E2}\x{96E3}\x{96E5}\x{96E8}' .
+'\x{96E9}\x{96EA}\x{96EB}\x{96EC}\x{96ED}\x{96EE}\x{96EF}\x{96F0}\x{96F1}' .
+'\x{96F2}\x{96F3}\x{96F4}\x{96F5}\x{96F6}\x{96F7}\x{96F8}\x{96F9}\x{96FA}' .
+'\x{96FB}\x{96FD}\x{96FE}\x{96FF}\x{9700}\x{9701}\x{9702}\x{9703}\x{9704}' .
+'\x{9705}\x{9706}\x{9707}\x{9708}\x{9709}\x{970A}\x{970B}\x{970C}\x{970D}' .
+'\x{970E}\x{970F}\x{9710}\x{9711}\x{9712}\x{9713}\x{9715}\x{9716}\x{9718}' .
+'\x{9719}\x{971C}\x{971D}\x{971E}\x{971F}\x{9720}\x{9721}\x{9722}\x{9723}' .
+'\x{9724}\x{9725}\x{9726}\x{9727}\x{9728}\x{9729}\x{972A}\x{972B}\x{972C}' .
+'\x{972D}\x{972E}\x{972F}\x{9730}\x{9731}\x{9732}\x{9735}\x{9736}\x{9738}' .
+'\x{9739}\x{973A}\x{973B}\x{973C}\x{973D}\x{973E}\x{973F}\x{9742}\x{9743}' .
+'\x{9744}\x{9745}\x{9746}\x{9747}\x{9748}\x{9749}\x{974A}\x{974B}\x{974C}' .
+'\x{974E}\x{974F}\x{9750}\x{9751}\x{9752}\x{9753}\x{9754}\x{9755}\x{9756}' .
+'\x{9758}\x{9759}\x{975A}\x{975B}\x{975C}\x{975D}\x{975E}\x{975F}\x{9760}' .
+'\x{9761}\x{9762}\x{9765}\x{9766}\x{9767}\x{9768}\x{9769}\x{976A}\x{976B}' .
+'\x{976C}\x{976D}\x{976E}\x{976F}\x{9770}\x{9772}\x{9773}\x{9774}\x{9776}' .
+'\x{9777}\x{9778}\x{9779}\x{977A}\x{977B}\x{977C}\x{977D}\x{977E}\x{977F}' .
+'\x{9780}\x{9781}\x{9782}\x{9783}\x{9784}\x{9785}\x{9786}\x{9788}\x{978A}' .
+'\x{978B}\x{978C}\x{978D}\x{978E}\x{978F}\x{9790}\x{9791}\x{9792}\x{9793}' .
+'\x{9794}\x{9795}\x{9796}\x{9797}\x{9798}\x{9799}\x{979A}\x{979C}\x{979D}' .
+'\x{979E}\x{979F}\x{97A0}\x{97A1}\x{97A2}\x{97A3}\x{97A4}\x{97A5}\x{97A6}' .
+'\x{97A7}\x{97A8}\x{97AA}\x{97AB}\x{97AC}\x{97AD}\x{97AE}\x{97AF}\x{97B2}' .
+'\x{97B3}\x{97B4}\x{97B6}\x{97B7}\x{97B8}\x{97B9}\x{97BA}\x{97BB}\x{97BC}' .
+'\x{97BD}\x{97BF}\x{97C1}\x{97C2}\x{97C3}\x{97C4}\x{97C5}\x{97C6}\x{97C7}' .
+'\x{97C8}\x{97C9}\x{97CA}\x{97CB}\x{97CC}\x{97CD}\x{97CE}\x{97CF}\x{97D0}' .
+'\x{97D1}\x{97D3}\x{97D4}\x{97D5}\x{97D6}\x{97D7}\x{97D8}\x{97D9}\x{97DA}' .
+'\x{97DB}\x{97DC}\x{97DD}\x{97DE}\x{97DF}\x{97E0}\x{97E1}\x{97E2}\x{97E3}' .
+'\x{97E4}\x{97E5}\x{97E6}\x{97E7}\x{97E8}\x{97E9}\x{97EA}\x{97EB}\x{97EC}' .
+'\x{97ED}\x{97EE}\x{97EF}\x{97F0}\x{97F1}\x{97F2}\x{97F3}\x{97F4}\x{97F5}' .
+'\x{97F6}\x{97F7}\x{97F8}\x{97F9}\x{97FA}\x{97FB}\x{97FD}\x{97FE}\x{97FF}' .
+'\x{9800}\x{9801}\x{9802}\x{9803}\x{9804}\x{9805}\x{9806}\x{9807}\x{9808}' .
+'\x{9809}\x{980A}\x{980B}\x{980C}\x{980D}\x{980E}\x{980F}\x{9810}\x{9811}' .
+'\x{9812}\x{9813}\x{9814}\x{9815}\x{9816}\x{9817}\x{9818}\x{9819}\x{981A}' .
+'\x{981B}\x{981C}\x{981D}\x{981E}\x{9820}\x{9821}\x{9822}\x{9823}\x{9824}' .
+'\x{9826}\x{9827}\x{9828}\x{9829}\x{982B}\x{982D}\x{982E}\x{982F}\x{9830}' .
+'\x{9831}\x{9832}\x{9834}\x{9835}\x{9836}\x{9837}\x{9838}\x{9839}\x{983B}' .
+'\x{983C}\x{983D}\x{983F}\x{9840}\x{9841}\x{9843}\x{9844}\x{9845}\x{9846}' .
+'\x{9848}\x{9849}\x{984A}\x{984C}\x{984D}\x{984E}\x{984F}\x{9850}\x{9851}' .
+'\x{9852}\x{9853}\x{9854}\x{9855}\x{9857}\x{9858}\x{9859}\x{985A}\x{985B}' .
+'\x{985C}\x{985D}\x{985E}\x{985F}\x{9860}\x{9861}\x{9862}\x{9863}\x{9864}' .
+'\x{9865}\x{9867}\x{9869}\x{986A}\x{986B}\x{986C}\x{986D}\x{986E}\x{986F}' .
+'\x{9870}\x{9871}\x{9872}\x{9873}\x{9874}\x{9875}\x{9876}\x{9877}\x{9878}' .
+'\x{9879}\x{987A}\x{987B}\x{987C}\x{987D}\x{987E}\x{987F}\x{9880}\x{9881}' .
+'\x{9882}\x{9883}\x{9884}\x{9885}\x{9886}\x{9887}\x{9888}\x{9889}\x{988A}' .
+'\x{988B}\x{988C}\x{988D}\x{988E}\x{988F}\x{9890}\x{9891}\x{9892}\x{9893}' .
+'\x{9894}\x{9895}\x{9896}\x{9897}\x{9898}\x{9899}\x{989A}\x{989B}\x{989C}' .
+'\x{989D}\x{989E}\x{989F}\x{98A0}\x{98A1}\x{98A2}\x{98A3}\x{98A4}\x{98A5}' .
+'\x{98A6}\x{98A7}\x{98A8}\x{98A9}\x{98AA}\x{98AB}\x{98AC}\x{98AD}\x{98AE}' .
+'\x{98AF}\x{98B0}\x{98B1}\x{98B2}\x{98B3}\x{98B4}\x{98B5}\x{98B6}\x{98B8}' .
+'\x{98B9}\x{98BA}\x{98BB}\x{98BC}\x{98BD}\x{98BE}\x{98BF}\x{98C0}\x{98C1}' .
+'\x{98C2}\x{98C3}\x{98C4}\x{98C5}\x{98C6}\x{98C8}\x{98C9}\x{98CB}\x{98CC}' .
+'\x{98CD}\x{98CE}\x{98CF}\x{98D0}\x{98D1}\x{98D2}\x{98D3}\x{98D4}\x{98D5}' .
+'\x{98D6}\x{98D7}\x{98D8}\x{98D9}\x{98DA}\x{98DB}\x{98DC}\x{98DD}\x{98DE}' .
+'\x{98DF}\x{98E0}\x{98E2}\x{98E3}\x{98E5}\x{98E6}\x{98E7}\x{98E8}\x{98E9}' .
+'\x{98EA}\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}\x{98F3}\x{98F4}\x{98F5}' .
+'\x{98F6}\x{98F7}\x{98F9}\x{98FA}\x{98FC}\x{98FD}\x{98FE}\x{98FF}\x{9900}' .
+'\x{9901}\x{9902}\x{9903}\x{9904}\x{9905}\x{9906}\x{9907}\x{9908}\x{9909}' .
+'\x{990A}\x{990B}\x{990C}\x{990D}\x{990E}\x{990F}\x{9910}\x{9911}\x{9912}' .
+'\x{9913}\x{9914}\x{9915}\x{9916}\x{9917}\x{9918}\x{991A}\x{991B}\x{991C}' .
+'\x{991D}\x{991E}\x{991F}\x{9920}\x{9921}\x{9922}\x{9923}\x{9924}\x{9925}' .
+'\x{9926}\x{9927}\x{9928}\x{9929}\x{992A}\x{992B}\x{992C}\x{992D}\x{992E}' .
+'\x{992F}\x{9930}\x{9931}\x{9932}\x{9933}\x{9934}\x{9935}\x{9936}\x{9937}' .
+'\x{9938}\x{9939}\x{993A}\x{993C}\x{993D}\x{993E}\x{993F}\x{9940}\x{9941}' .
+'\x{9942}\x{9943}\x{9945}\x{9946}\x{9947}\x{9948}\x{9949}\x{994A}\x{994B}' .
+'\x{994C}\x{994E}\x{994F}\x{9950}\x{9951}\x{9952}\x{9953}\x{9954}\x{9955}' .
+'\x{9956}\x{9957}\x{9958}\x{9959}\x{995B}\x{995C}\x{995E}\x{995F}\x{9960}' .
+'\x{9961}\x{9962}\x{9963}\x{9964}\x{9965}\x{9966}\x{9967}\x{9968}\x{9969}' .
+'\x{996A}\x{996B}\x{996C}\x{996D}\x{996E}\x{996F}\x{9970}\x{9971}\x{9972}' .
+'\x{9973}\x{9974}\x{9975}\x{9976}\x{9977}\x{9978}\x{9979}\x{997A}\x{997B}' .
+'\x{997C}\x{997D}\x{997E}\x{997F}\x{9980}\x{9981}\x{9982}\x{9983}\x{9984}' .
+'\x{9985}\x{9986}\x{9987}\x{9988}\x{9989}\x{998A}\x{998B}\x{998C}\x{998D}' .
+'\x{998E}\x{998F}\x{9990}\x{9991}\x{9992}\x{9993}\x{9994}\x{9995}\x{9996}' .
+'\x{9997}\x{9998}\x{9999}\x{999A}\x{999B}\x{999C}\x{999D}\x{999E}\x{999F}' .
+'\x{99A0}\x{99A1}\x{99A2}\x{99A3}\x{99A4}\x{99A5}\x{99A6}\x{99A7}\x{99A8}' .
+'\x{99A9}\x{99AA}\x{99AB}\x{99AC}\x{99AD}\x{99AE}\x{99AF}\x{99B0}\x{99B1}' .
+'\x{99B2}\x{99B3}\x{99B4}\x{99B5}\x{99B6}\x{99B7}\x{99B8}\x{99B9}\x{99BA}' .
+'\x{99BB}\x{99BC}\x{99BD}\x{99BE}\x{99C0}\x{99C1}\x{99C2}\x{99C3}\x{99C4}' .
+'\x{99C6}\x{99C7}\x{99C8}\x{99C9}\x{99CA}\x{99CB}\x{99CC}\x{99CD}\x{99CE}' .
+'\x{99CF}\x{99D0}\x{99D1}\x{99D2}\x{99D3}\x{99D4}\x{99D5}\x{99D6}\x{99D7}' .
+'\x{99D8}\x{99D9}\x{99DA}\x{99DB}\x{99DC}\x{99DD}\x{99DE}\x{99DF}\x{99E1}' .
+'\x{99E2}\x{99E3}\x{99E4}\x{99E5}\x{99E7}\x{99E8}\x{99E9}\x{99EA}\x{99EC}' .
+'\x{99ED}\x{99EE}\x{99EF}\x{99F0}\x{99F1}\x{99F2}\x{99F3}\x{99F4}\x{99F6}' .
+'\x{99F7}\x{99F8}\x{99F9}\x{99FA}\x{99FB}\x{99FC}\x{99FD}\x{99FE}\x{99FF}' .
+'\x{9A00}\x{9A01}\x{9A02}\x{9A03}\x{9A04}\x{9A05}\x{9A06}\x{9A07}\x{9A08}' .
+'\x{9A09}\x{9A0A}\x{9A0B}\x{9A0C}\x{9A0D}\x{9A0E}\x{9A0F}\x{9A11}\x{9A14}' .
+'\x{9A15}\x{9A16}\x{9A19}\x{9A1A}\x{9A1B}\x{9A1C}\x{9A1D}\x{9A1E}\x{9A1F}' .
+'\x{9A20}\x{9A21}\x{9A22}\x{9A23}\x{9A24}\x{9A25}\x{9A26}\x{9A27}\x{9A29}' .
+'\x{9A2A}\x{9A2B}\x{9A2C}\x{9A2D}\x{9A2E}\x{9A2F}\x{9A30}\x{9A31}\x{9A32}' .
+'\x{9A33}\x{9A34}\x{9A35}\x{9A36}\x{9A37}\x{9A38}\x{9A39}\x{9A3A}\x{9A3C}' .
+'\x{9A3D}\x{9A3E}\x{9A3F}\x{9A40}\x{9A41}\x{9A42}\x{9A43}\x{9A44}\x{9A45}' .
+'\x{9A46}\x{9A47}\x{9A48}\x{9A49}\x{9A4A}\x{9A4B}\x{9A4C}\x{9A4D}\x{9A4E}' .
+'\x{9A4F}\x{9A50}\x{9A52}\x{9A53}\x{9A54}\x{9A55}\x{9A56}\x{9A57}\x{9A59}' .
+'\x{9A5A}\x{9A5B}\x{9A5C}\x{9A5E}\x{9A5F}\x{9A60}\x{9A61}\x{9A62}\x{9A64}' .
+'\x{9A65}\x{9A66}\x{9A67}\x{9A68}\x{9A69}\x{9A6A}\x{9A6B}\x{9A6C}\x{9A6D}' .
+'\x{9A6E}\x{9A6F}\x{9A70}\x{9A71}\x{9A72}\x{9A73}\x{9A74}\x{9A75}\x{9A76}' .
+'\x{9A77}\x{9A78}\x{9A79}\x{9A7A}\x{9A7B}\x{9A7C}\x{9A7D}\x{9A7E}\x{9A7F}' .
+'\x{9A80}\x{9A81}\x{9A82}\x{9A83}\x{9A84}\x{9A85}\x{9A86}\x{9A87}\x{9A88}' .
+'\x{9A89}\x{9A8A}\x{9A8B}\x{9A8C}\x{9A8D}\x{9A8E}\x{9A8F}\x{9A90}\x{9A91}' .
+'\x{9A92}\x{9A93}\x{9A94}\x{9A95}\x{9A96}\x{9A97}\x{9A98}\x{9A99}\x{9A9A}' .
+'\x{9A9B}\x{9A9C}\x{9A9D}\x{9A9E}\x{9A9F}\x{9AA0}\x{9AA1}\x{9AA2}\x{9AA3}' .
+'\x{9AA4}\x{9AA5}\x{9AA6}\x{9AA7}\x{9AA8}\x{9AAA}\x{9AAB}\x{9AAC}\x{9AAD}' .
+'\x{9AAE}\x{9AAF}\x{9AB0}\x{9AB1}\x{9AB2}\x{9AB3}\x{9AB4}\x{9AB5}\x{9AB6}' .
+'\x{9AB7}\x{9AB8}\x{9AB9}\x{9ABA}\x{9ABB}\x{9ABC}\x{9ABE}\x{9ABF}\x{9AC0}' .
+'\x{9AC1}\x{9AC2}\x{9AC3}\x{9AC4}\x{9AC5}\x{9AC6}\x{9AC7}\x{9AC9}\x{9ACA}' .
+'\x{9ACB}\x{9ACC}\x{9ACD}\x{9ACE}\x{9ACF}\x{9AD0}\x{9AD1}\x{9AD2}\x{9AD3}' .
+'\x{9AD4}\x{9AD5}\x{9AD6}\x{9AD8}\x{9AD9}\x{9ADA}\x{9ADB}\x{9ADC}\x{9ADD}' .
+'\x{9ADE}\x{9ADF}\x{9AE1}\x{9AE2}\x{9AE3}\x{9AE5}\x{9AE6}\x{9AE7}\x{9AEA}' .
+'\x{9AEB}\x{9AEC}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF2}\x{9AF3}\x{9AF4}' .
+'\x{9AF5}\x{9AF6}\x{9AF7}\x{9AF8}\x{9AF9}\x{9AFA}\x{9AFB}\x{9AFC}\x{9AFD}' .
+'\x{9AFE}\x{9AFF}\x{9B01}\x{9B03}\x{9B04}\x{9B05}\x{9B06}\x{9B07}\x{9B08}' .
+'\x{9B0A}\x{9B0B}\x{9B0C}\x{9B0D}\x{9B0E}\x{9B0F}\x{9B10}\x{9B11}\x{9B12}' .
+'\x{9B13}\x{9B15}\x{9B16}\x{9B17}\x{9B18}\x{9B19}\x{9B1A}\x{9B1C}\x{9B1D}' .
+'\x{9B1E}\x{9B1F}\x{9B20}\x{9B21}\x{9B22}\x{9B23}\x{9B24}\x{9B25}\x{9B26}' .
+'\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2B}\x{9B2C}\x{9B2D}\x{9B2E}\x{9B2F}' .
+'\x{9B30}\x{9B31}\x{9B32}\x{9B33}\x{9B35}\x{9B36}\x{9B37}\x{9B38}\x{9B39}' .
+'\x{9B3A}\x{9B3B}\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}\x{9B42}\x{9B43}\x{9B44}' .
+'\x{9B45}\x{9B46}\x{9B47}\x{9B48}\x{9B49}\x{9B4A}\x{9B4B}\x{9B4C}\x{9B4D}' .
+'\x{9B4E}\x{9B4F}\x{9B51}\x{9B52}\x{9B53}\x{9B54}\x{9B55}\x{9B56}\x{9B58}' .
+'\x{9B59}\x{9B5A}\x{9B5B}\x{9B5C}\x{9B5D}\x{9B5E}\x{9B5F}\x{9B60}\x{9B61}' .
+'\x{9B63}\x{9B64}\x{9B65}\x{9B66}\x{9B67}\x{9B68}\x{9B69}\x{9B6A}\x{9B6B}' .
+'\x{9B6C}\x{9B6D}\x{9B6E}\x{9B6F}\x{9B70}\x{9B71}\x{9B73}\x{9B74}\x{9B75}' .
+'\x{9B76}\x{9B77}\x{9B78}\x{9B79}\x{9B7A}\x{9B7B}\x{9B7C}\x{9B7D}\x{9B7E}' .
+'\x{9B7F}\x{9B80}\x{9B81}\x{9B82}\x{9B83}\x{9B84}\x{9B85}\x{9B86}\x{9B87}' .
+'\x{9B88}\x{9B8A}\x{9B8B}\x{9B8D}\x{9B8E}\x{9B8F}\x{9B90}\x{9B91}\x{9B92}' .
+'\x{9B93}\x{9B94}\x{9B95}\x{9B96}\x{9B97}\x{9B98}\x{9B9A}\x{9B9B}\x{9B9C}' .
+'\x{9B9D}\x{9B9E}\x{9B9F}\x{9BA0}\x{9BA1}\x{9BA2}\x{9BA3}\x{9BA4}\x{9BA5}' .
+'\x{9BA6}\x{9BA7}\x{9BA8}\x{9BA9}\x{9BAA}\x{9BAB}\x{9BAC}\x{9BAD}\x{9BAE}' .
+'\x{9BAF}\x{9BB0}\x{9BB1}\x{9BB2}\x{9BB3}\x{9BB4}\x{9BB5}\x{9BB6}\x{9BB7}' .
+'\x{9BB8}\x{9BB9}\x{9BBA}\x{9BBB}\x{9BBC}\x{9BBD}\x{9BBE}\x{9BBF}\x{9BC0}' .
+'\x{9BC1}\x{9BC3}\x{9BC4}\x{9BC5}\x{9BC6}\x{9BC7}\x{9BC8}\x{9BC9}\x{9BCA}' .
+'\x{9BCB}\x{9BCC}\x{9BCD}\x{9BCE}\x{9BCF}\x{9BD0}\x{9BD1}\x{9BD2}\x{9BD3}' .
+'\x{9BD4}\x{9BD5}\x{9BD6}\x{9BD7}\x{9BD8}\x{9BD9}\x{9BDA}\x{9BDB}\x{9BDC}' .
+'\x{9BDD}\x{9BDE}\x{9BDF}\x{9BE0}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}\x{9BE5}' .
+'\x{9BE6}\x{9BE7}\x{9BE8}\x{9BE9}\x{9BEA}\x{9BEB}\x{9BEC}\x{9BED}\x{9BEE}' .
+'\x{9BEF}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF3}\x{9BF4}\x{9BF5}\x{9BF7}\x{9BF8}' .
+'\x{9BF9}\x{9BFA}\x{9BFB}\x{9BFC}\x{9BFD}\x{9BFE}\x{9BFF}\x{9C02}\x{9C05}' .
+'\x{9C06}\x{9C07}\x{9C08}\x{9C09}\x{9C0A}\x{9C0B}\x{9C0C}\x{9C0D}\x{9C0E}' .
+'\x{9C0F}\x{9C10}\x{9C11}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C16}\x{9C17}' .
+'\x{9C18}\x{9C19}\x{9C1A}\x{9C1B}\x{9C1C}\x{9C1D}\x{9C1E}\x{9C1F}\x{9C20}' .
+'\x{9C21}\x{9C22}\x{9C23}\x{9C24}\x{9C25}\x{9C26}\x{9C27}\x{9C28}\x{9C29}' .
+'\x{9C2A}\x{9C2B}\x{9C2C}\x{9C2D}\x{9C2F}\x{9C30}\x{9C31}\x{9C32}\x{9C33}' .
+'\x{9C34}\x{9C35}\x{9C36}\x{9C37}\x{9C38}\x{9C39}\x{9C3A}\x{9C3B}\x{9C3C}' .
+'\x{9C3D}\x{9C3E}\x{9C3F}\x{9C40}\x{9C41}\x{9C43}\x{9C44}\x{9C45}\x{9C46}' .
+'\x{9C47}\x{9C48}\x{9C49}\x{9C4A}\x{9C4B}\x{9C4C}\x{9C4D}\x{9C4E}\x{9C50}' .
+'\x{9C52}\x{9C53}\x{9C54}\x{9C55}\x{9C56}\x{9C57}\x{9C58}\x{9C59}\x{9C5A}' .
+'\x{9C5B}\x{9C5C}\x{9C5D}\x{9C5E}\x{9C5F}\x{9C60}\x{9C62}\x{9C63}\x{9C65}' .
+'\x{9C66}\x{9C67}\x{9C68}\x{9C69}\x{9C6A}\x{9C6B}\x{9C6C}\x{9C6D}\x{9C6E}' .
+'\x{9C6F}\x{9C70}\x{9C71}\x{9C72}\x{9C73}\x{9C74}\x{9C75}\x{9C77}\x{9C78}' .
+'\x{9C79}\x{9C7A}\x{9C7C}\x{9C7D}\x{9C7E}\x{9C7F}\x{9C80}\x{9C81}\x{9C82}' .
+'\x{9C83}\x{9C84}\x{9C85}\x{9C86}\x{9C87}\x{9C88}\x{9C89}\x{9C8A}\x{9C8B}' .
+'\x{9C8C}\x{9C8D}\x{9C8E}\x{9C8F}\x{9C90}\x{9C91}\x{9C92}\x{9C93}\x{9C94}' .
+'\x{9C95}\x{9C96}\x{9C97}\x{9C98}\x{9C99}\x{9C9A}\x{9C9B}\x{9C9C}\x{9C9D}' .
+'\x{9C9E}\x{9C9F}\x{9CA0}\x{9CA1}\x{9CA2}\x{9CA3}\x{9CA4}\x{9CA5}\x{9CA6}' .
+'\x{9CA7}\x{9CA8}\x{9CA9}\x{9CAA}\x{9CAB}\x{9CAC}\x{9CAD}\x{9CAE}\x{9CAF}' .
+'\x{9CB0}\x{9CB1}\x{9CB2}\x{9CB3}\x{9CB4}\x{9CB5}\x{9CB6}\x{9CB7}\x{9CB8}' .
+'\x{9CB9}\x{9CBA}\x{9CBB}\x{9CBC}\x{9CBD}\x{9CBE}\x{9CBF}\x{9CC0}\x{9CC1}' .
+'\x{9CC2}\x{9CC3}\x{9CC4}\x{9CC5}\x{9CC6}\x{9CC7}\x{9CC8}\x{9CC9}\x{9CCA}' .
+'\x{9CCB}\x{9CCC}\x{9CCD}\x{9CCE}\x{9CCF}\x{9CD0}\x{9CD1}\x{9CD2}\x{9CD3}' .
+'\x{9CD4}\x{9CD5}\x{9CD6}\x{9CD7}\x{9CD8}\x{9CD9}\x{9CDA}\x{9CDB}\x{9CDC}' .
+'\x{9CDD}\x{9CDE}\x{9CDF}\x{9CE0}\x{9CE1}\x{9CE2}\x{9CE3}\x{9CE4}\x{9CE5}' .
+'\x{9CE6}\x{9CE7}\x{9CE8}\x{9CE9}\x{9CEA}\x{9CEB}\x{9CEC}\x{9CED}\x{9CEE}' .
+'\x{9CEF}\x{9CF0}\x{9CF1}\x{9CF2}\x{9CF3}\x{9CF4}\x{9CF5}\x{9CF6}\x{9CF7}' .
+'\x{9CF8}\x{9CF9}\x{9CFA}\x{9CFB}\x{9CFC}\x{9CFD}\x{9CFE}\x{9CFF}\x{9D00}' .
+'\x{9D01}\x{9D02}\x{9D03}\x{9D04}\x{9D05}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
+'\x{9D0A}\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}\x{9D13}\x{9D14}\x{9D15}\x{9D16}' .
+'\x{9D17}\x{9D18}\x{9D19}\x{9D1A}\x{9D1B}\x{9D1C}\x{9D1D}\x{9D1E}\x{9D1F}' .
+'\x{9D20}\x{9D21}\x{9D22}\x{9D23}\x{9D24}\x{9D25}\x{9D26}\x{9D28}\x{9D29}' .
+'\x{9D2B}\x{9D2D}\x{9D2E}\x{9D2F}\x{9D30}\x{9D31}\x{9D32}\x{9D33}\x{9D34}' .
+'\x{9D36}\x{9D37}\x{9D38}\x{9D39}\x{9D3A}\x{9D3B}\x{9D3D}\x{9D3E}\x{9D3F}' .
+'\x{9D40}\x{9D41}\x{9D42}\x{9D43}\x{9D45}\x{9D46}\x{9D47}\x{9D48}\x{9D49}' .
+'\x{9D4A}\x{9D4B}\x{9D4C}\x{9D4D}\x{9D4E}\x{9D4F}\x{9D50}\x{9D51}\x{9D52}' .
+'\x{9D53}\x{9D54}\x{9D55}\x{9D56}\x{9D57}\x{9D58}\x{9D59}\x{9D5A}\x{9D5B}' .
+'\x{9D5C}\x{9D5D}\x{9D5E}\x{9D5F}\x{9D60}\x{9D61}\x{9D62}\x{9D63}\x{9D64}' .
+'\x{9D65}\x{9D66}\x{9D67}\x{9D68}\x{9D69}\x{9D6A}\x{9D6B}\x{9D6C}\x{9D6E}' .
+'\x{9D6F}\x{9D70}\x{9D71}\x{9D72}\x{9D73}\x{9D74}\x{9D75}\x{9D76}\x{9D77}' .
+'\x{9D78}\x{9D79}\x{9D7A}\x{9D7B}\x{9D7C}\x{9D7D}\x{9D7E}\x{9D7F}\x{9D80}' .
+'\x{9D81}\x{9D82}\x{9D83}\x{9D84}\x{9D85}\x{9D86}\x{9D87}\x{9D88}\x{9D89}' .
+'\x{9D8A}\x{9D8B}\x{9D8C}\x{9D8D}\x{9D8E}\x{9D90}\x{9D91}\x{9D92}\x{9D93}' .
+'\x{9D94}\x{9D96}\x{9D97}\x{9D98}\x{9D99}\x{9D9A}\x{9D9B}\x{9D9C}\x{9D9D}' .
+'\x{9D9E}\x{9D9F}\x{9DA0}\x{9DA1}\x{9DA2}\x{9DA3}\x{9DA4}\x{9DA5}\x{9DA6}' .
+'\x{9DA7}\x{9DA8}\x{9DA9}\x{9DAA}\x{9DAB}\x{9DAC}\x{9DAD}\x{9DAF}\x{9DB0}' .
+'\x{9DB1}\x{9DB2}\x{9DB3}\x{9DB4}\x{9DB5}\x{9DB6}\x{9DB7}\x{9DB8}\x{9DB9}' .
+'\x{9DBA}\x{9DBB}\x{9DBC}\x{9DBE}\x{9DBF}\x{9DC1}\x{9DC2}\x{9DC3}\x{9DC4}' .
+'\x{9DC5}\x{9DC7}\x{9DC8}\x{9DC9}\x{9DCA}\x{9DCB}\x{9DCC}\x{9DCD}\x{9DCE}' .
+'\x{9DCF}\x{9DD0}\x{9DD1}\x{9DD2}\x{9DD3}\x{9DD4}\x{9DD5}\x{9DD6}\x{9DD7}' .
+'\x{9DD8}\x{9DD9}\x{9DDA}\x{9DDB}\x{9DDC}\x{9DDD}\x{9DDE}\x{9DDF}\x{9DE0}' .
+'\x{9DE1}\x{9DE2}\x{9DE3}\x{9DE4}\x{9DE5}\x{9DE6}\x{9DE7}\x{9DE8}\x{9DE9}' .
+'\x{9DEB}\x{9DEC}\x{9DED}\x{9DEE}\x{9DEF}\x{9DF0}\x{9DF1}\x{9DF2}\x{9DF3}' .
+'\x{9DF4}\x{9DF5}\x{9DF6}\x{9DF7}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFB}\x{9DFD}' .
+'\x{9DFE}\x{9DFF}\x{9E00}\x{9E01}\x{9E02}\x{9E03}\x{9E04}\x{9E05}\x{9E06}' .
+'\x{9E07}\x{9E08}\x{9E09}\x{9E0A}\x{9E0B}\x{9E0C}\x{9E0D}\x{9E0F}\x{9E10}' .
+'\x{9E11}\x{9E12}\x{9E13}\x{9E14}\x{9E15}\x{9E17}\x{9E18}\x{9E19}\x{9E1A}' .
+'\x{9E1B}\x{9E1D}\x{9E1E}\x{9E1F}\x{9E20}\x{9E21}\x{9E22}\x{9E23}\x{9E24}' .
+'\x{9E25}\x{9E26}\x{9E27}\x{9E28}\x{9E29}\x{9E2A}\x{9E2B}\x{9E2C}\x{9E2D}' .
+'\x{9E2E}\x{9E2F}\x{9E30}\x{9E31}\x{9E32}\x{9E33}\x{9E34}\x{9E35}\x{9E36}' .
+'\x{9E37}\x{9E38}\x{9E39}\x{9E3A}\x{9E3B}\x{9E3C}\x{9E3D}\x{9E3E}\x{9E3F}' .
+'\x{9E40}\x{9E41}\x{9E42}\x{9E43}\x{9E44}\x{9E45}\x{9E46}\x{9E47}\x{9E48}' .
+'\x{9E49}\x{9E4A}\x{9E4B}\x{9E4C}\x{9E4D}\x{9E4E}\x{9E4F}\x{9E50}\x{9E51}' .
+'\x{9E52}\x{9E53}\x{9E54}\x{9E55}\x{9E56}\x{9E57}\x{9E58}\x{9E59}\x{9E5A}' .
+'\x{9E5B}\x{9E5C}\x{9E5D}\x{9E5E}\x{9E5F}\x{9E60}\x{9E61}\x{9E62}\x{9E63}' .
+'\x{9E64}\x{9E65}\x{9E66}\x{9E67}\x{9E68}\x{9E69}\x{9E6A}\x{9E6B}\x{9E6C}' .
+'\x{9E6D}\x{9E6E}\x{9E6F}\x{9E70}\x{9E71}\x{9E72}\x{9E73}\x{9E74}\x{9E75}' .
+'\x{9E76}\x{9E77}\x{9E79}\x{9E7A}\x{9E7C}\x{9E7D}\x{9E7E}\x{9E7F}\x{9E80}' .
+'\x{9E81}\x{9E82}\x{9E83}\x{9E84}\x{9E85}\x{9E86}\x{9E87}\x{9E88}\x{9E89}' .
+'\x{9E8A}\x{9E8B}\x{9E8C}\x{9E8D}\x{9E8E}\x{9E91}\x{9E92}\x{9E93}\x{9E94}' .
+'\x{9E96}\x{9E97}\x{9E99}\x{9E9A}\x{9E9B}\x{9E9C}\x{9E9D}\x{9E9F}\x{9EA0}' .
+'\x{9EA1}\x{9EA3}\x{9EA4}\x{9EA5}\x{9EA6}\x{9EA7}\x{9EA8}\x{9EA9}\x{9EAA}' .
+'\x{9EAD}\x{9EAE}\x{9EAF}\x{9EB0}\x{9EB2}\x{9EB3}\x{9EB4}\x{9EB5}\x{9EB6}' .
+'\x{9EB7}\x{9EB8}\x{9EBB}\x{9EBC}\x{9EBD}\x{9EBE}\x{9EBF}\x{9EC0}\x{9EC1}' .
+'\x{9EC2}\x{9EC3}\x{9EC4}\x{9EC5}\x{9EC6}\x{9EC7}\x{9EC8}\x{9EC9}\x{9ECA}' .
+'\x{9ECB}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED1}\x{9ED2}\x{9ED3}' .
+'\x{9ED4}\x{9ED5}\x{9ED6}\x{9ED7}\x{9ED8}\x{9ED9}\x{9EDA}\x{9EDB}\x{9EDC}' .
+'\x{9EDD}\x{9EDE}\x{9EDF}\x{9EE0}\x{9EE1}\x{9EE2}\x{9EE3}\x{9EE4}\x{9EE5}' .
+'\x{9EE6}\x{9EE7}\x{9EE8}\x{9EE9}\x{9EEA}\x{9EEB}\x{9EED}\x{9EEE}\x{9EEF}' .
+'\x{9EF0}\x{9EF2}\x{9EF3}\x{9EF4}\x{9EF5}\x{9EF6}\x{9EF7}\x{9EF8}\x{9EF9}' .
+'\x{9EFA}\x{9EFB}\x{9EFC}\x{9EFD}\x{9EFE}\x{9EFF}\x{9F00}\x{9F01}\x{9F02}' .
+'\x{9F04}\x{9F05}\x{9F06}\x{9F07}\x{9F08}\x{9F09}\x{9F0A}\x{9F0B}\x{9F0C}' .
+'\x{9F0D}\x{9F0E}\x{9F0F}\x{9F10}\x{9F12}\x{9F13}\x{9F15}\x{9F16}\x{9F17}' .
+'\x{9F18}\x{9F19}\x{9F1A}\x{9F1B}\x{9F1C}\x{9F1D}\x{9F1E}\x{9F1F}\x{9F20}' .
+'\x{9F22}\x{9F23}\x{9F24}\x{9F25}\x{9F27}\x{9F28}\x{9F29}\x{9F2A}\x{9F2B}' .
+'\x{9F2C}\x{9F2D}\x{9F2E}\x{9F2F}\x{9F30}\x{9F31}\x{9F32}\x{9F33}\x{9F34}' .
+'\x{9F35}\x{9F36}\x{9F37}\x{9F38}\x{9F39}\x{9F3A}\x{9F3B}\x{9F3C}\x{9F3D}' .
+'\x{9F3E}\x{9F3F}\x{9F40}\x{9F41}\x{9F42}\x{9F43}\x{9F44}\x{9F46}\x{9F47}' .
+'\x{9F48}\x{9F49}\x{9F4A}\x{9F4B}\x{9F4C}\x{9F4D}\x{9F4E}\x{9F4F}\x{9F50}' .
+'\x{9F51}\x{9F52}\x{9F54}\x{9F55}\x{9F56}\x{9F57}\x{9F58}\x{9F59}\x{9F5A}' .
+'\x{9F5B}\x{9F5C}\x{9F5D}\x{9F5E}\x{9F5F}\x{9F60}\x{9F61}\x{9F63}\x{9F64}' .
+'\x{9F65}\x{9F66}\x{9F67}\x{9F68}\x{9F69}\x{9F6A}\x{9F6B}\x{9F6C}\x{9F6E}' .
+'\x{9F6F}\x{9F70}\x{9F71}\x{9F72}\x{9F73}\x{9F74}\x{9F75}\x{9F76}\x{9F77}' .
+'\x{9F78}\x{9F79}\x{9F7A}\x{9F7B}\x{9F7C}\x{9F7D}\x{9F7E}\x{9F7F}\x{9F80}' .
+'\x{9F81}\x{9F82}\x{9F83}\x{9F84}\x{9F85}\x{9F86}\x{9F87}\x{9F88}\x{9F89}' .
+'\x{9F8A}\x{9F8B}\x{9F8C}\x{9F8D}\x{9F8E}\x{9F8F}\x{9F90}\x{9F91}\x{9F92}' .
+'\x{9F93}\x{9F94}\x{9F95}\x{9F96}\x{9F97}\x{9F98}\x{9F99}\x{9F9A}\x{9F9B}' .
+'\x{9F9C}\x{9F9D}\x{9F9E}\x{9F9F}\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu');
diff --git a/zend/library/Zend/Validate/Hostname/Cn.php b/zend/library/Zend/Validate/Hostname/Cn.php
new file mode 100644
index 0000000..19f178c
--- /dev/null
+++ b/zend/library/Zend/Validate/Hostname/Cn.php
@@ -0,0 +1,2199 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Cn.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Ressource file for chinese idn validation
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+return array(
+ 1 => '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' .
+'\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' .
+'\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' .
+'\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' .
+'\x{49B6}\x{49B7}\x{4C77}\x{4C9F}\x{4CA0}\x{4CA1}\x{4CA2}\x{4CA3}\x{4D13}' .
+'\x{4D14}\x{4D15}\x{4D16}\x{4D17}\x{4D18}\x{4D19}\x{4DAE}\x{4E00}\x{4E01}' .
+'\x{4E02}\x{4E03}\x{4E04}\x{4E05}\x{4E06}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
+'\x{4E0B}\x{4E0C}\x{4E0D}\x{4E0E}\x{4E0F}\x{4E10}\x{4E11}\x{4E13}\x{4E14}' .
+'\x{4E15}\x{4E16}\x{4E17}\x{4E18}\x{4E19}\x{4E1A}\x{4E1B}\x{4E1C}\x{4E1D}' .
+'\x{4E1E}\x{4E1F}\x{4E20}\x{4E21}\x{4E22}\x{4E23}\x{4E24}\x{4E25}\x{4E26}' .
+'\x{4E27}\x{4E28}\x{4E2A}\x{4E2B}\x{4E2C}\x{4E2D}\x{4E2E}\x{4E2F}\x{4E30}' .
+'\x{4E31}\x{4E32}\x{4E33}\x{4E34}\x{4E35}\x{4E36}\x{4E37}\x{4E38}\x{4E39}' .
+'\x{4E3A}\x{4E3B}\x{4E3C}\x{4E3D}\x{4E3E}\x{4E3F}\x{4E40}\x{4E41}\x{4E42}' .
+'\x{4E43}\x{4E44}\x{4E45}\x{4E46}\x{4E47}\x{4E48}\x{4E49}\x{4E4A}\x{4E4B}' .
+'\x{4E4C}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E50}\x{4E51}\x{4E52}\x{4E53}\x{4E54}' .
+'\x{4E56}\x{4E57}\x{4E58}\x{4E59}\x{4E5A}\x{4E5B}\x{4E5C}\x{4E5D}\x{4E5E}' .
+'\x{4E5F}\x{4E60}\x{4E61}\x{4E62}\x{4E63}\x{4E64}\x{4E65}\x{4E66}\x{4E67}' .
+'\x{4E69}\x{4E6A}\x{4E6B}\x{4E6C}\x{4E6D}\x{4E6E}\x{4E6F}\x{4E70}\x{4E71}' .
+'\x{4E72}\x{4E73}\x{4E74}\x{4E75}\x{4E76}\x{4E77}\x{4E78}\x{4E7A}\x{4E7B}' .
+'\x{4E7C}\x{4E7D}\x{4E7E}\x{4E7F}\x{4E80}\x{4E81}\x{4E82}\x{4E83}\x{4E84}' .
+'\x{4E85}\x{4E86}\x{4E87}\x{4E88}\x{4E89}\x{4E8B}\x{4E8C}\x{4E8D}\x{4E8E}' .
+'\x{4E8F}\x{4E90}\x{4E91}\x{4E92}\x{4E93}\x{4E94}\x{4E95}\x{4E97}\x{4E98}' .
+'\x{4E99}\x{4E9A}\x{4E9B}\x{4E9C}\x{4E9D}\x{4E9E}\x{4E9F}\x{4EA0}\x{4EA1}' .
+'\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA7}\x{4EA8}\x{4EA9}\x{4EAA}\x{4EAB}' .
+'\x{4EAC}\x{4EAD}\x{4EAE}\x{4EAF}\x{4EB0}\x{4EB1}\x{4EB2}\x{4EB3}\x{4EB4}' .
+'\x{4EB5}\x{4EB6}\x{4EB7}\x{4EB8}\x{4EB9}\x{4EBA}\x{4EBB}\x{4EBD}\x{4EBE}' .
+'\x{4EBF}\x{4EC0}\x{4EC1}\x{4EC2}\x{4EC3}\x{4EC4}\x{4EC5}\x{4EC6}\x{4EC7}' .
+'\x{4EC8}\x{4EC9}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED0}\x{4ED1}' .
+'\x{4ED2}\x{4ED3}\x{4ED4}\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDA}' .
+'\x{4EDB}\x{4EDC}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE0}\x{4EE1}\x{4EE2}\x{4EE3}' .
+'\x{4EE4}\x{4EE5}\x{4EE6}\x{4EE8}\x{4EE9}\x{4EEA}\x{4EEB}\x{4EEC}\x{4EEF}' .
+'\x{4EF0}\x{4EF1}\x{4EF2}\x{4EF3}\x{4EF4}\x{4EF5}\x{4EF6}\x{4EF7}\x{4EFB}' .
+'\x{4EFD}\x{4EFF}\x{4F00}\x{4F01}\x{4F02}\x{4F03}\x{4F04}\x{4F05}\x{4F06}' .
+'\x{4F08}\x{4F09}\x{4F0A}\x{4F0B}\x{4F0C}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}' .
+'\x{4F11}\x{4F12}\x{4F13}\x{4F14}\x{4F15}\x{4F17}\x{4F18}\x{4F19}\x{4F1A}' .
+'\x{4F1B}\x{4F1C}\x{4F1D}\x{4F1E}\x{4F1F}\x{4F20}\x{4F21}\x{4F22}\x{4F23}' .
+'\x{4F24}\x{4F25}\x{4F26}\x{4F27}\x{4F29}\x{4F2A}\x{4F2B}\x{4F2C}\x{4F2D}' .
+'\x{4F2E}\x{4F2F}\x{4F30}\x{4F32}\x{4F33}\x{4F34}\x{4F36}\x{4F38}\x{4F39}' .
+'\x{4F3A}\x{4F3B}\x{4F3C}\x{4F3D}\x{4F3E}\x{4F3F}\x{4F41}\x{4F42}\x{4F43}' .
+'\x{4F45}\x{4F46}\x{4F47}\x{4F48}\x{4F49}\x{4F4A}\x{4F4B}\x{4F4C}\x{4F4D}' .
+'\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}\x{4F52}\x{4F53}\x{4F54}\x{4F55}\x{4F56}' .
+'\x{4F57}\x{4F58}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}\x{4F5F}' .
+'\x{4F60}\x{4F61}\x{4F62}\x{4F63}\x{4F64}\x{4F65}\x{4F66}\x{4F67}\x{4F68}' .
+'\x{4F69}\x{4F6A}\x{4F6B}\x{4F6C}\x{4F6D}\x{4F6E}\x{4F6F}\x{4F70}\x{4F72}' .
+'\x{4F73}\x{4F74}\x{4F75}\x{4F76}\x{4F77}\x{4F78}\x{4F79}\x{4F7A}\x{4F7B}' .
+'\x{4F7C}\x{4F7D}\x{4F7E}\x{4F7F}\x{4F80}\x{4F81}\x{4F82}\x{4F83}\x{4F84}' .
+'\x{4F85}\x{4F86}\x{4F87}\x{4F88}\x{4F89}\x{4F8A}\x{4F8B}\x{4F8D}\x{4F8F}' .
+'\x{4F90}\x{4F91}\x{4F92}\x{4F93}\x{4F94}\x{4F95}\x{4F96}\x{4F97}\x{4F98}' .
+'\x{4F99}\x{4F9A}\x{4F9B}\x{4F9C}\x{4F9D}\x{4F9E}\x{4F9F}\x{4FA0}\x{4FA1}' .
+'\x{4FA3}\x{4FA4}\x{4FA5}\x{4FA6}\x{4FA7}\x{4FA8}\x{4FA9}\x{4FAA}\x{4FAB}' .
+'\x{4FAC}\x{4FAE}\x{4FAF}\x{4FB0}\x{4FB1}\x{4FB2}\x{4FB3}\x{4FB4}\x{4FB5}' .
+'\x{4FB6}\x{4FB7}\x{4FB8}\x{4FB9}\x{4FBA}\x{4FBB}\x{4FBC}\x{4FBE}\x{4FBF}' .
+'\x{4FC0}\x{4FC1}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FC5}\x{4FC7}\x{4FC9}\x{4FCA}' .
+'\x{4FCB}\x{4FCD}\x{4FCE}\x{4FCF}\x{4FD0}\x{4FD1}\x{4FD2}\x{4FD3}\x{4FD4}' .
+'\x{4FD5}\x{4FD6}\x{4FD7}\x{4FD8}\x{4FD9}\x{4FDA}\x{4FDB}\x{4FDC}\x{4FDD}' .
+'\x{4FDE}\x{4FDF}\x{4FE0}\x{4FE1}\x{4FE3}\x{4FE4}\x{4FE5}\x{4FE6}\x{4FE7}' .
+'\x{4FE8}\x{4FE9}\x{4FEA}\x{4FEB}\x{4FEC}\x{4FED}\x{4FEE}\x{4FEF}\x{4FF0}' .
+'\x{4FF1}\x{4FF2}\x{4FF3}\x{4FF4}\x{4FF5}\x{4FF6}\x{4FF7}\x{4FF8}\x{4FF9}' .
+'\x{4FFA}\x{4FFB}\x{4FFE}\x{4FFF}\x{5000}\x{5001}\x{5002}\x{5003}\x{5004}' .
+'\x{5005}\x{5006}\x{5007}\x{5008}\x{5009}\x{500A}\x{500B}\x{500C}\x{500D}' .
+'\x{500E}\x{500F}\x{5011}\x{5012}\x{5013}\x{5014}\x{5015}\x{5016}\x{5017}' .
+'\x{5018}\x{5019}\x{501A}\x{501B}\x{501C}\x{501D}\x{501E}\x{501F}\x{5020}' .
+'\x{5021}\x{5022}\x{5023}\x{5024}\x{5025}\x{5026}\x{5027}\x{5028}\x{5029}' .
+'\x{502A}\x{502B}\x{502C}\x{502D}\x{502E}\x{502F}\x{5030}\x{5031}\x{5032}' .
+'\x{5033}\x{5035}\x{5036}\x{5037}\x{5039}\x{503A}\x{503B}\x{503C}\x{503E}' .
+'\x{503F}\x{5040}\x{5041}\x{5043}\x{5044}\x{5045}\x{5046}\x{5047}\x{5048}' .
+'\x{5049}\x{504A}\x{504B}\x{504C}\x{504D}\x{504E}\x{504F}\x{5051}\x{5053}' .
+'\x{5054}\x{5055}\x{5056}\x{5057}\x{5059}\x{505A}\x{505B}\x{505C}\x{505D}' .
+'\x{505E}\x{505F}\x{5060}\x{5061}\x{5062}\x{5063}\x{5064}\x{5065}\x{5066}' .
+'\x{5067}\x{5068}\x{5069}\x{506A}\x{506B}\x{506C}\x{506D}\x{506E}\x{506F}' .
+'\x{5070}\x{5071}\x{5072}\x{5073}\x{5074}\x{5075}\x{5076}\x{5077}\x{5078}' .
+'\x{5079}\x{507A}\x{507B}\x{507D}\x{507E}\x{507F}\x{5080}\x{5082}\x{5083}' .
+'\x{5084}\x{5085}\x{5086}\x{5087}\x{5088}\x{5089}\x{508A}\x{508B}\x{508C}' .
+'\x{508D}\x{508E}\x{508F}\x{5090}\x{5091}\x{5092}\x{5094}\x{5095}\x{5096}' .
+'\x{5098}\x{5099}\x{509A}\x{509B}\x{509C}\x{509D}\x{509E}\x{50A2}\x{50A3}' .
+'\x{50A4}\x{50A5}\x{50A6}\x{50A7}\x{50A8}\x{50A9}\x{50AA}\x{50AB}\x{50AC}' .
+'\x{50AD}\x{50AE}\x{50AF}\x{50B0}\x{50B1}\x{50B2}\x{50B3}\x{50B4}\x{50B5}' .
+'\x{50B6}\x{50B7}\x{50B8}\x{50BA}\x{50BB}\x{50BC}\x{50BD}\x{50BE}\x{50BF}' .
+'\x{50C0}\x{50C1}\x{50C2}\x{50C4}\x{50C5}\x{50C6}\x{50C7}\x{50C8}\x{50C9}' .
+'\x{50CA}\x{50CB}\x{50CC}\x{50CD}\x{50CE}\x{50CF}\x{50D0}\x{50D1}\x{50D2}' .
+'\x{50D3}\x{50D4}\x{50D5}\x{50D6}\x{50D7}\x{50D9}\x{50DA}\x{50DB}\x{50DC}' .
+'\x{50DD}\x{50DE}\x{50E0}\x{50E3}\x{50E4}\x{50E5}\x{50E6}\x{50E7}\x{50E8}' .
+'\x{50E9}\x{50EA}\x{50EC}\x{50ED}\x{50EE}\x{50EF}\x{50F0}\x{50F1}\x{50F2}' .
+'\x{50F3}\x{50F5}\x{50F6}\x{50F8}\x{50F9}\x{50FA}\x{50FB}\x{50FC}\x{50FD}' .
+'\x{50FE}\x{50FF}\x{5100}\x{5101}\x{5102}\x{5103}\x{5104}\x{5105}\x{5106}' .
+'\x{5107}\x{5108}\x{5109}\x{510A}\x{510B}\x{510C}\x{510D}\x{510E}\x{510F}' .
+'\x{5110}\x{5111}\x{5112}\x{5113}\x{5114}\x{5115}\x{5116}\x{5117}\x{5118}' .
+'\x{5119}\x{511A}\x{511C}\x{511D}\x{511E}\x{511F}\x{5120}\x{5121}\x{5122}' .
+'\x{5123}\x{5124}\x{5125}\x{5126}\x{5127}\x{5129}\x{512A}\x{512C}\x{512D}' .
+'\x{512E}\x{512F}\x{5130}\x{5131}\x{5132}\x{5133}\x{5134}\x{5135}\x{5136}' .
+'\x{5137}\x{5138}\x{5139}\x{513A}\x{513B}\x{513C}\x{513D}\x{513E}\x{513F}' .
+'\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
+'\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5151}\x{5152}\x{5154}\x{5155}' .
+'\x{5156}\x{5157}\x{5159}\x{515A}\x{515B}\x{515C}\x{515D}\x{515E}\x{515F}' .
+'\x{5161}\x{5162}\x{5163}\x{5165}\x{5166}\x{5167}\x{5168}\x{5169}\x{516A}' .
+'\x{516B}\x{516C}\x{516D}\x{516E}\x{516F}\x{5170}\x{5171}\x{5173}\x{5174}' .
+'\x{5175}\x{5176}\x{5177}\x{5178}\x{5179}\x{517A}\x{517B}\x{517C}\x{517D}' .
+'\x{517F}\x{5180}\x{5181}\x{5182}\x{5185}\x{5186}\x{5187}\x{5188}\x{5189}' .
+'\x{518A}\x{518B}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}\x{5193}' .
+'\x{5194}\x{5195}\x{5196}\x{5197}\x{5198}\x{5199}\x{519A}\x{519B}\x{519C}' .
+'\x{519D}\x{519E}\x{519F}\x{51A0}\x{51A2}\x{51A4}\x{51A5}\x{51A6}\x{51A7}' .
+'\x{51A8}\x{51AA}\x{51AB}\x{51AC}\x{51AE}\x{51AF}\x{51B0}\x{51B1}\x{51B2}' .
+'\x{51B3}\x{51B5}\x{51B6}\x{51B7}\x{51B9}\x{51BB}\x{51BC}\x{51BD}\x{51BE}' .
+'\x{51BF}\x{51C0}\x{51C1}\x{51C3}\x{51C4}\x{51C5}\x{51C6}\x{51C7}\x{51C8}' .
+'\x{51C9}\x{51CA}\x{51CB}\x{51CC}\x{51CD}\x{51CE}\x{51CF}\x{51D0}\x{51D1}' .
+'\x{51D4}\x{51D5}\x{51D6}\x{51D7}\x{51D8}\x{51D9}\x{51DA}\x{51DB}\x{51DC}' .
+'\x{51DD}\x{51DE}\x{51E0}\x{51E1}\x{51E2}\x{51E3}\x{51E4}\x{51E5}\x{51E7}' .
+'\x{51E8}\x{51E9}\x{51EA}\x{51EB}\x{51ED}\x{51EF}\x{51F0}\x{51F1}\x{51F3}' .
+'\x{51F4}\x{51F5}\x{51F6}\x{51F7}\x{51F8}\x{51F9}\x{51FA}\x{51FB}\x{51FC}' .
+'\x{51FD}\x{51FE}\x{51FF}\x{5200}\x{5201}\x{5202}\x{5203}\x{5204}\x{5205}' .
+'\x{5206}\x{5207}\x{5208}\x{5209}\x{520A}\x{520B}\x{520C}\x{520D}\x{520E}' .
+'\x{520F}\x{5210}\x{5211}\x{5212}\x{5213}\x{5214}\x{5215}\x{5216}\x{5217}' .
+'\x{5218}\x{5219}\x{521A}\x{521B}\x{521C}\x{521D}\x{521E}\x{521F}\x{5220}' .
+'\x{5221}\x{5222}\x{5223}\x{5224}\x{5225}\x{5226}\x{5228}\x{5229}\x{522A}' .
+'\x{522B}\x{522C}\x{522D}\x{522E}\x{522F}\x{5230}\x{5231}\x{5232}\x{5233}' .
+'\x{5234}\x{5235}\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{523C}' .
+'\x{523D}\x{523E}\x{523F}\x{5240}\x{5241}\x{5242}\x{5243}\x{5244}\x{5245}' .
+'\x{5246}\x{5247}\x{5248}\x{5249}\x{524A}\x{524B}\x{524C}\x{524D}\x{524E}' .
+'\x{5250}\x{5251}\x{5252}\x{5254}\x{5255}\x{5256}\x{5257}\x{5258}\x{5259}' .
+'\x{525A}\x{525B}\x{525C}\x{525D}\x{525E}\x{525F}\x{5260}\x{5261}\x{5262}' .
+'\x{5263}\x{5264}\x{5265}\x{5267}\x{5268}\x{5269}\x{526A}\x{526B}\x{526C}' .
+'\x{526D}\x{526E}\x{526F}\x{5270}\x{5272}\x{5273}\x{5274}\x{5275}\x{5276}' .
+'\x{5277}\x{5278}\x{527A}\x{527B}\x{527C}\x{527D}\x{527E}\x{527F}\x{5280}' .
+'\x{5281}\x{5282}\x{5283}\x{5284}\x{5286}\x{5287}\x{5288}\x{5289}\x{528A}' .
+'\x{528B}\x{528C}\x{528D}\x{528F}\x{5290}\x{5291}\x{5292}\x{5293}\x{5294}' .
+'\x{5295}\x{5296}\x{5297}\x{5298}\x{5299}\x{529A}\x{529B}\x{529C}\x{529D}' .
+'\x{529E}\x{529F}\x{52A0}\x{52A1}\x{52A2}\x{52A3}\x{52A5}\x{52A6}\x{52A7}' .
+'\x{52A8}\x{52A9}\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52AE}\x{52AF}\x{52B0}' .
+'\x{52B1}\x{52B2}\x{52B3}\x{52B4}\x{52B5}\x{52B6}\x{52B7}\x{52B8}\x{52B9}' .
+'\x{52BA}\x{52BB}\x{52BC}\x{52BD}\x{52BE}\x{52BF}\x{52C0}\x{52C1}\x{52C2}' .
+'\x{52C3}\x{52C6}\x{52C7}\x{52C9}\x{52CA}\x{52CB}\x{52CD}\x{52CF}\x{52D0}' .
+'\x{52D2}\x{52D3}\x{52D5}\x{52D6}\x{52D7}\x{52D8}\x{52D9}\x{52DA}\x{52DB}' .
+'\x{52DC}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}\x{52E4}\x{52E6}' .
+'\x{52E7}\x{52E8}\x{52E9}\x{52EA}\x{52EB}\x{52EC}\x{52ED}\x{52EF}\x{52F0}' .
+'\x{52F1}\x{52F2}\x{52F3}\x{52F4}\x{52F5}\x{52F6}\x{52F7}\x{52F8}\x{52F9}' .
+'\x{52FA}\x{52FB}\x{52FC}\x{52FD}\x{52FE}\x{52FF}\x{5300}\x{5301}\x{5302}' .
+'\x{5305}\x{5306}\x{5307}\x{5308}\x{5309}\x{530A}\x{530B}\x{530C}\x{530D}' .
+'\x{530E}\x{530F}\x{5310}\x{5311}\x{5312}\x{5313}\x{5314}\x{5315}\x{5316}' .
+'\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}\x{5320}\x{5321}\x{5322}' .
+'\x{5323}\x{5324}\x{5325}\x{5326}\x{5328}\x{532A}\x{532B}\x{532C}\x{532D}' .
+'\x{532E}\x{532F}\x{5330}\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}\x{533A}' .
+'\x{533B}\x{533C}\x{533D}\x{533E}\x{533F}\x{5340}\x{5341}\x{5343}\x{5344}' .
+'\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}\x{534A}\x{534B}\x{534C}\x{534D}' .
+'\x{534E}\x{534F}\x{5350}\x{5351}\x{5352}\x{5353}\x{5354}\x{5355}\x{5356}' .
+'\x{5357}\x{5358}\x{5359}\x{535A}\x{535C}\x{535E}\x{535F}\x{5360}\x{5361}' .
+'\x{5362}\x{5363}\x{5364}\x{5365}\x{5366}\x{5367}\x{5369}\x{536B}\x{536C}' .
+'\x{536E}\x{536F}\x{5370}\x{5371}\x{5372}\x{5373}\x{5374}\x{5375}\x{5376}' .
+'\x{5377}\x{5378}\x{5379}\x{537A}\x{537B}\x{537C}\x{537D}\x{537E}\x{537F}' .
+'\x{5381}\x{5382}\x{5383}\x{5384}\x{5385}\x{5386}\x{5387}\x{5388}\x{5389}' .
+'\x{538A}\x{538B}\x{538C}\x{538D}\x{538E}\x{538F}\x{5390}\x{5391}\x{5392}' .
+'\x{5393}\x{5394}\x{5395}\x{5396}\x{5397}\x{5398}\x{5399}\x{539A}\x{539B}' .
+'\x{539C}\x{539D}\x{539E}\x{539F}\x{53A0}\x{53A2}\x{53A3}\x{53A4}\x{53A5}' .
+'\x{53A6}\x{53A7}\x{53A8}\x{53A9}\x{53AC}\x{53AD}\x{53AE}\x{53B0}\x{53B1}' .
+'\x{53B2}\x{53B3}\x{53B4}\x{53B5}\x{53B6}\x{53B7}\x{53B8}\x{53B9}\x{53BB}' .
+'\x{53BC}\x{53BD}\x{53BE}\x{53BF}\x{53C0}\x{53C1}\x{53C2}\x{53C3}\x{53C4}' .
+'\x{53C6}\x{53C7}\x{53C8}\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}' .
+'\x{53D0}\x{53D1}\x{53D2}\x{53D3}\x{53D4}\x{53D5}\x{53D6}\x{53D7}\x{53D8}' .
+'\x{53D9}\x{53DB}\x{53DC}\x{53DF}\x{53E0}\x{53E1}\x{53E2}\x{53E3}\x{53E4}' .
+'\x{53E5}\x{53E6}\x{53E8}\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}' .
+'\x{53EF}\x{53F0}\x{53F1}\x{53F2}\x{53F3}\x{53F4}\x{53F5}\x{53F6}\x{53F7}' .
+'\x{53F8}\x{53F9}\x{53FA}\x{53FB}\x{53FC}\x{53FD}\x{53FE}\x{5401}\x{5402}' .
+'\x{5403}\x{5404}\x{5405}\x{5406}\x{5407}\x{5408}\x{5409}\x{540A}\x{540B}' .
+'\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}\x{5411}\x{5412}\x{5413}\x{5414}' .
+'\x{5415}\x{5416}\x{5417}\x{5418}\x{5419}\x{541B}\x{541C}\x{541D}\x{541E}' .
+'\x{541F}\x{5420}\x{5421}\x{5423}\x{5424}\x{5425}\x{5426}\x{5427}\x{5428}' .
+'\x{5429}\x{542A}\x{542B}\x{542C}\x{542D}\x{542E}\x{542F}\x{5430}\x{5431}' .
+'\x{5432}\x{5433}\x{5434}\x{5435}\x{5436}\x{5437}\x{5438}\x{5439}\x{543A}' .
+'\x{543B}\x{543C}\x{543D}\x{543E}\x{543F}\x{5440}\x{5441}\x{5442}\x{5443}' .
+'\x{5444}\x{5445}\x{5446}\x{5447}\x{5448}\x{5449}\x{544A}\x{544B}\x{544D}' .
+'\x{544E}\x{544F}\x{5450}\x{5451}\x{5452}\x{5453}\x{5454}\x{5455}\x{5456}' .
+'\x{5457}\x{5458}\x{5459}\x{545A}\x{545B}\x{545C}\x{545E}\x{545F}\x{5460}' .
+'\x{5461}\x{5462}\x{5463}\x{5464}\x{5465}\x{5466}\x{5467}\x{5468}\x{546A}' .
+'\x{546B}\x{546C}\x{546D}\x{546E}\x{546F}\x{5470}\x{5471}\x{5472}\x{5473}' .
+'\x{5474}\x{5475}\x{5476}\x{5477}\x{5478}\x{5479}\x{547A}\x{547B}\x{547C}' .
+'\x{547D}\x{547E}\x{547F}\x{5480}\x{5481}\x{5482}\x{5483}\x{5484}\x{5485}' .
+'\x{5486}\x{5487}\x{5488}\x{5489}\x{548B}\x{548C}\x{548D}\x{548E}\x{548F}' .
+'\x{5490}\x{5491}\x{5492}\x{5493}\x{5494}\x{5495}\x{5496}\x{5497}\x{5498}' .
+'\x{5499}\x{549A}\x{549B}\x{549C}\x{549D}\x{549E}\x{549F}\x{54A0}\x{54A1}' .
+'\x{54A2}\x{54A3}\x{54A4}\x{54A5}\x{54A6}\x{54A7}\x{54A8}\x{54A9}\x{54AA}' .
+'\x{54AB}\x{54AC}\x{54AD}\x{54AE}\x{54AF}\x{54B0}\x{54B1}\x{54B2}\x{54B3}' .
+'\x{54B4}\x{54B6}\x{54B7}\x{54B8}\x{54B9}\x{54BA}\x{54BB}\x{54BC}\x{54BD}' .
+'\x{54BE}\x{54BF}\x{54C0}\x{54C1}\x{54C2}\x{54C3}\x{54C4}\x{54C5}\x{54C6}' .
+'\x{54C7}\x{54C8}\x{54C9}\x{54CA}\x{54CB}\x{54CC}\x{54CD}\x{54CE}\x{54CF}' .
+'\x{54D0}\x{54D1}\x{54D2}\x{54D3}\x{54D4}\x{54D5}\x{54D6}\x{54D7}\x{54D8}' .
+'\x{54D9}\x{54DA}\x{54DB}\x{54DC}\x{54DD}\x{54DE}\x{54DF}\x{54E0}\x{54E1}' .
+'\x{54E2}\x{54E3}\x{54E4}\x{54E5}\x{54E6}\x{54E7}\x{54E8}\x{54E9}\x{54EA}' .
+'\x{54EB}\x{54EC}\x{54ED}\x{54EE}\x{54EF}\x{54F0}\x{54F1}\x{54F2}\x{54F3}' .
+'\x{54F4}\x{54F5}\x{54F7}\x{54F8}\x{54F9}\x{54FA}\x{54FB}\x{54FC}\x{54FD}' .
+'\x{54FE}\x{54FF}\x{5500}\x{5501}\x{5502}\x{5503}\x{5504}\x{5505}\x{5506}' .
+'\x{5507}\x{5508}\x{5509}\x{550A}\x{550B}\x{550C}\x{550D}\x{550E}\x{550F}' .
+'\x{5510}\x{5511}\x{5512}\x{5513}\x{5514}\x{5516}\x{5517}\x{551A}\x{551B}' .
+'\x{551C}\x{551D}\x{551E}\x{551F}\x{5520}\x{5521}\x{5522}\x{5523}\x{5524}' .
+'\x{5525}\x{5526}\x{5527}\x{5528}\x{5529}\x{552A}\x{552B}\x{552C}\x{552D}' .
+'\x{552E}\x{552F}\x{5530}\x{5531}\x{5532}\x{5533}\x{5534}\x{5535}\x{5536}' .
+'\x{5537}\x{5538}\x{5539}\x{553A}\x{553B}\x{553C}\x{553D}\x{553E}\x{553F}' .
+'\x{5540}\x{5541}\x{5542}\x{5543}\x{5544}\x{5545}\x{5546}\x{5548}\x{5549}' .
+'\x{554A}\x{554B}\x{554C}\x{554D}\x{554E}\x{554F}\x{5550}\x{5551}\x{5552}' .
+'\x{5553}\x{5554}\x{5555}\x{5556}\x{5557}\x{5558}\x{5559}\x{555A}\x{555B}' .
+'\x{555C}\x{555D}\x{555E}\x{555F}\x{5561}\x{5562}\x{5563}\x{5564}\x{5565}' .
+'\x{5566}\x{5567}\x{5568}\x{5569}\x{556A}\x{556B}\x{556C}\x{556D}\x{556E}' .
+'\x{556F}\x{5570}\x{5571}\x{5572}\x{5573}\x{5574}\x{5575}\x{5576}\x{5577}' .
+'\x{5578}\x{5579}\x{557B}\x{557C}\x{557D}\x{557E}\x{557F}\x{5580}\x{5581}' .
+'\x{5582}\x{5583}\x{5584}\x{5585}\x{5586}\x{5587}\x{5588}\x{5589}\x{558A}' .
+'\x{558B}\x{558C}\x{558D}\x{558E}\x{558F}\x{5590}\x{5591}\x{5592}\x{5593}' .
+'\x{5594}\x{5595}\x{5596}\x{5597}\x{5598}\x{5599}\x{559A}\x{559B}\x{559C}' .
+'\x{559D}\x{559E}\x{559F}\x{55A0}\x{55A1}\x{55A2}\x{55A3}\x{55A4}\x{55A5}' .
+'\x{55A6}\x{55A7}\x{55A8}\x{55A9}\x{55AA}\x{55AB}\x{55AC}\x{55AD}\x{55AE}' .
+'\x{55AF}\x{55B0}\x{55B1}\x{55B2}\x{55B3}\x{55B4}\x{55B5}\x{55B6}\x{55B7}' .
+'\x{55B8}\x{55B9}\x{55BA}\x{55BB}\x{55BC}\x{55BD}\x{55BE}\x{55BF}\x{55C0}' .
+'\x{55C1}\x{55C2}\x{55C3}\x{55C4}\x{55C5}\x{55C6}\x{55C7}\x{55C8}\x{55C9}' .
+'\x{55CA}\x{55CB}\x{55CC}\x{55CD}\x{55CE}\x{55CF}\x{55D0}\x{55D1}\x{55D2}' .
+'\x{55D3}\x{55D4}\x{55D5}\x{55D6}\x{55D7}\x{55D8}\x{55D9}\x{55DA}\x{55DB}' .
+'\x{55DC}\x{55DD}\x{55DE}\x{55DF}\x{55E1}\x{55E2}\x{55E3}\x{55E4}\x{55E5}' .
+'\x{55E6}\x{55E7}\x{55E8}\x{55E9}\x{55EA}\x{55EB}\x{55EC}\x{55ED}\x{55EE}' .
+'\x{55EF}\x{55F0}\x{55F1}\x{55F2}\x{55F3}\x{55F4}\x{55F5}\x{55F6}\x{55F7}' .
+'\x{55F9}\x{55FA}\x{55FB}\x{55FC}\x{55FD}\x{55FE}\x{55FF}\x{5600}\x{5601}' .
+'\x{5602}\x{5603}\x{5604}\x{5606}\x{5607}\x{5608}\x{5609}\x{560C}\x{560D}' .
+'\x{560E}\x{560F}\x{5610}\x{5611}\x{5612}\x{5613}\x{5614}\x{5615}\x{5616}' .
+'\x{5617}\x{5618}\x{5619}\x{561A}\x{561B}\x{561C}\x{561D}\x{561E}\x{561F}' .
+'\x{5621}\x{5622}\x{5623}\x{5624}\x{5625}\x{5626}\x{5627}\x{5628}\x{5629}' .
+'\x{562A}\x{562C}\x{562D}\x{562E}\x{562F}\x{5630}\x{5631}\x{5632}\x{5633}' .
+'\x{5634}\x{5635}\x{5636}\x{5638}\x{5639}\x{563A}\x{563B}\x{563D}\x{563E}' .
+'\x{563F}\x{5640}\x{5641}\x{5642}\x{5643}\x{5645}\x{5646}\x{5647}\x{5648}' .
+'\x{5649}\x{564A}\x{564C}\x{564D}\x{564E}\x{564F}\x{5650}\x{5652}\x{5653}' .
+'\x{5654}\x{5655}\x{5657}\x{5658}\x{5659}\x{565A}\x{565B}\x{565C}\x{565D}' .
+'\x{565E}\x{5660}\x{5662}\x{5663}\x{5664}\x{5665}\x{5666}\x{5667}\x{5668}' .
+'\x{5669}\x{566A}\x{566B}\x{566C}\x{566D}\x{566E}\x{566F}\x{5670}\x{5671}' .
+'\x{5672}\x{5673}\x{5674}\x{5676}\x{5677}\x{5678}\x{5679}\x{567A}\x{567B}' .
+'\x{567C}\x{567E}\x{567F}\x{5680}\x{5681}\x{5682}\x{5683}\x{5684}\x{5685}' .
+'\x{5686}\x{5687}\x{568A}\x{568C}\x{568D}\x{568E}\x{568F}\x{5690}\x{5691}' .
+'\x{5692}\x{5693}\x{5694}\x{5695}\x{5697}\x{5698}\x{5699}\x{569A}\x{569B}' .
+'\x{569C}\x{569D}\x{569F}\x{56A0}\x{56A1}\x{56A3}\x{56A4}\x{56A5}\x{56A6}' .
+'\x{56A7}\x{56A8}\x{56A9}\x{56AA}\x{56AB}\x{56AC}\x{56AD}\x{56AE}\x{56AF}' .
+'\x{56B0}\x{56B1}\x{56B2}\x{56B3}\x{56B4}\x{56B5}\x{56B6}\x{56B7}\x{56B8}' .
+'\x{56B9}\x{56BB}\x{56BC}\x{56BD}\x{56BE}\x{56BF}\x{56C0}\x{56C1}\x{56C2}' .
+'\x{56C3}\x{56C4}\x{56C5}\x{56C6}\x{56C7}\x{56C8}\x{56C9}\x{56CA}\x{56CB}' .
+'\x{56CC}\x{56CD}\x{56CE}\x{56D0}\x{56D1}\x{56D2}\x{56D3}\x{56D4}\x{56D5}' .
+'\x{56D6}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DC}\x{56DD}\x{56DE}\x{56DF}' .
+'\x{56E0}\x{56E1}\x{56E2}\x{56E3}\x{56E4}\x{56E5}\x{56E7}\x{56E8}\x{56E9}' .
+'\x{56EA}\x{56EB}\x{56EC}\x{56ED}\x{56EE}\x{56EF}\x{56F0}\x{56F1}\x{56F2}' .
+'\x{56F3}\x{56F4}\x{56F5}\x{56F7}\x{56F9}\x{56FA}\x{56FD}\x{56FE}\x{56FF}' .
+'\x{5700}\x{5701}\x{5702}\x{5703}\x{5704}\x{5706}\x{5707}\x{5708}\x{5709}' .
+'\x{570A}\x{570B}\x{570C}\x{570D}\x{570E}\x{570F}\x{5710}\x{5712}\x{5713}' .
+'\x{5714}\x{5715}\x{5716}\x{5718}\x{5719}\x{571A}\x{571B}\x{571C}\x{571D}' .
+'\x{571E}\x{571F}\x{5720}\x{5722}\x{5723}\x{5725}\x{5726}\x{5727}\x{5728}' .
+'\x{5729}\x{572A}\x{572B}\x{572C}\x{572D}\x{572E}\x{572F}\x{5730}\x{5731}' .
+'\x{5732}\x{5733}\x{5734}\x{5735}\x{5736}\x{5737}\x{5738}\x{5739}\x{573A}' .
+'\x{573B}\x{573C}\x{573E}\x{573F}\x{5740}\x{5741}\x{5742}\x{5744}\x{5745}' .
+'\x{5746}\x{5747}\x{5749}\x{574A}\x{574B}\x{574C}\x{574D}\x{574E}\x{574F}' .
+'\x{5750}\x{5751}\x{5752}\x{5753}\x{5754}\x{5757}\x{5759}\x{575A}\x{575B}' .
+'\x{575C}\x{575D}\x{575E}\x{575F}\x{5760}\x{5761}\x{5762}\x{5764}\x{5765}' .
+'\x{5766}\x{5767}\x{5768}\x{5769}\x{576A}\x{576B}\x{576C}\x{576D}\x{576F}' .
+'\x{5770}\x{5771}\x{5772}\x{5773}\x{5774}\x{5775}\x{5776}\x{5777}\x{5779}' .
+'\x{577A}\x{577B}\x{577C}\x{577D}\x{577E}\x{577F}\x{5780}\x{5782}\x{5783}' .
+'\x{5784}\x{5785}\x{5786}\x{5788}\x{5789}\x{578A}\x{578B}\x{578C}\x{578D}' .
+'\x{578E}\x{578F}\x{5790}\x{5791}\x{5792}\x{5793}\x{5794}\x{5795}\x{5797}' .
+'\x{5798}\x{5799}\x{579A}\x{579B}\x{579C}\x{579D}\x{579E}\x{579F}\x{57A0}' .
+'\x{57A1}\x{57A2}\x{57A3}\x{57A4}\x{57A5}\x{57A6}\x{57A7}\x{57A9}\x{57AA}' .
+'\x{57AB}\x{57AC}\x{57AD}\x{57AE}\x{57AF}\x{57B0}\x{57B1}\x{57B2}\x{57B3}' .
+'\x{57B4}\x{57B5}\x{57B6}\x{57B7}\x{57B8}\x{57B9}\x{57BA}\x{57BB}\x{57BC}' .
+'\x{57BD}\x{57BE}\x{57BF}\x{57C0}\x{57C1}\x{57C2}\x{57C3}\x{57C4}\x{57C5}' .
+'\x{57C6}\x{57C7}\x{57C8}\x{57C9}\x{57CB}\x{57CC}\x{57CD}\x{57CE}\x{57CF}' .
+'\x{57D0}\x{57D2}\x{57D3}\x{57D4}\x{57D5}\x{57D6}\x{57D8}\x{57D9}\x{57DA}' .
+'\x{57DC}\x{57DD}\x{57DF}\x{57E0}\x{57E1}\x{57E2}\x{57E3}\x{57E4}\x{57E5}' .
+'\x{57E6}\x{57E7}\x{57E8}\x{57E9}\x{57EA}\x{57EB}\x{57EC}\x{57ED}\x{57EE}' .
+'\x{57EF}\x{57F0}\x{57F1}\x{57F2}\x{57F3}\x{57F4}\x{57F5}\x{57F6}\x{57F7}' .
+'\x{57F8}\x{57F9}\x{57FA}\x{57FB}\x{57FC}\x{57FD}\x{57FE}\x{57FF}\x{5800}' .
+'\x{5801}\x{5802}\x{5803}\x{5804}\x{5805}\x{5806}\x{5807}\x{5808}\x{5809}' .
+'\x{580A}\x{580B}\x{580C}\x{580D}\x{580E}\x{580F}\x{5810}\x{5811}\x{5812}' .
+'\x{5813}\x{5814}\x{5815}\x{5816}\x{5819}\x{581A}\x{581B}\x{581C}\x{581D}' .
+'\x{581E}\x{581F}\x{5820}\x{5821}\x{5822}\x{5823}\x{5824}\x{5825}\x{5826}' .
+'\x{5827}\x{5828}\x{5829}\x{582A}\x{582B}\x{582C}\x{582D}\x{582E}\x{582F}' .
+'\x{5830}\x{5831}\x{5832}\x{5833}\x{5834}\x{5835}\x{5836}\x{5837}\x{5838}' .
+'\x{5839}\x{583A}\x{583B}\x{583C}\x{583D}\x{583E}\x{583F}\x{5840}\x{5842}' .
+'\x{5843}\x{5844}\x{5845}\x{5846}\x{5847}\x{5848}\x{5849}\x{584A}\x{584B}' .
+'\x{584C}\x{584D}\x{584E}\x{584F}\x{5851}\x{5852}\x{5853}\x{5854}\x{5855}' .
+'\x{5857}\x{5858}\x{5859}\x{585A}\x{585B}\x{585C}\x{585D}\x{585E}\x{585F}' .
+'\x{5861}\x{5862}\x{5863}\x{5864}\x{5865}\x{5868}\x{5869}\x{586A}\x{586B}' .
+'\x{586C}\x{586D}\x{586E}\x{586F}\x{5870}\x{5871}\x{5872}\x{5873}\x{5874}' .
+'\x{5875}\x{5876}\x{5878}\x{5879}\x{587A}\x{587B}\x{587C}\x{587D}\x{587E}' .
+'\x{587F}\x{5880}\x{5881}\x{5882}\x{5883}\x{5884}\x{5885}\x{5886}\x{5887}' .
+'\x{5888}\x{5889}\x{588A}\x{588B}\x{588C}\x{588D}\x{588E}\x{588F}\x{5890}' .
+'\x{5891}\x{5892}\x{5893}\x{5894}\x{5896}\x{5897}\x{5898}\x{5899}\x{589A}' .
+'\x{589B}\x{589C}\x{589D}\x{589E}\x{589F}\x{58A0}\x{58A1}\x{58A2}\x{58A3}' .
+'\x{58A4}\x{58A5}\x{58A6}\x{58A7}\x{58A8}\x{58A9}\x{58AB}\x{58AC}\x{58AD}' .
+'\x{58AE}\x{58AF}\x{58B0}\x{58B1}\x{58B2}\x{58B3}\x{58B4}\x{58B7}\x{58B8}' .
+'\x{58B9}\x{58BA}\x{58BB}\x{58BC}\x{58BD}\x{58BE}\x{58BF}\x{58C1}\x{58C2}' .
+'\x{58C5}\x{58C6}\x{58C7}\x{58C8}\x{58C9}\x{58CA}\x{58CB}\x{58CE}\x{58CF}' .
+'\x{58D1}\x{58D2}\x{58D3}\x{58D4}\x{58D5}\x{58D6}\x{58D7}\x{58D8}\x{58D9}' .
+'\x{58DA}\x{58DB}\x{58DD}\x{58DE}\x{58DF}\x{58E0}\x{58E2}\x{58E3}\x{58E4}' .
+'\x{58E5}\x{58E7}\x{58E8}\x{58E9}\x{58EA}\x{58EB}\x{58EC}\x{58ED}\x{58EE}' .
+'\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F3}\x{58F4}\x{58F6}\x{58F7}\x{58F8}' .
+'\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{58FE}\x{58FF}\x{5900}\x{5902}' .
+'\x{5903}\x{5904}\x{5906}\x{5907}\x{5909}\x{590A}\x{590B}\x{590C}\x{590D}' .
+'\x{590E}\x{590F}\x{5910}\x{5912}\x{5914}\x{5915}\x{5916}\x{5917}\x{5918}' .
+'\x{5919}\x{591A}\x{591B}\x{591C}\x{591D}\x{591E}\x{591F}\x{5920}\x{5921}' .
+'\x{5922}\x{5924}\x{5925}\x{5926}\x{5927}\x{5928}\x{5929}\x{592A}\x{592B}' .
+'\x{592C}\x{592D}\x{592E}\x{592F}\x{5930}\x{5931}\x{5932}\x{5934}\x{5935}' .
+'\x{5937}\x{5938}\x{5939}\x{593A}\x{593B}\x{593C}\x{593D}\x{593E}\x{593F}' .
+'\x{5940}\x{5941}\x{5942}\x{5943}\x{5944}\x{5945}\x{5946}\x{5947}\x{5948}' .
+'\x{5949}\x{594A}\x{594B}\x{594C}\x{594D}\x{594E}\x{594F}\x{5950}\x{5951}' .
+'\x{5952}\x{5953}\x{5954}\x{5955}\x{5956}\x{5957}\x{5958}\x{595A}\x{595C}' .
+'\x{595D}\x{595E}\x{595F}\x{5960}\x{5961}\x{5962}\x{5963}\x{5964}\x{5965}' .
+'\x{5966}\x{5967}\x{5968}\x{5969}\x{596A}\x{596B}\x{596C}\x{596D}\x{596E}' .
+'\x{596F}\x{5970}\x{5971}\x{5972}\x{5973}\x{5974}\x{5975}\x{5976}\x{5977}' .
+'\x{5978}\x{5979}\x{597A}\x{597B}\x{597C}\x{597D}\x{597E}\x{597F}\x{5980}' .
+'\x{5981}\x{5982}\x{5983}\x{5984}\x{5985}\x{5986}\x{5987}\x{5988}\x{5989}' .
+'\x{598A}\x{598B}\x{598C}\x{598D}\x{598E}\x{598F}\x{5990}\x{5991}\x{5992}' .
+'\x{5993}\x{5994}\x{5995}\x{5996}\x{5997}\x{5998}\x{5999}\x{599A}\x{599C}' .
+'\x{599D}\x{599E}\x{599F}\x{59A0}\x{59A1}\x{59A2}\x{59A3}\x{59A4}\x{59A5}' .
+'\x{59A6}\x{59A7}\x{59A8}\x{59A9}\x{59AA}\x{59AB}\x{59AC}\x{59AD}\x{59AE}' .
+'\x{59AF}\x{59B0}\x{59B1}\x{59B2}\x{59B3}\x{59B4}\x{59B5}\x{59B6}\x{59B8}' .
+'\x{59B9}\x{59BA}\x{59BB}\x{59BC}\x{59BD}\x{59BE}\x{59BF}\x{59C0}\x{59C1}' .
+'\x{59C2}\x{59C3}\x{59C4}\x{59C5}\x{59C6}\x{59C7}\x{59C8}\x{59C9}\x{59CA}' .
+'\x{59CB}\x{59CC}\x{59CD}\x{59CE}\x{59CF}\x{59D0}\x{59D1}\x{59D2}\x{59D3}' .
+'\x{59D4}\x{59D5}\x{59D6}\x{59D7}\x{59D8}\x{59D9}\x{59DA}\x{59DB}\x{59DC}' .
+'\x{59DD}\x{59DE}\x{59DF}\x{59E0}\x{59E1}\x{59E2}\x{59E3}\x{59E4}\x{59E5}' .
+'\x{59E6}\x{59E8}\x{59E9}\x{59EA}\x{59EB}\x{59EC}\x{59ED}\x{59EE}\x{59EF}' .
+'\x{59F0}\x{59F1}\x{59F2}\x{59F3}\x{59F4}\x{59F5}\x{59F6}\x{59F7}\x{59F8}' .
+'\x{59F9}\x{59FA}\x{59FB}\x{59FC}\x{59FD}\x{59FE}\x{59FF}\x{5A00}\x{5A01}' .
+'\x{5A02}\x{5A03}\x{5A04}\x{5A05}\x{5A06}\x{5A07}\x{5A08}\x{5A09}\x{5A0A}' .
+'\x{5A0B}\x{5A0C}\x{5A0D}\x{5A0E}\x{5A0F}\x{5A10}\x{5A11}\x{5A12}\x{5A13}' .
+'\x{5A14}\x{5A15}\x{5A16}\x{5A17}\x{5A18}\x{5A19}\x{5A1A}\x{5A1B}\x{5A1C}' .
+'\x{5A1D}\x{5A1E}\x{5A1F}\x{5A20}\x{5A21}\x{5A22}\x{5A23}\x{5A25}\x{5A27}' .
+'\x{5A28}\x{5A29}\x{5A2A}\x{5A2B}\x{5A2D}\x{5A2E}\x{5A2F}\x{5A31}\x{5A32}' .
+'\x{5A33}\x{5A34}\x{5A35}\x{5A36}\x{5A37}\x{5A38}\x{5A39}\x{5A3A}\x{5A3B}' .
+'\x{5A3C}\x{5A3D}\x{5A3E}\x{5A3F}\x{5A40}\x{5A41}\x{5A42}\x{5A43}\x{5A44}' .
+'\x{5A45}\x{5A46}\x{5A47}\x{5A48}\x{5A49}\x{5A4A}\x{5A4B}\x{5A4C}\x{5A4D}' .
+'\x{5A4E}\x{5A4F}\x{5A50}\x{5A51}\x{5A52}\x{5A53}\x{5A55}\x{5A56}\x{5A57}' .
+'\x{5A58}\x{5A5A}\x{5A5B}\x{5A5C}\x{5A5D}\x{5A5E}\x{5A5F}\x{5A60}\x{5A61}' .
+'\x{5A62}\x{5A63}\x{5A64}\x{5A65}\x{5A66}\x{5A67}\x{5A68}\x{5A69}\x{5A6A}' .
+'\x{5A6B}\x{5A6C}\x{5A6D}\x{5A6E}\x{5A70}\x{5A72}\x{5A73}\x{5A74}\x{5A75}' .
+'\x{5A76}\x{5A77}\x{5A78}\x{5A79}\x{5A7A}\x{5A7B}\x{5A7C}\x{5A7D}\x{5A7E}' .
+'\x{5A7F}\x{5A80}\x{5A81}\x{5A82}\x{5A83}\x{5A84}\x{5A85}\x{5A86}\x{5A88}' .
+'\x{5A89}\x{5A8A}\x{5A8B}\x{5A8C}\x{5A8E}\x{5A8F}\x{5A90}\x{5A91}\x{5A92}' .
+'\x{5A93}\x{5A94}\x{5A95}\x{5A96}\x{5A97}\x{5A98}\x{5A99}\x{5A9A}\x{5A9B}' .
+'\x{5A9C}\x{5A9D}\x{5A9E}\x{5A9F}\x{5AA0}\x{5AA1}\x{5AA2}\x{5AA3}\x{5AA4}' .
+'\x{5AA5}\x{5AA6}\x{5AA7}\x{5AA8}\x{5AA9}\x{5AAA}\x{5AAC}\x{5AAD}\x{5AAE}' .
+'\x{5AAF}\x{5AB0}\x{5AB1}\x{5AB2}\x{5AB3}\x{5AB4}\x{5AB5}\x{5AB6}\x{5AB7}' .
+'\x{5AB8}\x{5AB9}\x{5ABA}\x{5ABB}\x{5ABC}\x{5ABD}\x{5ABE}\x{5ABF}\x{5AC0}' .
+'\x{5AC1}\x{5AC2}\x{5AC3}\x{5AC4}\x{5AC5}\x{5AC6}\x{5AC7}\x{5AC8}\x{5AC9}' .
+'\x{5ACA}\x{5ACB}\x{5ACC}\x{5ACD}\x{5ACE}\x{5ACF}\x{5AD1}\x{5AD2}\x{5AD4}' .
+'\x{5AD5}\x{5AD6}\x{5AD7}\x{5AD8}\x{5AD9}\x{5ADA}\x{5ADB}\x{5ADC}\x{5ADD}' .
+'\x{5ADE}\x{5ADF}\x{5AE0}\x{5AE1}\x{5AE2}\x{5AE3}\x{5AE4}\x{5AE5}\x{5AE6}' .
+'\x{5AE7}\x{5AE8}\x{5AE9}\x{5AEA}\x{5AEB}\x{5AEC}\x{5AED}\x{5AEE}\x{5AF1}' .
+'\x{5AF2}\x{5AF3}\x{5AF4}\x{5AF5}\x{5AF6}\x{5AF7}\x{5AF8}\x{5AF9}\x{5AFA}' .
+'\x{5AFB}\x{5AFC}\x{5AFD}\x{5AFE}\x{5AFF}\x{5B00}\x{5B01}\x{5B02}\x{5B03}' .
+'\x{5B04}\x{5B05}\x{5B06}\x{5B07}\x{5B08}\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}' .
+'\x{5B0F}\x{5B10}\x{5B11}\x{5B12}\x{5B13}\x{5B14}\x{5B15}\x{5B16}\x{5B17}' .
+'\x{5B18}\x{5B19}\x{5B1A}\x{5B1B}\x{5B1C}\x{5B1D}\x{5B1E}\x{5B1F}\x{5B20}' .
+'\x{5B21}\x{5B22}\x{5B23}\x{5B24}\x{5B25}\x{5B26}\x{5B27}\x{5B28}\x{5B29}' .
+'\x{5B2A}\x{5B2B}\x{5B2C}\x{5B2D}\x{5B2E}\x{5B2F}\x{5B30}\x{5B31}\x{5B32}' .
+'\x{5B33}\x{5B34}\x{5B35}\x{5B36}\x{5B37}\x{5B38}\x{5B3A}\x{5B3B}\x{5B3C}' .
+'\x{5B3D}\x{5B3E}\x{5B3F}\x{5B40}\x{5B41}\x{5B42}\x{5B43}\x{5B44}\x{5B45}' .
+'\x{5B47}\x{5B48}\x{5B49}\x{5B4A}\x{5B4B}\x{5B4C}\x{5B4D}\x{5B4E}\x{5B50}' .
+'\x{5B51}\x{5B53}\x{5B54}\x{5B55}\x{5B56}\x{5B57}\x{5B58}\x{5B59}\x{5B5A}' .
+'\x{5B5B}\x{5B5C}\x{5B5D}\x{5B5E}\x{5B5F}\x{5B62}\x{5B63}\x{5B64}\x{5B65}' .
+'\x{5B66}\x{5B67}\x{5B68}\x{5B69}\x{5B6A}\x{5B6B}\x{5B6C}\x{5B6D}\x{5B6E}' .
+'\x{5B70}\x{5B71}\x{5B72}\x{5B73}\x{5B74}\x{5B75}\x{5B76}\x{5B77}\x{5B78}' .
+'\x{5B7A}\x{5B7B}\x{5B7C}\x{5B7D}\x{5B7F}\x{5B80}\x{5B81}\x{5B82}\x{5B83}' .
+'\x{5B84}\x{5B85}\x{5B87}\x{5B88}\x{5B89}\x{5B8A}\x{5B8B}\x{5B8C}\x{5B8D}' .
+'\x{5B8E}\x{5B8F}\x{5B91}\x{5B92}\x{5B93}\x{5B94}\x{5B95}\x{5B96}\x{5B97}' .
+'\x{5B98}\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9E}\x{5B9F}\x{5BA0}' .
+'\x{5BA1}\x{5BA2}\x{5BA3}\x{5BA4}\x{5BA5}\x{5BA6}\x{5BA7}\x{5BA8}\x{5BAA}' .
+'\x{5BAB}\x{5BAC}\x{5BAD}\x{5BAE}\x{5BAF}\x{5BB0}\x{5BB1}\x{5BB3}\x{5BB4}' .
+'\x{5BB5}\x{5BB6}\x{5BB8}\x{5BB9}\x{5BBA}\x{5BBB}\x{5BBD}\x{5BBE}\x{5BBF}' .
+'\x{5BC0}\x{5BC1}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BCA}' .
+'\x{5BCB}\x{5BCC}\x{5BCD}\x{5BCE}\x{5BCF}\x{5BD0}\x{5BD1}\x{5BD2}\x{5BD3}' .
+'\x{5BD4}\x{5BD5}\x{5BD6}\x{5BD8}\x{5BD9}\x{5BDB}\x{5BDC}\x{5BDD}\x{5BDE}' .
+'\x{5BDF}\x{5BE0}\x{5BE1}\x{5BE2}\x{5BE3}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}' .
+'\x{5BE8}\x{5BE9}\x{5BEA}\x{5BEB}\x{5BEC}\x{5BED}\x{5BEE}\x{5BEF}\x{5BF0}' .
+'\x{5BF1}\x{5BF2}\x{5BF3}\x{5BF4}\x{5BF5}\x{5BF6}\x{5BF7}\x{5BF8}\x{5BF9}' .
+'\x{5BFA}\x{5BFB}\x{5BFC}\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}\x{5C04}\x{5C05}' .
+'\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}\x{5C0B}\x{5C0C}\x{5C0D}\x{5C0E}' .
+'\x{5C0F}\x{5C10}\x{5C11}\x{5C12}\x{5C13}\x{5C14}\x{5C15}\x{5C16}\x{5C17}' .
+'\x{5C18}\x{5C19}\x{5C1A}\x{5C1C}\x{5C1D}\x{5C1E}\x{5C1F}\x{5C20}\x{5C21}' .
+'\x{5C22}\x{5C24}\x{5C25}\x{5C27}\x{5C28}\x{5C2A}\x{5C2B}\x{5C2C}\x{5C2D}' .
+'\x{5C2E}\x{5C2F}\x{5C30}\x{5C31}\x{5C32}\x{5C33}\x{5C34}\x{5C35}\x{5C37}' .
+'\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}' .
+'\x{5C41}\x{5C42}\x{5C43}\x{5C44}\x{5C45}\x{5C46}\x{5C47}\x{5C48}\x{5C49}' .
+'\x{5C4A}\x{5C4B}\x{5C4C}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C52}' .
+'\x{5C53}\x{5C54}\x{5C55}\x{5C56}\x{5C57}\x{5C58}\x{5C59}\x{5C5B}\x{5C5C}' .
+'\x{5C5D}\x{5C5E}\x{5C5F}\x{5C60}\x{5C61}\x{5C62}\x{5C63}\x{5C64}\x{5C65}' .
+'\x{5C66}\x{5C67}\x{5C68}\x{5C69}\x{5C6A}\x{5C6B}\x{5C6C}\x{5C6D}\x{5C6E}' .
+'\x{5C6F}\x{5C70}\x{5C71}\x{5C72}\x{5C73}\x{5C74}\x{5C75}\x{5C76}\x{5C77}' .
+'\x{5C78}\x{5C79}\x{5C7A}\x{5C7B}\x{5C7C}\x{5C7D}\x{5C7E}\x{5C7F}\x{5C80}' .
+'\x{5C81}\x{5C82}\x{5C83}\x{5C84}\x{5C86}\x{5C87}\x{5C88}\x{5C89}\x{5C8A}' .
+'\x{5C8B}\x{5C8C}\x{5C8D}\x{5C8E}\x{5C8F}\x{5C90}\x{5C91}\x{5C92}\x{5C93}' .
+'\x{5C94}\x{5C95}\x{5C96}\x{5C97}\x{5C98}\x{5C99}\x{5C9A}\x{5C9B}\x{5C9C}' .
+'\x{5C9D}\x{5C9E}\x{5C9F}\x{5CA0}\x{5CA1}\x{5CA2}\x{5CA3}\x{5CA4}\x{5CA5}' .
+'\x{5CA6}\x{5CA7}\x{5CA8}\x{5CA9}\x{5CAA}\x{5CAB}\x{5CAC}\x{5CAD}\x{5CAE}' .
+'\x{5CAF}\x{5CB0}\x{5CB1}\x{5CB2}\x{5CB3}\x{5CB5}\x{5CB6}\x{5CB7}\x{5CB8}' .
+'\x{5CBA}\x{5CBB}\x{5CBC}\x{5CBD}\x{5CBE}\x{5CBF}\x{5CC1}\x{5CC2}\x{5CC3}' .
+'\x{5CC4}\x{5CC5}\x{5CC6}\x{5CC7}\x{5CC8}\x{5CC9}\x{5CCA}\x{5CCB}\x{5CCC}' .
+'\x{5CCD}\x{5CCE}\x{5CCF}\x{5CD0}\x{5CD1}\x{5CD2}\x{5CD3}\x{5CD4}\x{5CD6}' .
+'\x{5CD7}\x{5CD8}\x{5CD9}\x{5CDA}\x{5CDB}\x{5CDC}\x{5CDE}\x{5CDF}\x{5CE0}' .
+'\x{5CE1}\x{5CE2}\x{5CE3}\x{5CE4}\x{5CE5}\x{5CE6}\x{5CE7}\x{5CE8}\x{5CE9}' .
+'\x{5CEA}\x{5CEB}\x{5CEC}\x{5CED}\x{5CEE}\x{5CEF}\x{5CF0}\x{5CF1}\x{5CF2}' .
+'\x{5CF3}\x{5CF4}\x{5CF6}\x{5CF7}\x{5CF8}\x{5CF9}\x{5CFA}\x{5CFB}\x{5CFC}' .
+'\x{5CFD}\x{5CFE}\x{5CFF}\x{5D00}\x{5D01}\x{5D02}\x{5D03}\x{5D04}\x{5D05}' .
+'\x{5D06}\x{5D07}\x{5D08}\x{5D09}\x{5D0A}\x{5D0B}\x{5D0C}\x{5D0D}\x{5D0E}' .
+'\x{5D0F}\x{5D10}\x{5D11}\x{5D12}\x{5D13}\x{5D14}\x{5D15}\x{5D16}\x{5D17}' .
+'\x{5D18}\x{5D19}\x{5D1A}\x{5D1B}\x{5D1C}\x{5D1D}\x{5D1E}\x{5D1F}\x{5D20}' .
+'\x{5D21}\x{5D22}\x{5D23}\x{5D24}\x{5D25}\x{5D26}\x{5D27}\x{5D28}\x{5D29}' .
+'\x{5D2A}\x{5D2C}\x{5D2D}\x{5D2E}\x{5D30}\x{5D31}\x{5D32}\x{5D33}\x{5D34}' .
+'\x{5D35}\x{5D36}\x{5D37}\x{5D38}\x{5D39}\x{5D3A}\x{5D3C}\x{5D3D}\x{5D3E}' .
+'\x{5D3F}\x{5D40}\x{5D41}\x{5D42}\x{5D43}\x{5D44}\x{5D45}\x{5D46}\x{5D47}' .
+'\x{5D48}\x{5D49}\x{5D4A}\x{5D4B}\x{5D4C}\x{5D4D}\x{5D4E}\x{5D4F}\x{5D50}' .
+'\x{5D51}\x{5D52}\x{5D54}\x{5D55}\x{5D56}\x{5D58}\x{5D59}\x{5D5A}\x{5D5B}' .
+'\x{5D5D}\x{5D5E}\x{5D5F}\x{5D61}\x{5D62}\x{5D63}\x{5D64}\x{5D65}\x{5D66}' .
+'\x{5D67}\x{5D68}\x{5D69}\x{5D6A}\x{5D6B}\x{5D6C}\x{5D6D}\x{5D6E}\x{5D6F}' .
+'\x{5D70}\x{5D71}\x{5D72}\x{5D73}\x{5D74}\x{5D75}\x{5D76}\x{5D77}\x{5D78}' .
+'\x{5D79}\x{5D7A}\x{5D7B}\x{5D7C}\x{5D7D}\x{5D7E}\x{5D7F}\x{5D80}\x{5D81}' .
+'\x{5D82}\x{5D84}\x{5D85}\x{5D86}\x{5D87}\x{5D88}\x{5D89}\x{5D8A}\x{5D8B}' .
+'\x{5D8C}\x{5D8D}\x{5D8E}\x{5D8F}\x{5D90}\x{5D91}\x{5D92}\x{5D93}\x{5D94}' .
+'\x{5D95}\x{5D97}\x{5D98}\x{5D99}\x{5D9A}\x{5D9B}\x{5D9C}\x{5D9D}\x{5D9E}' .
+'\x{5D9F}\x{5DA0}\x{5DA1}\x{5DA2}\x{5DA5}\x{5DA6}\x{5DA7}\x{5DA8}\x{5DA9}' .
+'\x{5DAA}\x{5DAC}\x{5DAD}\x{5DAE}\x{5DAF}\x{5DB0}\x{5DB1}\x{5DB2}\x{5DB4}' .
+'\x{5DB5}\x{5DB6}\x{5DB7}\x{5DB8}\x{5DBA}\x{5DBB}\x{5DBC}\x{5DBD}\x{5DBE}' .
+'\x{5DBF}\x{5DC0}\x{5DC1}\x{5DC2}\x{5DC3}\x{5DC5}\x{5DC6}\x{5DC7}\x{5DC8}' .
+'\x{5DC9}\x{5DCA}\x{5DCB}\x{5DCC}\x{5DCD}\x{5DCE}\x{5DCF}\x{5DD0}\x{5DD1}' .
+'\x{5DD2}\x{5DD3}\x{5DD4}\x{5DD5}\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}' .
+'\x{5DDE}\x{5DDF}\x{5DE0}\x{5DE1}\x{5DE2}\x{5DE3}\x{5DE4}\x{5DE5}\x{5DE6}' .
+'\x{5DE7}\x{5DE8}\x{5DE9}\x{5DEA}\x{5DEB}\x{5DEC}\x{5DED}\x{5DEE}\x{5DEF}' .
+'\x{5DF0}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DF8}\x{5DF9}' .
+'\x{5DFA}\x{5DFB}\x{5DFC}\x{5DFD}\x{5DFE}\x{5DFF}\x{5E00}\x{5E01}\x{5E02}' .
+'\x{5E03}\x{5E04}\x{5E05}\x{5E06}\x{5E07}\x{5E08}\x{5E09}\x{5E0A}\x{5E0B}' .
+'\x{5E0C}\x{5E0D}\x{5E0E}\x{5E0F}\x{5E10}\x{5E11}\x{5E13}\x{5E14}\x{5E15}' .
+'\x{5E16}\x{5E17}\x{5E18}\x{5E19}\x{5E1A}\x{5E1B}\x{5E1C}\x{5E1D}\x{5E1E}' .
+'\x{5E1F}\x{5E20}\x{5E21}\x{5E22}\x{5E23}\x{5E24}\x{5E25}\x{5E26}\x{5E27}' .
+'\x{5E28}\x{5E29}\x{5E2A}\x{5E2B}\x{5E2C}\x{5E2D}\x{5E2E}\x{5E2F}\x{5E30}' .
+'\x{5E31}\x{5E32}\x{5E33}\x{5E34}\x{5E35}\x{5E36}\x{5E37}\x{5E38}\x{5E39}' .
+'\x{5E3A}\x{5E3B}\x{5E3C}\x{5E3D}\x{5E3E}\x{5E40}\x{5E41}\x{5E42}\x{5E43}' .
+'\x{5E44}\x{5E45}\x{5E46}\x{5E47}\x{5E49}\x{5E4A}\x{5E4B}\x{5E4C}\x{5E4D}' .
+'\x{5E4E}\x{5E4F}\x{5E50}\x{5E52}\x{5E53}\x{5E54}\x{5E55}\x{5E56}\x{5E57}' .
+'\x{5E58}\x{5E59}\x{5E5A}\x{5E5B}\x{5E5C}\x{5E5D}\x{5E5E}\x{5E5F}\x{5E60}' .
+'\x{5E61}\x{5E62}\x{5E63}\x{5E64}\x{5E65}\x{5E66}\x{5E67}\x{5E68}\x{5E69}' .
+'\x{5E6A}\x{5E6B}\x{5E6C}\x{5E6D}\x{5E6E}\x{5E6F}\x{5E70}\x{5E71}\x{5E72}' .
+'\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E77}\x{5E78}\x{5E79}\x{5E7A}\x{5E7B}' .
+'\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E80}\x{5E81}\x{5E82}\x{5E83}\x{5E84}' .
+'\x{5E85}\x{5E86}\x{5E87}\x{5E88}\x{5E89}\x{5E8A}\x{5E8B}\x{5E8C}\x{5E8D}' .
+'\x{5E8E}\x{5E8F}\x{5E90}\x{5E91}\x{5E93}\x{5E94}\x{5E95}\x{5E96}\x{5E97}' .
+'\x{5E98}\x{5E99}\x{5E9A}\x{5E9B}\x{5E9C}\x{5E9D}\x{5E9E}\x{5E9F}\x{5EA0}' .
+'\x{5EA1}\x{5EA2}\x{5EA3}\x{5EA4}\x{5EA5}\x{5EA6}\x{5EA7}\x{5EA8}\x{5EA9}' .
+'\x{5EAA}\x{5EAB}\x{5EAC}\x{5EAD}\x{5EAE}\x{5EAF}\x{5EB0}\x{5EB1}\x{5EB2}' .
+'\x{5EB3}\x{5EB4}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EB9}\x{5EBB}\x{5EBC}' .
+'\x{5EBD}\x{5EBE}\x{5EBF}\x{5EC1}\x{5EC2}\x{5EC3}\x{5EC4}\x{5EC5}\x{5EC6}' .
+'\x{5EC7}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECB}\x{5ECC}\x{5ECD}\x{5ECE}\x{5ECF}' .
+'\x{5ED0}\x{5ED1}\x{5ED2}\x{5ED3}\x{5ED4}\x{5ED5}\x{5ED6}\x{5ED7}\x{5ED8}' .
+'\x{5ED9}\x{5EDA}\x{5EDB}\x{5EDC}\x{5EDD}\x{5EDE}\x{5EDF}\x{5EE0}\x{5EE1}' .
+'\x{5EE2}\x{5EE3}\x{5EE4}\x{5EE5}\x{5EE6}\x{5EE7}\x{5EE8}\x{5EE9}\x{5EEA}' .
+'\x{5EEC}\x{5EED}\x{5EEE}\x{5EEF}\x{5EF0}\x{5EF1}\x{5EF2}\x{5EF3}\x{5EF4}' .
+'\x{5EF5}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}\x{5EFB}\x{5EFC}\x{5EFD}\x{5EFE}' .
+'\x{5EFF}\x{5F00}\x{5F01}\x{5F02}\x{5F03}\x{5F04}\x{5F05}\x{5F06}\x{5F07}' .
+'\x{5F08}\x{5F0A}\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F11}\x{5F12}\x{5F13}' .
+'\x{5F14}\x{5F15}\x{5F16}\x{5F17}\x{5F18}\x{5F19}\x{5F1A}\x{5F1B}\x{5F1C}' .
+'\x{5F1D}\x{5F1E}\x{5F1F}\x{5F20}\x{5F21}\x{5F22}\x{5F23}\x{5F24}\x{5F25}' .
+'\x{5F26}\x{5F27}\x{5F28}\x{5F29}\x{5F2A}\x{5F2B}\x{5F2C}\x{5F2D}\x{5F2E}' .
+'\x{5F2F}\x{5F30}\x{5F31}\x{5F32}\x{5F33}\x{5F34}\x{5F35}\x{5F36}\x{5F37}' .
+'\x{5F38}\x{5F39}\x{5F3A}\x{5F3C}\x{5F3E}\x{5F3F}\x{5F40}\x{5F41}\x{5F42}' .
+'\x{5F43}\x{5F44}\x{5F45}\x{5F46}\x{5F47}\x{5F48}\x{5F49}\x{5F4A}\x{5F4B}' .
+'\x{5F4C}\x{5F4D}\x{5F4E}\x{5F4F}\x{5F50}\x{5F51}\x{5F52}\x{5F53}\x{5F54}' .
+'\x{5F55}\x{5F56}\x{5F57}\x{5F58}\x{5F59}\x{5F5A}\x{5F5B}\x{5F5C}\x{5F5D}' .
+'\x{5F5E}\x{5F5F}\x{5F60}\x{5F61}\x{5F62}\x{5F63}\x{5F64}\x{5F65}\x{5F66}' .
+'\x{5F67}\x{5F68}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}\x{5F6D}\x{5F6E}\x{5F6F}' .
+'\x{5F70}\x{5F71}\x{5F72}\x{5F73}\x{5F74}\x{5F75}\x{5F76}\x{5F77}\x{5F78}' .
+'\x{5F79}\x{5F7A}\x{5F7B}\x{5F7C}\x{5F7D}\x{5F7E}\x{5F7F}\x{5F80}\x{5F81}' .
+'\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F86}\x{5F87}\x{5F88}\x{5F89}\x{5F8A}' .
+'\x{5F8B}\x{5F8C}\x{5F8D}\x{5F8E}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F94}' .
+'\x{5F95}\x{5F96}\x{5F97}\x{5F98}\x{5F99}\x{5F9B}\x{5F9C}\x{5F9D}\x{5F9E}' .
+'\x{5F9F}\x{5FA0}\x{5FA1}\x{5FA2}\x{5FA5}\x{5FA6}\x{5FA7}\x{5FA8}\x{5FA9}' .
+'\x{5FAA}\x{5FAB}\x{5FAC}\x{5FAD}\x{5FAE}\x{5FAF}\x{5FB1}\x{5FB2}\x{5FB3}' .
+'\x{5FB4}\x{5FB5}\x{5FB6}\x{5FB7}\x{5FB8}\x{5FB9}\x{5FBA}\x{5FBB}\x{5FBC}' .
+'\x{5FBD}\x{5FBE}\x{5FBF}\x{5FC0}\x{5FC1}\x{5FC3}\x{5FC4}\x{5FC5}\x{5FC6}' .
+'\x{5FC7}\x{5FC8}\x{5FC9}\x{5FCA}\x{5FCB}\x{5FCC}\x{5FCD}\x{5FCF}\x{5FD0}' .
+'\x{5FD1}\x{5FD2}\x{5FD3}\x{5FD4}\x{5FD5}\x{5FD6}\x{5FD7}\x{5FD8}\x{5FD9}' .
+'\x{5FDA}\x{5FDC}\x{5FDD}\x{5FDE}\x{5FE0}\x{5FE1}\x{5FE3}\x{5FE4}\x{5FE5}' .
+'\x{5FE6}\x{5FE7}\x{5FE8}\x{5FE9}\x{5FEA}\x{5FEB}\x{5FED}\x{5FEE}\x{5FEF}' .
+'\x{5FF0}\x{5FF1}\x{5FF2}\x{5FF3}\x{5FF4}\x{5FF5}\x{5FF6}\x{5FF7}\x{5FF8}' .
+'\x{5FF9}\x{5FFA}\x{5FFB}\x{5FFD}\x{5FFE}\x{5FFF}\x{6000}\x{6001}\x{6002}' .
+'\x{6003}\x{6004}\x{6005}\x{6006}\x{6007}\x{6008}\x{6009}\x{600A}\x{600B}' .
+'\x{600C}\x{600D}\x{600E}\x{600F}\x{6010}\x{6011}\x{6012}\x{6013}\x{6014}' .
+'\x{6015}\x{6016}\x{6017}\x{6018}\x{6019}\x{601A}\x{601B}\x{601C}\x{601D}' .
+'\x{601E}\x{601F}\x{6020}\x{6021}\x{6022}\x{6024}\x{6025}\x{6026}\x{6027}' .
+'\x{6028}\x{6029}\x{602A}\x{602B}\x{602C}\x{602D}\x{602E}\x{602F}\x{6030}' .
+'\x{6031}\x{6032}\x{6033}\x{6034}\x{6035}\x{6036}\x{6037}\x{6038}\x{6039}' .
+'\x{603A}\x{603B}\x{603C}\x{603D}\x{603E}\x{603F}\x{6040}\x{6041}\x{6042}' .
+'\x{6043}\x{6044}\x{6045}\x{6046}\x{6047}\x{6048}\x{6049}\x{604A}\x{604B}' .
+'\x{604C}\x{604D}\x{604E}\x{604F}\x{6050}\x{6051}\x{6052}\x{6053}\x{6054}' .
+'\x{6055}\x{6057}\x{6058}\x{6059}\x{605A}\x{605B}\x{605C}\x{605D}\x{605E}' .
+'\x{605F}\x{6062}\x{6063}\x{6064}\x{6065}\x{6066}\x{6067}\x{6068}\x{6069}' .
+'\x{606A}\x{606B}\x{606C}\x{606D}\x{606E}\x{606F}\x{6070}\x{6072}\x{6073}' .
+'\x{6075}\x{6076}\x{6077}\x{6078}\x{6079}\x{607A}\x{607B}\x{607C}\x{607D}' .
+'\x{607E}\x{607F}\x{6080}\x{6081}\x{6082}\x{6083}\x{6084}\x{6085}\x{6086}' .
+'\x{6087}\x{6088}\x{6089}\x{608A}\x{608B}\x{608C}\x{608D}\x{608E}\x{608F}' .
+'\x{6090}\x{6092}\x{6094}\x{6095}\x{6096}\x{6097}\x{6098}\x{6099}\x{609A}' .
+'\x{609B}\x{609C}\x{609D}\x{609E}\x{609F}\x{60A0}\x{60A1}\x{60A2}\x{60A3}' .
+'\x{60A4}\x{60A6}\x{60A7}\x{60A8}\x{60AA}\x{60AB}\x{60AC}\x{60AD}\x{60AE}' .
+'\x{60AF}\x{60B0}\x{60B1}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B7}' .
+'\x{60B8}\x{60B9}\x{60BA}\x{60BB}\x{60BC}\x{60BD}\x{60BE}\x{60BF}\x{60C0}' .
+'\x{60C1}\x{60C2}\x{60C3}\x{60C4}\x{60C5}\x{60C6}\x{60C7}\x{60C8}\x{60C9}' .
+'\x{60CA}\x{60CB}\x{60CC}\x{60CD}\x{60CE}\x{60CF}\x{60D0}\x{60D1}\x{60D3}' .
+'\x{60D4}\x{60D5}\x{60D7}\x{60D8}\x{60D9}\x{60DA}\x{60DB}\x{60DC}\x{60DD}' .
+'\x{60DF}\x{60E0}\x{60E1}\x{60E2}\x{60E4}\x{60E6}\x{60E7}\x{60E8}\x{60E9}' .
+'\x{60EA}\x{60EB}\x{60EC}\x{60ED}\x{60EE}\x{60EF}\x{60F0}\x{60F1}\x{60F2}' .
+'\x{60F3}\x{60F4}\x{60F5}\x{60F6}\x{60F7}\x{60F8}\x{60F9}\x{60FA}\x{60FB}' .
+'\x{60FC}\x{60FE}\x{60FF}\x{6100}\x{6101}\x{6103}\x{6104}\x{6105}\x{6106}' .
+'\x{6108}\x{6109}\x{610A}\x{610B}\x{610C}\x{610D}\x{610E}\x{610F}\x{6110}' .
+'\x{6112}\x{6113}\x{6114}\x{6115}\x{6116}\x{6117}\x{6118}\x{6119}\x{611A}' .
+'\x{611B}\x{611C}\x{611D}\x{611F}\x{6120}\x{6122}\x{6123}\x{6124}\x{6125}' .
+'\x{6126}\x{6127}\x{6128}\x{6129}\x{612A}\x{612B}\x{612C}\x{612D}\x{612E}' .
+'\x{612F}\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}\x{613B}\x{613C}' .
+'\x{613D}\x{613E}\x{613F}\x{6140}\x{6141}\x{6142}\x{6143}\x{6144}\x{6145}' .
+'\x{6146}\x{6147}\x{6148}\x{6149}\x{614A}\x{614B}\x{614C}\x{614D}\x{614E}' .
+'\x{614F}\x{6150}\x{6151}\x{6152}\x{6153}\x{6154}\x{6155}\x{6156}\x{6157}' .
+'\x{6158}\x{6159}\x{615A}\x{615B}\x{615C}\x{615D}\x{615E}\x{615F}\x{6161}' .
+'\x{6162}\x{6163}\x{6164}\x{6165}\x{6166}\x{6167}\x{6168}\x{6169}\x{616A}' .
+'\x{616B}\x{616C}\x{616D}\x{616E}\x{6170}\x{6171}\x{6172}\x{6173}\x{6174}' .
+'\x{6175}\x{6176}\x{6177}\x{6178}\x{6179}\x{617A}\x{617C}\x{617E}\x{6180}' .
+'\x{6181}\x{6182}\x{6183}\x{6184}\x{6185}\x{6187}\x{6188}\x{6189}\x{618A}' .
+'\x{618B}\x{618C}\x{618D}\x{618E}\x{618F}\x{6190}\x{6191}\x{6192}\x{6193}' .
+'\x{6194}\x{6195}\x{6196}\x{6198}\x{6199}\x{619A}\x{619B}\x{619D}\x{619E}' .
+'\x{619F}\x{61A0}\x{61A1}\x{61A2}\x{61A3}\x{61A4}\x{61A5}\x{61A6}\x{61A7}' .
+'\x{61A8}\x{61A9}\x{61AA}\x{61AB}\x{61AC}\x{61AD}\x{61AE}\x{61AF}\x{61B0}' .
+'\x{61B1}\x{61B2}\x{61B3}\x{61B4}\x{61B5}\x{61B6}\x{61B7}\x{61B8}\x{61BA}' .
+'\x{61BC}\x{61BD}\x{61BE}\x{61BF}\x{61C0}\x{61C1}\x{61C2}\x{61C3}\x{61C4}' .
+'\x{61C5}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
+'\x{61CE}\x{61CF}\x{61D0}\x{61D1}\x{61D2}\x{61D4}\x{61D6}\x{61D7}\x{61D8}' .
+'\x{61D9}\x{61DA}\x{61DB}\x{61DC}\x{61DD}\x{61DE}\x{61DF}\x{61E0}\x{61E1}' .
+'\x{61E2}\x{61E3}\x{61E4}\x{61E5}\x{61E6}\x{61E7}\x{61E8}\x{61E9}\x{61EA}' .
+'\x{61EB}\x{61ED}\x{61EE}\x{61F0}\x{61F1}\x{61F2}\x{61F3}\x{61F5}\x{61F6}' .
+'\x{61F7}\x{61F8}\x{61F9}\x{61FA}\x{61FB}\x{61FC}\x{61FD}\x{61FE}\x{61FF}' .
+'\x{6200}\x{6201}\x{6202}\x{6203}\x{6204}\x{6206}\x{6207}\x{6208}\x{6209}' .
+'\x{620A}\x{620B}\x{620C}\x{620D}\x{620E}\x{620F}\x{6210}\x{6211}\x{6212}' .
+'\x{6213}\x{6214}\x{6215}\x{6216}\x{6217}\x{6218}\x{6219}\x{621A}\x{621B}' .
+'\x{621C}\x{621D}\x{621E}\x{621F}\x{6220}\x{6221}\x{6222}\x{6223}\x{6224}' .
+'\x{6225}\x{6226}\x{6227}\x{6228}\x{6229}\x{622A}\x{622B}\x{622C}\x{622D}' .
+'\x{622E}\x{622F}\x{6230}\x{6231}\x{6232}\x{6233}\x{6234}\x{6236}\x{6237}' .
+'\x{6238}\x{623A}\x{623B}\x{623C}\x{623D}\x{623E}\x{623F}\x{6240}\x{6241}' .
+'\x{6242}\x{6243}\x{6244}\x{6245}\x{6246}\x{6247}\x{6248}\x{6249}\x{624A}' .
+'\x{624B}\x{624C}\x{624D}\x{624E}\x{624F}\x{6250}\x{6251}\x{6252}\x{6253}' .
+'\x{6254}\x{6255}\x{6256}\x{6258}\x{6259}\x{625A}\x{625B}\x{625C}\x{625D}' .
+'\x{625E}\x{625F}\x{6260}\x{6261}\x{6262}\x{6263}\x{6264}\x{6265}\x{6266}' .
+'\x{6267}\x{6268}\x{6269}\x{626A}\x{626B}\x{626C}\x{626D}\x{626E}\x{626F}' .
+'\x{6270}\x{6271}\x{6272}\x{6273}\x{6274}\x{6275}\x{6276}\x{6277}\x{6278}' .
+'\x{6279}\x{627A}\x{627B}\x{627C}\x{627D}\x{627E}\x{627F}\x{6280}\x{6281}' .
+'\x{6283}\x{6284}\x{6285}\x{6286}\x{6287}\x{6288}\x{6289}\x{628A}\x{628B}' .
+'\x{628C}\x{628E}\x{628F}\x{6290}\x{6291}\x{6292}\x{6293}\x{6294}\x{6295}' .
+'\x{6296}\x{6297}\x{6298}\x{6299}\x{629A}\x{629B}\x{629C}\x{629E}\x{629F}' .
+'\x{62A0}\x{62A1}\x{62A2}\x{62A3}\x{62A4}\x{62A5}\x{62A7}\x{62A8}\x{62A9}' .
+'\x{62AA}\x{62AB}\x{62AC}\x{62AD}\x{62AE}\x{62AF}\x{62B0}\x{62B1}\x{62B2}' .
+'\x{62B3}\x{62B4}\x{62B5}\x{62B6}\x{62B7}\x{62B8}\x{62B9}\x{62BA}\x{62BB}' .
+'\x{62BC}\x{62BD}\x{62BE}\x{62BF}\x{62C0}\x{62C1}\x{62C2}\x{62C3}\x{62C4}' .
+'\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CB}\x{62CC}\x{62CD}' .
+'\x{62CE}\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D5}\x{62D6}' .
+'\x{62D7}\x{62D8}\x{62D9}\x{62DA}\x{62DB}\x{62DC}\x{62DD}\x{62DF}\x{62E0}' .
+'\x{62E1}\x{62E2}\x{62E3}\x{62E4}\x{62E5}\x{62E6}\x{62E7}\x{62E8}\x{62E9}' .
+'\x{62EB}\x{62EC}\x{62ED}\x{62EE}\x{62EF}\x{62F0}\x{62F1}\x{62F2}\x{62F3}' .
+'\x{62F4}\x{62F5}\x{62F6}\x{62F7}\x{62F8}\x{62F9}\x{62FA}\x{62FB}\x{62FC}' .
+'\x{62FD}\x{62FE}\x{62FF}\x{6300}\x{6301}\x{6302}\x{6303}\x{6304}\x{6305}' .
+'\x{6306}\x{6307}\x{6308}\x{6309}\x{630B}\x{630C}\x{630D}\x{630E}\x{630F}' .
+'\x{6310}\x{6311}\x{6312}\x{6313}\x{6314}\x{6315}\x{6316}\x{6318}\x{6319}' .
+'\x{631A}\x{631B}\x{631C}\x{631D}\x{631E}\x{631F}\x{6320}\x{6321}\x{6322}' .
+'\x{6323}\x{6324}\x{6325}\x{6326}\x{6327}\x{6328}\x{6329}\x{632A}\x{632B}' .
+'\x{632C}\x{632D}\x{632E}\x{632F}\x{6330}\x{6332}\x{6333}\x{6334}\x{6336}' .
+'\x{6338}\x{6339}\x{633A}\x{633B}\x{633C}\x{633D}\x{633E}\x{6340}\x{6341}' .
+'\x{6342}\x{6343}\x{6344}\x{6345}\x{6346}\x{6347}\x{6348}\x{6349}\x{634A}' .
+'\x{634B}\x{634C}\x{634D}\x{634E}\x{634F}\x{6350}\x{6351}\x{6352}\x{6353}' .
+'\x{6354}\x{6355}\x{6356}\x{6357}\x{6358}\x{6359}\x{635A}\x{635C}\x{635D}' .
+'\x{635E}\x{635F}\x{6360}\x{6361}\x{6362}\x{6363}\x{6364}\x{6365}\x{6366}' .
+'\x{6367}\x{6368}\x{6369}\x{636A}\x{636B}\x{636C}\x{636D}\x{636E}\x{636F}' .
+'\x{6370}\x{6371}\x{6372}\x{6373}\x{6374}\x{6375}\x{6376}\x{6377}\x{6378}' .
+'\x{6379}\x{637A}\x{637B}\x{637C}\x{637D}\x{637E}\x{6380}\x{6381}\x{6382}' .
+'\x{6383}\x{6384}\x{6385}\x{6386}\x{6387}\x{6388}\x{6389}\x{638A}\x{638C}' .
+'\x{638D}\x{638E}\x{638F}\x{6390}\x{6391}\x{6392}\x{6394}\x{6395}\x{6396}' .
+'\x{6397}\x{6398}\x{6399}\x{639A}\x{639B}\x{639C}\x{639D}\x{639E}\x{639F}' .
+'\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A4}\x{63A5}\x{63A6}\x{63A7}\x{63A8}' .
+'\x{63A9}\x{63AA}\x{63AB}\x{63AC}\x{63AD}\x{63AE}\x{63AF}\x{63B0}\x{63B1}' .
+'\x{63B2}\x{63B3}\x{63B4}\x{63B5}\x{63B6}\x{63B7}\x{63B8}\x{63B9}\x{63BA}' .
+'\x{63BC}\x{63BD}\x{63BE}\x{63BF}\x{63C0}\x{63C1}\x{63C2}\x{63C3}\x{63C4}' .
+'\x{63C5}\x{63C6}\x{63C7}\x{63C8}\x{63C9}\x{63CA}\x{63CB}\x{63CC}\x{63CD}' .
+'\x{63CE}\x{63CF}\x{63D0}\x{63D2}\x{63D3}\x{63D4}\x{63D5}\x{63D6}\x{63D7}' .
+'\x{63D8}\x{63D9}\x{63DA}\x{63DB}\x{63DC}\x{63DD}\x{63DE}\x{63DF}\x{63E0}' .
+'\x{63E1}\x{63E2}\x{63E3}\x{63E4}\x{63E5}\x{63E6}\x{63E7}\x{63E8}\x{63E9}' .
+'\x{63EA}\x{63EB}\x{63EC}\x{63ED}\x{63EE}\x{63EF}\x{63F0}\x{63F1}\x{63F2}' .
+'\x{63F3}\x{63F4}\x{63F5}\x{63F6}\x{63F7}\x{63F8}\x{63F9}\x{63FA}\x{63FB}' .
+'\x{63FC}\x{63FD}\x{63FE}\x{63FF}\x{6400}\x{6401}\x{6402}\x{6403}\x{6404}' .
+'\x{6405}\x{6406}\x{6408}\x{6409}\x{640A}\x{640B}\x{640C}\x{640D}\x{640E}' .
+'\x{640F}\x{6410}\x{6411}\x{6412}\x{6413}\x{6414}\x{6415}\x{6416}\x{6417}' .
+'\x{6418}\x{6419}\x{641A}\x{641B}\x{641C}\x{641D}\x{641E}\x{641F}\x{6420}' .
+'\x{6421}\x{6422}\x{6423}\x{6424}\x{6425}\x{6426}\x{6427}\x{6428}\x{6429}' .
+'\x{642A}\x{642B}\x{642C}\x{642D}\x{642E}\x{642F}\x{6430}\x{6431}\x{6432}' .
+'\x{6433}\x{6434}\x{6435}\x{6436}\x{6437}\x{6438}\x{6439}\x{643A}\x{643D}' .
+'\x{643E}\x{643F}\x{6440}\x{6441}\x{6443}\x{6444}\x{6445}\x{6446}\x{6447}' .
+'\x{6448}\x{644A}\x{644B}\x{644C}\x{644D}\x{644E}\x{644F}\x{6450}\x{6451}' .
+'\x{6452}\x{6453}\x{6454}\x{6455}\x{6456}\x{6457}\x{6458}\x{6459}\x{645B}' .
+'\x{645C}\x{645D}\x{645E}\x{645F}\x{6460}\x{6461}\x{6462}\x{6463}\x{6464}' .
+'\x{6465}\x{6466}\x{6467}\x{6468}\x{6469}\x{646A}\x{646B}\x{646C}\x{646D}' .
+'\x{646E}\x{646F}\x{6470}\x{6471}\x{6472}\x{6473}\x{6474}\x{6475}\x{6476}' .
+'\x{6477}\x{6478}\x{6479}\x{647A}\x{647B}\x{647C}\x{647D}\x{647F}\x{6480}' .
+'\x{6481}\x{6482}\x{6483}\x{6484}\x{6485}\x{6487}\x{6488}\x{6489}\x{648A}' .
+'\x{648B}\x{648C}\x{648D}\x{648E}\x{648F}\x{6490}\x{6491}\x{6492}\x{6493}' .
+'\x{6494}\x{6495}\x{6496}\x{6497}\x{6498}\x{6499}\x{649A}\x{649B}\x{649C}' .
+'\x{649D}\x{649E}\x{649F}\x{64A0}\x{64A2}\x{64A3}\x{64A4}\x{64A5}\x{64A6}' .
+'\x{64A7}\x{64A8}\x{64A9}\x{64AA}\x{64AB}\x{64AC}\x{64AD}\x{64AE}\x{64B0}' .
+'\x{64B1}\x{64B2}\x{64B3}\x{64B4}\x{64B5}\x{64B7}\x{64B8}\x{64B9}\x{64BA}' .
+'\x{64BB}\x{64BC}\x{64BD}\x{64BE}\x{64BF}\x{64C0}\x{64C1}\x{64C2}\x{64C3}' .
+'\x{64C4}\x{64C5}\x{64C6}\x{64C7}\x{64C9}\x{64CA}\x{64CB}\x{64CC}\x{64CD}' .
+'\x{64CE}\x{64CF}\x{64D0}\x{64D1}\x{64D2}\x{64D3}\x{64D4}\x{64D6}\x{64D7}' .
+'\x{64D8}\x{64D9}\x{64DA}\x{64DB}\x{64DC}\x{64DD}\x{64DE}\x{64DF}\x{64E0}' .
+'\x{64E2}\x{64E3}\x{64E4}\x{64E6}\x{64E7}\x{64E8}\x{64E9}\x{64EA}\x{64EB}' .
+'\x{64EC}\x{64ED}\x{64EF}\x{64F0}\x{64F1}\x{64F2}\x{64F3}\x{64F4}\x{64F6}' .
+'\x{64F7}\x{64F8}\x{64FA}\x{64FB}\x{64FC}\x{64FD}\x{64FE}\x{64FF}\x{6500}' .
+'\x{6501}\x{6503}\x{6504}\x{6505}\x{6506}\x{6507}\x{6508}\x{6509}\x{650B}' .
+'\x{650C}\x{650D}\x{650E}\x{650F}\x{6510}\x{6511}\x{6512}\x{6513}\x{6514}' .
+'\x{6515}\x{6516}\x{6517}\x{6518}\x{6519}\x{651A}\x{651B}\x{651C}\x{651D}' .
+'\x{651E}\x{6520}\x{6521}\x{6522}\x{6523}\x{6524}\x{6525}\x{6526}\x{6527}' .
+'\x{6529}\x{652A}\x{652B}\x{652C}\x{652D}\x{652E}\x{652F}\x{6530}\x{6531}' .
+'\x{6532}\x{6533}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}\x{653A}' .
+'\x{653B}\x{653C}\x{653D}\x{653E}\x{653F}\x{6541}\x{6543}\x{6544}\x{6545}' .
+'\x{6546}\x{6547}\x{6548}\x{6549}\x{654A}\x{654B}\x{654C}\x{654D}\x{654E}' .
+'\x{654F}\x{6550}\x{6551}\x{6552}\x{6553}\x{6554}\x{6555}\x{6556}\x{6557}' .
+'\x{6558}\x{6559}\x{655B}\x{655C}\x{655D}\x{655E}\x{6560}\x{6561}\x{6562}' .
+'\x{6563}\x{6564}\x{6565}\x{6566}\x{6567}\x{6568}\x{6569}\x{656A}\x{656B}' .
+'\x{656C}\x{656E}\x{656F}\x{6570}\x{6571}\x{6572}\x{6573}\x{6574}\x{6575}' .
+'\x{6576}\x{6577}\x{6578}\x{6579}\x{657A}\x{657B}\x{657C}\x{657E}\x{657F}' .
+'\x{6580}\x{6581}\x{6582}\x{6583}\x{6584}\x{6585}\x{6586}\x{6587}\x{6588}' .
+'\x{6589}\x{658B}\x{658C}\x{658D}\x{658E}\x{658F}\x{6590}\x{6591}\x{6592}' .
+'\x{6593}\x{6594}\x{6595}\x{6596}\x{6597}\x{6598}\x{6599}\x{659B}\x{659C}' .
+'\x{659D}\x{659E}\x{659F}\x{65A0}\x{65A1}\x{65A2}\x{65A3}\x{65A4}\x{65A5}' .
+'\x{65A6}\x{65A7}\x{65A8}\x{65A9}\x{65AA}\x{65AB}\x{65AC}\x{65AD}\x{65AE}' .
+'\x{65AF}\x{65B0}\x{65B1}\x{65B2}\x{65B3}\x{65B4}\x{65B6}\x{65B7}\x{65B8}' .
+'\x{65B9}\x{65BA}\x{65BB}\x{65BC}\x{65BD}\x{65BF}\x{65C0}\x{65C1}\x{65C2}' .
+'\x{65C3}\x{65C4}\x{65C5}\x{65C6}\x{65C7}\x{65CA}\x{65CB}\x{65CC}\x{65CD}' .
+'\x{65CE}\x{65CF}\x{65D0}\x{65D2}\x{65D3}\x{65D4}\x{65D5}\x{65D6}\x{65D7}' .
+'\x{65DA}\x{65DB}\x{65DD}\x{65DE}\x{65DF}\x{65E0}\x{65E1}\x{65E2}\x{65E3}' .
+'\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}\x{65EB}\x{65EC}\x{65ED}\x{65EE}' .
+'\x{65EF}\x{65F0}\x{65F1}\x{65F2}\x{65F3}\x{65F4}\x{65F5}\x{65F6}\x{65F7}' .
+'\x{65F8}\x{65FA}\x{65FB}\x{65FC}\x{65FD}\x{6600}\x{6601}\x{6602}\x{6603}' .
+'\x{6604}\x{6605}\x{6606}\x{6607}\x{6608}\x{6609}\x{660A}\x{660B}\x{660C}' .
+'\x{660D}\x{660E}\x{660F}\x{6610}\x{6611}\x{6612}\x{6613}\x{6614}\x{6615}' .
+'\x{6616}\x{6618}\x{6619}\x{661A}\x{661B}\x{661C}\x{661D}\x{661F}\x{6620}' .
+'\x{6621}\x{6622}\x{6623}\x{6624}\x{6625}\x{6626}\x{6627}\x{6628}\x{6629}' .
+'\x{662A}\x{662B}\x{662D}\x{662E}\x{662F}\x{6630}\x{6631}\x{6632}\x{6633}' .
+'\x{6634}\x{6635}\x{6636}\x{6639}\x{663A}\x{663C}\x{663D}\x{663E}\x{6640}' .
+'\x{6641}\x{6642}\x{6643}\x{6644}\x{6645}\x{6646}\x{6647}\x{6649}\x{664A}' .
+'\x{664B}\x{664C}\x{664E}\x{664F}\x{6650}\x{6651}\x{6652}\x{6653}\x{6654}' .
+'\x{6655}\x{6656}\x{6657}\x{6658}\x{6659}\x{665A}\x{665B}\x{665C}\x{665D}' .
+'\x{665E}\x{665F}\x{6661}\x{6662}\x{6664}\x{6665}\x{6666}\x{6668}\x{6669}' .
+'\x{666A}\x{666B}\x{666C}\x{666D}\x{666E}\x{666F}\x{6670}\x{6671}\x{6672}' .
+'\x{6673}\x{6674}\x{6675}\x{6676}\x{6677}\x{6678}\x{6679}\x{667A}\x{667B}' .
+'\x{667C}\x{667D}\x{667E}\x{667F}\x{6680}\x{6681}\x{6682}\x{6683}\x{6684}' .
+'\x{6685}\x{6686}\x{6687}\x{6688}\x{6689}\x{668A}\x{668B}\x{668C}\x{668D}' .
+'\x{668E}\x{668F}\x{6690}\x{6691}\x{6693}\x{6694}\x{6695}\x{6696}\x{6697}' .
+'\x{6698}\x{6699}\x{669A}\x{669B}\x{669D}\x{669F}\x{66A0}\x{66A1}\x{66A2}' .
+'\x{66A3}\x{66A4}\x{66A5}\x{66A6}\x{66A7}\x{66A8}\x{66A9}\x{66AA}\x{66AB}' .
+'\x{66AE}\x{66AF}\x{66B0}\x{66B1}\x{66B2}\x{66B3}\x{66B4}\x{66B5}\x{66B6}' .
+'\x{66B7}\x{66B8}\x{66B9}\x{66BA}\x{66BB}\x{66BC}\x{66BD}\x{66BE}\x{66BF}' .
+'\x{66C0}\x{66C1}\x{66C2}\x{66C3}\x{66C4}\x{66C5}\x{66C6}\x{66C7}\x{66C8}' .
+'\x{66C9}\x{66CA}\x{66CB}\x{66CC}\x{66CD}\x{66CE}\x{66CF}\x{66D1}\x{66D2}' .
+'\x{66D4}\x{66D5}\x{66D6}\x{66D8}\x{66D9}\x{66DA}\x{66DB}\x{66DC}\x{66DD}' .
+'\x{66DE}\x{66E0}\x{66E1}\x{66E2}\x{66E3}\x{66E4}\x{66E5}\x{66E6}\x{66E7}' .
+'\x{66E8}\x{66E9}\x{66EA}\x{66EB}\x{66EC}\x{66ED}\x{66EE}\x{66F0}\x{66F1}' .
+'\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F6}\x{66F7}\x{66F8}\x{66F9}\x{66FA}' .
+'\x{66FB}\x{66FC}\x{66FE}\x{66FF}\x{6700}\x{6701}\x{6703}\x{6704}\x{6705}' .
+'\x{6706}\x{6708}\x{6709}\x{670A}\x{670B}\x{670C}\x{670D}\x{670E}\x{670F}' .
+'\x{6710}\x{6711}\x{6712}\x{6713}\x{6714}\x{6715}\x{6716}\x{6717}\x{6718}' .
+'\x{671A}\x{671B}\x{671C}\x{671D}\x{671E}\x{671F}\x{6720}\x{6721}\x{6722}' .
+'\x{6723}\x{6725}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}\x{672D}' .
+'\x{672E}\x{672F}\x{6730}\x{6731}\x{6732}\x{6733}\x{6734}\x{6735}\x{6736}' .
+'\x{6737}\x{6738}\x{6739}\x{673A}\x{673B}\x{673C}\x{673D}\x{673E}\x{673F}' .
+'\x{6740}\x{6741}\x{6742}\x{6743}\x{6744}\x{6745}\x{6746}\x{6747}\x{6748}' .
+'\x{6749}\x{674A}\x{674B}\x{674C}\x{674D}\x{674E}\x{674F}\x{6750}\x{6751}' .
+'\x{6752}\x{6753}\x{6754}\x{6755}\x{6756}\x{6757}\x{6758}\x{6759}\x{675A}' .
+'\x{675B}\x{675C}\x{675D}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
+'\x{6764}\x{6765}\x{6766}\x{6768}\x{6769}\x{676A}\x{676B}\x{676C}\x{676D}' .
+'\x{676E}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}\x{6774}\x{6775}\x{6776}' .
+'\x{6777}\x{6778}\x{6779}\x{677A}\x{677B}\x{677C}\x{677D}\x{677E}\x{677F}' .
+'\x{6780}\x{6781}\x{6782}\x{6783}\x{6784}\x{6785}\x{6786}\x{6787}\x{6789}' .
+'\x{678A}\x{678B}\x{678C}\x{678D}\x{678E}\x{678F}\x{6790}\x{6791}\x{6792}' .
+'\x{6793}\x{6794}\x{6795}\x{6797}\x{6798}\x{6799}\x{679A}\x{679B}\x{679C}' .
+'\x{679D}\x{679E}\x{679F}\x{67A0}\x{67A1}\x{67A2}\x{67A3}\x{67A4}\x{67A5}' .
+'\x{67A6}\x{67A7}\x{67A8}\x{67AA}\x{67AB}\x{67AC}\x{67AD}\x{67AE}\x{67AF}' .
+'\x{67B0}\x{67B1}\x{67B2}\x{67B3}\x{67B4}\x{67B5}\x{67B6}\x{67B7}\x{67B8}' .
+'\x{67B9}\x{67BA}\x{67BB}\x{67BC}\x{67BE}\x{67C0}\x{67C1}\x{67C2}\x{67C3}' .
+'\x{67C4}\x{67C5}\x{67C6}\x{67C7}\x{67C8}\x{67C9}\x{67CA}\x{67CB}\x{67CC}' .
+'\x{67CD}\x{67CE}\x{67CF}\x{67D0}\x{67D1}\x{67D2}\x{67D3}\x{67D4}\x{67D6}' .
+'\x{67D8}\x{67D9}\x{67DA}\x{67DB}\x{67DC}\x{67DD}\x{67DE}\x{67DF}\x{67E0}' .
+'\x{67E1}\x{67E2}\x{67E3}\x{67E4}\x{67E5}\x{67E6}\x{67E7}\x{67E8}\x{67E9}' .
+'\x{67EA}\x{67EB}\x{67EC}\x{67ED}\x{67EE}\x{67EF}\x{67F0}\x{67F1}\x{67F2}' .
+'\x{67F3}\x{67F4}\x{67F5}\x{67F6}\x{67F7}\x{67F8}\x{67FA}\x{67FB}\x{67FC}' .
+'\x{67FD}\x{67FE}\x{67FF}\x{6800}\x{6802}\x{6803}\x{6804}\x{6805}\x{6806}' .
+'\x{6807}\x{6808}\x{6809}\x{680A}\x{680B}\x{680C}\x{680D}\x{680E}\x{680F}' .
+'\x{6810}\x{6811}\x{6812}\x{6813}\x{6814}\x{6816}\x{6817}\x{6818}\x{6819}' .
+'\x{681A}\x{681B}\x{681C}\x{681D}\x{681F}\x{6820}\x{6821}\x{6822}\x{6823}' .
+'\x{6824}\x{6825}\x{6826}\x{6828}\x{6829}\x{682A}\x{682B}\x{682C}\x{682D}' .
+'\x{682E}\x{682F}\x{6831}\x{6832}\x{6833}\x{6834}\x{6835}\x{6836}\x{6837}' .
+'\x{6838}\x{6839}\x{683A}\x{683B}\x{683C}\x{683D}\x{683E}\x{683F}\x{6840}' .
+'\x{6841}\x{6842}\x{6843}\x{6844}\x{6845}\x{6846}\x{6847}\x{6848}\x{6849}' .
+'\x{684A}\x{684B}\x{684C}\x{684D}\x{684E}\x{684F}\x{6850}\x{6851}\x{6852}' .
+'\x{6853}\x{6854}\x{6855}\x{6856}\x{6857}\x{685B}\x{685D}\x{6860}\x{6861}' .
+'\x{6862}\x{6863}\x{6864}\x{6865}\x{6866}\x{6867}\x{6868}\x{6869}\x{686A}' .
+'\x{686B}\x{686C}\x{686D}\x{686E}\x{686F}\x{6870}\x{6871}\x{6872}\x{6873}' .
+'\x{6874}\x{6875}\x{6876}\x{6877}\x{6878}\x{6879}\x{687B}\x{687C}\x{687D}' .
+'\x{687E}\x{687F}\x{6880}\x{6881}\x{6882}\x{6883}\x{6884}\x{6885}\x{6886}' .
+'\x{6887}\x{6888}\x{6889}\x{688A}\x{688B}\x{688C}\x{688D}\x{688E}\x{688F}' .
+'\x{6890}\x{6891}\x{6892}\x{6893}\x{6894}\x{6896}\x{6897}\x{6898}\x{689A}' .
+'\x{689B}\x{689C}\x{689D}\x{689E}\x{689F}\x{68A0}\x{68A1}\x{68A2}\x{68A3}' .
+'\x{68A4}\x{68A6}\x{68A7}\x{68A8}\x{68A9}\x{68AA}\x{68AB}\x{68AC}\x{68AD}' .
+'\x{68AE}\x{68AF}\x{68B0}\x{68B1}\x{68B2}\x{68B3}\x{68B4}\x{68B5}\x{68B6}' .
+'\x{68B7}\x{68B9}\x{68BB}\x{68BC}\x{68BD}\x{68BE}\x{68BF}\x{68C0}\x{68C1}' .
+'\x{68C2}\x{68C4}\x{68C6}\x{68C7}\x{68C8}\x{68C9}\x{68CA}\x{68CB}\x{68CC}' .
+'\x{68CD}\x{68CE}\x{68CF}\x{68D0}\x{68D1}\x{68D2}\x{68D3}\x{68D4}\x{68D5}' .
+'\x{68D6}\x{68D7}\x{68D8}\x{68DA}\x{68DB}\x{68DC}\x{68DD}\x{68DE}\x{68DF}' .
+'\x{68E0}\x{68E1}\x{68E3}\x{68E4}\x{68E6}\x{68E7}\x{68E8}\x{68E9}\x{68EA}' .
+'\x{68EB}\x{68EC}\x{68ED}\x{68EE}\x{68EF}\x{68F0}\x{68F1}\x{68F2}\x{68F3}' .
+'\x{68F4}\x{68F5}\x{68F6}\x{68F7}\x{68F8}\x{68F9}\x{68FA}\x{68FB}\x{68FC}' .
+'\x{68FD}\x{68FE}\x{68FF}\x{6901}\x{6902}\x{6903}\x{6904}\x{6905}\x{6906}' .
+'\x{6907}\x{6908}\x{690A}\x{690B}\x{690C}\x{690D}\x{690E}\x{690F}\x{6910}' .
+'\x{6911}\x{6912}\x{6913}\x{6914}\x{6915}\x{6916}\x{6917}\x{6918}\x{6919}' .
+'\x{691A}\x{691B}\x{691C}\x{691D}\x{691E}\x{691F}\x{6920}\x{6921}\x{6922}' .
+'\x{6923}\x{6924}\x{6925}\x{6926}\x{6927}\x{6928}\x{6929}\x{692A}\x{692B}' .
+'\x{692C}\x{692D}\x{692E}\x{692F}\x{6930}\x{6931}\x{6932}\x{6933}\x{6934}' .
+'\x{6935}\x{6936}\x{6937}\x{6938}\x{6939}\x{693A}\x{693B}\x{693C}\x{693D}' .
+'\x{693F}\x{6940}\x{6941}\x{6942}\x{6943}\x{6944}\x{6945}\x{6946}\x{6947}' .
+'\x{6948}\x{6949}\x{694A}\x{694B}\x{694C}\x{694E}\x{694F}\x{6950}\x{6951}' .
+'\x{6952}\x{6953}\x{6954}\x{6955}\x{6956}\x{6957}\x{6958}\x{6959}\x{695A}' .
+'\x{695B}\x{695C}\x{695D}\x{695E}\x{695F}\x{6960}\x{6961}\x{6962}\x{6963}' .
+'\x{6964}\x{6965}\x{6966}\x{6967}\x{6968}\x{6969}\x{696A}\x{696B}\x{696C}' .
+'\x{696D}\x{696E}\x{696F}\x{6970}\x{6971}\x{6972}\x{6973}\x{6974}\x{6975}' .
+'\x{6976}\x{6977}\x{6978}\x{6979}\x{697A}\x{697B}\x{697C}\x{697D}\x{697E}' .
+'\x{697F}\x{6980}\x{6981}\x{6982}\x{6983}\x{6984}\x{6985}\x{6986}\x{6987}' .
+'\x{6988}\x{6989}\x{698A}\x{698B}\x{698C}\x{698D}\x{698E}\x{698F}\x{6990}' .
+'\x{6991}\x{6992}\x{6993}\x{6994}\x{6995}\x{6996}\x{6997}\x{6998}\x{6999}' .
+'\x{699A}\x{699B}\x{699C}\x{699D}\x{699E}\x{69A0}\x{69A1}\x{69A3}\x{69A4}' .
+'\x{69A5}\x{69A6}\x{69A7}\x{69A8}\x{69A9}\x{69AA}\x{69AB}\x{69AC}\x{69AD}' .
+'\x{69AE}\x{69AF}\x{69B0}\x{69B1}\x{69B2}\x{69B3}\x{69B4}\x{69B5}\x{69B6}' .
+'\x{69B7}\x{69B8}\x{69B9}\x{69BA}\x{69BB}\x{69BC}\x{69BD}\x{69BE}\x{69BF}' .
+'\x{69C1}\x{69C2}\x{69C3}\x{69C4}\x{69C5}\x{69C6}\x{69C7}\x{69C8}\x{69C9}' .
+'\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}\x{69CF}\x{69D0}\x{69D3}\x{69D4}' .
+'\x{69D8}\x{69D9}\x{69DA}\x{69DB}\x{69DC}\x{69DD}\x{69DE}\x{69DF}\x{69E0}' .
+'\x{69E1}\x{69E2}\x{69E3}\x{69E4}\x{69E5}\x{69E6}\x{69E7}\x{69E8}\x{69E9}' .
+'\x{69EA}\x{69EB}\x{69EC}\x{69ED}\x{69EE}\x{69EF}\x{69F0}\x{69F1}\x{69F2}' .
+'\x{69F3}\x{69F4}\x{69F5}\x{69F6}\x{69F7}\x{69F8}\x{69FA}\x{69FB}\x{69FC}' .
+'\x{69FD}\x{69FE}\x{69FF}\x{6A00}\x{6A01}\x{6A02}\x{6A04}\x{6A05}\x{6A06}' .
+'\x{6A07}\x{6A08}\x{6A09}\x{6A0A}\x{6A0B}\x{6A0D}\x{6A0E}\x{6A0F}\x{6A10}' .
+'\x{6A11}\x{6A12}\x{6A13}\x{6A14}\x{6A15}\x{6A16}\x{6A17}\x{6A18}\x{6A19}' .
+'\x{6A1A}\x{6A1B}\x{6A1D}\x{6A1E}\x{6A1F}\x{6A20}\x{6A21}\x{6A22}\x{6A23}' .
+'\x{6A25}\x{6A26}\x{6A27}\x{6A28}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2C}\x{6A2D}' .
+'\x{6A2E}\x{6A2F}\x{6A30}\x{6A31}\x{6A32}\x{6A33}\x{6A34}\x{6A35}\x{6A36}' .
+'\x{6A38}\x{6A39}\x{6A3A}\x{6A3B}\x{6A3C}\x{6A3D}\x{6A3E}\x{6A3F}\x{6A40}' .
+'\x{6A41}\x{6A42}\x{6A43}\x{6A44}\x{6A45}\x{6A46}\x{6A47}\x{6A48}\x{6A49}' .
+'\x{6A4B}\x{6A4C}\x{6A4D}\x{6A4E}\x{6A4F}\x{6A50}\x{6A51}\x{6A52}\x{6A54}' .
+'\x{6A55}\x{6A56}\x{6A57}\x{6A58}\x{6A59}\x{6A5A}\x{6A5B}\x{6A5D}\x{6A5E}' .
+'\x{6A5F}\x{6A60}\x{6A61}\x{6A62}\x{6A63}\x{6A64}\x{6A65}\x{6A66}\x{6A67}' .
+'\x{6A68}\x{6A69}\x{6A6A}\x{6A6B}\x{6A6C}\x{6A6D}\x{6A6F}\x{6A71}\x{6A72}' .
+'\x{6A73}\x{6A74}\x{6A75}\x{6A76}\x{6A77}\x{6A78}\x{6A79}\x{6A7A}\x{6A7B}' .
+'\x{6A7C}\x{6A7D}\x{6A7E}\x{6A7F}\x{6A80}\x{6A81}\x{6A82}\x{6A83}\x{6A84}' .
+'\x{6A85}\x{6A87}\x{6A88}\x{6A89}\x{6A8B}\x{6A8C}\x{6A8D}\x{6A8E}\x{6A90}' .
+'\x{6A91}\x{6A92}\x{6A93}\x{6A94}\x{6A95}\x{6A96}\x{6A97}\x{6A98}\x{6A9A}' .
+'\x{6A9B}\x{6A9C}\x{6A9E}\x{6A9F}\x{6AA0}\x{6AA1}\x{6AA2}\x{6AA3}\x{6AA4}' .
+'\x{6AA5}\x{6AA6}\x{6AA7}\x{6AA8}\x{6AA9}\x{6AAB}\x{6AAC}\x{6AAD}\x{6AAE}' .
+'\x{6AAF}\x{6AB0}\x{6AB2}\x{6AB3}\x{6AB4}\x{6AB5}\x{6AB6}\x{6AB7}\x{6AB8}' .
+'\x{6AB9}\x{6ABA}\x{6ABB}\x{6ABC}\x{6ABD}\x{6ABF}\x{6AC1}\x{6AC2}\x{6AC3}' .
+'\x{6AC5}\x{6AC6}\x{6AC7}\x{6ACA}\x{6ACB}\x{6ACC}\x{6ACD}\x{6ACE}\x{6ACF}' .
+'\x{6AD0}\x{6AD1}\x{6AD2}\x{6AD3}\x{6AD4}\x{6AD5}\x{6AD6}\x{6AD7}\x{6AD9}' .
+'\x{6ADA}\x{6ADB}\x{6ADC}\x{6ADD}\x{6ADE}\x{6ADF}\x{6AE0}\x{6AE1}\x{6AE2}' .
+'\x{6AE3}\x{6AE4}\x{6AE5}\x{6AE6}\x{6AE7}\x{6AE8}\x{6AEA}\x{6AEB}\x{6AEC}' .
+'\x{6AED}\x{6AEE}\x{6AEF}\x{6AF0}\x{6AF1}\x{6AF2}\x{6AF3}\x{6AF4}\x{6AF5}' .
+'\x{6AF6}\x{6AF7}\x{6AF8}\x{6AF9}\x{6AFA}\x{6AFB}\x{6AFC}\x{6AFD}\x{6AFE}' .
+'\x{6AFF}\x{6B00}\x{6B01}\x{6B02}\x{6B03}\x{6B04}\x{6B05}\x{6B06}\x{6B07}' .
+'\x{6B08}\x{6B09}\x{6B0A}\x{6B0B}\x{6B0C}\x{6B0D}\x{6B0F}\x{6B10}\x{6B11}' .
+'\x{6B12}\x{6B13}\x{6B14}\x{6B15}\x{6B16}\x{6B17}\x{6B18}\x{6B19}\x{6B1A}' .
+'\x{6B1C}\x{6B1D}\x{6B1E}\x{6B1F}\x{6B20}\x{6B21}\x{6B22}\x{6B23}\x{6B24}' .
+'\x{6B25}\x{6B26}\x{6B27}\x{6B28}\x{6B29}\x{6B2A}\x{6B2B}\x{6B2C}\x{6B2D}' .
+'\x{6B2F}\x{6B30}\x{6B31}\x{6B32}\x{6B33}\x{6B34}\x{6B36}\x{6B37}\x{6B38}' .
+'\x{6B39}\x{6B3A}\x{6B3B}\x{6B3C}\x{6B3D}\x{6B3E}\x{6B3F}\x{6B41}\x{6B42}' .
+'\x{6B43}\x{6B44}\x{6B45}\x{6B46}\x{6B47}\x{6B48}\x{6B49}\x{6B4A}\x{6B4B}' .
+'\x{6B4C}\x{6B4D}\x{6B4E}\x{6B4F}\x{6B50}\x{6B51}\x{6B52}\x{6B53}\x{6B54}' .
+'\x{6B55}\x{6B56}\x{6B59}\x{6B5A}\x{6B5B}\x{6B5C}\x{6B5E}\x{6B5F}\x{6B60}' .
+'\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B65}\x{6B66}\x{6B67}\x{6B69}\x{6B6A}' .
+'\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}\x{6B73}\x{6B74}\x{6B76}\x{6B77}' .
+'\x{6B78}\x{6B79}\x{6B7A}\x{6B7B}\x{6B7C}\x{6B7E}\x{6B7F}\x{6B80}\x{6B81}' .
+'\x{6B82}\x{6B83}\x{6B84}\x{6B85}\x{6B86}\x{6B87}\x{6B88}\x{6B89}\x{6B8A}' .
+'\x{6B8B}\x{6B8C}\x{6B8D}\x{6B8E}\x{6B8F}\x{6B90}\x{6B91}\x{6B92}\x{6B93}' .
+'\x{6B94}\x{6B95}\x{6B96}\x{6B97}\x{6B98}\x{6B99}\x{6B9A}\x{6B9B}\x{6B9C}' .
+'\x{6B9D}\x{6B9E}\x{6B9F}\x{6BA0}\x{6BA1}\x{6BA2}\x{6BA3}\x{6BA4}\x{6BA5}' .
+'\x{6BA6}\x{6BA7}\x{6BA8}\x{6BA9}\x{6BAA}\x{6BAB}\x{6BAC}\x{6BAD}\x{6BAE}' .
+'\x{6BAF}\x{6BB0}\x{6BB2}\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB6}\x{6BB7}\x{6BB9}' .
+'\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBD}\x{6BBE}\x{6BBF}\x{6BC0}\x{6BC1}\x{6BC2}' .
+'\x{6BC3}\x{6BC4}\x{6BC5}\x{6BC6}\x{6BC7}\x{6BC8}\x{6BC9}\x{6BCA}\x{6BCB}' .
+'\x{6BCC}\x{6BCD}\x{6BCE}\x{6BCF}\x{6BD0}\x{6BD1}\x{6BD2}\x{6BD3}\x{6BD4}' .
+'\x{6BD5}\x{6BD6}\x{6BD7}\x{6BD8}\x{6BD9}\x{6BDA}\x{6BDB}\x{6BDC}\x{6BDD}' .
+'\x{6BDE}\x{6BDF}\x{6BE0}\x{6BE1}\x{6BE2}\x{6BE3}\x{6BE4}\x{6BE5}\x{6BE6}' .
+'\x{6BE7}\x{6BE8}\x{6BEA}\x{6BEB}\x{6BEC}\x{6BED}\x{6BEE}\x{6BEF}\x{6BF0}' .
+'\x{6BF2}\x{6BF3}\x{6BF5}\x{6BF6}\x{6BF7}\x{6BF8}\x{6BF9}\x{6BFB}\x{6BFC}' .
+'\x{6BFD}\x{6BFE}\x{6BFF}\x{6C00}\x{6C01}\x{6C02}\x{6C03}\x{6C04}\x{6C05}' .
+'\x{6C06}\x{6C07}\x{6C08}\x{6C09}\x{6C0B}\x{6C0C}\x{6C0D}\x{6C0E}\x{6C0F}' .
+'\x{6C10}\x{6C11}\x{6C12}\x{6C13}\x{6C14}\x{6C15}\x{6C16}\x{6C18}\x{6C19}' .
+'\x{6C1A}\x{6C1B}\x{6C1D}\x{6C1E}\x{6C1F}\x{6C20}\x{6C21}\x{6C22}\x{6C23}' .
+'\x{6C24}\x{6C25}\x{6C26}\x{6C27}\x{6C28}\x{6C29}\x{6C2A}\x{6C2B}\x{6C2C}' .
+'\x{6C2E}\x{6C2F}\x{6C30}\x{6C31}\x{6C32}\x{6C33}\x{6C34}\x{6C35}\x{6C36}' .
+'\x{6C37}\x{6C38}\x{6C3A}\x{6C3B}\x{6C3D}\x{6C3E}\x{6C3F}\x{6C40}\x{6C41}' .
+'\x{6C42}\x{6C43}\x{6C44}\x{6C46}\x{6C47}\x{6C48}\x{6C49}\x{6C4A}\x{6C4B}' .
+'\x{6C4C}\x{6C4D}\x{6C4E}\x{6C4F}\x{6C50}\x{6C51}\x{6C52}\x{6C53}\x{6C54}' .
+'\x{6C55}\x{6C56}\x{6C57}\x{6C58}\x{6C59}\x{6C5A}\x{6C5B}\x{6C5C}\x{6C5D}' .
+'\x{6C5E}\x{6C5F}\x{6C60}\x{6C61}\x{6C62}\x{6C63}\x{6C64}\x{6C65}\x{6C66}' .
+'\x{6C67}\x{6C68}\x{6C69}\x{6C6A}\x{6C6B}\x{6C6D}\x{6C6F}\x{6C70}\x{6C71}' .
+'\x{6C72}\x{6C73}\x{6C74}\x{6C75}\x{6C76}\x{6C77}\x{6C78}\x{6C79}\x{6C7A}' .
+'\x{6C7B}\x{6C7C}\x{6C7D}\x{6C7E}\x{6C7F}\x{6C80}\x{6C81}\x{6C82}\x{6C83}' .
+'\x{6C84}\x{6C85}\x{6C86}\x{6C87}\x{6C88}\x{6C89}\x{6C8A}\x{6C8B}\x{6C8C}' .
+'\x{6C8D}\x{6C8E}\x{6C8F}\x{6C90}\x{6C91}\x{6C92}\x{6C93}\x{6C94}\x{6C95}' .
+'\x{6C96}\x{6C97}\x{6C98}\x{6C99}\x{6C9A}\x{6C9B}\x{6C9C}\x{6C9D}\x{6C9E}' .
+'\x{6C9F}\x{6CA1}\x{6CA2}\x{6CA3}\x{6CA4}\x{6CA5}\x{6CA6}\x{6CA7}\x{6CA8}' .
+'\x{6CA9}\x{6CAA}\x{6CAB}\x{6CAC}\x{6CAD}\x{6CAE}\x{6CAF}\x{6CB0}\x{6CB1}' .
+'\x{6CB2}\x{6CB3}\x{6CB4}\x{6CB5}\x{6CB6}\x{6CB7}\x{6CB8}\x{6CB9}\x{6CBA}' .
+'\x{6CBB}\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC0}\x{6CC1}\x{6CC2}\x{6CC3}' .
+'\x{6CC4}\x{6CC5}\x{6CC6}\x{6CC7}\x{6CC8}\x{6CC9}\x{6CCA}\x{6CCB}\x{6CCC}' .
+'\x{6CCD}\x{6CCE}\x{6CCF}\x{6CD0}\x{6CD1}\x{6CD2}\x{6CD3}\x{6CD4}\x{6CD5}' .
+'\x{6CD6}\x{6CD7}\x{6CD9}\x{6CDA}\x{6CDB}\x{6CDC}\x{6CDD}\x{6CDE}\x{6CDF}' .
+'\x{6CE0}\x{6CE1}\x{6CE2}\x{6CE3}\x{6CE4}\x{6CE5}\x{6CE6}\x{6CE7}\x{6CE8}' .
+'\x{6CE9}\x{6CEA}\x{6CEB}\x{6CEC}\x{6CED}\x{6CEE}\x{6CEF}\x{6CF0}\x{6CF1}' .
+'\x{6CF2}\x{6CF3}\x{6CF5}\x{6CF6}\x{6CF7}\x{6CF8}\x{6CF9}\x{6CFA}\x{6CFB}' .
+'\x{6CFC}\x{6CFD}\x{6CFE}\x{6CFF}\x{6D00}\x{6D01}\x{6D03}\x{6D04}\x{6D05}' .
+'\x{6D06}\x{6D07}\x{6D08}\x{6D09}\x{6D0A}\x{6D0B}\x{6D0C}\x{6D0D}\x{6D0E}' .
+'\x{6D0F}\x{6D10}\x{6D11}\x{6D12}\x{6D13}\x{6D14}\x{6D15}\x{6D16}\x{6D17}' .
+'\x{6D18}\x{6D19}\x{6D1A}\x{6D1B}\x{6D1D}\x{6D1E}\x{6D1F}\x{6D20}\x{6D21}' .
+'\x{6D22}\x{6D23}\x{6D25}\x{6D26}\x{6D27}\x{6D28}\x{6D29}\x{6D2A}\x{6D2B}' .
+'\x{6D2C}\x{6D2D}\x{6D2E}\x{6D2F}\x{6D30}\x{6D31}\x{6D32}\x{6D33}\x{6D34}' .
+'\x{6D35}\x{6D36}\x{6D37}\x{6D38}\x{6D39}\x{6D3A}\x{6D3B}\x{6D3C}\x{6D3D}' .
+'\x{6D3E}\x{6D3F}\x{6D40}\x{6D41}\x{6D42}\x{6D43}\x{6D44}\x{6D45}\x{6D46}' .
+'\x{6D47}\x{6D48}\x{6D49}\x{6D4A}\x{6D4B}\x{6D4C}\x{6D4D}\x{6D4E}\x{6D4F}' .
+'\x{6D50}\x{6D51}\x{6D52}\x{6D53}\x{6D54}\x{6D55}\x{6D56}\x{6D57}\x{6D58}' .
+'\x{6D59}\x{6D5A}\x{6D5B}\x{6D5C}\x{6D5D}\x{6D5E}\x{6D5F}\x{6D60}\x{6D61}' .
+'\x{6D62}\x{6D63}\x{6D64}\x{6D65}\x{6D66}\x{6D67}\x{6D68}\x{6D69}\x{6D6A}' .
+'\x{6D6B}\x{6D6C}\x{6D6D}\x{6D6E}\x{6D6F}\x{6D70}\x{6D72}\x{6D73}\x{6D74}' .
+'\x{6D75}\x{6D76}\x{6D77}\x{6D78}\x{6D79}\x{6D7A}\x{6D7B}\x{6D7C}\x{6D7D}' .
+'\x{6D7E}\x{6D7F}\x{6D80}\x{6D82}\x{6D83}\x{6D84}\x{6D85}\x{6D86}\x{6D87}' .
+'\x{6D88}\x{6D89}\x{6D8A}\x{6D8B}\x{6D8C}\x{6D8D}\x{6D8E}\x{6D8F}\x{6D90}' .
+'\x{6D91}\x{6D92}\x{6D93}\x{6D94}\x{6D95}\x{6D97}\x{6D98}\x{6D99}\x{6D9A}' .
+'\x{6D9B}\x{6D9D}\x{6D9E}\x{6D9F}\x{6DA0}\x{6DA1}\x{6DA2}\x{6DA3}\x{6DA4}' .
+'\x{6DA5}\x{6DA6}\x{6DA7}\x{6DA8}\x{6DA9}\x{6DAA}\x{6DAB}\x{6DAC}\x{6DAD}' .
+'\x{6DAE}\x{6DAF}\x{6DB2}\x{6DB3}\x{6DB4}\x{6DB5}\x{6DB7}\x{6DB8}\x{6DB9}' .
+'\x{6DBA}\x{6DBB}\x{6DBC}\x{6DBD}\x{6DBE}\x{6DBF}\x{6DC0}\x{6DC1}\x{6DC2}' .
+'\x{6DC3}\x{6DC4}\x{6DC5}\x{6DC6}\x{6DC7}\x{6DC8}\x{6DC9}\x{6DCA}\x{6DCB}' .
+'\x{6DCC}\x{6DCD}\x{6DCE}\x{6DCF}\x{6DD0}\x{6DD1}\x{6DD2}\x{6DD3}\x{6DD4}' .
+'\x{6DD5}\x{6DD6}\x{6DD7}\x{6DD8}\x{6DD9}\x{6DDA}\x{6DDB}\x{6DDC}\x{6DDD}' .
+'\x{6DDE}\x{6DDF}\x{6DE0}\x{6DE1}\x{6DE2}\x{6DE3}\x{6DE4}\x{6DE5}\x{6DE6}' .
+'\x{6DE7}\x{6DE8}\x{6DE9}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DED}\x{6DEE}\x{6DEF}' .
+'\x{6DF0}\x{6DF1}\x{6DF2}\x{6DF3}\x{6DF4}\x{6DF5}\x{6DF6}\x{6DF7}\x{6DF8}' .
+'\x{6DF9}\x{6DFA}\x{6DFB}\x{6DFC}\x{6DFD}\x{6E00}\x{6E03}\x{6E04}\x{6E05}' .
+'\x{6E07}\x{6E08}\x{6E09}\x{6E0A}\x{6E0B}\x{6E0C}\x{6E0D}\x{6E0E}\x{6E0F}' .
+'\x{6E10}\x{6E11}\x{6E14}\x{6E15}\x{6E16}\x{6E17}\x{6E19}\x{6E1A}\x{6E1B}' .
+'\x{6E1C}\x{6E1D}\x{6E1E}\x{6E1F}\x{6E20}\x{6E21}\x{6E22}\x{6E23}\x{6E24}' .
+'\x{6E25}\x{6E26}\x{6E27}\x{6E28}\x{6E29}\x{6E2B}\x{6E2C}\x{6E2D}\x{6E2E}' .
+'\x{6E2F}\x{6E30}\x{6E31}\x{6E32}\x{6E33}\x{6E34}\x{6E35}\x{6E36}\x{6E37}' .
+'\x{6E38}\x{6E39}\x{6E3A}\x{6E3B}\x{6E3C}\x{6E3D}\x{6E3E}\x{6E3F}\x{6E40}' .
+'\x{6E41}\x{6E42}\x{6E43}\x{6E44}\x{6E45}\x{6E46}\x{6E47}\x{6E48}\x{6E49}' .
+'\x{6E4A}\x{6E4B}\x{6E4D}\x{6E4E}\x{6E4F}\x{6E50}\x{6E51}\x{6E52}\x{6E53}' .
+'\x{6E54}\x{6E55}\x{6E56}\x{6E57}\x{6E58}\x{6E59}\x{6E5A}\x{6E5B}\x{6E5C}' .
+'\x{6E5D}\x{6E5E}\x{6E5F}\x{6E60}\x{6E61}\x{6E62}\x{6E63}\x{6E64}\x{6E65}' .
+'\x{6E66}\x{6E67}\x{6E68}\x{6E69}\x{6E6A}\x{6E6B}\x{6E6D}\x{6E6E}\x{6E6F}' .
+'\x{6E70}\x{6E71}\x{6E72}\x{6E73}\x{6E74}\x{6E75}\x{6E77}\x{6E78}\x{6E79}' .
+'\x{6E7E}\x{6E7F}\x{6E80}\x{6E81}\x{6E82}\x{6E83}\x{6E84}\x{6E85}\x{6E86}' .
+'\x{6E87}\x{6E88}\x{6E89}\x{6E8A}\x{6E8D}\x{6E8E}\x{6E8F}\x{6E90}\x{6E91}' .
+'\x{6E92}\x{6E93}\x{6E94}\x{6E96}\x{6E97}\x{6E98}\x{6E99}\x{6E9A}\x{6E9B}' .
+'\x{6E9C}\x{6E9D}\x{6E9E}\x{6E9F}\x{6EA0}\x{6EA1}\x{6EA2}\x{6EA3}\x{6EA4}' .
+'\x{6EA5}\x{6EA6}\x{6EA7}\x{6EA8}\x{6EA9}\x{6EAA}\x{6EAB}\x{6EAC}\x{6EAD}' .
+'\x{6EAE}\x{6EAF}\x{6EB0}\x{6EB1}\x{6EB2}\x{6EB3}\x{6EB4}\x{6EB5}\x{6EB6}' .
+'\x{6EB7}\x{6EB8}\x{6EB9}\x{6EBA}\x{6EBB}\x{6EBC}\x{6EBD}\x{6EBE}\x{6EBF}' .
+'\x{6EC0}\x{6EC1}\x{6EC2}\x{6EC3}\x{6EC4}\x{6EC5}\x{6EC6}\x{6EC7}\x{6EC8}' .
+'\x{6EC9}\x{6ECA}\x{6ECB}\x{6ECC}\x{6ECD}\x{6ECE}\x{6ECF}\x{6ED0}\x{6ED1}' .
+'\x{6ED2}\x{6ED3}\x{6ED4}\x{6ED5}\x{6ED6}\x{6ED7}\x{6ED8}\x{6ED9}\x{6EDA}' .
+'\x{6EDC}\x{6EDE}\x{6EDF}\x{6EE0}\x{6EE1}\x{6EE2}\x{6EE4}\x{6EE5}\x{6EE6}' .
+'\x{6EE7}\x{6EE8}\x{6EE9}\x{6EEA}\x{6EEB}\x{6EEC}\x{6EED}\x{6EEE}\x{6EEF}' .
+'\x{6EF0}\x{6EF1}\x{6EF2}\x{6EF3}\x{6EF4}\x{6EF5}\x{6EF6}\x{6EF7}\x{6EF8}' .
+'\x{6EF9}\x{6EFA}\x{6EFB}\x{6EFC}\x{6EFD}\x{6EFE}\x{6EFF}\x{6F00}\x{6F01}' .
+'\x{6F02}\x{6F03}\x{6F05}\x{6F06}\x{6F07}\x{6F08}\x{6F09}\x{6F0A}\x{6F0C}' .
+'\x{6F0D}\x{6F0E}\x{6F0F}\x{6F10}\x{6F11}\x{6F12}\x{6F13}\x{6F14}\x{6F15}' .
+'\x{6F16}\x{6F17}\x{6F18}\x{6F19}\x{6F1A}\x{6F1B}\x{6F1C}\x{6F1D}\x{6F1E}' .
+'\x{6F1F}\x{6F20}\x{6F21}\x{6F22}\x{6F23}\x{6F24}\x{6F25}\x{6F26}\x{6F27}' .
+'\x{6F28}\x{6F29}\x{6F2A}\x{6F2B}\x{6F2C}\x{6F2D}\x{6F2E}\x{6F2F}\x{6F30}' .
+'\x{6F31}\x{6F32}\x{6F33}\x{6F34}\x{6F35}\x{6F36}\x{6F37}\x{6F38}\x{6F39}' .
+'\x{6F3A}\x{6F3B}\x{6F3C}\x{6F3D}\x{6F3E}\x{6F3F}\x{6F40}\x{6F41}\x{6F43}' .
+'\x{6F44}\x{6F45}\x{6F46}\x{6F47}\x{6F49}\x{6F4B}\x{6F4C}\x{6F4D}\x{6F4E}' .
+'\x{6F4F}\x{6F50}\x{6F51}\x{6F52}\x{6F53}\x{6F54}\x{6F55}\x{6F56}\x{6F57}' .
+'\x{6F58}\x{6F59}\x{6F5A}\x{6F5B}\x{6F5C}\x{6F5D}\x{6F5E}\x{6F5F}\x{6F60}' .
+'\x{6F61}\x{6F62}\x{6F63}\x{6F64}\x{6F65}\x{6F66}\x{6F67}\x{6F68}\x{6F69}' .
+'\x{6F6A}\x{6F6B}\x{6F6C}\x{6F6D}\x{6F6E}\x{6F6F}\x{6F70}\x{6F71}\x{6F72}' .
+'\x{6F73}\x{6F74}\x{6F75}\x{6F76}\x{6F77}\x{6F78}\x{6F7A}\x{6F7B}\x{6F7C}' .
+'\x{6F7D}\x{6F7E}\x{6F7F}\x{6F80}\x{6F81}\x{6F82}\x{6F83}\x{6F84}\x{6F85}' .
+'\x{6F86}\x{6F87}\x{6F88}\x{6F89}\x{6F8A}\x{6F8B}\x{6F8C}\x{6F8D}\x{6F8E}' .
+'\x{6F8F}\x{6F90}\x{6F91}\x{6F92}\x{6F93}\x{6F94}\x{6F95}\x{6F96}\x{6F97}' .
+'\x{6F99}\x{6F9B}\x{6F9C}\x{6F9D}\x{6F9E}\x{6FA0}\x{6FA1}\x{6FA2}\x{6FA3}' .
+'\x{6FA4}\x{6FA5}\x{6FA6}\x{6FA7}\x{6FA8}\x{6FA9}\x{6FAA}\x{6FAB}\x{6FAC}' .
+'\x{6FAD}\x{6FAE}\x{6FAF}\x{6FB0}\x{6FB1}\x{6FB2}\x{6FB3}\x{6FB4}\x{6FB5}' .
+'\x{6FB6}\x{6FB8}\x{6FB9}\x{6FBA}\x{6FBB}\x{6FBC}\x{6FBD}\x{6FBE}\x{6FBF}' .
+'\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC4}\x{6FC6}\x{6FC7}\x{6FC8}\x{6FC9}' .
+'\x{6FCA}\x{6FCB}\x{6FCC}\x{6FCD}\x{6FCE}\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}' .
+'\x{6FD5}\x{6FD6}\x{6FD7}\x{6FD8}\x{6FD9}\x{6FDA}\x{6FDB}\x{6FDC}\x{6FDD}' .
+'\x{6FDE}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE2}\x{6FE3}\x{6FE4}\x{6FE5}\x{6FE6}' .
+'\x{6FE7}\x{6FE8}\x{6FE9}\x{6FEA}\x{6FEB}\x{6FEC}\x{6FED}\x{6FEE}\x{6FEF}' .
+'\x{6FF0}\x{6FF1}\x{6FF2}\x{6FF3}\x{6FF4}\x{6FF6}\x{6FF7}\x{6FF8}\x{6FF9}' .
+'\x{6FFA}\x{6FFB}\x{6FFC}\x{6FFE}\x{6FFF}\x{7000}\x{7001}\x{7002}\x{7003}' .
+'\x{7004}\x{7005}\x{7006}\x{7007}\x{7008}\x{7009}\x{700A}\x{700B}\x{700C}' .
+'\x{700D}\x{700E}\x{700F}\x{7011}\x{7012}\x{7014}\x{7015}\x{7016}\x{7017}' .
+'\x{7018}\x{7019}\x{701A}\x{701B}\x{701C}\x{701D}\x{701F}\x{7020}\x{7021}' .
+'\x{7022}\x{7023}\x{7024}\x{7025}\x{7026}\x{7027}\x{7028}\x{7029}\x{702A}' .
+'\x{702B}\x{702C}\x{702D}\x{702E}\x{702F}\x{7030}\x{7031}\x{7032}\x{7033}' .
+'\x{7034}\x{7035}\x{7036}\x{7037}\x{7038}\x{7039}\x{703A}\x{703B}\x{703C}' .
+'\x{703D}\x{703E}\x{703F}\x{7040}\x{7041}\x{7042}\x{7043}\x{7044}\x{7045}' .
+'\x{7046}\x{7048}\x{7049}\x{704A}\x{704C}\x{704D}\x{704F}\x{7050}\x{7051}' .
+'\x{7052}\x{7053}\x{7054}\x{7055}\x{7056}\x{7057}\x{7058}\x{7059}\x{705A}' .
+'\x{705B}\x{705C}\x{705D}\x{705E}\x{705F}\x{7060}\x{7061}\x{7062}\x{7063}' .
+'\x{7064}\x{7065}\x{7066}\x{7067}\x{7068}\x{7069}\x{706A}\x{706B}\x{706C}' .
+'\x{706D}\x{706E}\x{706F}\x{7070}\x{7071}\x{7074}\x{7075}\x{7076}\x{7077}' .
+'\x{7078}\x{7079}\x{707A}\x{707C}\x{707D}\x{707E}\x{707F}\x{7080}\x{7082}' .
+'\x{7083}\x{7084}\x{7085}\x{7086}\x{7087}\x{7088}\x{7089}\x{708A}\x{708B}' .
+'\x{708C}\x{708E}\x{708F}\x{7090}\x{7091}\x{7092}\x{7093}\x{7094}\x{7095}' .
+'\x{7096}\x{7098}\x{7099}\x{709A}\x{709C}\x{709D}\x{709E}\x{709F}\x{70A0}' .
+'\x{70A1}\x{70A2}\x{70A3}\x{70A4}\x{70A5}\x{70A6}\x{70A7}\x{70A8}\x{70A9}' .
+'\x{70AB}\x{70AC}\x{70AD}\x{70AE}\x{70AF}\x{70B0}\x{70B1}\x{70B3}\x{70B4}' .
+'\x{70B5}\x{70B7}\x{70B8}\x{70B9}\x{70BA}\x{70BB}\x{70BC}\x{70BD}\x{70BE}' .
+'\x{70BF}\x{70C0}\x{70C1}\x{70C2}\x{70C3}\x{70C4}\x{70C5}\x{70C6}\x{70C7}' .
+'\x{70C8}\x{70C9}\x{70CA}\x{70CB}\x{70CC}\x{70CD}\x{70CE}\x{70CF}\x{70D0}' .
+'\x{70D1}\x{70D2}\x{70D3}\x{70D4}\x{70D6}\x{70D7}\x{70D8}\x{70D9}\x{70DA}' .
+'\x{70DB}\x{70DC}\x{70DD}\x{70DE}\x{70DF}\x{70E0}\x{70E1}\x{70E2}\x{70E3}' .
+'\x{70E4}\x{70E5}\x{70E6}\x{70E7}\x{70E8}\x{70E9}\x{70EA}\x{70EB}\x{70EC}' .
+'\x{70ED}\x{70EE}\x{70EF}\x{70F0}\x{70F1}\x{70F2}\x{70F3}\x{70F4}\x{70F5}' .
+'\x{70F6}\x{70F7}\x{70F8}\x{70F9}\x{70FA}\x{70FB}\x{70FC}\x{70FD}\x{70FF}' .
+'\x{7100}\x{7101}\x{7102}\x{7103}\x{7104}\x{7105}\x{7106}\x{7107}\x{7109}' .
+'\x{710A}\x{710B}\x{710C}\x{710D}\x{710E}\x{710F}\x{7110}\x{7111}\x{7112}' .
+'\x{7113}\x{7115}\x{7116}\x{7117}\x{7118}\x{7119}\x{711A}\x{711B}\x{711C}' .
+'\x{711D}\x{711E}\x{711F}\x{7120}\x{7121}\x{7122}\x{7123}\x{7125}\x{7126}' .
+'\x{7127}\x{7128}\x{7129}\x{712A}\x{712B}\x{712C}\x{712D}\x{712E}\x{712F}' .
+'\x{7130}\x{7131}\x{7132}\x{7135}\x{7136}\x{7137}\x{7138}\x{7139}\x{713A}' .
+'\x{713B}\x{713D}\x{713E}\x{713F}\x{7140}\x{7141}\x{7142}\x{7143}\x{7144}' .
+'\x{7145}\x{7146}\x{7147}\x{7148}\x{7149}\x{714A}\x{714B}\x{714C}\x{714D}' .
+'\x{714E}\x{714F}\x{7150}\x{7151}\x{7152}\x{7153}\x{7154}\x{7156}\x{7158}' .
+'\x{7159}\x{715A}\x{715B}\x{715C}\x{715D}\x{715E}\x{715F}\x{7160}\x{7161}' .
+'\x{7162}\x{7163}\x{7164}\x{7165}\x{7166}\x{7167}\x{7168}\x{7169}\x{716A}' .
+'\x{716C}\x{716E}\x{716F}\x{7170}\x{7171}\x{7172}\x{7173}\x{7174}\x{7175}' .
+'\x{7176}\x{7177}\x{7178}\x{7179}\x{717A}\x{717B}\x{717C}\x{717D}\x{717E}' .
+'\x{717F}\x{7180}\x{7181}\x{7182}\x{7183}\x{7184}\x{7185}\x{7186}\x{7187}' .
+'\x{7188}\x{7189}\x{718A}\x{718B}\x{718C}\x{718E}\x{718F}\x{7190}\x{7191}' .
+'\x{7192}\x{7193}\x{7194}\x{7195}\x{7197}\x{7198}\x{7199}\x{719A}\x{719B}' .
+'\x{719C}\x{719D}\x{719E}\x{719F}\x{71A0}\x{71A1}\x{71A2}\x{71A3}\x{71A4}' .
+'\x{71A5}\x{71A7}\x{71A8}\x{71A9}\x{71AA}\x{71AC}\x{71AD}\x{71AE}\x{71AF}' .
+'\x{71B0}\x{71B1}\x{71B2}\x{71B3}\x{71B4}\x{71B5}\x{71B7}\x{71B8}\x{71B9}' .
+'\x{71BA}\x{71BB}\x{71BC}\x{71BD}\x{71BE}\x{71BF}\x{71C0}\x{71C1}\x{71C2}' .
+'\x{71C3}\x{71C4}\x{71C5}\x{71C6}\x{71C7}\x{71C8}\x{71C9}\x{71CA}\x{71CB}' .
+'\x{71CD}\x{71CE}\x{71CF}\x{71D0}\x{71D1}\x{71D2}\x{71D4}\x{71D5}\x{71D6}' .
+'\x{71D7}\x{71D8}\x{71D9}\x{71DA}\x{71DB}\x{71DC}\x{71DD}\x{71DE}\x{71DF}' .
+'\x{71E0}\x{71E1}\x{71E2}\x{71E3}\x{71E4}\x{71E5}\x{71E6}\x{71E7}\x{71E8}' .
+'\x{71E9}\x{71EA}\x{71EB}\x{71EC}\x{71ED}\x{71EE}\x{71EF}\x{71F0}\x{71F1}' .
+'\x{71F2}\x{71F4}\x{71F5}\x{71F6}\x{71F7}\x{71F8}\x{71F9}\x{71FB}\x{71FC}' .
+'\x{71FD}\x{71FE}\x{71FF}\x{7201}\x{7202}\x{7203}\x{7204}\x{7205}\x{7206}' .
+'\x{7207}\x{7208}\x{7209}\x{720A}\x{720C}\x{720D}\x{720E}\x{720F}\x{7210}' .
+'\x{7212}\x{7213}\x{7214}\x{7216}\x{7218}\x{7219}\x{721A}\x{721B}\x{721C}' .
+'\x{721D}\x{721E}\x{721F}\x{7221}\x{7222}\x{7223}\x{7226}\x{7227}\x{7228}' .
+'\x{7229}\x{722A}\x{722B}\x{722C}\x{722D}\x{722E}\x{7230}\x{7231}\x{7232}' .
+'\x{7233}\x{7235}\x{7236}\x{7237}\x{7238}\x{7239}\x{723A}\x{723B}\x{723C}' .
+'\x{723D}\x{723E}\x{723F}\x{7240}\x{7241}\x{7242}\x{7243}\x{7244}\x{7246}' .
+'\x{7247}\x{7248}\x{7249}\x{724A}\x{724B}\x{724C}\x{724D}\x{724F}\x{7251}' .
+'\x{7252}\x{7253}\x{7254}\x{7256}\x{7257}\x{7258}\x{7259}\x{725A}\x{725B}' .
+'\x{725C}\x{725D}\x{725E}\x{725F}\x{7260}\x{7261}\x{7262}\x{7263}\x{7264}' .
+'\x{7265}\x{7266}\x{7267}\x{7268}\x{7269}\x{726A}\x{726B}\x{726C}\x{726D}' .
+'\x{726E}\x{726F}\x{7270}\x{7271}\x{7272}\x{7273}\x{7274}\x{7275}\x{7276}' .
+'\x{7277}\x{7278}\x{7279}\x{727A}\x{727B}\x{727C}\x{727D}\x{727E}\x{727F}' .
+'\x{7280}\x{7281}\x{7282}\x{7283}\x{7284}\x{7285}\x{7286}\x{7287}\x{7288}' .
+'\x{7289}\x{728A}\x{728B}\x{728C}\x{728D}\x{728E}\x{728F}\x{7290}\x{7291}' .
+'\x{7292}\x{7293}\x{7294}\x{7295}\x{7296}\x{7297}\x{7298}\x{7299}\x{729A}' .
+'\x{729B}\x{729C}\x{729D}\x{729E}\x{729F}\x{72A1}\x{72A2}\x{72A3}\x{72A4}' .
+'\x{72A5}\x{72A6}\x{72A7}\x{72A8}\x{72A9}\x{72AA}\x{72AC}\x{72AD}\x{72AE}' .
+'\x{72AF}\x{72B0}\x{72B1}\x{72B2}\x{72B3}\x{72B4}\x{72B5}\x{72B6}\x{72B7}' .
+'\x{72B8}\x{72B9}\x{72BA}\x{72BB}\x{72BC}\x{72BD}\x{72BF}\x{72C0}\x{72C1}' .
+'\x{72C2}\x{72C3}\x{72C4}\x{72C5}\x{72C6}\x{72C7}\x{72C8}\x{72C9}\x{72CA}' .
+'\x{72CB}\x{72CC}\x{72CD}\x{72CE}\x{72CF}\x{72D0}\x{72D1}\x{72D2}\x{72D3}' .
+'\x{72D4}\x{72D5}\x{72D6}\x{72D7}\x{72D8}\x{72D9}\x{72DA}\x{72DB}\x{72DC}' .
+'\x{72DD}\x{72DE}\x{72DF}\x{72E0}\x{72E1}\x{72E2}\x{72E3}\x{72E4}\x{72E5}' .
+'\x{72E6}\x{72E7}\x{72E8}\x{72E9}\x{72EA}\x{72EB}\x{72EC}\x{72ED}\x{72EE}' .
+'\x{72EF}\x{72F0}\x{72F1}\x{72F2}\x{72F3}\x{72F4}\x{72F5}\x{72F6}\x{72F7}' .
+'\x{72F8}\x{72F9}\x{72FA}\x{72FB}\x{72FC}\x{72FD}\x{72FE}\x{72FF}\x{7300}' .
+'\x{7301}\x{7303}\x{7304}\x{7305}\x{7306}\x{7307}\x{7308}\x{7309}\x{730A}' .
+'\x{730B}\x{730C}\x{730D}\x{730E}\x{730F}\x{7311}\x{7312}\x{7313}\x{7314}' .
+'\x{7315}\x{7316}\x{7317}\x{7318}\x{7319}\x{731A}\x{731B}\x{731C}\x{731D}' .
+'\x{731E}\x{7320}\x{7321}\x{7322}\x{7323}\x{7324}\x{7325}\x{7326}\x{7327}' .
+'\x{7329}\x{732A}\x{732B}\x{732C}\x{732D}\x{732E}\x{7330}\x{7331}\x{7332}' .
+'\x{7333}\x{7334}\x{7335}\x{7336}\x{7337}\x{7338}\x{7339}\x{733A}\x{733B}' .
+'\x{733C}\x{733D}\x{733E}\x{733F}\x{7340}\x{7341}\x{7342}\x{7343}\x{7344}' .
+'\x{7345}\x{7346}\x{7347}\x{7348}\x{7349}\x{734A}\x{734B}\x{734C}\x{734D}' .
+'\x{734E}\x{7350}\x{7351}\x{7352}\x{7354}\x{7355}\x{7356}\x{7357}\x{7358}' .
+'\x{7359}\x{735A}\x{735B}\x{735C}\x{735D}\x{735E}\x{735F}\x{7360}\x{7361}' .
+'\x{7362}\x{7364}\x{7365}\x{7366}\x{7367}\x{7368}\x{7369}\x{736A}\x{736B}' .
+'\x{736C}\x{736D}\x{736E}\x{736F}\x{7370}\x{7371}\x{7372}\x{7373}\x{7374}' .
+'\x{7375}\x{7376}\x{7377}\x{7378}\x{7379}\x{737A}\x{737B}\x{737C}\x{737D}' .
+'\x{737E}\x{737F}\x{7380}\x{7381}\x{7382}\x{7383}\x{7384}\x{7385}\x{7386}' .
+'\x{7387}\x{7388}\x{7389}\x{738A}\x{738B}\x{738C}\x{738D}\x{738E}\x{738F}' .
+'\x{7390}\x{7391}\x{7392}\x{7393}\x{7394}\x{7395}\x{7396}\x{7397}\x{7398}' .
+'\x{7399}\x{739A}\x{739B}\x{739D}\x{739E}\x{739F}\x{73A0}\x{73A1}\x{73A2}' .
+'\x{73A3}\x{73A4}\x{73A5}\x{73A6}\x{73A7}\x{73A8}\x{73A9}\x{73AA}\x{73AB}' .
+'\x{73AC}\x{73AD}\x{73AE}\x{73AF}\x{73B0}\x{73B1}\x{73B2}\x{73B3}\x{73B4}' .
+'\x{73B5}\x{73B6}\x{73B7}\x{73B8}\x{73B9}\x{73BA}\x{73BB}\x{73BC}\x{73BD}' .
+'\x{73BE}\x{73BF}\x{73C0}\x{73C2}\x{73C3}\x{73C4}\x{73C5}\x{73C6}\x{73C7}' .
+'\x{73C8}\x{73C9}\x{73CA}\x{73CB}\x{73CC}\x{73CD}\x{73CE}\x{73CF}\x{73D0}' .
+'\x{73D1}\x{73D2}\x{73D3}\x{73D4}\x{73D5}\x{73D6}\x{73D7}\x{73D8}\x{73D9}' .
+'\x{73DA}\x{73DB}\x{73DC}\x{73DD}\x{73DE}\x{73DF}\x{73E0}\x{73E2}\x{73E3}' .
+'\x{73E5}\x{73E6}\x{73E7}\x{73E8}\x{73E9}\x{73EA}\x{73EB}\x{73EC}\x{73ED}' .
+'\x{73EE}\x{73EF}\x{73F0}\x{73F1}\x{73F2}\x{73F4}\x{73F5}\x{73F6}\x{73F7}' .
+'\x{73F8}\x{73F9}\x{73FA}\x{73FC}\x{73FD}\x{73FE}\x{73FF}\x{7400}\x{7401}' .
+'\x{7402}\x{7403}\x{7404}\x{7405}\x{7406}\x{7407}\x{7408}\x{7409}\x{740A}' .
+'\x{740B}\x{740C}\x{740D}\x{740E}\x{740F}\x{7410}\x{7411}\x{7412}\x{7413}' .
+'\x{7414}\x{7415}\x{7416}\x{7417}\x{7419}\x{741A}\x{741B}\x{741C}\x{741D}' .
+'\x{741E}\x{741F}\x{7420}\x{7421}\x{7422}\x{7423}\x{7424}\x{7425}\x{7426}' .
+'\x{7427}\x{7428}\x{7429}\x{742A}\x{742B}\x{742C}\x{742D}\x{742E}\x{742F}' .
+'\x{7430}\x{7431}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{7437}\x{7438}' .
+'\x{743A}\x{743B}\x{743C}\x{743D}\x{743F}\x{7440}\x{7441}\x{7442}\x{7443}' .
+'\x{7444}\x{7445}\x{7446}\x{7448}\x{744A}\x{744B}\x{744C}\x{744D}\x{744E}' .
+'\x{744F}\x{7450}\x{7451}\x{7452}\x{7453}\x{7454}\x{7455}\x{7456}\x{7457}' .
+'\x{7459}\x{745A}\x{745B}\x{745C}\x{745D}\x{745E}\x{745F}\x{7461}\x{7462}' .
+'\x{7463}\x{7464}\x{7465}\x{7466}\x{7467}\x{7468}\x{7469}\x{746A}\x{746B}' .
+'\x{746C}\x{746D}\x{746E}\x{746F}\x{7470}\x{7471}\x{7472}\x{7473}\x{7474}' .
+'\x{7475}\x{7476}\x{7477}\x{7478}\x{7479}\x{747A}\x{747C}\x{747D}\x{747E}' .
+'\x{747F}\x{7480}\x{7481}\x{7482}\x{7483}\x{7485}\x{7486}\x{7487}\x{7488}' .
+'\x{7489}\x{748A}\x{748B}\x{748C}\x{748D}\x{748E}\x{748F}\x{7490}\x{7491}' .
+'\x{7492}\x{7493}\x{7494}\x{7495}\x{7497}\x{7498}\x{7499}\x{749A}\x{749B}' .
+'\x{749C}\x{749E}\x{749F}\x{74A0}\x{74A1}\x{74A3}\x{74A4}\x{74A5}\x{74A6}' .
+'\x{74A7}\x{74A8}\x{74A9}\x{74AA}\x{74AB}\x{74AC}\x{74AD}\x{74AE}\x{74AF}' .
+'\x{74B0}\x{74B1}\x{74B2}\x{74B3}\x{74B4}\x{74B5}\x{74B6}\x{74B7}\x{74B8}' .
+'\x{74B9}\x{74BA}\x{74BB}\x{74BC}\x{74BD}\x{74BE}\x{74BF}\x{74C0}\x{74C1}' .
+'\x{74C2}\x{74C3}\x{74C4}\x{74C5}\x{74C6}\x{74CA}\x{74CB}\x{74CD}\x{74CE}' .
+'\x{74CF}\x{74D0}\x{74D1}\x{74D2}\x{74D3}\x{74D4}\x{74D5}\x{74D6}\x{74D7}' .
+'\x{74D8}\x{74D9}\x{74DA}\x{74DB}\x{74DC}\x{74DD}\x{74DE}\x{74DF}\x{74E0}' .
+'\x{74E1}\x{74E2}\x{74E3}\x{74E4}\x{74E5}\x{74E6}\x{74E7}\x{74E8}\x{74E9}' .
+'\x{74EA}\x{74EC}\x{74ED}\x{74EE}\x{74EF}\x{74F0}\x{74F1}\x{74F2}\x{74F3}' .
+'\x{74F4}\x{74F5}\x{74F6}\x{74F7}\x{74F8}\x{74F9}\x{74FA}\x{74FB}\x{74FC}' .
+'\x{74FD}\x{74FE}\x{74FF}\x{7500}\x{7501}\x{7502}\x{7503}\x{7504}\x{7505}' .
+'\x{7506}\x{7507}\x{7508}\x{7509}\x{750A}\x{750B}\x{750C}\x{750D}\x{750F}' .
+'\x{7510}\x{7511}\x{7512}\x{7513}\x{7514}\x{7515}\x{7516}\x{7517}\x{7518}' .
+'\x{7519}\x{751A}\x{751B}\x{751C}\x{751D}\x{751E}\x{751F}\x{7521}\x{7522}' .
+'\x{7523}\x{7524}\x{7525}\x{7526}\x{7527}\x{7528}\x{7529}\x{752A}\x{752B}' .
+'\x{752C}\x{752D}\x{752E}\x{752F}\x{7530}\x{7531}\x{7532}\x{7533}\x{7535}' .
+'\x{7536}\x{7537}\x{7538}\x{7539}\x{753A}\x{753B}\x{753C}\x{753D}\x{753E}' .
+'\x{753F}\x{7540}\x{7542}\x{7543}\x{7544}\x{7545}\x{7546}\x{7547}\x{7548}' .
+'\x{7549}\x{754B}\x{754C}\x{754D}\x{754E}\x{754F}\x{7550}\x{7551}\x{7553}' .
+'\x{7554}\x{7556}\x{7557}\x{7558}\x{7559}\x{755A}\x{755B}\x{755C}\x{755D}' .
+'\x{755F}\x{7560}\x{7562}\x{7563}\x{7564}\x{7565}\x{7566}\x{7567}\x{7568}' .
+'\x{7569}\x{756A}\x{756B}\x{756C}\x{756D}\x{756E}\x{756F}\x{7570}\x{7572}' .
+'\x{7574}\x{7575}\x{7576}\x{7577}\x{7578}\x{7579}\x{757C}\x{757D}\x{757E}' .
+'\x{757F}\x{7580}\x{7581}\x{7582}\x{7583}\x{7584}\x{7586}\x{7587}\x{7588}' .
+'\x{7589}\x{758A}\x{758B}\x{758C}\x{758D}\x{758F}\x{7590}\x{7591}\x{7592}' .
+'\x{7593}\x{7594}\x{7595}\x{7596}\x{7597}\x{7598}\x{7599}\x{759A}\x{759B}' .
+'\x{759C}\x{759D}\x{759E}\x{759F}\x{75A0}\x{75A1}\x{75A2}\x{75A3}\x{75A4}' .
+'\x{75A5}\x{75A6}\x{75A7}\x{75A8}\x{75AA}\x{75AB}\x{75AC}\x{75AD}\x{75AE}' .
+'\x{75AF}\x{75B0}\x{75B1}\x{75B2}\x{75B3}\x{75B4}\x{75B5}\x{75B6}\x{75B8}' .
+'\x{75B9}\x{75BA}\x{75BB}\x{75BC}\x{75BD}\x{75BE}\x{75BF}\x{75C0}\x{75C1}' .
+'\x{75C2}\x{75C3}\x{75C4}\x{75C5}\x{75C6}\x{75C7}\x{75C8}\x{75C9}\x{75CA}' .
+'\x{75CB}\x{75CC}\x{75CD}\x{75CE}\x{75CF}\x{75D0}\x{75D1}\x{75D2}\x{75D3}' .
+'\x{75D4}\x{75D5}\x{75D6}\x{75D7}\x{75D8}\x{75D9}\x{75DA}\x{75DB}\x{75DD}' .
+'\x{75DE}\x{75DF}\x{75E0}\x{75E1}\x{75E2}\x{75E3}\x{75E4}\x{75E5}\x{75E6}' .
+'\x{75E7}\x{75E8}\x{75EA}\x{75EB}\x{75EC}\x{75ED}\x{75EF}\x{75F0}\x{75F1}' .
+'\x{75F2}\x{75F3}\x{75F4}\x{75F5}\x{75F6}\x{75F7}\x{75F8}\x{75F9}\x{75FA}' .
+'\x{75FB}\x{75FC}\x{75FD}\x{75FE}\x{75FF}\x{7600}\x{7601}\x{7602}\x{7603}' .
+'\x{7604}\x{7605}\x{7606}\x{7607}\x{7608}\x{7609}\x{760A}\x{760B}\x{760C}' .
+'\x{760D}\x{760E}\x{760F}\x{7610}\x{7611}\x{7612}\x{7613}\x{7614}\x{7615}' .
+'\x{7616}\x{7617}\x{7618}\x{7619}\x{761A}\x{761B}\x{761C}\x{761D}\x{761E}' .
+'\x{761F}\x{7620}\x{7621}\x{7622}\x{7623}\x{7624}\x{7625}\x{7626}\x{7627}' .
+'\x{7628}\x{7629}\x{762A}\x{762B}\x{762D}\x{762E}\x{762F}\x{7630}\x{7631}' .
+'\x{7632}\x{7633}\x{7634}\x{7635}\x{7636}\x{7637}\x{7638}\x{7639}\x{763A}' .
+'\x{763B}\x{763C}\x{763D}\x{763E}\x{763F}\x{7640}\x{7641}\x{7642}\x{7643}' .
+'\x{7646}\x{7647}\x{7648}\x{7649}\x{764A}\x{764B}\x{764C}\x{764D}\x{764F}' .
+'\x{7650}\x{7652}\x{7653}\x{7654}\x{7656}\x{7657}\x{7658}\x{7659}\x{765A}' .
+'\x{765B}\x{765C}\x{765D}\x{765E}\x{765F}\x{7660}\x{7661}\x{7662}\x{7663}' .
+'\x{7664}\x{7665}\x{7666}\x{7667}\x{7668}\x{7669}\x{766A}\x{766B}\x{766C}' .
+'\x{766D}\x{766E}\x{766F}\x{7670}\x{7671}\x{7672}\x{7674}\x{7675}\x{7676}' .
+'\x{7677}\x{7678}\x{7679}\x{767B}\x{767C}\x{767D}\x{767E}\x{767F}\x{7680}' .
+'\x{7681}\x{7682}\x{7683}\x{7684}\x{7685}\x{7686}\x{7687}\x{7688}\x{7689}' .
+'\x{768A}\x{768B}\x{768C}\x{768E}\x{768F}\x{7690}\x{7691}\x{7692}\x{7693}' .
+'\x{7694}\x{7695}\x{7696}\x{7697}\x{7698}\x{7699}\x{769A}\x{769B}\x{769C}' .
+'\x{769D}\x{769E}\x{769F}\x{76A0}\x{76A3}\x{76A4}\x{76A6}\x{76A7}\x{76A9}' .
+'\x{76AA}\x{76AB}\x{76AC}\x{76AD}\x{76AE}\x{76AF}\x{76B0}\x{76B1}\x{76B2}' .
+'\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}\x{76BB}\x{76BC}\x{76BD}\x{76BE}' .
+'\x{76BF}\x{76C0}\x{76C2}\x{76C3}\x{76C4}\x{76C5}\x{76C6}\x{76C7}\x{76C8}' .
+'\x{76C9}\x{76CA}\x{76CD}\x{76CE}\x{76CF}\x{76D0}\x{76D1}\x{76D2}\x{76D3}' .
+'\x{76D4}\x{76D5}\x{76D6}\x{76D7}\x{76D8}\x{76DA}\x{76DB}\x{76DC}\x{76DD}' .
+'\x{76DE}\x{76DF}\x{76E0}\x{76E1}\x{76E2}\x{76E3}\x{76E4}\x{76E5}\x{76E6}' .
+'\x{76E7}\x{76E8}\x{76E9}\x{76EA}\x{76EC}\x{76ED}\x{76EE}\x{76EF}\x{76F0}' .
+'\x{76F1}\x{76F2}\x{76F3}\x{76F4}\x{76F5}\x{76F6}\x{76F7}\x{76F8}\x{76F9}' .
+'\x{76FA}\x{76FB}\x{76FC}\x{76FD}\x{76FE}\x{76FF}\x{7701}\x{7703}\x{7704}' .
+'\x{7705}\x{7706}\x{7707}\x{7708}\x{7709}\x{770A}\x{770B}\x{770C}\x{770D}' .
+'\x{770F}\x{7710}\x{7711}\x{7712}\x{7713}\x{7714}\x{7715}\x{7716}\x{7717}' .
+'\x{7718}\x{7719}\x{771A}\x{771B}\x{771C}\x{771D}\x{771E}\x{771F}\x{7720}' .
+'\x{7722}\x{7723}\x{7725}\x{7726}\x{7727}\x{7728}\x{7729}\x{772A}\x{772C}' .
+'\x{772D}\x{772E}\x{772F}\x{7730}\x{7731}\x{7732}\x{7733}\x{7734}\x{7735}' .
+'\x{7736}\x{7737}\x{7738}\x{7739}\x{773A}\x{773B}\x{773C}\x{773D}\x{773E}' .
+'\x{7740}\x{7741}\x{7743}\x{7744}\x{7745}\x{7746}\x{7747}\x{7748}\x{7749}' .
+'\x{774A}\x{774B}\x{774C}\x{774D}\x{774E}\x{774F}\x{7750}\x{7751}\x{7752}' .
+'\x{7753}\x{7754}\x{7755}\x{7756}\x{7757}\x{7758}\x{7759}\x{775A}\x{775B}' .
+'\x{775C}\x{775D}\x{775E}\x{775F}\x{7760}\x{7761}\x{7762}\x{7763}\x{7765}' .
+'\x{7766}\x{7767}\x{7768}\x{7769}\x{776A}\x{776B}\x{776C}\x{776D}\x{776E}' .
+'\x{776F}\x{7770}\x{7771}\x{7772}\x{7773}\x{7774}\x{7775}\x{7776}\x{7777}' .
+'\x{7778}\x{7779}\x{777A}\x{777B}\x{777C}\x{777D}\x{777E}\x{777F}\x{7780}' .
+'\x{7781}\x{7782}\x{7783}\x{7784}\x{7785}\x{7786}\x{7787}\x{7788}\x{7789}' .
+'\x{778A}\x{778B}\x{778C}\x{778D}\x{778E}\x{778F}\x{7790}\x{7791}\x{7792}' .
+'\x{7793}\x{7794}\x{7795}\x{7797}\x{7798}\x{7799}\x{779A}\x{779B}\x{779C}' .
+'\x{779D}\x{779E}\x{779F}\x{77A0}\x{77A1}\x{77A2}\x{77A3}\x{77A5}\x{77A6}' .
+'\x{77A7}\x{77A8}\x{77A9}\x{77AA}\x{77AB}\x{77AC}\x{77AD}\x{77AE}\x{77AF}' .
+'\x{77B0}\x{77B1}\x{77B2}\x{77B3}\x{77B4}\x{77B5}\x{77B6}\x{77B7}\x{77B8}' .
+'\x{77B9}\x{77BA}\x{77BB}\x{77BC}\x{77BD}\x{77BF}\x{77C0}\x{77C2}\x{77C3}' .
+'\x{77C4}\x{77C5}\x{77C6}\x{77C7}\x{77C8}\x{77C9}\x{77CA}\x{77CB}\x{77CC}' .
+'\x{77CD}\x{77CE}\x{77CF}\x{77D0}\x{77D1}\x{77D3}\x{77D4}\x{77D5}\x{77D6}' .
+'\x{77D7}\x{77D8}\x{77D9}\x{77DA}\x{77DB}\x{77DC}\x{77DE}\x{77DF}\x{77E0}' .
+'\x{77E1}\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E8}\x{77E9}\x{77EA}\x{77EB}' .
+'\x{77EC}\x{77ED}\x{77EE}\x{77EF}\x{77F0}\x{77F1}\x{77F2}\x{77F3}\x{77F6}' .
+'\x{77F7}\x{77F8}\x{77F9}\x{77FA}\x{77FB}\x{77FC}\x{77FD}\x{77FE}\x{77FF}' .
+'\x{7800}\x{7801}\x{7802}\x{7803}\x{7804}\x{7805}\x{7806}\x{7808}\x{7809}' .
+'\x{780A}\x{780B}\x{780C}\x{780D}\x{780E}\x{780F}\x{7810}\x{7811}\x{7812}' .
+'\x{7813}\x{7814}\x{7815}\x{7816}\x{7817}\x{7818}\x{7819}\x{781A}\x{781B}' .
+'\x{781C}\x{781D}\x{781E}\x{781F}\x{7820}\x{7821}\x{7822}\x{7823}\x{7825}' .
+'\x{7826}\x{7827}\x{7828}\x{7829}\x{782A}\x{782B}\x{782C}\x{782D}\x{782E}' .
+'\x{782F}\x{7830}\x{7831}\x{7832}\x{7833}\x{7834}\x{7835}\x{7837}\x{7838}' .
+'\x{7839}\x{783A}\x{783B}\x{783C}\x{783D}\x{783E}\x{7840}\x{7841}\x{7843}' .
+'\x{7844}\x{7845}\x{7847}\x{7848}\x{7849}\x{784A}\x{784C}\x{784D}\x{784E}' .
+'\x{7850}\x{7851}\x{7852}\x{7853}\x{7854}\x{7855}\x{7856}\x{7857}\x{7858}' .
+'\x{7859}\x{785A}\x{785B}\x{785C}\x{785D}\x{785E}\x{785F}\x{7860}\x{7861}' .
+'\x{7862}\x{7863}\x{7864}\x{7865}\x{7866}\x{7867}\x{7868}\x{7869}\x{786A}' .
+'\x{786B}\x{786C}\x{786D}\x{786E}\x{786F}\x{7870}\x{7871}\x{7872}\x{7873}' .
+'\x{7874}\x{7875}\x{7877}\x{7878}\x{7879}\x{787A}\x{787B}\x{787C}\x{787D}' .
+'\x{787E}\x{787F}\x{7880}\x{7881}\x{7882}\x{7883}\x{7884}\x{7885}\x{7886}' .
+'\x{7887}\x{7889}\x{788A}\x{788B}\x{788C}\x{788D}\x{788E}\x{788F}\x{7890}' .
+'\x{7891}\x{7892}\x{7893}\x{7894}\x{7895}\x{7896}\x{7897}\x{7898}\x{7899}' .
+'\x{789A}\x{789B}\x{789C}\x{789D}\x{789E}\x{789F}\x{78A0}\x{78A1}\x{78A2}' .
+'\x{78A3}\x{78A4}\x{78A5}\x{78A6}\x{78A7}\x{78A8}\x{78A9}\x{78AA}\x{78AB}' .
+'\x{78AC}\x{78AD}\x{78AE}\x{78AF}\x{78B0}\x{78B1}\x{78B2}\x{78B3}\x{78B4}' .
+'\x{78B5}\x{78B6}\x{78B7}\x{78B8}\x{78B9}\x{78BA}\x{78BB}\x{78BC}\x{78BD}' .
+'\x{78BE}\x{78BF}\x{78C0}\x{78C1}\x{78C3}\x{78C4}\x{78C5}\x{78C6}\x{78C8}' .
+'\x{78C9}\x{78CA}\x{78CB}\x{78CC}\x{78CD}\x{78CE}\x{78CF}\x{78D0}\x{78D1}' .
+'\x{78D3}\x{78D4}\x{78D5}\x{78D6}\x{78D7}\x{78D8}\x{78D9}\x{78DA}\x{78DB}' .
+'\x{78DC}\x{78DD}\x{78DE}\x{78DF}\x{78E0}\x{78E1}\x{78E2}\x{78E3}\x{78E4}' .
+'\x{78E5}\x{78E6}\x{78E7}\x{78E8}\x{78E9}\x{78EA}\x{78EB}\x{78EC}\x{78ED}' .
+'\x{78EE}\x{78EF}\x{78F1}\x{78F2}\x{78F3}\x{78F4}\x{78F5}\x{78F6}\x{78F7}' .
+'\x{78F9}\x{78FA}\x{78FB}\x{78FC}\x{78FD}\x{78FE}\x{78FF}\x{7901}\x{7902}' .
+'\x{7903}\x{7904}\x{7905}\x{7906}\x{7907}\x{7909}\x{790A}\x{790B}\x{790C}' .
+'\x{790E}\x{790F}\x{7910}\x{7911}\x{7912}\x{7913}\x{7914}\x{7916}\x{7917}' .
+'\x{7918}\x{7919}\x{791A}\x{791B}\x{791C}\x{791D}\x{791E}\x{7921}\x{7922}' .
+'\x{7923}\x{7924}\x{7925}\x{7926}\x{7927}\x{7928}\x{7929}\x{792A}\x{792B}' .
+'\x{792C}\x{792D}\x{792E}\x{792F}\x{7930}\x{7931}\x{7933}\x{7934}\x{7935}' .
+'\x{7937}\x{7938}\x{7939}\x{793A}\x{793B}\x{793C}\x{793D}\x{793E}\x{793F}' .
+'\x{7940}\x{7941}\x{7942}\x{7943}\x{7944}\x{7945}\x{7946}\x{7947}\x{7948}' .
+'\x{7949}\x{794A}\x{794B}\x{794C}\x{794D}\x{794E}\x{794F}\x{7950}\x{7951}' .
+'\x{7952}\x{7953}\x{7954}\x{7955}\x{7956}\x{7957}\x{7958}\x{795A}\x{795B}' .
+'\x{795C}\x{795D}\x{795E}\x{795F}\x{7960}\x{7961}\x{7962}\x{7963}\x{7964}' .
+'\x{7965}\x{7966}\x{7967}\x{7968}\x{7969}\x{796A}\x{796B}\x{796D}\x{796F}' .
+'\x{7970}\x{7971}\x{7972}\x{7973}\x{7974}\x{7977}\x{7978}\x{7979}\x{797A}' .
+'\x{797B}\x{797C}\x{797D}\x{797E}\x{797F}\x{7980}\x{7981}\x{7982}\x{7983}' .
+'\x{7984}\x{7985}\x{7988}\x{7989}\x{798A}\x{798B}\x{798C}\x{798D}\x{798E}' .
+'\x{798F}\x{7990}\x{7991}\x{7992}\x{7993}\x{7994}\x{7995}\x{7996}\x{7997}' .
+'\x{7998}\x{7999}\x{799A}\x{799B}\x{799C}\x{799F}\x{79A0}\x{79A1}\x{79A2}' .
+'\x{79A3}\x{79A4}\x{79A5}\x{79A6}\x{79A7}\x{79A8}\x{79AA}\x{79AB}\x{79AC}' .
+'\x{79AD}\x{79AE}\x{79AF}\x{79B0}\x{79B1}\x{79B2}\x{79B3}\x{79B4}\x{79B5}' .
+'\x{79B6}\x{79B7}\x{79B8}\x{79B9}\x{79BA}\x{79BB}\x{79BD}\x{79BE}\x{79BF}' .
+'\x{79C0}\x{79C1}\x{79C2}\x{79C3}\x{79C5}\x{79C6}\x{79C8}\x{79C9}\x{79CA}' .
+'\x{79CB}\x{79CD}\x{79CE}\x{79CF}\x{79D0}\x{79D1}\x{79D2}\x{79D3}\x{79D5}' .
+'\x{79D6}\x{79D8}\x{79D9}\x{79DA}\x{79DB}\x{79DC}\x{79DD}\x{79DE}\x{79DF}' .
+'\x{79E0}\x{79E1}\x{79E2}\x{79E3}\x{79E4}\x{79E5}\x{79E6}\x{79E7}\x{79E8}' .
+'\x{79E9}\x{79EA}\x{79EB}\x{79EC}\x{79ED}\x{79EE}\x{79EF}\x{79F0}\x{79F1}' .
+'\x{79F2}\x{79F3}\x{79F4}\x{79F5}\x{79F6}\x{79F7}\x{79F8}\x{79F9}\x{79FA}' .
+'\x{79FB}\x{79FC}\x{79FD}\x{79FE}\x{79FF}\x{7A00}\x{7A02}\x{7A03}\x{7A04}' .
+'\x{7A05}\x{7A06}\x{7A08}\x{7A0A}\x{7A0B}\x{7A0C}\x{7A0D}\x{7A0E}\x{7A0F}' .
+'\x{7A10}\x{7A11}\x{7A12}\x{7A13}\x{7A14}\x{7A15}\x{7A16}\x{7A17}\x{7A18}' .
+'\x{7A19}\x{7A1A}\x{7A1B}\x{7A1C}\x{7A1D}\x{7A1E}\x{7A1F}\x{7A20}\x{7A21}' .
+'\x{7A22}\x{7A23}\x{7A24}\x{7A25}\x{7A26}\x{7A27}\x{7A28}\x{7A29}\x{7A2A}' .
+'\x{7A2B}\x{7A2D}\x{7A2E}\x{7A2F}\x{7A30}\x{7A31}\x{7A32}\x{7A33}\x{7A34}' .
+'\x{7A35}\x{7A37}\x{7A39}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
+'\x{7A41}\x{7A42}\x{7A43}\x{7A44}\x{7A45}\x{7A46}\x{7A47}\x{7A48}\x{7A49}' .
+'\x{7A4A}\x{7A4B}\x{7A4C}\x{7A4D}\x{7A4E}\x{7A50}\x{7A51}\x{7A52}\x{7A53}' .
+'\x{7A54}\x{7A55}\x{7A56}\x{7A57}\x{7A58}\x{7A59}\x{7A5A}\x{7A5B}\x{7A5C}' .
+'\x{7A5D}\x{7A5E}\x{7A5F}\x{7A60}\x{7A61}\x{7A62}\x{7A65}\x{7A66}\x{7A67}' .
+'\x{7A68}\x{7A69}\x{7A6B}\x{7A6C}\x{7A6D}\x{7A6E}\x{7A70}\x{7A71}\x{7A72}' .
+'\x{7A73}\x{7A74}\x{7A75}\x{7A76}\x{7A77}\x{7A78}\x{7A79}\x{7A7A}\x{7A7B}' .
+'\x{7A7C}\x{7A7D}\x{7A7E}\x{7A7F}\x{7A80}\x{7A81}\x{7A83}\x{7A84}\x{7A85}' .
+'\x{7A86}\x{7A87}\x{7A88}\x{7A89}\x{7A8A}\x{7A8B}\x{7A8C}\x{7A8D}\x{7A8E}' .
+'\x{7A8F}\x{7A90}\x{7A91}\x{7A92}\x{7A93}\x{7A94}\x{7A95}\x{7A96}\x{7A97}' .
+'\x{7A98}\x{7A99}\x{7A9C}\x{7A9D}\x{7A9E}\x{7A9F}\x{7AA0}\x{7AA1}\x{7AA2}' .
+'\x{7AA3}\x{7AA4}\x{7AA5}\x{7AA6}\x{7AA7}\x{7AA8}\x{7AA9}\x{7AAA}\x{7AAB}' .
+'\x{7AAC}\x{7AAD}\x{7AAE}\x{7AAF}\x{7AB0}\x{7AB1}\x{7AB2}\x{7AB3}\x{7AB4}' .
+'\x{7AB5}\x{7AB6}\x{7AB7}\x{7AB8}\x{7ABA}\x{7ABE}\x{7ABF}\x{7AC0}\x{7AC1}' .
+'\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}\x{7AC9}\x{7ACA}\x{7ACB}\x{7ACC}\x{7ACD}' .
+'\x{7ACE}\x{7ACF}\x{7AD0}\x{7AD1}\x{7AD2}\x{7AD3}\x{7AD4}\x{7AD5}\x{7AD6}' .
+'\x{7AD8}\x{7AD9}\x{7ADB}\x{7ADC}\x{7ADD}\x{7ADE}\x{7ADF}\x{7AE0}\x{7AE1}' .
+'\x{7AE2}\x{7AE3}\x{7AE4}\x{7AE5}\x{7AE6}\x{7AE7}\x{7AE8}\x{7AEA}\x{7AEB}' .
+'\x{7AEC}\x{7AED}\x{7AEE}\x{7AEF}\x{7AF0}\x{7AF1}\x{7AF2}\x{7AF3}\x{7AF4}' .
+'\x{7AF6}\x{7AF7}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFB}\x{7AFD}\x{7AFE}\x{7AFF}' .
+'\x{7B00}\x{7B01}\x{7B02}\x{7B03}\x{7B04}\x{7B05}\x{7B06}\x{7B08}\x{7B09}' .
+'\x{7B0A}\x{7B0B}\x{7B0C}\x{7B0D}\x{7B0E}\x{7B0F}\x{7B10}\x{7B11}\x{7B12}' .
+'\x{7B13}\x{7B14}\x{7B15}\x{7B16}\x{7B17}\x{7B18}\x{7B19}\x{7B1A}\x{7B1B}' .
+'\x{7B1C}\x{7B1D}\x{7B1E}\x{7B20}\x{7B21}\x{7B22}\x{7B23}\x{7B24}\x{7B25}' .
+'\x{7B26}\x{7B28}\x{7B2A}\x{7B2B}\x{7B2C}\x{7B2D}\x{7B2E}\x{7B2F}\x{7B30}' .
+'\x{7B31}\x{7B32}\x{7B33}\x{7B34}\x{7B35}\x{7B36}\x{7B37}\x{7B38}\x{7B39}' .
+'\x{7B3A}\x{7B3B}\x{7B3C}\x{7B3D}\x{7B3E}\x{7B3F}\x{7B40}\x{7B41}\x{7B43}' .
+'\x{7B44}\x{7B45}\x{7B46}\x{7B47}\x{7B48}\x{7B49}\x{7B4A}\x{7B4B}\x{7B4C}' .
+'\x{7B4D}\x{7B4E}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B55}\x{7B56}' .
+'\x{7B57}\x{7B58}\x{7B59}\x{7B5A}\x{7B5B}\x{7B5C}\x{7B5D}\x{7B5E}\x{7B5F}' .
+'\x{7B60}\x{7B61}\x{7B62}\x{7B63}\x{7B64}\x{7B65}\x{7B66}\x{7B67}\x{7B68}' .
+'\x{7B69}\x{7B6A}\x{7B6B}\x{7B6C}\x{7B6D}\x{7B6E}\x{7B70}\x{7B71}\x{7B72}' .
+'\x{7B73}\x{7B74}\x{7B75}\x{7B76}\x{7B77}\x{7B78}\x{7B79}\x{7B7B}\x{7B7C}' .
+'\x{7B7D}\x{7B7E}\x{7B7F}\x{7B80}\x{7B81}\x{7B82}\x{7B83}\x{7B84}\x{7B85}' .
+'\x{7B87}\x{7B88}\x{7B89}\x{7B8A}\x{7B8B}\x{7B8C}\x{7B8D}\x{7B8E}\x{7B8F}' .
+'\x{7B90}\x{7B91}\x{7B93}\x{7B94}\x{7B95}\x{7B96}\x{7B97}\x{7B98}\x{7B99}' .
+'\x{7B9A}\x{7B9B}\x{7B9C}\x{7B9D}\x{7B9E}\x{7B9F}\x{7BA0}\x{7BA1}\x{7BA2}' .
+'\x{7BA4}\x{7BA6}\x{7BA7}\x{7BA8}\x{7BA9}\x{7BAA}\x{7BAB}\x{7BAC}\x{7BAD}' .
+'\x{7BAE}\x{7BAF}\x{7BB1}\x{7BB3}\x{7BB4}\x{7BB5}\x{7BB6}\x{7BB7}\x{7BB8}' .
+'\x{7BB9}\x{7BBA}\x{7BBB}\x{7BBC}\x{7BBD}\x{7BBE}\x{7BBF}\x{7BC0}\x{7BC1}' .
+'\x{7BC2}\x{7BC3}\x{7BC4}\x{7BC5}\x{7BC6}\x{7BC7}\x{7BC8}\x{7BC9}\x{7BCA}' .
+'\x{7BCB}\x{7BCC}\x{7BCD}\x{7BCE}\x{7BD0}\x{7BD1}\x{7BD2}\x{7BD3}\x{7BD4}' .
+'\x{7BD5}\x{7BD6}\x{7BD7}\x{7BD8}\x{7BD9}\x{7BDA}\x{7BDB}\x{7BDC}\x{7BDD}' .
+'\x{7BDE}\x{7BDF}\x{7BE0}\x{7BE1}\x{7BE2}\x{7BE3}\x{7BE4}\x{7BE5}\x{7BE6}' .
+'\x{7BE7}\x{7BE8}\x{7BE9}\x{7BEA}\x{7BEB}\x{7BEC}\x{7BED}\x{7BEE}\x{7BEF}' .
+'\x{7BF0}\x{7BF1}\x{7BF2}\x{7BF3}\x{7BF4}\x{7BF5}\x{7BF6}\x{7BF7}\x{7BF8}' .
+'\x{7BF9}\x{7BFB}\x{7BFC}\x{7BFD}\x{7BFE}\x{7BFF}\x{7C00}\x{7C01}\x{7C02}' .
+'\x{7C03}\x{7C04}\x{7C05}\x{7C06}\x{7C07}\x{7C08}\x{7C09}\x{7C0A}\x{7C0B}' .
+'\x{7C0C}\x{7C0D}\x{7C0E}\x{7C0F}\x{7C10}\x{7C11}\x{7C12}\x{7C13}\x{7C15}' .
+'\x{7C16}\x{7C17}\x{7C18}\x{7C19}\x{7C1A}\x{7C1C}\x{7C1D}\x{7C1E}\x{7C1F}' .
+'\x{7C20}\x{7C21}\x{7C22}\x{7C23}\x{7C24}\x{7C25}\x{7C26}\x{7C27}\x{7C28}' .
+'\x{7C29}\x{7C2A}\x{7C2B}\x{7C2C}\x{7C2D}\x{7C30}\x{7C31}\x{7C32}\x{7C33}' .
+'\x{7C34}\x{7C35}\x{7C36}\x{7C37}\x{7C38}\x{7C39}\x{7C3A}\x{7C3B}\x{7C3C}' .
+'\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C41}\x{7C42}\x{7C43}\x{7C44}\x{7C45}' .
+'\x{7C46}\x{7C47}\x{7C48}\x{7C49}\x{7C4A}\x{7C4B}\x{7C4C}\x{7C4D}\x{7C4E}' .
+'\x{7C50}\x{7C51}\x{7C53}\x{7C54}\x{7C56}\x{7C57}\x{7C58}\x{7C59}\x{7C5A}' .
+'\x{7C5B}\x{7C5C}\x{7C5E}\x{7C5F}\x{7C60}\x{7C61}\x{7C62}\x{7C63}\x{7C64}' .
+'\x{7C65}\x{7C66}\x{7C67}\x{7C68}\x{7C69}\x{7C6A}\x{7C6B}\x{7C6C}\x{7C6D}' .
+'\x{7C6E}\x{7C6F}\x{7C70}\x{7C71}\x{7C72}\x{7C73}\x{7C74}\x{7C75}\x{7C77}' .
+'\x{7C78}\x{7C79}\x{7C7A}\x{7C7B}\x{7C7C}\x{7C7D}\x{7C7E}\x{7C7F}\x{7C80}' .
+'\x{7C81}\x{7C82}\x{7C84}\x{7C85}\x{7C86}\x{7C88}\x{7C89}\x{7C8A}\x{7C8B}' .
+'\x{7C8C}\x{7C8D}\x{7C8E}\x{7C8F}\x{7C90}\x{7C91}\x{7C92}\x{7C94}\x{7C95}' .
+'\x{7C96}\x{7C97}\x{7C98}\x{7C99}\x{7C9B}\x{7C9C}\x{7C9D}\x{7C9E}\x{7C9F}' .
+'\x{7CA0}\x{7CA1}\x{7CA2}\x{7CA3}\x{7CA4}\x{7CA5}\x{7CA6}\x{7CA7}\x{7CA8}' .
+'\x{7CA9}\x{7CAA}\x{7CAD}\x{7CAE}\x{7CAF}\x{7CB0}\x{7CB1}\x{7CB2}\x{7CB3}' .
+'\x{7CB4}\x{7CB5}\x{7CB6}\x{7CB7}\x{7CB8}\x{7CB9}\x{7CBA}\x{7CBB}\x{7CBC}' .
+'\x{7CBD}\x{7CBE}\x{7CBF}\x{7CC0}\x{7CC1}\x{7CC2}\x{7CC3}\x{7CC4}\x{7CC5}' .
+'\x{7CC6}\x{7CC7}\x{7CC8}\x{7CC9}\x{7CCA}\x{7CCB}\x{7CCC}\x{7CCD}\x{7CCE}' .
+'\x{7CCF}\x{7CD0}\x{7CD1}\x{7CD2}\x{7CD4}\x{7CD5}\x{7CD6}\x{7CD7}\x{7CD8}' .
+'\x{7CD9}\x{7CDC}\x{7CDD}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}' .
+'\x{7CE8}\x{7CE9}\x{7CEA}\x{7CEB}\x{7CEC}\x{7CED}\x{7CEE}\x{7CEF}\x{7CF0}' .
+'\x{7CF1}\x{7CF2}\x{7CF3}\x{7CF4}\x{7CF5}\x{7CF6}\x{7CF7}\x{7CF8}\x{7CF9}' .
+'\x{7CFA}\x{7CFB}\x{7CFD}\x{7CFE}\x{7D00}\x{7D01}\x{7D02}\x{7D03}\x{7D04}' .
+'\x{7D05}\x{7D06}\x{7D07}\x{7D08}\x{7D09}\x{7D0A}\x{7D0B}\x{7D0C}\x{7D0D}' .
+'\x{7D0E}\x{7D0F}\x{7D10}\x{7D11}\x{7D12}\x{7D13}\x{7D14}\x{7D15}\x{7D16}' .
+'\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D1D}\x{7D1E}\x{7D1F}' .
+'\x{7D20}\x{7D21}\x{7D22}\x{7D24}\x{7D25}\x{7D26}\x{7D27}\x{7D28}\x{7D29}' .
+'\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D31}\x{7D32}\x{7D33}\x{7D34}' .
+'\x{7D35}\x{7D36}\x{7D37}\x{7D38}\x{7D39}\x{7D3A}\x{7D3B}\x{7D3C}\x{7D3D}' .
+'\x{7D3E}\x{7D3F}\x{7D40}\x{7D41}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}' .
+'\x{7D47}\x{7D49}\x{7D4A}\x{7D4B}\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D51}' .
+'\x{7D52}\x{7D53}\x{7D54}\x{7D55}\x{7D56}\x{7D57}\x{7D58}\x{7D59}\x{7D5B}' .
+'\x{7D5C}\x{7D5D}\x{7D5E}\x{7D5F}\x{7D60}\x{7D61}\x{7D62}\x{7D63}\x{7D65}' .
+'\x{7D66}\x{7D67}\x{7D68}\x{7D69}\x{7D6A}\x{7D6B}\x{7D6C}\x{7D6D}\x{7D6E}' .
+'\x{7D6F}\x{7D70}\x{7D71}\x{7D72}\x{7D73}\x{7D74}\x{7D75}\x{7D76}\x{7D77}' .
+'\x{7D79}\x{7D7A}\x{7D7B}\x{7D7C}\x{7D7D}\x{7D7E}\x{7D7F}\x{7D80}\x{7D81}' .
+'\x{7D83}\x{7D84}\x{7D85}\x{7D86}\x{7D87}\x{7D88}\x{7D89}\x{7D8A}\x{7D8B}' .
+'\x{7D8C}\x{7D8D}\x{7D8E}\x{7D8F}\x{7D90}\x{7D91}\x{7D92}\x{7D93}\x{7D94}' .
+'\x{7D96}\x{7D97}\x{7D99}\x{7D9B}\x{7D9C}\x{7D9D}\x{7D9E}\x{7D9F}\x{7DA0}' .
+'\x{7DA1}\x{7DA2}\x{7DA3}\x{7DA5}\x{7DA6}\x{7DA7}\x{7DA9}\x{7DAA}\x{7DAB}' .
+'\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}\x{7DB1}\x{7DB2}\x{7DB3}\x{7DB4}' .
+'\x{7DB5}\x{7DB6}\x{7DB7}\x{7DB8}\x{7DB9}\x{7DBA}\x{7DBB}\x{7DBC}\x{7DBD}' .
+'\x{7DBE}\x{7DBF}\x{7DC0}\x{7DC1}\x{7DC2}\x{7DC3}\x{7DC4}\x{7DC5}\x{7DC6}' .
+'\x{7DC7}\x{7DC8}\x{7DC9}\x{7DCA}\x{7DCB}\x{7DCC}\x{7DCE}\x{7DCF}\x{7DD0}' .
+'\x{7DD1}\x{7DD2}\x{7DD4}\x{7DD5}\x{7DD6}\x{7DD7}\x{7DD8}\x{7DD9}\x{7DDA}' .
+'\x{7DDB}\x{7DDD}\x{7DDE}\x{7DDF}\x{7DE0}\x{7DE1}\x{7DE2}\x{7DE3}\x{7DE6}' .
+'\x{7DE7}\x{7DE8}\x{7DE9}\x{7DEA}\x{7DEC}\x{7DED}\x{7DEE}\x{7DEF}\x{7DF0}' .
+'\x{7DF1}\x{7DF2}\x{7DF3}\x{7DF4}\x{7DF5}\x{7DF6}\x{7DF7}\x{7DF8}\x{7DF9}' .
+'\x{7DFA}\x{7DFB}\x{7DFC}\x{7E00}\x{7E01}\x{7E02}\x{7E03}\x{7E04}\x{7E05}' .
+'\x{7E06}\x{7E07}\x{7E08}\x{7E09}\x{7E0A}\x{7E0B}\x{7E0C}\x{7E0D}\x{7E0E}' .
+'\x{7E0F}\x{7E10}\x{7E11}\x{7E12}\x{7E13}\x{7E14}\x{7E15}\x{7E16}\x{7E17}' .
+'\x{7E19}\x{7E1A}\x{7E1B}\x{7E1C}\x{7E1D}\x{7E1E}\x{7E1F}\x{7E20}\x{7E21}' .
+'\x{7E22}\x{7E23}\x{7E24}\x{7E25}\x{7E26}\x{7E27}\x{7E28}\x{7E29}\x{7E2A}' .
+'\x{7E2B}\x{7E2C}\x{7E2D}\x{7E2E}\x{7E2F}\x{7E30}\x{7E31}\x{7E32}\x{7E33}' .
+'\x{7E34}\x{7E35}\x{7E36}\x{7E37}\x{7E38}\x{7E39}\x{7E3A}\x{7E3B}\x{7E3C}' .
+'\x{7E3D}\x{7E3E}\x{7E3F}\x{7E40}\x{7E41}\x{7E42}\x{7E43}\x{7E44}\x{7E45}' .
+'\x{7E46}\x{7E47}\x{7E48}\x{7E49}\x{7E4C}\x{7E4D}\x{7E4E}\x{7E4F}\x{7E50}' .
+'\x{7E51}\x{7E52}\x{7E53}\x{7E54}\x{7E55}\x{7E56}\x{7E57}\x{7E58}\x{7E59}' .
+'\x{7E5A}\x{7E5C}\x{7E5D}\x{7E5E}\x{7E5F}\x{7E60}\x{7E61}\x{7E62}\x{7E63}' .
+'\x{7E65}\x{7E66}\x{7E67}\x{7E68}\x{7E69}\x{7E6A}\x{7E6B}\x{7E6C}\x{7E6D}' .
+'\x{7E6E}\x{7E6F}\x{7E70}\x{7E71}\x{7E72}\x{7E73}\x{7E74}\x{7E75}\x{7E76}' .
+'\x{7E77}\x{7E78}\x{7E79}\x{7E7A}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7E}\x{7E7F}' .
+'\x{7E80}\x{7E81}\x{7E82}\x{7E83}\x{7E84}\x{7E85}\x{7E86}\x{7E87}\x{7E88}' .
+'\x{7E89}\x{7E8A}\x{7E8B}\x{7E8C}\x{7E8D}\x{7E8E}\x{7E8F}\x{7E90}\x{7E91}' .
+'\x{7E92}\x{7E93}\x{7E94}\x{7E95}\x{7E96}\x{7E97}\x{7E98}\x{7E99}\x{7E9A}' .
+'\x{7E9B}\x{7E9C}\x{7E9E}\x{7E9F}\x{7EA0}\x{7EA1}\x{7EA2}\x{7EA3}\x{7EA4}' .
+'\x{7EA5}\x{7EA6}\x{7EA7}\x{7EA8}\x{7EA9}\x{7EAA}\x{7EAB}\x{7EAC}\x{7EAD}' .
+'\x{7EAE}\x{7EAF}\x{7EB0}\x{7EB1}\x{7EB2}\x{7EB3}\x{7EB4}\x{7EB5}\x{7EB6}' .
+'\x{7EB7}\x{7EB8}\x{7EB9}\x{7EBA}\x{7EBB}\x{7EBC}\x{7EBD}\x{7EBE}\x{7EBF}' .
+'\x{7EC0}\x{7EC1}\x{7EC2}\x{7EC3}\x{7EC4}\x{7EC5}\x{7EC6}\x{7EC7}\x{7EC8}' .
+'\x{7EC9}\x{7ECA}\x{7ECB}\x{7ECC}\x{7ECD}\x{7ECE}\x{7ECF}\x{7ED0}\x{7ED1}' .
+'\x{7ED2}\x{7ED3}\x{7ED4}\x{7ED5}\x{7ED6}\x{7ED7}\x{7ED8}\x{7ED9}\x{7EDA}' .
+'\x{7EDB}\x{7EDC}\x{7EDD}\x{7EDE}\x{7EDF}\x{7EE0}\x{7EE1}\x{7EE2}\x{7EE3}' .
+'\x{7EE4}\x{7EE5}\x{7EE6}\x{7EE7}\x{7EE8}\x{7EE9}\x{7EEA}\x{7EEB}\x{7EEC}' .
+'\x{7EED}\x{7EEE}\x{7EEF}\x{7EF0}\x{7EF1}\x{7EF2}\x{7EF3}\x{7EF4}\x{7EF5}' .
+'\x{7EF6}\x{7EF7}\x{7EF8}\x{7EF9}\x{7EFA}\x{7EFB}\x{7EFC}\x{7EFD}\x{7EFE}' .
+'\x{7EFF}\x{7F00}\x{7F01}\x{7F02}\x{7F03}\x{7F04}\x{7F05}\x{7F06}\x{7F07}' .
+'\x{7F08}\x{7F09}\x{7F0A}\x{7F0B}\x{7F0C}\x{7F0D}\x{7F0E}\x{7F0F}\x{7F10}' .
+'\x{7F11}\x{7F12}\x{7F13}\x{7F14}\x{7F15}\x{7F16}\x{7F17}\x{7F18}\x{7F19}' .
+'\x{7F1A}\x{7F1B}\x{7F1C}\x{7F1D}\x{7F1E}\x{7F1F}\x{7F20}\x{7F21}\x{7F22}' .
+'\x{7F23}\x{7F24}\x{7F25}\x{7F26}\x{7F27}\x{7F28}\x{7F29}\x{7F2A}\x{7F2B}' .
+'\x{7F2C}\x{7F2D}\x{7F2E}\x{7F2F}\x{7F30}\x{7F31}\x{7F32}\x{7F33}\x{7F34}' .
+'\x{7F35}\x{7F36}\x{7F37}\x{7F38}\x{7F39}\x{7F3A}\x{7F3D}\x{7F3E}\x{7F3F}' .
+'\x{7F40}\x{7F42}\x{7F43}\x{7F44}\x{7F45}\x{7F47}\x{7F48}\x{7F49}\x{7F4A}' .
+'\x{7F4B}\x{7F4C}\x{7F4D}\x{7F4E}\x{7F4F}\x{7F50}\x{7F51}\x{7F52}\x{7F53}' .
+'\x{7F54}\x{7F55}\x{7F56}\x{7F57}\x{7F58}\x{7F5A}\x{7F5B}\x{7F5C}\x{7F5D}' .
+'\x{7F5E}\x{7F5F}\x{7F60}\x{7F61}\x{7F62}\x{7F63}\x{7F64}\x{7F65}\x{7F66}' .
+'\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6C}\x{7F6D}\x{7F6E}\x{7F6F}' .
+'\x{7F70}\x{7F71}\x{7F72}\x{7F73}\x{7F74}\x{7F75}\x{7F76}\x{7F77}\x{7F78}' .
+'\x{7F79}\x{7F7A}\x{7F7B}\x{7F7C}\x{7F7D}\x{7F7E}\x{7F7F}\x{7F80}\x{7F81}' .
+'\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}\x{7F88}\x{7F89}\x{7F8A}\x{7F8B}' .
+'\x{7F8C}\x{7F8D}\x{7F8E}\x{7F8F}\x{7F91}\x{7F92}\x{7F93}\x{7F94}\x{7F95}' .
+'\x{7F96}\x{7F98}\x{7F9A}\x{7F9B}\x{7F9C}\x{7F9D}\x{7F9E}\x{7F9F}\x{7FA0}' .
+'\x{7FA1}\x{7FA2}\x{7FA3}\x{7FA4}\x{7FA5}\x{7FA6}\x{7FA7}\x{7FA8}\x{7FA9}' .
+'\x{7FAA}\x{7FAB}\x{7FAC}\x{7FAD}\x{7FAE}\x{7FAF}\x{7FB0}\x{7FB1}\x{7FB2}' .
+'\x{7FB3}\x{7FB5}\x{7FB6}\x{7FB7}\x{7FB8}\x{7FB9}\x{7FBA}\x{7FBB}\x{7FBC}' .
+'\x{7FBD}\x{7FBE}\x{7FBF}\x{7FC0}\x{7FC1}\x{7FC2}\x{7FC3}\x{7FC4}\x{7FC5}' .
+'\x{7FC6}\x{7FC7}\x{7FC8}\x{7FC9}\x{7FCA}\x{7FCB}\x{7FCC}\x{7FCD}\x{7FCE}' .
+'\x{7FCF}\x{7FD0}\x{7FD1}\x{7FD2}\x{7FD3}\x{7FD4}\x{7FD5}\x{7FD7}\x{7FD8}' .
+'\x{7FD9}\x{7FDA}\x{7FDB}\x{7FDC}\x{7FDE}\x{7FDF}\x{7FE0}\x{7FE1}\x{7FE2}' .
+'\x{7FE3}\x{7FE5}\x{7FE6}\x{7FE7}\x{7FE8}\x{7FE9}\x{7FEA}\x{7FEB}\x{7FEC}' .
+'\x{7FED}\x{7FEE}\x{7FEF}\x{7FF0}\x{7FF1}\x{7FF2}\x{7FF3}\x{7FF4}\x{7FF5}' .
+'\x{7FF6}\x{7FF7}\x{7FF8}\x{7FF9}\x{7FFA}\x{7FFB}\x{7FFC}\x{7FFD}\x{7FFE}' .
+'\x{7FFF}\x{8000}\x{8001}\x{8002}\x{8003}\x{8004}\x{8005}\x{8006}\x{8007}' .
+'\x{8008}\x{8009}\x{800B}\x{800C}\x{800D}\x{800E}\x{800F}\x{8010}\x{8011}' .
+'\x{8012}\x{8013}\x{8014}\x{8015}\x{8016}\x{8017}\x{8018}\x{8019}\x{801A}' .
+'\x{801B}\x{801C}\x{801D}\x{801E}\x{801F}\x{8020}\x{8021}\x{8022}\x{8023}' .
+'\x{8024}\x{8025}\x{8026}\x{8027}\x{8028}\x{8029}\x{802A}\x{802B}\x{802C}' .
+'\x{802D}\x{802E}\x{8030}\x{8031}\x{8032}\x{8033}\x{8034}\x{8035}\x{8036}' .
+'\x{8037}\x{8038}\x{8039}\x{803A}\x{803B}\x{803D}\x{803E}\x{803F}\x{8041}' .
+'\x{8042}\x{8043}\x{8044}\x{8045}\x{8046}\x{8047}\x{8048}\x{8049}\x{804A}' .
+'\x{804B}\x{804C}\x{804D}\x{804E}\x{804F}\x{8050}\x{8051}\x{8052}\x{8053}' .
+'\x{8054}\x{8055}\x{8056}\x{8057}\x{8058}\x{8059}\x{805A}\x{805B}\x{805C}' .
+'\x{805D}\x{805E}\x{805F}\x{8060}\x{8061}\x{8062}\x{8063}\x{8064}\x{8065}' .
+'\x{8067}\x{8068}\x{8069}\x{806A}\x{806B}\x{806C}\x{806D}\x{806E}\x{806F}' .
+'\x{8070}\x{8071}\x{8072}\x{8073}\x{8074}\x{8075}\x{8076}\x{8077}\x{8078}' .
+'\x{8079}\x{807A}\x{807B}\x{807C}\x{807D}\x{807E}\x{807F}\x{8080}\x{8081}' .
+'\x{8082}\x{8083}\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808A}\x{808B}' .
+'\x{808C}\x{808D}\x{808F}\x{8090}\x{8091}\x{8092}\x{8093}\x{8095}\x{8096}' .
+'\x{8097}\x{8098}\x{8099}\x{809A}\x{809B}\x{809C}\x{809D}\x{809E}\x{809F}' .
+'\x{80A0}\x{80A1}\x{80A2}\x{80A3}\x{80A4}\x{80A5}\x{80A9}\x{80AA}\x{80AB}' .
+'\x{80AD}\x{80AE}\x{80AF}\x{80B0}\x{80B1}\x{80B2}\x{80B4}\x{80B5}\x{80B6}' .
+'\x{80B7}\x{80B8}\x{80BA}\x{80BB}\x{80BC}\x{80BD}\x{80BE}\x{80BF}\x{80C0}' .
+'\x{80C1}\x{80C2}\x{80C3}\x{80C4}\x{80C5}\x{80C6}\x{80C7}\x{80C8}\x{80C9}' .
+'\x{80CA}\x{80CB}\x{80CC}\x{80CD}\x{80CE}\x{80CF}\x{80D0}\x{80D1}\x{80D2}' .
+'\x{80D3}\x{80D4}\x{80D5}\x{80D6}\x{80D7}\x{80D8}\x{80D9}\x{80DA}\x{80DB}' .
+'\x{80DC}\x{80DD}\x{80DE}\x{80E0}\x{80E1}\x{80E2}\x{80E3}\x{80E4}\x{80E5}' .
+'\x{80E6}\x{80E7}\x{80E8}\x{80E9}\x{80EA}\x{80EB}\x{80EC}\x{80ED}\x{80EE}' .
+'\x{80EF}\x{80F0}\x{80F1}\x{80F2}\x{80F3}\x{80F4}\x{80F5}\x{80F6}\x{80F7}' .
+'\x{80F8}\x{80F9}\x{80FA}\x{80FB}\x{80FC}\x{80FD}\x{80FE}\x{80FF}\x{8100}' .
+'\x{8101}\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{810B}' .
+'\x{810C}\x{810D}\x{810E}\x{810F}\x{8110}\x{8111}\x{8112}\x{8113}\x{8114}' .
+'\x{8115}\x{8116}\x{8118}\x{8119}\x{811A}\x{811B}\x{811C}\x{811D}\x{811E}' .
+'\x{811F}\x{8120}\x{8121}\x{8122}\x{8123}\x{8124}\x{8125}\x{8126}\x{8127}' .
+'\x{8128}\x{8129}\x{812A}\x{812B}\x{812C}\x{812D}\x{812E}\x{812F}\x{8130}' .
+'\x{8131}\x{8132}\x{8136}\x{8137}\x{8138}\x{8139}\x{813A}\x{813B}\x{813C}' .
+'\x{813D}\x{813E}\x{813F}\x{8140}\x{8141}\x{8142}\x{8143}\x{8144}\x{8145}' .
+'\x{8146}\x{8147}\x{8148}\x{8149}\x{814A}\x{814B}\x{814C}\x{814D}\x{814E}' .
+'\x{814F}\x{8150}\x{8151}\x{8152}\x{8153}\x{8154}\x{8155}\x{8156}\x{8157}' .
+'\x{8158}\x{8159}\x{815A}\x{815B}\x{815C}\x{815D}\x{815E}\x{8160}\x{8161}' .
+'\x{8162}\x{8163}\x{8164}\x{8165}\x{8166}\x{8167}\x{8168}\x{8169}\x{816A}' .
+'\x{816B}\x{816C}\x{816D}\x{816E}\x{816F}\x{8170}\x{8171}\x{8172}\x{8173}' .
+'\x{8174}\x{8175}\x{8176}\x{8177}\x{8178}\x{8179}\x{817A}\x{817B}\x{817C}' .
+'\x{817D}\x{817E}\x{817F}\x{8180}\x{8181}\x{8182}\x{8183}\x{8185}\x{8186}' .
+'\x{8187}\x{8188}\x{8189}\x{818A}\x{818B}\x{818C}\x{818D}\x{818E}\x{818F}' .
+'\x{8191}\x{8192}\x{8193}\x{8194}\x{8195}\x{8197}\x{8198}\x{8199}\x{819A}' .
+'\x{819B}\x{819C}\x{819D}\x{819E}\x{819F}\x{81A0}\x{81A1}\x{81A2}\x{81A3}' .
+'\x{81A4}\x{81A5}\x{81A6}\x{81A7}\x{81A8}\x{81A9}\x{81AA}\x{81AB}\x{81AC}' .
+'\x{81AD}\x{81AE}\x{81AF}\x{81B0}\x{81B1}\x{81B2}\x{81B3}\x{81B4}\x{81B5}' .
+'\x{81B6}\x{81B7}\x{81B8}\x{81B9}\x{81BA}\x{81BB}\x{81BC}\x{81BD}\x{81BE}' .
+'\x{81BF}\x{81C0}\x{81C1}\x{81C2}\x{81C3}\x{81C4}\x{81C5}\x{81C6}\x{81C7}' .
+'\x{81C8}\x{81C9}\x{81CA}\x{81CC}\x{81CD}\x{81CE}\x{81CF}\x{81D0}\x{81D1}' .
+'\x{81D2}\x{81D4}\x{81D5}\x{81D6}\x{81D7}\x{81D8}\x{81D9}\x{81DA}\x{81DB}' .
+'\x{81DC}\x{81DD}\x{81DE}\x{81DF}\x{81E0}\x{81E1}\x{81E2}\x{81E3}\x{81E5}' .
+'\x{81E6}\x{81E7}\x{81E8}\x{81E9}\x{81EA}\x{81EB}\x{81EC}\x{81ED}\x{81EE}' .
+'\x{81F1}\x{81F2}\x{81F3}\x{81F4}\x{81F5}\x{81F6}\x{81F7}\x{81F8}\x{81F9}' .
+'\x{81FA}\x{81FB}\x{81FC}\x{81FD}\x{81FE}\x{81FF}\x{8200}\x{8201}\x{8202}' .
+'\x{8203}\x{8204}\x{8205}\x{8206}\x{8207}\x{8208}\x{8209}\x{820A}\x{820B}' .
+'\x{820C}\x{820D}\x{820E}\x{820F}\x{8210}\x{8211}\x{8212}\x{8214}\x{8215}' .
+'\x{8216}\x{8218}\x{8219}\x{821A}\x{821B}\x{821C}\x{821D}\x{821E}\x{821F}' .
+'\x{8220}\x{8221}\x{8222}\x{8223}\x{8225}\x{8226}\x{8227}\x{8228}\x{8229}' .
+'\x{822A}\x{822B}\x{822C}\x{822D}\x{822F}\x{8230}\x{8231}\x{8232}\x{8233}' .
+'\x{8234}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{823A}\x{823B}\x{823C}' .
+'\x{823D}\x{823E}\x{823F}\x{8240}\x{8242}\x{8243}\x{8244}\x{8245}\x{8246}' .
+'\x{8247}\x{8248}\x{8249}\x{824A}\x{824B}\x{824C}\x{824D}\x{824E}\x{824F}' .
+'\x{8250}\x{8251}\x{8252}\x{8253}\x{8254}\x{8255}\x{8256}\x{8257}\x{8258}' .
+'\x{8259}\x{825A}\x{825B}\x{825C}\x{825D}\x{825E}\x{825F}\x{8260}\x{8261}' .
+'\x{8263}\x{8264}\x{8266}\x{8267}\x{8268}\x{8269}\x{826A}\x{826B}\x{826C}' .
+'\x{826D}\x{826E}\x{826F}\x{8270}\x{8271}\x{8272}\x{8273}\x{8274}\x{8275}' .
+'\x{8276}\x{8277}\x{8278}\x{8279}\x{827A}\x{827B}\x{827C}\x{827D}\x{827E}' .
+'\x{827F}\x{8280}\x{8281}\x{8282}\x{8283}\x{8284}\x{8285}\x{8286}\x{8287}' .
+'\x{8288}\x{8289}\x{828A}\x{828B}\x{828D}\x{828E}\x{828F}\x{8290}\x{8291}' .
+'\x{8292}\x{8293}\x{8294}\x{8295}\x{8296}\x{8297}\x{8298}\x{8299}\x{829A}' .
+'\x{829B}\x{829C}\x{829D}\x{829E}\x{829F}\x{82A0}\x{82A1}\x{82A2}\x{82A3}' .
+'\x{82A4}\x{82A5}\x{82A6}\x{82A7}\x{82A8}\x{82A9}\x{82AA}\x{82AB}\x{82AC}' .
+'\x{82AD}\x{82AE}\x{82AF}\x{82B0}\x{82B1}\x{82B3}\x{82B4}\x{82B5}\x{82B6}' .
+'\x{82B7}\x{82B8}\x{82B9}\x{82BA}\x{82BB}\x{82BC}\x{82BD}\x{82BE}\x{82BF}' .
+'\x{82C0}\x{82C1}\x{82C2}\x{82C3}\x{82C4}\x{82C5}\x{82C6}\x{82C7}\x{82C8}' .
+'\x{82C9}\x{82CA}\x{82CB}\x{82CC}\x{82CD}\x{82CE}\x{82CF}\x{82D0}\x{82D1}' .
+'\x{82D2}\x{82D3}\x{82D4}\x{82D5}\x{82D6}\x{82D7}\x{82D8}\x{82D9}\x{82DA}' .
+'\x{82DB}\x{82DC}\x{82DD}\x{82DE}\x{82DF}\x{82E0}\x{82E1}\x{82E3}\x{82E4}' .
+'\x{82E5}\x{82E6}\x{82E7}\x{82E8}\x{82E9}\x{82EA}\x{82EB}\x{82EC}\x{82ED}' .
+'\x{82EE}\x{82EF}\x{82F0}\x{82F1}\x{82F2}\x{82F3}\x{82F4}\x{82F5}\x{82F6}' .
+'\x{82F7}\x{82F8}\x{82F9}\x{82FA}\x{82FB}\x{82FD}\x{82FE}\x{82FF}\x{8300}' .
+'\x{8301}\x{8302}\x{8303}\x{8304}\x{8305}\x{8306}\x{8307}\x{8308}\x{8309}' .
+'\x{830B}\x{830C}\x{830D}\x{830E}\x{830F}\x{8311}\x{8312}\x{8313}\x{8314}' .
+'\x{8315}\x{8316}\x{8317}\x{8318}\x{8319}\x{831A}\x{831B}\x{831C}\x{831D}' .
+'\x{831E}\x{831F}\x{8320}\x{8321}\x{8322}\x{8323}\x{8324}\x{8325}\x{8326}' .
+'\x{8327}\x{8328}\x{8329}\x{832A}\x{832B}\x{832C}\x{832D}\x{832E}\x{832F}' .
+'\x{8331}\x{8332}\x{8333}\x{8334}\x{8335}\x{8336}\x{8337}\x{8338}\x{8339}' .
+'\x{833A}\x{833B}\x{833C}\x{833D}\x{833E}\x{833F}\x{8340}\x{8341}\x{8342}' .
+'\x{8343}\x{8344}\x{8345}\x{8346}\x{8347}\x{8348}\x{8349}\x{834A}\x{834B}' .
+'\x{834C}\x{834D}\x{834E}\x{834F}\x{8350}\x{8351}\x{8352}\x{8353}\x{8354}' .
+'\x{8356}\x{8357}\x{8358}\x{8359}\x{835A}\x{835B}\x{835C}\x{835D}\x{835E}' .
+'\x{835F}\x{8360}\x{8361}\x{8362}\x{8363}\x{8364}\x{8365}\x{8366}\x{8367}' .
+'\x{8368}\x{8369}\x{836A}\x{836B}\x{836C}\x{836D}\x{836E}\x{836F}\x{8370}' .
+'\x{8371}\x{8372}\x{8373}\x{8374}\x{8375}\x{8376}\x{8377}\x{8378}\x{8379}' .
+'\x{837A}\x{837B}\x{837C}\x{837D}\x{837E}\x{837F}\x{8380}\x{8381}\x{8382}' .
+'\x{8383}\x{8384}\x{8385}\x{8386}\x{8387}\x{8388}\x{8389}\x{838A}\x{838B}' .
+'\x{838C}\x{838D}\x{838E}\x{838F}\x{8390}\x{8391}\x{8392}\x{8393}\x{8394}' .
+'\x{8395}\x{8396}\x{8397}\x{8398}\x{8399}\x{839A}\x{839B}\x{839C}\x{839D}' .
+'\x{839E}\x{83A0}\x{83A1}\x{83A2}\x{83A3}\x{83A4}\x{83A5}\x{83A6}\x{83A7}' .
+'\x{83A8}\x{83A9}\x{83AA}\x{83AB}\x{83AC}\x{83AD}\x{83AE}\x{83AF}\x{83B0}' .
+'\x{83B1}\x{83B2}\x{83B3}\x{83B4}\x{83B6}\x{83B7}\x{83B8}\x{83B9}\x{83BA}' .
+'\x{83BB}\x{83BC}\x{83BD}\x{83BF}\x{83C0}\x{83C1}\x{83C2}\x{83C3}\x{83C4}' .
+'\x{83C5}\x{83C6}\x{83C7}\x{83C8}\x{83C9}\x{83CA}\x{83CB}\x{83CC}\x{83CD}' .
+'\x{83CE}\x{83CF}\x{83D0}\x{83D1}\x{83D2}\x{83D3}\x{83D4}\x{83D5}\x{83D6}' .
+'\x{83D7}\x{83D8}\x{83D9}\x{83DA}\x{83DB}\x{83DC}\x{83DD}\x{83DE}\x{83DF}' .
+'\x{83E0}\x{83E1}\x{83E2}\x{83E3}\x{83E4}\x{83E5}\x{83E7}\x{83E8}\x{83E9}' .
+'\x{83EA}\x{83EB}\x{83EC}\x{83EE}\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F3}' .
+'\x{83F4}\x{83F5}\x{83F6}\x{83F7}\x{83F8}\x{83F9}\x{83FA}\x{83FB}\x{83FC}' .
+'\x{83FD}\x{83FE}\x{83FF}\x{8400}\x{8401}\x{8402}\x{8403}\x{8404}\x{8405}' .
+'\x{8406}\x{8407}\x{8408}\x{8409}\x{840A}\x{840B}\x{840C}\x{840D}\x{840E}' .
+'\x{840F}\x{8410}\x{8411}\x{8412}\x{8413}\x{8415}\x{8418}\x{8419}\x{841A}' .
+'\x{841B}\x{841C}\x{841D}\x{841E}\x{8421}\x{8422}\x{8423}\x{8424}\x{8425}' .
+'\x{8426}\x{8427}\x{8428}\x{8429}\x{842A}\x{842B}\x{842C}\x{842D}\x{842E}' .
+'\x{842F}\x{8430}\x{8431}\x{8432}\x{8433}\x{8434}\x{8435}\x{8436}\x{8437}' .
+'\x{8438}\x{8439}\x{843A}\x{843B}\x{843C}\x{843D}\x{843E}\x{843F}\x{8440}' .
+'\x{8441}\x{8442}\x{8443}\x{8444}\x{8445}\x{8446}\x{8447}\x{8448}\x{8449}' .
+'\x{844A}\x{844B}\x{844C}\x{844D}\x{844E}\x{844F}\x{8450}\x{8451}\x{8452}' .
+'\x{8453}\x{8454}\x{8455}\x{8456}\x{8457}\x{8459}\x{845A}\x{845B}\x{845C}' .
+'\x{845D}\x{845E}\x{845F}\x{8460}\x{8461}\x{8462}\x{8463}\x{8464}\x{8465}' .
+'\x{8466}\x{8467}\x{8468}\x{8469}\x{846A}\x{846B}\x{846C}\x{846D}\x{846E}' .
+'\x{846F}\x{8470}\x{8471}\x{8472}\x{8473}\x{8474}\x{8475}\x{8476}\x{8477}' .
+'\x{8478}\x{8479}\x{847A}\x{847B}\x{847C}\x{847D}\x{847E}\x{847F}\x{8480}' .
+'\x{8481}\x{8482}\x{8484}\x{8485}\x{8486}\x{8487}\x{8488}\x{8489}\x{848A}' .
+'\x{848B}\x{848C}\x{848D}\x{848E}\x{848F}\x{8490}\x{8491}\x{8492}\x{8493}' .
+'\x{8494}\x{8496}\x{8497}\x{8498}\x{8499}\x{849A}\x{849B}\x{849C}\x{849D}' .
+'\x{849E}\x{849F}\x{84A0}\x{84A1}\x{84A2}\x{84A3}\x{84A4}\x{84A5}\x{84A6}' .
+'\x{84A7}\x{84A8}\x{84A9}\x{84AA}\x{84AB}\x{84AC}\x{84AE}\x{84AF}\x{84B0}' .
+'\x{84B1}\x{84B2}\x{84B3}\x{84B4}\x{84B5}\x{84B6}\x{84B8}\x{84B9}\x{84BA}' .
+'\x{84BB}\x{84BC}\x{84BD}\x{84BE}\x{84BF}\x{84C0}\x{84C1}\x{84C2}\x{84C4}' .
+'\x{84C5}\x{84C6}\x{84C7}\x{84C8}\x{84C9}\x{84CA}\x{84CB}\x{84CC}\x{84CD}' .
+'\x{84CE}\x{84CF}\x{84D0}\x{84D1}\x{84D2}\x{84D3}\x{84D4}\x{84D5}\x{84D6}' .
+'\x{84D7}\x{84D8}\x{84D9}\x{84DB}\x{84DC}\x{84DD}\x{84DE}\x{84DF}\x{84E0}' .
+'\x{84E1}\x{84E2}\x{84E3}\x{84E4}\x{84E5}\x{84E6}\x{84E7}\x{84E8}\x{84E9}' .
+'\x{84EA}\x{84EB}\x{84EC}\x{84EE}\x{84EF}\x{84F0}\x{84F1}\x{84F2}\x{84F3}' .
+'\x{84F4}\x{84F5}\x{84F6}\x{84F7}\x{84F8}\x{84F9}\x{84FA}\x{84FB}\x{84FC}' .
+'\x{84FD}\x{84FE}\x{84FF}\x{8500}\x{8501}\x{8502}\x{8503}\x{8504}\x{8506}' .
+'\x{8507}\x{8508}\x{8509}\x{850A}\x{850B}\x{850C}\x{850D}\x{850E}\x{850F}' .
+'\x{8511}\x{8512}\x{8513}\x{8514}\x{8515}\x{8516}\x{8517}\x{8518}\x{8519}' .
+'\x{851A}\x{851B}\x{851C}\x{851D}\x{851E}\x{851F}\x{8520}\x{8521}\x{8522}' .
+'\x{8523}\x{8524}\x{8525}\x{8526}\x{8527}\x{8528}\x{8529}\x{852A}\x{852B}' .
+'\x{852C}\x{852D}\x{852E}\x{852F}\x{8530}\x{8531}\x{8534}\x{8535}\x{8536}' .
+'\x{8537}\x{8538}\x{8539}\x{853A}\x{853B}\x{853C}\x{853D}\x{853E}\x{853F}' .
+'\x{8540}\x{8541}\x{8542}\x{8543}\x{8544}\x{8545}\x{8546}\x{8547}\x{8548}' .
+'\x{8549}\x{854A}\x{854B}\x{854D}\x{854E}\x{854F}\x{8551}\x{8552}\x{8553}' .
+'\x{8554}\x{8555}\x{8556}\x{8557}\x{8558}\x{8559}\x{855A}\x{855B}\x{855C}' .
+'\x{855D}\x{855E}\x{855F}\x{8560}\x{8561}\x{8562}\x{8563}\x{8564}\x{8565}' .
+'\x{8566}\x{8567}\x{8568}\x{8569}\x{856A}\x{856B}\x{856C}\x{856D}\x{856E}' .
+'\x{856F}\x{8570}\x{8571}\x{8572}\x{8573}\x{8574}\x{8575}\x{8576}\x{8577}' .
+'\x{8578}\x{8579}\x{857A}\x{857B}\x{857C}\x{857D}\x{857E}\x{8580}\x{8581}' .
+'\x{8582}\x{8583}\x{8584}\x{8585}\x{8586}\x{8587}\x{8588}\x{8589}\x{858A}' .
+'\x{858B}\x{858C}\x{858D}\x{858E}\x{858F}\x{8590}\x{8591}\x{8592}\x{8594}' .
+'\x{8595}\x{8596}\x{8598}\x{8599}\x{859A}\x{859B}\x{859C}\x{859D}\x{859E}' .
+'\x{859F}\x{85A0}\x{85A1}\x{85A2}\x{85A3}\x{85A4}\x{85A5}\x{85A6}\x{85A7}' .
+'\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AD}\x{85AE}\x{85AF}\x{85B0}' .
+'\x{85B1}\x{85B3}\x{85B4}\x{85B5}\x{85B6}\x{85B7}\x{85B8}\x{85B9}\x{85BA}' .
+'\x{85BC}\x{85BD}\x{85BE}\x{85BF}\x{85C0}\x{85C1}\x{85C2}\x{85C3}\x{85C4}' .
+'\x{85C5}\x{85C6}\x{85C7}\x{85C8}\x{85C9}\x{85CA}\x{85CB}\x{85CD}\x{85CE}' .
+'\x{85CF}\x{85D0}\x{85D1}\x{85D2}\x{85D3}\x{85D4}\x{85D5}\x{85D6}\x{85D7}' .
+'\x{85D8}\x{85D9}\x{85DA}\x{85DB}\x{85DC}\x{85DD}\x{85DE}\x{85DF}\x{85E0}' .
+'\x{85E1}\x{85E2}\x{85E3}\x{85E4}\x{85E5}\x{85E6}\x{85E7}\x{85E8}\x{85E9}' .
+'\x{85EA}\x{85EB}\x{85EC}\x{85ED}\x{85EF}\x{85F0}\x{85F1}\x{85F2}\x{85F4}' .
+'\x{85F5}\x{85F6}\x{85F7}\x{85F8}\x{85F9}\x{85FA}\x{85FB}\x{85FD}\x{85FE}' .
+'\x{85FF}\x{8600}\x{8601}\x{8602}\x{8604}\x{8605}\x{8606}\x{8607}\x{8608}' .
+'\x{8609}\x{860A}\x{860B}\x{860C}\x{860F}\x{8611}\x{8612}\x{8613}\x{8614}' .
+'\x{8616}\x{8617}\x{8618}\x{8619}\x{861A}\x{861B}\x{861C}\x{861E}\x{861F}' .
+'\x{8620}\x{8621}\x{8622}\x{8623}\x{8624}\x{8625}\x{8626}\x{8627}\x{8628}' .
+'\x{8629}\x{862A}\x{862B}\x{862C}\x{862D}\x{862E}\x{862F}\x{8630}\x{8631}' .
+'\x{8632}\x{8633}\x{8634}\x{8635}\x{8636}\x{8638}\x{8639}\x{863A}\x{863B}' .
+'\x{863C}\x{863D}\x{863E}\x{863F}\x{8640}\x{8641}\x{8642}\x{8643}\x{8644}' .
+'\x{8645}\x{8646}\x{8647}\x{8648}\x{8649}\x{864A}\x{864B}\x{864C}\x{864D}' .
+'\x{864E}\x{864F}\x{8650}\x{8651}\x{8652}\x{8653}\x{8654}\x{8655}\x{8656}' .
+'\x{8658}\x{8659}\x{865A}\x{865B}\x{865C}\x{865D}\x{865E}\x{865F}\x{8660}' .
+'\x{8661}\x{8662}\x{8663}\x{8664}\x{8665}\x{8666}\x{8667}\x{8668}\x{8669}' .
+'\x{866A}\x{866B}\x{866C}\x{866D}\x{866E}\x{866F}\x{8670}\x{8671}\x{8672}' .
+'\x{8673}\x{8674}\x{8676}\x{8677}\x{8678}\x{8679}\x{867A}\x{867B}\x{867C}' .
+'\x{867D}\x{867E}\x{867F}\x{8680}\x{8681}\x{8682}\x{8683}\x{8684}\x{8685}' .
+'\x{8686}\x{8687}\x{8688}\x{868A}\x{868B}\x{868C}\x{868D}\x{868E}\x{868F}' .
+'\x{8690}\x{8691}\x{8693}\x{8694}\x{8695}\x{8696}\x{8697}\x{8698}\x{8699}' .
+'\x{869A}\x{869B}\x{869C}\x{869D}\x{869E}\x{869F}\x{86A1}\x{86A2}\x{86A3}' .
+'\x{86A4}\x{86A5}\x{86A7}\x{86A8}\x{86A9}\x{86AA}\x{86AB}\x{86AC}\x{86AD}' .
+'\x{86AE}\x{86AF}\x{86B0}\x{86B1}\x{86B2}\x{86B3}\x{86B4}\x{86B5}\x{86B6}' .
+'\x{86B7}\x{86B8}\x{86B9}\x{86BA}\x{86BB}\x{86BC}\x{86BD}\x{86BE}\x{86BF}' .
+'\x{86C0}\x{86C1}\x{86C2}\x{86C3}\x{86C4}\x{86C5}\x{86C6}\x{86C7}\x{86C8}' .
+'\x{86C9}\x{86CA}\x{86CB}\x{86CC}\x{86CE}\x{86CF}\x{86D0}\x{86D1}\x{86D2}' .
+'\x{86D3}\x{86D4}\x{86D6}\x{86D7}\x{86D8}\x{86D9}\x{86DA}\x{86DB}\x{86DC}' .
+'\x{86DD}\x{86DE}\x{86DF}\x{86E1}\x{86E2}\x{86E3}\x{86E4}\x{86E5}\x{86E6}' .
+'\x{86E8}\x{86E9}\x{86EA}\x{86EB}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F0}' .
+'\x{86F1}\x{86F2}\x{86F3}\x{86F4}\x{86F5}\x{86F6}\x{86F7}\x{86F8}\x{86F9}' .
+'\x{86FA}\x{86FB}\x{86FC}\x{86FE}\x{86FF}\x{8700}\x{8701}\x{8702}\x{8703}' .
+'\x{8704}\x{8705}\x{8706}\x{8707}\x{8708}\x{8709}\x{870A}\x{870B}\x{870C}' .
+'\x{870D}\x{870E}\x{870F}\x{8710}\x{8711}\x{8712}\x{8713}\x{8714}\x{8715}' .
+'\x{8716}\x{8717}\x{8718}\x{8719}\x{871A}\x{871B}\x{871C}\x{871E}\x{871F}' .
+'\x{8720}\x{8721}\x{8722}\x{8723}\x{8724}\x{8725}\x{8726}\x{8727}\x{8728}' .
+'\x{8729}\x{872A}\x{872B}\x{872C}\x{872D}\x{872E}\x{8730}\x{8731}\x{8732}' .
+'\x{8733}\x{8734}\x{8735}\x{8736}\x{8737}\x{8738}\x{8739}\x{873A}\x{873B}' .
+'\x{873C}\x{873E}\x{873F}\x{8740}\x{8741}\x{8742}\x{8743}\x{8744}\x{8746}' .
+'\x{8747}\x{8748}\x{8749}\x{874A}\x{874C}\x{874D}\x{874E}\x{874F}\x{8750}' .
+'\x{8751}\x{8752}\x{8753}\x{8754}\x{8755}\x{8756}\x{8757}\x{8758}\x{8759}' .
+'\x{875A}\x{875B}\x{875C}\x{875D}\x{875E}\x{875F}\x{8760}\x{8761}\x{8762}' .
+'\x{8763}\x{8764}\x{8765}\x{8766}\x{8767}\x{8768}\x{8769}\x{876A}\x{876B}' .
+'\x{876C}\x{876D}\x{876E}\x{876F}\x{8770}\x{8772}\x{8773}\x{8774}\x{8775}' .
+'\x{8776}\x{8777}\x{8778}\x{8779}\x{877A}\x{877B}\x{877C}\x{877D}\x{877E}' .
+'\x{8780}\x{8781}\x{8782}\x{8783}\x{8784}\x{8785}\x{8786}\x{8787}\x{8788}' .
+'\x{8789}\x{878A}\x{878B}\x{878C}\x{878D}\x{878F}\x{8790}\x{8791}\x{8792}' .
+'\x{8793}\x{8794}\x{8795}\x{8796}\x{8797}\x{8798}\x{879A}\x{879B}\x{879C}' .
+'\x{879D}\x{879E}\x{879F}\x{87A0}\x{87A1}\x{87A2}\x{87A3}\x{87A4}\x{87A5}' .
+'\x{87A6}\x{87A7}\x{87A8}\x{87A9}\x{87AA}\x{87AB}\x{87AC}\x{87AD}\x{87AE}' .
+'\x{87AF}\x{87B0}\x{87B1}\x{87B2}\x{87B3}\x{87B4}\x{87B5}\x{87B6}\x{87B7}' .
+'\x{87B8}\x{87B9}\x{87BA}\x{87BB}\x{87BC}\x{87BD}\x{87BE}\x{87BF}\x{87C0}' .
+'\x{87C1}\x{87C2}\x{87C3}\x{87C4}\x{87C5}\x{87C6}\x{87C7}\x{87C8}\x{87C9}' .
+'\x{87CA}\x{87CB}\x{87CC}\x{87CD}\x{87CE}\x{87CF}\x{87D0}\x{87D1}\x{87D2}' .
+'\x{87D3}\x{87D4}\x{87D5}\x{87D6}\x{87D7}\x{87D8}\x{87D9}\x{87DB}\x{87DC}' .
+'\x{87DD}\x{87DE}\x{87DF}\x{87E0}\x{87E1}\x{87E2}\x{87E3}\x{87E4}\x{87E5}' .
+'\x{87E6}\x{87E7}\x{87E8}\x{87E9}\x{87EA}\x{87EB}\x{87EC}\x{87ED}\x{87EE}' .
+'\x{87EF}\x{87F1}\x{87F2}\x{87F3}\x{87F4}\x{87F5}\x{87F6}\x{87F7}\x{87F8}' .
+'\x{87F9}\x{87FA}\x{87FB}\x{87FC}\x{87FD}\x{87FE}\x{87FF}\x{8800}\x{8801}' .
+'\x{8802}\x{8803}\x{8804}\x{8805}\x{8806}\x{8808}\x{8809}\x{880A}\x{880B}' .
+'\x{880C}\x{880D}\x{880E}\x{880F}\x{8810}\x{8811}\x{8813}\x{8814}\x{8815}' .
+'\x{8816}\x{8817}\x{8818}\x{8819}\x{881A}\x{881B}\x{881C}\x{881D}\x{881E}' .
+'\x{881F}\x{8820}\x{8821}\x{8822}\x{8823}\x{8824}\x{8825}\x{8826}\x{8827}' .
+'\x{8828}\x{8829}\x{882A}\x{882B}\x{882C}\x{882E}\x{882F}\x{8830}\x{8831}' .
+'\x{8832}\x{8833}\x{8834}\x{8835}\x{8836}\x{8837}\x{8838}\x{8839}\x{883B}' .
+'\x{883C}\x{883D}\x{883E}\x{883F}\x{8840}\x{8841}\x{8842}\x{8843}\x{8844}' .
+'\x{8845}\x{8846}\x{8848}\x{8849}\x{884A}\x{884B}\x{884C}\x{884D}\x{884E}' .
+'\x{884F}\x{8850}\x{8851}\x{8852}\x{8853}\x{8854}\x{8855}\x{8856}\x{8857}' .
+'\x{8859}\x{885A}\x{885B}\x{885D}\x{885E}\x{8860}\x{8861}\x{8862}\x{8863}' .
+'\x{8864}\x{8865}\x{8866}\x{8867}\x{8868}\x{8869}\x{886A}\x{886B}\x{886C}' .
+'\x{886D}\x{886E}\x{886F}\x{8870}\x{8871}\x{8872}\x{8873}\x{8874}\x{8875}' .
+'\x{8876}\x{8877}\x{8878}\x{8879}\x{887B}\x{887C}\x{887D}\x{887E}\x{887F}' .
+'\x{8880}\x{8881}\x{8882}\x{8883}\x{8884}\x{8885}\x{8886}\x{8887}\x{8888}' .
+'\x{8889}\x{888A}\x{888B}\x{888C}\x{888D}\x{888E}\x{888F}\x{8890}\x{8891}' .
+'\x{8892}\x{8893}\x{8894}\x{8895}\x{8896}\x{8897}\x{8898}\x{8899}\x{889A}' .
+'\x{889B}\x{889C}\x{889D}\x{889E}\x{889F}\x{88A0}\x{88A1}\x{88A2}\x{88A3}' .
+'\x{88A4}\x{88A5}\x{88A6}\x{88A7}\x{88A8}\x{88A9}\x{88AA}\x{88AB}\x{88AC}' .
+'\x{88AD}\x{88AE}\x{88AF}\x{88B0}\x{88B1}\x{88B2}\x{88B3}\x{88B4}\x{88B6}' .
+'\x{88B7}\x{88B8}\x{88B9}\x{88BA}\x{88BB}\x{88BC}\x{88BD}\x{88BE}\x{88BF}' .
+'\x{88C0}\x{88C1}\x{88C2}\x{88C3}\x{88C4}\x{88C5}\x{88C6}\x{88C7}\x{88C8}' .
+'\x{88C9}\x{88CA}\x{88CB}\x{88CC}\x{88CD}\x{88CE}\x{88CF}\x{88D0}\x{88D1}' .
+'\x{88D2}\x{88D3}\x{88D4}\x{88D5}\x{88D6}\x{88D7}\x{88D8}\x{88D9}\x{88DA}' .
+'\x{88DB}\x{88DC}\x{88DD}\x{88DE}\x{88DF}\x{88E0}\x{88E1}\x{88E2}\x{88E3}' .
+'\x{88E4}\x{88E5}\x{88E7}\x{88E8}\x{88EA}\x{88EB}\x{88EC}\x{88EE}\x{88EF}' .
+'\x{88F0}\x{88F1}\x{88F2}\x{88F3}\x{88F4}\x{88F5}\x{88F6}\x{88F7}\x{88F8}' .
+'\x{88F9}\x{88FA}\x{88FB}\x{88FC}\x{88FD}\x{88FE}\x{88FF}\x{8900}\x{8901}' .
+'\x{8902}\x{8904}\x{8905}\x{8906}\x{8907}\x{8908}\x{8909}\x{890A}\x{890B}' .
+'\x{890C}\x{890D}\x{890E}\x{8910}\x{8911}\x{8912}\x{8913}\x{8914}\x{8915}' .
+'\x{8916}\x{8917}\x{8918}\x{8919}\x{891A}\x{891B}\x{891C}\x{891D}\x{891E}' .
+'\x{891F}\x{8920}\x{8921}\x{8922}\x{8923}\x{8925}\x{8926}\x{8927}\x{8928}' .
+'\x{8929}\x{892A}\x{892B}\x{892C}\x{892D}\x{892E}\x{892F}\x{8930}\x{8931}' .
+'\x{8932}\x{8933}\x{8934}\x{8935}\x{8936}\x{8937}\x{8938}\x{8939}\x{893A}' .
+'\x{893B}\x{893C}\x{893D}\x{893E}\x{893F}\x{8940}\x{8941}\x{8942}\x{8943}' .
+'\x{8944}\x{8945}\x{8946}\x{8947}\x{8948}\x{8949}\x{894A}\x{894B}\x{894C}' .
+'\x{894E}\x{894F}\x{8950}\x{8951}\x{8952}\x{8953}\x{8954}\x{8955}\x{8956}' .
+'\x{8957}\x{8958}\x{8959}\x{895A}\x{895B}\x{895C}\x{895D}\x{895E}\x{895F}' .
+'\x{8960}\x{8961}\x{8962}\x{8963}\x{8964}\x{8966}\x{8967}\x{8968}\x{8969}' .
+'\x{896A}\x{896B}\x{896C}\x{896D}\x{896E}\x{896F}\x{8970}\x{8971}\x{8972}' .
+'\x{8973}\x{8974}\x{8976}\x{8977}\x{8978}\x{8979}\x{897A}\x{897B}\x{897C}' .
+'\x{897E}\x{897F}\x{8980}\x{8981}\x{8982}\x{8983}\x{8984}\x{8985}\x{8986}' .
+'\x{8987}\x{8988}\x{8989}\x{898A}\x{898B}\x{898C}\x{898E}\x{898F}\x{8991}' .
+'\x{8992}\x{8993}\x{8995}\x{8996}\x{8997}\x{8998}\x{899A}\x{899B}\x{899C}' .
+'\x{899D}\x{899E}\x{899F}\x{89A0}\x{89A1}\x{89A2}\x{89A3}\x{89A4}\x{89A5}' .
+'\x{89A6}\x{89A7}\x{89A8}\x{89AA}\x{89AB}\x{89AC}\x{89AD}\x{89AE}\x{89AF}' .
+'\x{89B1}\x{89B2}\x{89B3}\x{89B5}\x{89B6}\x{89B7}\x{89B8}\x{89B9}\x{89BA}' .
+'\x{89BD}\x{89BE}\x{89BF}\x{89C0}\x{89C1}\x{89C2}\x{89C3}\x{89C4}\x{89C5}' .
+'\x{89C6}\x{89C7}\x{89C8}\x{89C9}\x{89CA}\x{89CB}\x{89CC}\x{89CD}\x{89CE}' .
+'\x{89CF}\x{89D0}\x{89D1}\x{89D2}\x{89D3}\x{89D4}\x{89D5}\x{89D6}\x{89D7}' .
+'\x{89D8}\x{89D9}\x{89DA}\x{89DB}\x{89DC}\x{89DD}\x{89DE}\x{89DF}\x{89E0}' .
+'\x{89E1}\x{89E2}\x{89E3}\x{89E4}\x{89E5}\x{89E6}\x{89E7}\x{89E8}\x{89E9}' .
+'\x{89EA}\x{89EB}\x{89EC}\x{89ED}\x{89EF}\x{89F0}\x{89F1}\x{89F2}\x{89F3}' .
+'\x{89F4}\x{89F6}\x{89F7}\x{89F8}\x{89FA}\x{89FB}\x{89FC}\x{89FE}\x{89FF}' .
+'\x{8A00}\x{8A01}\x{8A02}\x{8A03}\x{8A04}\x{8A07}\x{8A08}\x{8A09}\x{8A0A}' .
+'\x{8A0B}\x{8A0C}\x{8A0D}\x{8A0E}\x{8A0F}\x{8A10}\x{8A11}\x{8A12}\x{8A13}' .
+'\x{8A15}\x{8A16}\x{8A17}\x{8A18}\x{8A1A}\x{8A1B}\x{8A1C}\x{8A1D}\x{8A1E}' .
+'\x{8A1F}\x{8A22}\x{8A23}\x{8A24}\x{8A25}\x{8A26}\x{8A27}\x{8A28}\x{8A29}' .
+'\x{8A2A}\x{8A2C}\x{8A2D}\x{8A2E}\x{8A2F}\x{8A30}\x{8A31}\x{8A32}\x{8A34}' .
+'\x{8A35}\x{8A36}\x{8A37}\x{8A38}\x{8A39}\x{8A3A}\x{8A3B}\x{8A3C}\x{8A3E}' .
+'\x{8A3F}\x{8A40}\x{8A41}\x{8A42}\x{8A43}\x{8A44}\x{8A45}\x{8A46}\x{8A47}' .
+'\x{8A48}\x{8A49}\x{8A4A}\x{8A4C}\x{8A4D}\x{8A4E}\x{8A4F}\x{8A50}\x{8A51}' .
+'\x{8A52}\x{8A53}\x{8A54}\x{8A55}\x{8A56}\x{8A57}\x{8A58}\x{8A59}\x{8A5A}' .
+'\x{8A5B}\x{8A5C}\x{8A5D}\x{8A5E}\x{8A5F}\x{8A60}\x{8A61}\x{8A62}\x{8A63}' .
+'\x{8A65}\x{8A66}\x{8A67}\x{8A68}\x{8A69}\x{8A6A}\x{8A6B}\x{8A6C}\x{8A6D}' .
+'\x{8A6E}\x{8A6F}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A74}\x{8A75}\x{8A76}' .
+'\x{8A77}\x{8A79}\x{8A7A}\x{8A7B}\x{8A7C}\x{8A7E}\x{8A7F}\x{8A80}\x{8A81}' .
+'\x{8A82}\x{8A83}\x{8A84}\x{8A85}\x{8A86}\x{8A87}\x{8A89}\x{8A8A}\x{8A8B}' .
+'\x{8A8C}\x{8A8D}\x{8A8E}\x{8A8F}\x{8A90}\x{8A91}\x{8A92}\x{8A93}\x{8A94}' .
+'\x{8A95}\x{8A96}\x{8A97}\x{8A98}\x{8A99}\x{8A9A}\x{8A9B}\x{8A9C}\x{8A9D}' .
+'\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA2}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA7}' .
+'\x{8AA8}\x{8AA9}\x{8AAA}\x{8AAB}\x{8AAC}\x{8AAE}\x{8AB0}\x{8AB1}\x{8AB2}' .
+'\x{8AB3}\x{8AB4}\x{8AB5}\x{8AB6}\x{8AB8}\x{8AB9}\x{8ABA}\x{8ABB}\x{8ABC}' .
+'\x{8ABD}\x{8ABE}\x{8ABF}\x{8AC0}\x{8AC1}\x{8AC2}\x{8AC3}\x{8AC4}\x{8AC5}' .
+'\x{8AC6}\x{8AC7}\x{8AC8}\x{8AC9}\x{8ACA}\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACE}' .
+'\x{8ACF}\x{8AD1}\x{8AD2}\x{8AD3}\x{8AD4}\x{8AD5}\x{8AD6}\x{8AD7}\x{8AD8}' .
+'\x{8AD9}\x{8ADA}\x{8ADB}\x{8ADC}\x{8ADD}\x{8ADE}\x{8ADF}\x{8AE0}\x{8AE1}' .
+'\x{8AE2}\x{8AE3}\x{8AE4}\x{8AE5}\x{8AE6}\x{8AE7}\x{8AE8}\x{8AE9}\x{8AEA}' .
+'\x{8AEB}\x{8AED}\x{8AEE}\x{8AEF}\x{8AF0}\x{8AF1}\x{8AF2}\x{8AF3}\x{8AF4}' .
+'\x{8AF5}\x{8AF6}\x{8AF7}\x{8AF8}\x{8AF9}\x{8AFA}\x{8AFB}\x{8AFC}\x{8AFD}' .
+'\x{8AFE}\x{8AFF}\x{8B00}\x{8B01}\x{8B02}\x{8B03}\x{8B04}\x{8B05}\x{8B06}' .
+'\x{8B07}\x{8B08}\x{8B09}\x{8B0A}\x{8B0B}\x{8B0D}\x{8B0E}\x{8B0F}\x{8B10}' .
+'\x{8B11}\x{8B12}\x{8B13}\x{8B14}\x{8B15}\x{8B16}\x{8B17}\x{8B18}\x{8B19}' .
+'\x{8B1A}\x{8B1B}\x{8B1C}\x{8B1D}\x{8B1E}\x{8B1F}\x{8B20}\x{8B21}\x{8B22}' .
+'\x{8B23}\x{8B24}\x{8B25}\x{8B26}\x{8B27}\x{8B28}\x{8B2A}\x{8B2B}\x{8B2C}' .
+'\x{8B2D}\x{8B2E}\x{8B2F}\x{8B30}\x{8B31}\x{8B33}\x{8B34}\x{8B35}\x{8B36}' .
+'\x{8B37}\x{8B39}\x{8B3A}\x{8B3B}\x{8B3C}\x{8B3D}\x{8B3E}\x{8B40}\x{8B41}' .
+'\x{8B42}\x{8B43}\x{8B44}\x{8B45}\x{8B46}\x{8B47}\x{8B48}\x{8B49}\x{8B4A}' .
+'\x{8B4B}\x{8B4C}\x{8B4D}\x{8B4E}\x{8B4F}\x{8B50}\x{8B51}\x{8B52}\x{8B53}' .
+'\x{8B54}\x{8B55}\x{8B56}\x{8B57}\x{8B58}\x{8B59}\x{8B5A}\x{8B5B}\x{8B5C}' .
+'\x{8B5D}\x{8B5E}\x{8B5F}\x{8B60}\x{8B63}\x{8B64}\x{8B65}\x{8B66}\x{8B67}' .
+'\x{8B68}\x{8B6A}\x{8B6B}\x{8B6C}\x{8B6D}\x{8B6E}\x{8B6F}\x{8B70}\x{8B71}' .
+'\x{8B73}\x{8B74}\x{8B76}\x{8B77}\x{8B78}\x{8B79}\x{8B7A}\x{8B7B}\x{8B7D}' .
+'\x{8B7E}\x{8B7F}\x{8B80}\x{8B82}\x{8B83}\x{8B84}\x{8B85}\x{8B86}\x{8B88}' .
+'\x{8B89}\x{8B8A}\x{8B8B}\x{8B8C}\x{8B8E}\x{8B90}\x{8B91}\x{8B92}\x{8B93}' .
+'\x{8B94}\x{8B95}\x{8B96}\x{8B97}\x{8B98}\x{8B99}\x{8B9A}\x{8B9C}\x{8B9D}' .
+'\x{8B9E}\x{8B9F}\x{8BA0}\x{8BA1}\x{8BA2}\x{8BA3}\x{8BA4}\x{8BA5}\x{8BA6}' .
+'\x{8BA7}\x{8BA8}\x{8BA9}\x{8BAA}\x{8BAB}\x{8BAC}\x{8BAD}\x{8BAE}\x{8BAF}' .
+'\x{8BB0}\x{8BB1}\x{8BB2}\x{8BB3}\x{8BB4}\x{8BB5}\x{8BB6}\x{8BB7}\x{8BB8}' .
+'\x{8BB9}\x{8BBA}\x{8BBB}\x{8BBC}\x{8BBD}\x{8BBE}\x{8BBF}\x{8BC0}\x{8BC1}' .
+'\x{8BC2}\x{8BC3}\x{8BC4}\x{8BC5}\x{8BC6}\x{8BC7}\x{8BC8}\x{8BC9}\x{8BCA}' .
+'\x{8BCB}\x{8BCC}\x{8BCD}\x{8BCE}\x{8BCF}\x{8BD0}\x{8BD1}\x{8BD2}\x{8BD3}' .
+'\x{8BD4}\x{8BD5}\x{8BD6}\x{8BD7}\x{8BD8}\x{8BD9}\x{8BDA}\x{8BDB}\x{8BDC}' .
+'\x{8BDD}\x{8BDE}\x{8BDF}\x{8BE0}\x{8BE1}\x{8BE2}\x{8BE3}\x{8BE4}\x{8BE5}' .
+'\x{8BE6}\x{8BE7}\x{8BE8}\x{8BE9}\x{8BEA}\x{8BEB}\x{8BEC}\x{8BED}\x{8BEE}' .
+'\x{8BEF}\x{8BF0}\x{8BF1}\x{8BF2}\x{8BF3}\x{8BF4}\x{8BF5}\x{8BF6}\x{8BF7}' .
+'\x{8BF8}\x{8BF9}\x{8BFA}\x{8BFB}\x{8BFC}\x{8BFD}\x{8BFE}\x{8BFF}\x{8C00}' .
+'\x{8C01}\x{8C02}\x{8C03}\x{8C04}\x{8C05}\x{8C06}\x{8C07}\x{8C08}\x{8C09}' .
+'\x{8C0A}\x{8C0B}\x{8C0C}\x{8C0D}\x{8C0E}\x{8C0F}\x{8C10}\x{8C11}\x{8C12}' .
+'\x{8C13}\x{8C14}\x{8C15}\x{8C16}\x{8C17}\x{8C18}\x{8C19}\x{8C1A}\x{8C1B}' .
+'\x{8C1C}\x{8C1D}\x{8C1E}\x{8C1F}\x{8C20}\x{8C21}\x{8C22}\x{8C23}\x{8C24}' .
+'\x{8C25}\x{8C26}\x{8C27}\x{8C28}\x{8C29}\x{8C2A}\x{8C2B}\x{8C2C}\x{8C2D}' .
+'\x{8C2E}\x{8C2F}\x{8C30}\x{8C31}\x{8C32}\x{8C33}\x{8C34}\x{8C35}\x{8C36}' .
+'\x{8C37}\x{8C39}\x{8C3A}\x{8C3B}\x{8C3C}\x{8C3D}\x{8C3E}\x{8C3F}\x{8C41}' .
+'\x{8C42}\x{8C43}\x{8C45}\x{8C46}\x{8C47}\x{8C48}\x{8C49}\x{8C4A}\x{8C4B}' .
+'\x{8C4C}\x{8C4D}\x{8C4E}\x{8C4F}\x{8C50}\x{8C54}\x{8C55}\x{8C56}\x{8C57}' .
+'\x{8C59}\x{8C5A}\x{8C5B}\x{8C5C}\x{8C5D}\x{8C5E}\x{8C5F}\x{8C60}\x{8C61}' .
+'\x{8C62}\x{8C63}\x{8C64}\x{8C65}\x{8C66}\x{8C67}\x{8C68}\x{8C69}\x{8C6A}' .
+'\x{8C6B}\x{8C6C}\x{8C6D}\x{8C6E}\x{8C6F}\x{8C70}\x{8C71}\x{8C72}\x{8C73}' .
+'\x{8C75}\x{8C76}\x{8C77}\x{8C78}\x{8C79}\x{8C7A}\x{8C7B}\x{8C7D}\x{8C7E}' .
+'\x{8C80}\x{8C81}\x{8C82}\x{8C84}\x{8C85}\x{8C86}\x{8C88}\x{8C89}\x{8C8A}' .
+'\x{8C8C}\x{8C8D}\x{8C8F}\x{8C90}\x{8C91}\x{8C92}\x{8C93}\x{8C94}\x{8C95}' .
+'\x{8C96}\x{8C97}\x{8C98}\x{8C99}\x{8C9A}\x{8C9C}\x{8C9D}\x{8C9E}\x{8C9F}' .
+'\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA3}\x{8CA4}\x{8CA5}\x{8CA7}\x{8CA8}\x{8CA9}' .
+'\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}\x{8CB1}\x{8CB2}' .
+'\x{8CB3}\x{8CB4}\x{8CB5}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CB9}\x{8CBA}\x{8CBB}' .
+'\x{8CBC}\x{8CBD}\x{8CBE}\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}' .
+'\x{8CC5}\x{8CC6}\x{8CC7}\x{8CC8}\x{8CC9}\x{8CCA}\x{8CCC}\x{8CCE}\x{8CCF}' .
+'\x{8CD0}\x{8CD1}\x{8CD2}\x{8CD3}\x{8CD4}\x{8CD5}\x{8CD7}\x{8CD9}\x{8CDA}' .
+'\x{8CDB}\x{8CDC}\x{8CDD}\x{8CDE}\x{8CDF}\x{8CE0}\x{8CE1}\x{8CE2}\x{8CE3}' .
+'\x{8CE4}\x{8CE5}\x{8CE6}\x{8CE7}\x{8CE8}\x{8CEA}\x{8CEB}\x{8CEC}\x{8CED}' .
+'\x{8CEE}\x{8CEF}\x{8CF0}\x{8CF1}\x{8CF2}\x{8CF3}\x{8CF4}\x{8CF5}\x{8CF6}' .
+'\x{8CF8}\x{8CF9}\x{8CFA}\x{8CFB}\x{8CFC}\x{8CFD}\x{8CFE}\x{8CFF}\x{8D00}' .
+'\x{8D02}\x{8D03}\x{8D04}\x{8D05}\x{8D06}\x{8D07}\x{8D08}\x{8D09}\x{8D0A}' .
+'\x{8D0B}\x{8D0C}\x{8D0D}\x{8D0E}\x{8D0F}\x{8D10}\x{8D13}\x{8D14}\x{8D15}' .
+'\x{8D16}\x{8D17}\x{8D18}\x{8D19}\x{8D1A}\x{8D1B}\x{8D1C}\x{8D1D}\x{8D1E}' .
+'\x{8D1F}\x{8D20}\x{8D21}\x{8D22}\x{8D23}\x{8D24}\x{8D25}\x{8D26}\x{8D27}' .
+'\x{8D28}\x{8D29}\x{8D2A}\x{8D2B}\x{8D2C}\x{8D2D}\x{8D2E}\x{8D2F}\x{8D30}' .
+'\x{8D31}\x{8D32}\x{8D33}\x{8D34}\x{8D35}\x{8D36}\x{8D37}\x{8D38}\x{8D39}' .
+'\x{8D3A}\x{8D3B}\x{8D3C}\x{8D3D}\x{8D3E}\x{8D3F}\x{8D40}\x{8D41}\x{8D42}' .
+'\x{8D43}\x{8D44}\x{8D45}\x{8D46}\x{8D47}\x{8D48}\x{8D49}\x{8D4A}\x{8D4B}' .
+'\x{8D4C}\x{8D4D}\x{8D4E}\x{8D4F}\x{8D50}\x{8D51}\x{8D52}\x{8D53}\x{8D54}' .
+'\x{8D55}\x{8D56}\x{8D57}\x{8D58}\x{8D59}\x{8D5A}\x{8D5B}\x{8D5C}\x{8D5D}' .
+'\x{8D5E}\x{8D5F}\x{8D60}\x{8D61}\x{8D62}\x{8D63}\x{8D64}\x{8D65}\x{8D66}' .
+'\x{8D67}\x{8D68}\x{8D69}\x{8D6A}\x{8D6B}\x{8D6C}\x{8D6D}\x{8D6E}\x{8D6F}' .
+'\x{8D70}\x{8D71}\x{8D72}\x{8D73}\x{8D74}\x{8D75}\x{8D76}\x{8D77}\x{8D78}' .
+'\x{8D79}\x{8D7A}\x{8D7B}\x{8D7D}\x{8D7E}\x{8D7F}\x{8D80}\x{8D81}\x{8D82}' .
+'\x{8D83}\x{8D84}\x{8D85}\x{8D86}\x{8D87}\x{8D88}\x{8D89}\x{8D8A}\x{8D8B}' .
+'\x{8D8C}\x{8D8D}\x{8D8E}\x{8D8F}\x{8D90}\x{8D91}\x{8D92}\x{8D93}\x{8D94}' .
+'\x{8D95}\x{8D96}\x{8D97}\x{8D98}\x{8D99}\x{8D9A}\x{8D9B}\x{8D9C}\x{8D9D}' .
+'\x{8D9E}\x{8D9F}\x{8DA0}\x{8DA1}\x{8DA2}\x{8DA3}\x{8DA4}\x{8DA5}\x{8DA7}' .
+'\x{8DA8}\x{8DA9}\x{8DAA}\x{8DAB}\x{8DAC}\x{8DAD}\x{8DAE}\x{8DAF}\x{8DB0}' .
+'\x{8DB1}\x{8DB2}\x{8DB3}\x{8DB4}\x{8DB5}\x{8DB6}\x{8DB7}\x{8DB8}\x{8DB9}' .
+'\x{8DBA}\x{8DBB}\x{8DBC}\x{8DBD}\x{8DBE}\x{8DBF}\x{8DC1}\x{8DC2}\x{8DC3}' .
+'\x{8DC4}\x{8DC5}\x{8DC6}\x{8DC7}\x{8DC8}\x{8DC9}\x{8DCA}\x{8DCB}\x{8DCC}' .
+'\x{8DCD}\x{8DCE}\x{8DCF}\x{8DD0}\x{8DD1}\x{8DD2}\x{8DD3}\x{8DD4}\x{8DD5}' .
+'\x{8DD6}\x{8DD7}\x{8DD8}\x{8DD9}\x{8DDA}\x{8DDB}\x{8DDC}\x{8DDD}\x{8DDE}' .
+'\x{8DDF}\x{8DE0}\x{8DE1}\x{8DE2}\x{8DE3}\x{8DE4}\x{8DE6}\x{8DE7}\x{8DE8}' .
+'\x{8DE9}\x{8DEA}\x{8DEB}\x{8DEC}\x{8DED}\x{8DEE}\x{8DEF}\x{8DF0}\x{8DF1}' .
+'\x{8DF2}\x{8DF3}\x{8DF4}\x{8DF5}\x{8DF6}\x{8DF7}\x{8DF8}\x{8DF9}\x{8DFA}' .
+'\x{8DFB}\x{8DFC}\x{8DFD}\x{8DFE}\x{8DFF}\x{8E00}\x{8E02}\x{8E03}\x{8E04}' .
+'\x{8E05}\x{8E06}\x{8E07}\x{8E08}\x{8E09}\x{8E0A}\x{8E0C}\x{8E0D}\x{8E0E}' .
+'\x{8E0F}\x{8E10}\x{8E11}\x{8E12}\x{8E13}\x{8E14}\x{8E15}\x{8E16}\x{8E17}' .
+'\x{8E18}\x{8E19}\x{8E1A}\x{8E1B}\x{8E1C}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E20}' .
+'\x{8E21}\x{8E22}\x{8E23}\x{8E24}\x{8E25}\x{8E26}\x{8E27}\x{8E28}\x{8E29}' .
+'\x{8E2A}\x{8E2B}\x{8E2C}\x{8E2D}\x{8E2E}\x{8E2F}\x{8E30}\x{8E31}\x{8E33}' .
+'\x{8E34}\x{8E35}\x{8E36}\x{8E37}\x{8E38}\x{8E39}\x{8E3A}\x{8E3B}\x{8E3C}' .
+'\x{8E3D}\x{8E3E}\x{8E3F}\x{8E40}\x{8E41}\x{8E42}\x{8E43}\x{8E44}\x{8E45}' .
+'\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4B}\x{8E4C}\x{8E4D}\x{8E4E}\x{8E50}' .
+'\x{8E51}\x{8E52}\x{8E53}\x{8E54}\x{8E55}\x{8E56}\x{8E57}\x{8E58}\x{8E59}' .
+'\x{8E5A}\x{8E5B}\x{8E5C}\x{8E5D}\x{8E5E}\x{8E5F}\x{8E60}\x{8E61}\x{8E62}' .
+'\x{8E63}\x{8E64}\x{8E65}\x{8E66}\x{8E67}\x{8E68}\x{8E69}\x{8E6A}\x{8E6B}' .
+'\x{8E6C}\x{8E6D}\x{8E6F}\x{8E70}\x{8E71}\x{8E72}\x{8E73}\x{8E74}\x{8E76}' .
+'\x{8E78}\x{8E7A}\x{8E7B}\x{8E7C}\x{8E7D}\x{8E7E}\x{8E7F}\x{8E80}\x{8E81}' .
+'\x{8E82}\x{8E83}\x{8E84}\x{8E85}\x{8E86}\x{8E87}\x{8E88}\x{8E89}\x{8E8A}' .
+'\x{8E8B}\x{8E8C}\x{8E8D}\x{8E8E}\x{8E8F}\x{8E90}\x{8E91}\x{8E92}\x{8E93}' .
+'\x{8E94}\x{8E95}\x{8E96}\x{8E97}\x{8E98}\x{8E9A}\x{8E9C}\x{8E9D}\x{8E9E}' .
+'\x{8E9F}\x{8EA0}\x{8EA1}\x{8EA3}\x{8EA4}\x{8EA5}\x{8EA6}\x{8EA7}\x{8EA8}' .
+'\x{8EA9}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAD}\x{8EAE}\x{8EAF}\x{8EB0}\x{8EB1}' .
+'\x{8EB2}\x{8EB4}\x{8EB5}\x{8EB8}\x{8EB9}\x{8EBA}\x{8EBB}\x{8EBC}\x{8EBD}' .
+'\x{8EBE}\x{8EBF}\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}\x{8EC6}\x{8EC7}\x{8EC8}' .
+'\x{8EC9}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ECE}\x{8ECF}\x{8ED0}\x{8ED1}' .
+'\x{8ED2}\x{8ED3}\x{8ED4}\x{8ED5}\x{8ED6}\x{8ED7}\x{8ED8}\x{8EDA}\x{8EDB}' .
+'\x{8EDC}\x{8EDD}\x{8EDE}\x{8EDF}\x{8EE0}\x{8EE1}\x{8EE4}\x{8EE5}\x{8EE6}' .
+'\x{8EE7}\x{8EE8}\x{8EE9}\x{8EEA}\x{8EEB}\x{8EEC}\x{8EED}\x{8EEE}\x{8EEF}' .
+'\x{8EF1}\x{8EF2}\x{8EF3}\x{8EF4}\x{8EF5}\x{8EF6}\x{8EF7}\x{8EF8}\x{8EF9}' .
+'\x{8EFA}\x{8EFB}\x{8EFC}\x{8EFD}\x{8EFE}\x{8EFF}\x{8F00}\x{8F01}\x{8F02}' .
+'\x{8F03}\x{8F04}\x{8F05}\x{8F06}\x{8F07}\x{8F08}\x{8F09}\x{8F0A}\x{8F0B}' .
+'\x{8F0D}\x{8F0E}\x{8F10}\x{8F11}\x{8F12}\x{8F13}\x{8F14}\x{8F15}\x{8F16}' .
+'\x{8F17}\x{8F18}\x{8F1A}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1E}\x{8F1F}\x{8F20}' .
+'\x{8F21}\x{8F22}\x{8F23}\x{8F24}\x{8F25}\x{8F26}\x{8F27}\x{8F28}\x{8F29}' .
+'\x{8F2A}\x{8F2B}\x{8F2C}\x{8F2E}\x{8F2F}\x{8F30}\x{8F31}\x{8F32}\x{8F33}' .
+'\x{8F34}\x{8F35}\x{8F36}\x{8F37}\x{8F38}\x{8F39}\x{8F3B}\x{8F3C}\x{8F3D}' .
+'\x{8F3E}\x{8F3F}\x{8F40}\x{8F42}\x{8F43}\x{8F44}\x{8F45}\x{8F46}\x{8F47}' .
+'\x{8F48}\x{8F49}\x{8F4A}\x{8F4B}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F4F}\x{8F50}' .
+'\x{8F51}\x{8F52}\x{8F53}\x{8F54}\x{8F55}\x{8F56}\x{8F57}\x{8F58}\x{8F59}' .
+'\x{8F5A}\x{8F5B}\x{8F5D}\x{8F5E}\x{8F5F}\x{8F60}\x{8F61}\x{8F62}\x{8F63}' .
+'\x{8F64}\x{8F65}\x{8F66}\x{8F67}\x{8F68}\x{8F69}\x{8F6A}\x{8F6B}\x{8F6C}' .
+'\x{8F6D}\x{8F6E}\x{8F6F}\x{8F70}\x{8F71}\x{8F72}\x{8F73}\x{8F74}\x{8F75}' .
+'\x{8F76}\x{8F77}\x{8F78}\x{8F79}\x{8F7A}\x{8F7B}\x{8F7C}\x{8F7D}\x{8F7E}' .
+'\x{8F7F}\x{8F80}\x{8F81}\x{8F82}\x{8F83}\x{8F84}\x{8F85}\x{8F86}\x{8F87}' .
+'\x{8F88}\x{8F89}\x{8F8A}\x{8F8B}\x{8F8C}\x{8F8D}\x{8F8E}\x{8F8F}\x{8F90}' .
+'\x{8F91}\x{8F92}\x{8F93}\x{8F94}\x{8F95}\x{8F96}\x{8F97}\x{8F98}\x{8F99}' .
+'\x{8F9A}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA0}\x{8FA1}\x{8FA2}\x{8FA3}' .
+'\x{8FA5}\x{8FA6}\x{8FA7}\x{8FA8}\x{8FA9}\x{8FAA}\x{8FAB}\x{8FAC}\x{8FAD}' .
+'\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB4}\x{8FB5}\x{8FB6}\x{8FB7}' .
+'\x{8FB8}\x{8FB9}\x{8FBB}\x{8FBC}\x{8FBD}\x{8FBE}\x{8FBF}\x{8FC0}\x{8FC1}' .
+'\x{8FC2}\x{8FC4}\x{8FC5}\x{8FC6}\x{8FC7}\x{8FC8}\x{8FC9}\x{8FCB}\x{8FCC}' .
+'\x{8FCD}\x{8FCE}\x{8FCF}\x{8FD0}\x{8FD1}\x{8FD2}\x{8FD3}\x{8FD4}\x{8FD5}' .
+'\x{8FD6}\x{8FD7}\x{8FD8}\x{8FD9}\x{8FDA}\x{8FDB}\x{8FDC}\x{8FDD}\x{8FDE}' .
+'\x{8FDF}\x{8FE0}\x{8FE1}\x{8FE2}\x{8FE3}\x{8FE4}\x{8FE5}\x{8FE6}\x{8FE8}' .
+'\x{8FE9}\x{8FEA}\x{8FEB}\x{8FEC}\x{8FED}\x{8FEE}\x{8FEF}\x{8FF0}\x{8FF1}' .
+'\x{8FF2}\x{8FF3}\x{8FF4}\x{8FF5}\x{8FF6}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}' .
+'\x{8FFB}\x{8FFC}\x{8FFD}\x{8FFE}\x{8FFF}\x{9000}\x{9001}\x{9002}\x{9003}' .
+'\x{9004}\x{9005}\x{9006}\x{9007}\x{9008}\x{9009}\x{900A}\x{900B}\x{900C}' .
+'\x{900D}\x{900F}\x{9010}\x{9011}\x{9012}\x{9013}\x{9014}\x{9015}\x{9016}' .
+'\x{9017}\x{9018}\x{9019}\x{901A}\x{901B}\x{901C}\x{901D}\x{901E}\x{901F}' .
+'\x{9020}\x{9021}\x{9022}\x{9023}\x{9024}\x{9025}\x{9026}\x{9027}\x{9028}' .
+'\x{9029}\x{902B}\x{902D}\x{902E}\x{902F}\x{9030}\x{9031}\x{9032}\x{9033}' .
+'\x{9034}\x{9035}\x{9036}\x{9038}\x{903A}\x{903B}\x{903C}\x{903D}\x{903E}' .
+'\x{903F}\x{9041}\x{9042}\x{9043}\x{9044}\x{9045}\x{9047}\x{9048}\x{9049}' .
+'\x{904A}\x{904B}\x{904C}\x{904D}\x{904E}\x{904F}\x{9050}\x{9051}\x{9052}' .
+'\x{9053}\x{9054}\x{9055}\x{9056}\x{9057}\x{9058}\x{9059}\x{905A}\x{905B}' .
+'\x{905C}\x{905D}\x{905E}\x{905F}\x{9060}\x{9061}\x{9062}\x{9063}\x{9064}' .
+'\x{9065}\x{9066}\x{9067}\x{9068}\x{9069}\x{906A}\x{906B}\x{906C}\x{906D}' .
+'\x{906E}\x{906F}\x{9070}\x{9071}\x{9072}\x{9073}\x{9074}\x{9075}\x{9076}' .
+'\x{9077}\x{9078}\x{9079}\x{907A}\x{907B}\x{907C}\x{907D}\x{907E}\x{907F}' .
+'\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9085}\x{9086}\x{9087}\x{9088}' .
+'\x{9089}\x{908A}\x{908B}\x{908C}\x{908D}\x{908E}\x{908F}\x{9090}\x{9091}' .
+'\x{9092}\x{9093}\x{9094}\x{9095}\x{9096}\x{9097}\x{9098}\x{9099}\x{909A}' .
+'\x{909B}\x{909C}\x{909D}\x{909E}\x{909F}\x{90A0}\x{90A1}\x{90A2}\x{90A3}' .
+'\x{90A4}\x{90A5}\x{90A6}\x{90A7}\x{90A8}\x{90A9}\x{90AA}\x{90AC}\x{90AD}' .
+'\x{90AE}\x{90AF}\x{90B0}\x{90B1}\x{90B2}\x{90B3}\x{90B4}\x{90B5}\x{90B6}' .
+'\x{90B7}\x{90B8}\x{90B9}\x{90BA}\x{90BB}\x{90BC}\x{90BD}\x{90BE}\x{90BF}' .
+'\x{90C0}\x{90C1}\x{90C2}\x{90C3}\x{90C4}\x{90C5}\x{90C6}\x{90C7}\x{90C8}' .
+'\x{90C9}\x{90CA}\x{90CB}\x{90CE}\x{90CF}\x{90D0}\x{90D1}\x{90D3}\x{90D4}' .
+'\x{90D5}\x{90D6}\x{90D7}\x{90D8}\x{90D9}\x{90DA}\x{90DB}\x{90DC}\x{90DD}' .
+'\x{90DE}\x{90DF}\x{90E0}\x{90E1}\x{90E2}\x{90E3}\x{90E4}\x{90E5}\x{90E6}' .
+'\x{90E7}\x{90E8}\x{90E9}\x{90EA}\x{90EB}\x{90EC}\x{90ED}\x{90EE}\x{90EF}' .
+'\x{90F0}\x{90F1}\x{90F2}\x{90F3}\x{90F4}\x{90F5}\x{90F7}\x{90F8}\x{90F9}' .
+'\x{90FA}\x{90FB}\x{90FC}\x{90FD}\x{90FE}\x{90FF}\x{9100}\x{9101}\x{9102}' .
+'\x{9103}\x{9104}\x{9105}\x{9106}\x{9107}\x{9108}\x{9109}\x{910B}\x{910C}' .
+'\x{910D}\x{910E}\x{910F}\x{9110}\x{9111}\x{9112}\x{9113}\x{9114}\x{9115}' .
+'\x{9116}\x{9117}\x{9118}\x{9119}\x{911A}\x{911B}\x{911C}\x{911D}\x{911E}' .
+'\x{911F}\x{9120}\x{9121}\x{9122}\x{9123}\x{9124}\x{9125}\x{9126}\x{9127}' .
+'\x{9128}\x{9129}\x{912A}\x{912B}\x{912C}\x{912D}\x{912E}\x{912F}\x{9130}' .
+'\x{9131}\x{9132}\x{9133}\x{9134}\x{9135}\x{9136}\x{9137}\x{9138}\x{9139}' .
+'\x{913A}\x{913B}\x{913E}\x{913F}\x{9140}\x{9141}\x{9142}\x{9143}\x{9144}' .
+'\x{9145}\x{9146}\x{9147}\x{9148}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}' .
+'\x{914E}\x{914F}\x{9150}\x{9151}\x{9152}\x{9153}\x{9154}\x{9155}\x{9156}' .
+'\x{9157}\x{9158}\x{915A}\x{915B}\x{915C}\x{915D}\x{915E}\x{915F}\x{9160}' .
+'\x{9161}\x{9162}\x{9163}\x{9164}\x{9165}\x{9166}\x{9167}\x{9168}\x{9169}' .
+'\x{916A}\x{916B}\x{916C}\x{916D}\x{916E}\x{916F}\x{9170}\x{9171}\x{9172}' .
+'\x{9173}\x{9174}\x{9175}\x{9176}\x{9177}\x{9178}\x{9179}\x{917A}\x{917C}' .
+'\x{917D}\x{917E}\x{917F}\x{9180}\x{9181}\x{9182}\x{9183}\x{9184}\x{9185}' .
+'\x{9186}\x{9187}\x{9188}\x{9189}\x{918A}\x{918B}\x{918C}\x{918D}\x{918E}' .
+'\x{918F}\x{9190}\x{9191}\x{9192}\x{9193}\x{9194}\x{9196}\x{9199}\x{919A}' .
+'\x{919B}\x{919C}\x{919D}\x{919E}\x{919F}\x{91A0}\x{91A1}\x{91A2}\x{91A3}' .
+'\x{91A5}\x{91A6}\x{91A7}\x{91A8}\x{91AA}\x{91AB}\x{91AC}\x{91AD}\x{91AE}' .
+'\x{91AF}\x{91B0}\x{91B1}\x{91B2}\x{91B3}\x{91B4}\x{91B5}\x{91B6}\x{91B7}' .
+'\x{91B9}\x{91BA}\x{91BB}\x{91BC}\x{91BD}\x{91BE}\x{91C0}\x{91C1}\x{91C2}' .
+'\x{91C3}\x{91C5}\x{91C6}\x{91C7}\x{91C9}\x{91CA}\x{91CB}\x{91CC}\x{91CD}' .
+'\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D2}\x{91D3}\x{91D4}\x{91D5}\x{91D7}' .
+'\x{91D8}\x{91D9}\x{91DA}\x{91DB}\x{91DC}\x{91DD}\x{91DE}\x{91DF}\x{91E2}' .
+'\x{91E3}\x{91E4}\x{91E5}\x{91E6}\x{91E7}\x{91E8}\x{91E9}\x{91EA}\x{91EB}' .
+'\x{91EC}\x{91ED}\x{91EE}\x{91F0}\x{91F1}\x{91F2}\x{91F3}\x{91F4}\x{91F5}' .
+'\x{91F7}\x{91F8}\x{91F9}\x{91FA}\x{91FB}\x{91FD}\x{91FE}\x{91FF}\x{9200}' .
+'\x{9201}\x{9202}\x{9203}\x{9204}\x{9205}\x{9206}\x{9207}\x{9208}\x{9209}' .
+'\x{920A}\x{920B}\x{920C}\x{920D}\x{920E}\x{920F}\x{9210}\x{9211}\x{9212}' .
+'\x{9214}\x{9215}\x{9216}\x{9217}\x{9218}\x{9219}\x{921A}\x{921B}\x{921C}' .
+'\x{921D}\x{921E}\x{9220}\x{9221}\x{9223}\x{9224}\x{9225}\x{9226}\x{9227}' .
+'\x{9228}\x{9229}\x{922A}\x{922B}\x{922D}\x{922E}\x{922F}\x{9230}\x{9231}' .
+'\x{9232}\x{9233}\x{9234}\x{9235}\x{9236}\x{9237}\x{9238}\x{9239}\x{923A}' .
+'\x{923B}\x{923C}\x{923D}\x{923E}\x{923F}\x{9240}\x{9241}\x{9242}\x{9245}' .
+'\x{9246}\x{9247}\x{9248}\x{9249}\x{924A}\x{924B}\x{924C}\x{924D}\x{924E}' .
+'\x{924F}\x{9250}\x{9251}\x{9252}\x{9253}\x{9254}\x{9255}\x{9256}\x{9257}' .
+'\x{9258}\x{9259}\x{925A}\x{925B}\x{925C}\x{925D}\x{925E}\x{925F}\x{9260}' .
+'\x{9261}\x{9262}\x{9263}\x{9264}\x{9265}\x{9266}\x{9267}\x{9268}\x{926B}' .
+'\x{926C}\x{926D}\x{926E}\x{926F}\x{9270}\x{9272}\x{9273}\x{9274}\x{9275}' .
+'\x{9276}\x{9277}\x{9278}\x{9279}\x{927A}\x{927B}\x{927C}\x{927D}\x{927E}' .
+'\x{927F}\x{9280}\x{9282}\x{9283}\x{9285}\x{9286}\x{9287}\x{9288}\x{9289}' .
+'\x{928A}\x{928B}\x{928C}\x{928D}\x{928E}\x{928F}\x{9290}\x{9291}\x{9292}' .
+'\x{9293}\x{9294}\x{9295}\x{9296}\x{9297}\x{9298}\x{9299}\x{929A}\x{929B}' .
+'\x{929C}\x{929D}\x{929F}\x{92A0}\x{92A1}\x{92A2}\x{92A3}\x{92A4}\x{92A5}' .
+'\x{92A6}\x{92A7}\x{92A8}\x{92A9}\x{92AA}\x{92AB}\x{92AC}\x{92AD}\x{92AE}' .
+'\x{92AF}\x{92B0}\x{92B1}\x{92B2}\x{92B3}\x{92B4}\x{92B5}\x{92B6}\x{92B7}' .
+'\x{92B8}\x{92B9}\x{92BA}\x{92BB}\x{92BC}\x{92BE}\x{92BF}\x{92C0}\x{92C1}' .
+'\x{92C2}\x{92C3}\x{92C4}\x{92C5}\x{92C6}\x{92C7}\x{92C8}\x{92C9}\x{92CA}' .
+'\x{92CB}\x{92CC}\x{92CD}\x{92CE}\x{92CF}\x{92D0}\x{92D1}\x{92D2}\x{92D3}' .
+'\x{92D5}\x{92D6}\x{92D7}\x{92D8}\x{92D9}\x{92DA}\x{92DC}\x{92DD}\x{92DE}' .
+'\x{92DF}\x{92E0}\x{92E1}\x{92E3}\x{92E4}\x{92E5}\x{92E6}\x{92E7}\x{92E8}' .
+'\x{92E9}\x{92EA}\x{92EB}\x{92EC}\x{92ED}\x{92EE}\x{92EF}\x{92F0}\x{92F1}' .
+'\x{92F2}\x{92F3}\x{92F4}\x{92F5}\x{92F6}\x{92F7}\x{92F8}\x{92F9}\x{92FA}' .
+'\x{92FB}\x{92FC}\x{92FD}\x{92FE}\x{92FF}\x{9300}\x{9301}\x{9302}\x{9303}' .
+'\x{9304}\x{9305}\x{9306}\x{9307}\x{9308}\x{9309}\x{930A}\x{930B}\x{930C}' .
+'\x{930D}\x{930E}\x{930F}\x{9310}\x{9311}\x{9312}\x{9313}\x{9314}\x{9315}' .
+'\x{9316}\x{9317}\x{9318}\x{9319}\x{931A}\x{931B}\x{931D}\x{931E}\x{931F}' .
+'\x{9320}\x{9321}\x{9322}\x{9323}\x{9324}\x{9325}\x{9326}\x{9327}\x{9328}' .
+'\x{9329}\x{932A}\x{932B}\x{932D}\x{932E}\x{932F}\x{9332}\x{9333}\x{9334}' .
+'\x{9335}\x{9336}\x{9337}\x{9338}\x{9339}\x{933A}\x{933B}\x{933C}\x{933D}' .
+'\x{933E}\x{933F}\x{9340}\x{9341}\x{9342}\x{9343}\x{9344}\x{9345}\x{9346}' .
+'\x{9347}\x{9348}\x{9349}\x{934A}\x{934B}\x{934C}\x{934D}\x{934E}\x{934F}' .
+'\x{9350}\x{9351}\x{9352}\x{9353}\x{9354}\x{9355}\x{9356}\x{9357}\x{9358}' .
+'\x{9359}\x{935A}\x{935B}\x{935C}\x{935D}\x{935E}\x{935F}\x{9360}\x{9361}' .
+'\x{9363}\x{9364}\x{9365}\x{9366}\x{9367}\x{9369}\x{936A}\x{936C}\x{936D}' .
+'\x{936E}\x{9370}\x{9371}\x{9372}\x{9374}\x{9375}\x{9376}\x{9377}\x{9379}' .
+'\x{937A}\x{937B}\x{937C}\x{937D}\x{937E}\x{9380}\x{9382}\x{9383}\x{9384}' .
+'\x{9385}\x{9386}\x{9387}\x{9388}\x{9389}\x{938A}\x{938C}\x{938D}\x{938E}' .
+'\x{938F}\x{9390}\x{9391}\x{9392}\x{9393}\x{9394}\x{9395}\x{9396}\x{9397}' .
+'\x{9398}\x{9399}\x{939A}\x{939B}\x{939D}\x{939E}\x{939F}\x{93A1}\x{93A2}' .
+'\x{93A3}\x{93A4}\x{93A5}\x{93A6}\x{93A7}\x{93A8}\x{93A9}\x{93AA}\x{93AC}' .
+'\x{93AD}\x{93AE}\x{93AF}\x{93B0}\x{93B1}\x{93B2}\x{93B3}\x{93B4}\x{93B5}' .
+'\x{93B6}\x{93B7}\x{93B8}\x{93B9}\x{93BA}\x{93BC}\x{93BD}\x{93BE}\x{93BF}' .
+'\x{93C0}\x{93C1}\x{93C2}\x{93C3}\x{93C4}\x{93C5}\x{93C6}\x{93C7}\x{93C8}' .
+'\x{93C9}\x{93CA}\x{93CB}\x{93CC}\x{93CD}\x{93CE}\x{93CF}\x{93D0}\x{93D1}' .
+'\x{93D2}\x{93D3}\x{93D4}\x{93D5}\x{93D6}\x{93D7}\x{93D8}\x{93D9}\x{93DA}' .
+'\x{93DB}\x{93DC}\x{93DD}\x{93DE}\x{93DF}\x{93E1}\x{93E2}\x{93E3}\x{93E4}' .
+'\x{93E6}\x{93E7}\x{93E8}\x{93E9}\x{93EA}\x{93EB}\x{93EC}\x{93ED}\x{93EE}' .
+'\x{93EF}\x{93F0}\x{93F1}\x{93F2}\x{93F4}\x{93F5}\x{93F6}\x{93F7}\x{93F8}' .
+'\x{93F9}\x{93FA}\x{93FB}\x{93FC}\x{93FD}\x{93FE}\x{93FF}\x{9400}\x{9401}' .
+'\x{9403}\x{9404}\x{9405}\x{9406}\x{9407}\x{9408}\x{9409}\x{940A}\x{940B}' .
+'\x{940C}\x{940D}\x{940E}\x{940F}\x{9410}\x{9411}\x{9412}\x{9413}\x{9414}' .
+'\x{9415}\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}\x{9422}\x{9423}' .
+'\x{9425}\x{9426}\x{9427}\x{9428}\x{9429}\x{942A}\x{942B}\x{942C}\x{942D}' .
+'\x{942E}\x{942F}\x{9430}\x{9431}\x{9432}\x{9433}\x{9434}\x{9435}\x{9436}' .
+'\x{9437}\x{9438}\x{9439}\x{943A}\x{943B}\x{943C}\x{943D}\x{943E}\x{943F}' .
+'\x{9440}\x{9441}\x{9442}\x{9444}\x{9445}\x{9446}\x{9447}\x{9448}\x{9449}' .
+'\x{944A}\x{944B}\x{944C}\x{944D}\x{944F}\x{9450}\x{9451}\x{9452}\x{9453}' .
+'\x{9454}\x{9455}\x{9456}\x{9457}\x{9458}\x{9459}\x{945B}\x{945C}\x{945D}' .
+'\x{945E}\x{945F}\x{9460}\x{9461}\x{9462}\x{9463}\x{9464}\x{9465}\x{9466}' .
+'\x{9467}\x{9468}\x{9469}\x{946A}\x{946B}\x{946D}\x{946E}\x{946F}\x{9470}' .
+'\x{9471}\x{9472}\x{9473}\x{9474}\x{9475}\x{9476}\x{9477}\x{9478}\x{9479}' .
+'\x{947A}\x{947C}\x{947D}\x{947E}\x{947F}\x{9480}\x{9481}\x{9482}\x{9483}' .
+'\x{9484}\x{9485}\x{9486}\x{9487}\x{9488}\x{9489}\x{948A}\x{948B}\x{948C}' .
+'\x{948D}\x{948E}\x{948F}\x{9490}\x{9491}\x{9492}\x{9493}\x{9494}\x{9495}' .
+'\x{9496}\x{9497}\x{9498}\x{9499}\x{949A}\x{949B}\x{949C}\x{949D}\x{949E}' .
+'\x{949F}\x{94A0}\x{94A1}\x{94A2}\x{94A3}\x{94A4}\x{94A5}\x{94A6}\x{94A7}' .
+'\x{94A8}\x{94A9}\x{94AA}\x{94AB}\x{94AC}\x{94AD}\x{94AE}\x{94AF}\x{94B0}' .
+'\x{94B1}\x{94B2}\x{94B3}\x{94B4}\x{94B5}\x{94B6}\x{94B7}\x{94B8}\x{94B9}' .
+'\x{94BA}\x{94BB}\x{94BC}\x{94BD}\x{94BE}\x{94BF}\x{94C0}\x{94C1}\x{94C2}' .
+'\x{94C3}\x{94C4}\x{94C5}\x{94C6}\x{94C7}\x{94C8}\x{94C9}\x{94CA}\x{94CB}' .
+'\x{94CC}\x{94CD}\x{94CE}\x{94CF}\x{94D0}\x{94D1}\x{94D2}\x{94D3}\x{94D4}' .
+'\x{94D5}\x{94D6}\x{94D7}\x{94D8}\x{94D9}\x{94DA}\x{94DB}\x{94DC}\x{94DD}' .
+'\x{94DE}\x{94DF}\x{94E0}\x{94E1}\x{94E2}\x{94E3}\x{94E4}\x{94E5}\x{94E6}' .
+'\x{94E7}\x{94E8}\x{94E9}\x{94EA}\x{94EB}\x{94EC}\x{94ED}\x{94EE}\x{94EF}' .
+'\x{94F0}\x{94F1}\x{94F2}\x{94F3}\x{94F4}\x{94F5}\x{94F6}\x{94F7}\x{94F8}' .
+'\x{94F9}\x{94FA}\x{94FB}\x{94FC}\x{94FD}\x{94FE}\x{94FF}\x{9500}\x{9501}' .
+'\x{9502}\x{9503}\x{9504}\x{9505}\x{9506}\x{9507}\x{9508}\x{9509}\x{950A}' .
+'\x{950B}\x{950C}\x{950D}\x{950E}\x{950F}\x{9510}\x{9511}\x{9512}\x{9513}' .
+'\x{9514}\x{9515}\x{9516}\x{9517}\x{9518}\x{9519}\x{951A}\x{951B}\x{951C}' .
+'\x{951D}\x{951E}\x{951F}\x{9520}\x{9521}\x{9522}\x{9523}\x{9524}\x{9525}' .
+'\x{9526}\x{9527}\x{9528}\x{9529}\x{952A}\x{952B}\x{952C}\x{952D}\x{952E}' .
+'\x{952F}\x{9530}\x{9531}\x{9532}\x{9533}\x{9534}\x{9535}\x{9536}\x{9537}' .
+'\x{9538}\x{9539}\x{953A}\x{953B}\x{953C}\x{953D}\x{953E}\x{953F}\x{9540}' .
+'\x{9541}\x{9542}\x{9543}\x{9544}\x{9545}\x{9546}\x{9547}\x{9548}\x{9549}' .
+'\x{954A}\x{954B}\x{954C}\x{954D}\x{954E}\x{954F}\x{9550}\x{9551}\x{9552}' .
+'\x{9553}\x{9554}\x{9555}\x{9556}\x{9557}\x{9558}\x{9559}\x{955A}\x{955B}' .
+'\x{955C}\x{955D}\x{955E}\x{955F}\x{9560}\x{9561}\x{9562}\x{9563}\x{9564}' .
+'\x{9565}\x{9566}\x{9567}\x{9568}\x{9569}\x{956A}\x{956B}\x{956C}\x{956D}' .
+'\x{956E}\x{956F}\x{9570}\x{9571}\x{9572}\x{9573}\x{9574}\x{9575}\x{9576}' .
+'\x{9577}\x{957A}\x{957B}\x{957C}\x{957D}\x{957F}\x{9580}\x{9581}\x{9582}' .
+'\x{9583}\x{9584}\x{9586}\x{9587}\x{9588}\x{9589}\x{958A}\x{958B}\x{958C}' .
+'\x{958D}\x{958E}\x{958F}\x{9590}\x{9591}\x{9592}\x{9593}\x{9594}\x{9595}' .
+'\x{9596}\x{9598}\x{9599}\x{959A}\x{959B}\x{959C}\x{959D}\x{959E}\x{959F}' .
+'\x{95A1}\x{95A2}\x{95A3}\x{95A4}\x{95A5}\x{95A6}\x{95A7}\x{95A8}\x{95A9}' .
+'\x{95AA}\x{95AB}\x{95AC}\x{95AD}\x{95AE}\x{95AF}\x{95B0}\x{95B1}\x{95B2}' .
+'\x{95B5}\x{95B6}\x{95B7}\x{95B9}\x{95BA}\x{95BB}\x{95BC}\x{95BD}\x{95BE}' .
+'\x{95BF}\x{95C0}\x{95C2}\x{95C3}\x{95C4}\x{95C5}\x{95C6}\x{95C7}\x{95C8}' .
+'\x{95C9}\x{95CA}\x{95CB}\x{95CC}\x{95CD}\x{95CE}\x{95CF}\x{95D0}\x{95D1}' .
+'\x{95D2}\x{95D3}\x{95D4}\x{95D5}\x{95D6}\x{95D7}\x{95D8}\x{95DA}\x{95DB}' .
+'\x{95DC}\x{95DE}\x{95DF}\x{95E0}\x{95E1}\x{95E2}\x{95E3}\x{95E4}\x{95E5}' .
+'\x{95E6}\x{95E7}\x{95E8}\x{95E9}\x{95EA}\x{95EB}\x{95EC}\x{95ED}\x{95EE}' .
+'\x{95EF}\x{95F0}\x{95F1}\x{95F2}\x{95F3}\x{95F4}\x{95F5}\x{95F6}\x{95F7}' .
+'\x{95F8}\x{95F9}\x{95FA}\x{95FB}\x{95FC}\x{95FD}\x{95FE}\x{95FF}\x{9600}' .
+'\x{9601}\x{9602}\x{9603}\x{9604}\x{9605}\x{9606}\x{9607}\x{9608}\x{9609}' .
+'\x{960A}\x{960B}\x{960C}\x{960D}\x{960E}\x{960F}\x{9610}\x{9611}\x{9612}' .
+'\x{9613}\x{9614}\x{9615}\x{9616}\x{9617}\x{9618}\x{9619}\x{961A}\x{961B}' .
+'\x{961C}\x{961D}\x{961E}\x{961F}\x{9620}\x{9621}\x{9622}\x{9623}\x{9624}' .
+'\x{9627}\x{9628}\x{962A}\x{962B}\x{962C}\x{962D}\x{962E}\x{962F}\x{9630}' .
+'\x{9631}\x{9632}\x{9633}\x{9634}\x{9635}\x{9636}\x{9637}\x{9638}\x{9639}' .
+'\x{963A}\x{963B}\x{963C}\x{963D}\x{963F}\x{9640}\x{9641}\x{9642}\x{9643}' .
+'\x{9644}\x{9645}\x{9646}\x{9647}\x{9648}\x{9649}\x{964A}\x{964B}\x{964C}' .
+'\x{964D}\x{964E}\x{964F}\x{9650}\x{9651}\x{9652}\x{9653}\x{9654}\x{9655}' .
+'\x{9658}\x{9659}\x{965A}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9660}' .
+'\x{9661}\x{9662}\x{9663}\x{9664}\x{9666}\x{9667}\x{9668}\x{9669}\x{966A}' .
+'\x{966B}\x{966C}\x{966D}\x{966E}\x{966F}\x{9670}\x{9671}\x{9672}\x{9673}' .
+'\x{9674}\x{9675}\x{9676}\x{9677}\x{9678}\x{967C}\x{967D}\x{967E}\x{9680}' .
+'\x{9683}\x{9684}\x{9685}\x{9686}\x{9687}\x{9688}\x{9689}\x{968A}\x{968B}' .
+'\x{968D}\x{968E}\x{968F}\x{9690}\x{9691}\x{9692}\x{9693}\x{9694}\x{9695}' .
+'\x{9697}\x{9698}\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}\x{96A1}\x{96A2}' .
+'\x{96A3}\x{96A4}\x{96A5}\x{96A6}\x{96A7}\x{96A8}\x{96A9}\x{96AA}\x{96AC}' .
+'\x{96AD}\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}\x{96B7}\x{96B8}' .
+'\x{96B9}\x{96BA}\x{96BB}\x{96BC}\x{96BD}\x{96BE}\x{96BF}\x{96C0}\x{96C1}' .
+'\x{96C2}\x{96C3}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C8}\x{96C9}\x{96CA}' .
+'\x{96CB}\x{96CC}\x{96CD}\x{96CE}\x{96CF}\x{96D0}\x{96D1}\x{96D2}\x{96D3}' .
+'\x{96D4}\x{96D5}\x{96D6}\x{96D7}\x{96D8}\x{96D9}\x{96DA}\x{96DB}\x{96DC}' .
+'\x{96DD}\x{96DE}\x{96DF}\x{96E0}\x{96E1}\x{96E2}\x{96E3}\x{96E5}\x{96E8}' .
+'\x{96E9}\x{96EA}\x{96EB}\x{96EC}\x{96ED}\x{96EE}\x{96EF}\x{96F0}\x{96F1}' .
+'\x{96F2}\x{96F3}\x{96F4}\x{96F5}\x{96F6}\x{96F7}\x{96F8}\x{96F9}\x{96FA}' .
+'\x{96FB}\x{96FD}\x{96FE}\x{96FF}\x{9700}\x{9701}\x{9702}\x{9703}\x{9704}' .
+'\x{9705}\x{9706}\x{9707}\x{9708}\x{9709}\x{970A}\x{970B}\x{970C}\x{970D}' .
+'\x{970E}\x{970F}\x{9710}\x{9711}\x{9712}\x{9713}\x{9715}\x{9716}\x{9718}' .
+'\x{9719}\x{971C}\x{971D}\x{971E}\x{971F}\x{9720}\x{9721}\x{9722}\x{9723}' .
+'\x{9724}\x{9725}\x{9726}\x{9727}\x{9728}\x{9729}\x{972A}\x{972B}\x{972C}' .
+'\x{972D}\x{972E}\x{972F}\x{9730}\x{9731}\x{9732}\x{9735}\x{9736}\x{9738}' .
+'\x{9739}\x{973A}\x{973B}\x{973C}\x{973D}\x{973E}\x{973F}\x{9742}\x{9743}' .
+'\x{9744}\x{9745}\x{9746}\x{9747}\x{9748}\x{9749}\x{974A}\x{974B}\x{974C}' .
+'\x{974E}\x{974F}\x{9750}\x{9751}\x{9752}\x{9753}\x{9754}\x{9755}\x{9756}' .
+'\x{9758}\x{9759}\x{975A}\x{975B}\x{975C}\x{975D}\x{975E}\x{975F}\x{9760}' .
+'\x{9761}\x{9762}\x{9765}\x{9766}\x{9767}\x{9768}\x{9769}\x{976A}\x{976B}' .
+'\x{976C}\x{976D}\x{976E}\x{976F}\x{9770}\x{9772}\x{9773}\x{9774}\x{9776}' .
+'\x{9777}\x{9778}\x{9779}\x{977A}\x{977B}\x{977C}\x{977D}\x{977E}\x{977F}' .
+'\x{9780}\x{9781}\x{9782}\x{9783}\x{9784}\x{9785}\x{9786}\x{9788}\x{978A}' .
+'\x{978B}\x{978C}\x{978D}\x{978E}\x{978F}\x{9790}\x{9791}\x{9792}\x{9793}' .
+'\x{9794}\x{9795}\x{9796}\x{9797}\x{9798}\x{9799}\x{979A}\x{979C}\x{979D}' .
+'\x{979E}\x{979F}\x{97A0}\x{97A1}\x{97A2}\x{97A3}\x{97A4}\x{97A5}\x{97A6}' .
+'\x{97A7}\x{97A8}\x{97AA}\x{97AB}\x{97AC}\x{97AD}\x{97AE}\x{97AF}\x{97B2}' .
+'\x{97B3}\x{97B4}\x{97B6}\x{97B7}\x{97B8}\x{97B9}\x{97BA}\x{97BB}\x{97BC}' .
+'\x{97BD}\x{97BF}\x{97C1}\x{97C2}\x{97C3}\x{97C4}\x{97C5}\x{97C6}\x{97C7}' .
+'\x{97C8}\x{97C9}\x{97CA}\x{97CB}\x{97CC}\x{97CD}\x{97CE}\x{97CF}\x{97D0}' .
+'\x{97D1}\x{97D3}\x{97D4}\x{97D5}\x{97D6}\x{97D7}\x{97D8}\x{97D9}\x{97DA}' .
+'\x{97DB}\x{97DC}\x{97DD}\x{97DE}\x{97DF}\x{97E0}\x{97E1}\x{97E2}\x{97E3}' .
+'\x{97E4}\x{97E5}\x{97E6}\x{97E7}\x{97E8}\x{97E9}\x{97EA}\x{97EB}\x{97EC}' .
+'\x{97ED}\x{97EE}\x{97EF}\x{97F0}\x{97F1}\x{97F2}\x{97F3}\x{97F4}\x{97F5}' .
+'\x{97F6}\x{97F7}\x{97F8}\x{97F9}\x{97FA}\x{97FB}\x{97FD}\x{97FE}\x{97FF}' .
+'\x{9800}\x{9801}\x{9802}\x{9803}\x{9804}\x{9805}\x{9806}\x{9807}\x{9808}' .
+'\x{9809}\x{980A}\x{980B}\x{980C}\x{980D}\x{980E}\x{980F}\x{9810}\x{9811}' .
+'\x{9812}\x{9813}\x{9814}\x{9815}\x{9816}\x{9817}\x{9818}\x{9819}\x{981A}' .
+'\x{981B}\x{981C}\x{981D}\x{981E}\x{9820}\x{9821}\x{9822}\x{9823}\x{9824}' .
+'\x{9826}\x{9827}\x{9828}\x{9829}\x{982B}\x{982D}\x{982E}\x{982F}\x{9830}' .
+'\x{9831}\x{9832}\x{9834}\x{9835}\x{9836}\x{9837}\x{9838}\x{9839}\x{983B}' .
+'\x{983C}\x{983D}\x{983F}\x{9840}\x{9841}\x{9843}\x{9844}\x{9845}\x{9846}' .
+'\x{9848}\x{9849}\x{984A}\x{984C}\x{984D}\x{984E}\x{984F}\x{9850}\x{9851}' .
+'\x{9852}\x{9853}\x{9854}\x{9855}\x{9857}\x{9858}\x{9859}\x{985A}\x{985B}' .
+'\x{985C}\x{985D}\x{985E}\x{985F}\x{9860}\x{9861}\x{9862}\x{9863}\x{9864}' .
+'\x{9865}\x{9867}\x{9869}\x{986A}\x{986B}\x{986C}\x{986D}\x{986E}\x{986F}' .
+'\x{9870}\x{9871}\x{9872}\x{9873}\x{9874}\x{9875}\x{9876}\x{9877}\x{9878}' .
+'\x{9879}\x{987A}\x{987B}\x{987C}\x{987D}\x{987E}\x{987F}\x{9880}\x{9881}' .
+'\x{9882}\x{9883}\x{9884}\x{9885}\x{9886}\x{9887}\x{9888}\x{9889}\x{988A}' .
+'\x{988B}\x{988C}\x{988D}\x{988E}\x{988F}\x{9890}\x{9891}\x{9892}\x{9893}' .
+'\x{9894}\x{9895}\x{9896}\x{9897}\x{9898}\x{9899}\x{989A}\x{989B}\x{989C}' .
+'\x{989D}\x{989E}\x{989F}\x{98A0}\x{98A1}\x{98A2}\x{98A3}\x{98A4}\x{98A5}' .
+'\x{98A6}\x{98A7}\x{98A8}\x{98A9}\x{98AA}\x{98AB}\x{98AC}\x{98AD}\x{98AE}' .
+'\x{98AF}\x{98B0}\x{98B1}\x{98B2}\x{98B3}\x{98B4}\x{98B5}\x{98B6}\x{98B8}' .
+'\x{98B9}\x{98BA}\x{98BB}\x{98BC}\x{98BD}\x{98BE}\x{98BF}\x{98C0}\x{98C1}' .
+'\x{98C2}\x{98C3}\x{98C4}\x{98C5}\x{98C6}\x{98C8}\x{98C9}\x{98CB}\x{98CC}' .
+'\x{98CD}\x{98CE}\x{98CF}\x{98D0}\x{98D1}\x{98D2}\x{98D3}\x{98D4}\x{98D5}' .
+'\x{98D6}\x{98D7}\x{98D8}\x{98D9}\x{98DA}\x{98DB}\x{98DC}\x{98DD}\x{98DE}' .
+'\x{98DF}\x{98E0}\x{98E2}\x{98E3}\x{98E5}\x{98E6}\x{98E7}\x{98E8}\x{98E9}' .
+'\x{98EA}\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}\x{98F3}\x{98F4}\x{98F5}' .
+'\x{98F6}\x{98F7}\x{98F9}\x{98FA}\x{98FC}\x{98FD}\x{98FE}\x{98FF}\x{9900}' .
+'\x{9901}\x{9902}\x{9903}\x{9904}\x{9905}\x{9906}\x{9907}\x{9908}\x{9909}' .
+'\x{990A}\x{990B}\x{990C}\x{990D}\x{990E}\x{990F}\x{9910}\x{9911}\x{9912}' .
+'\x{9913}\x{9914}\x{9915}\x{9916}\x{9917}\x{9918}\x{991A}\x{991B}\x{991C}' .
+'\x{991D}\x{991E}\x{991F}\x{9920}\x{9921}\x{9922}\x{9923}\x{9924}\x{9925}' .
+'\x{9926}\x{9927}\x{9928}\x{9929}\x{992A}\x{992B}\x{992C}\x{992D}\x{992E}' .
+'\x{992F}\x{9930}\x{9931}\x{9932}\x{9933}\x{9934}\x{9935}\x{9936}\x{9937}' .
+'\x{9938}\x{9939}\x{993A}\x{993C}\x{993D}\x{993E}\x{993F}\x{9940}\x{9941}' .
+'\x{9942}\x{9943}\x{9945}\x{9946}\x{9947}\x{9948}\x{9949}\x{994A}\x{994B}' .
+'\x{994C}\x{994E}\x{994F}\x{9950}\x{9951}\x{9952}\x{9953}\x{9954}\x{9955}' .
+'\x{9956}\x{9957}\x{9958}\x{9959}\x{995B}\x{995C}\x{995E}\x{995F}\x{9960}' .
+'\x{9961}\x{9962}\x{9963}\x{9964}\x{9965}\x{9966}\x{9967}\x{9968}\x{9969}' .
+'\x{996A}\x{996B}\x{996C}\x{996D}\x{996E}\x{996F}\x{9970}\x{9971}\x{9972}' .
+'\x{9973}\x{9974}\x{9975}\x{9976}\x{9977}\x{9978}\x{9979}\x{997A}\x{997B}' .
+'\x{997C}\x{997D}\x{997E}\x{997F}\x{9980}\x{9981}\x{9982}\x{9983}\x{9984}' .
+'\x{9985}\x{9986}\x{9987}\x{9988}\x{9989}\x{998A}\x{998B}\x{998C}\x{998D}' .
+'\x{998E}\x{998F}\x{9990}\x{9991}\x{9992}\x{9993}\x{9994}\x{9995}\x{9996}' .
+'\x{9997}\x{9998}\x{9999}\x{999A}\x{999B}\x{999C}\x{999D}\x{999E}\x{999F}' .
+'\x{99A0}\x{99A1}\x{99A2}\x{99A3}\x{99A4}\x{99A5}\x{99A6}\x{99A7}\x{99A8}' .
+'\x{99A9}\x{99AA}\x{99AB}\x{99AC}\x{99AD}\x{99AE}\x{99AF}\x{99B0}\x{99B1}' .
+'\x{99B2}\x{99B3}\x{99B4}\x{99B5}\x{99B6}\x{99B7}\x{99B8}\x{99B9}\x{99BA}' .
+'\x{99BB}\x{99BC}\x{99BD}\x{99BE}\x{99C0}\x{99C1}\x{99C2}\x{99C3}\x{99C4}' .
+'\x{99C6}\x{99C7}\x{99C8}\x{99C9}\x{99CA}\x{99CB}\x{99CC}\x{99CD}\x{99CE}' .
+'\x{99CF}\x{99D0}\x{99D1}\x{99D2}\x{99D3}\x{99D4}\x{99D5}\x{99D6}\x{99D7}' .
+'\x{99D8}\x{99D9}\x{99DA}\x{99DB}\x{99DC}\x{99DD}\x{99DE}\x{99DF}\x{99E1}' .
+'\x{99E2}\x{99E3}\x{99E4}\x{99E5}\x{99E7}\x{99E8}\x{99E9}\x{99EA}\x{99EC}' .
+'\x{99ED}\x{99EE}\x{99EF}\x{99F0}\x{99F1}\x{99F2}\x{99F3}\x{99F4}\x{99F6}' .
+'\x{99F7}\x{99F8}\x{99F9}\x{99FA}\x{99FB}\x{99FC}\x{99FD}\x{99FE}\x{99FF}' .
+'\x{9A00}\x{9A01}\x{9A02}\x{9A03}\x{9A04}\x{9A05}\x{9A06}\x{9A07}\x{9A08}' .
+'\x{9A09}\x{9A0A}\x{9A0B}\x{9A0C}\x{9A0D}\x{9A0E}\x{9A0F}\x{9A11}\x{9A14}' .
+'\x{9A15}\x{9A16}\x{9A19}\x{9A1A}\x{9A1B}\x{9A1C}\x{9A1D}\x{9A1E}\x{9A1F}' .
+'\x{9A20}\x{9A21}\x{9A22}\x{9A23}\x{9A24}\x{9A25}\x{9A26}\x{9A27}\x{9A29}' .
+'\x{9A2A}\x{9A2B}\x{9A2C}\x{9A2D}\x{9A2E}\x{9A2F}\x{9A30}\x{9A31}\x{9A32}' .
+'\x{9A33}\x{9A34}\x{9A35}\x{9A36}\x{9A37}\x{9A38}\x{9A39}\x{9A3A}\x{9A3C}' .
+'\x{9A3D}\x{9A3E}\x{9A3F}\x{9A40}\x{9A41}\x{9A42}\x{9A43}\x{9A44}\x{9A45}' .
+'\x{9A46}\x{9A47}\x{9A48}\x{9A49}\x{9A4A}\x{9A4B}\x{9A4C}\x{9A4D}\x{9A4E}' .
+'\x{9A4F}\x{9A50}\x{9A52}\x{9A53}\x{9A54}\x{9A55}\x{9A56}\x{9A57}\x{9A59}' .
+'\x{9A5A}\x{9A5B}\x{9A5C}\x{9A5E}\x{9A5F}\x{9A60}\x{9A61}\x{9A62}\x{9A64}' .
+'\x{9A65}\x{9A66}\x{9A67}\x{9A68}\x{9A69}\x{9A6A}\x{9A6B}\x{9A6C}\x{9A6D}' .
+'\x{9A6E}\x{9A6F}\x{9A70}\x{9A71}\x{9A72}\x{9A73}\x{9A74}\x{9A75}\x{9A76}' .
+'\x{9A77}\x{9A78}\x{9A79}\x{9A7A}\x{9A7B}\x{9A7C}\x{9A7D}\x{9A7E}\x{9A7F}' .
+'\x{9A80}\x{9A81}\x{9A82}\x{9A83}\x{9A84}\x{9A85}\x{9A86}\x{9A87}\x{9A88}' .
+'\x{9A89}\x{9A8A}\x{9A8B}\x{9A8C}\x{9A8D}\x{9A8E}\x{9A8F}\x{9A90}\x{9A91}' .
+'\x{9A92}\x{9A93}\x{9A94}\x{9A95}\x{9A96}\x{9A97}\x{9A98}\x{9A99}\x{9A9A}' .
+'\x{9A9B}\x{9A9C}\x{9A9D}\x{9A9E}\x{9A9F}\x{9AA0}\x{9AA1}\x{9AA2}\x{9AA3}' .
+'\x{9AA4}\x{9AA5}\x{9AA6}\x{9AA7}\x{9AA8}\x{9AAA}\x{9AAB}\x{9AAC}\x{9AAD}' .
+'\x{9AAE}\x{9AAF}\x{9AB0}\x{9AB1}\x{9AB2}\x{9AB3}\x{9AB4}\x{9AB5}\x{9AB6}' .
+'\x{9AB7}\x{9AB8}\x{9AB9}\x{9ABA}\x{9ABB}\x{9ABC}\x{9ABE}\x{9ABF}\x{9AC0}' .
+'\x{9AC1}\x{9AC2}\x{9AC3}\x{9AC4}\x{9AC5}\x{9AC6}\x{9AC7}\x{9AC9}\x{9ACA}' .
+'\x{9ACB}\x{9ACC}\x{9ACD}\x{9ACE}\x{9ACF}\x{9AD0}\x{9AD1}\x{9AD2}\x{9AD3}' .
+'\x{9AD4}\x{9AD5}\x{9AD6}\x{9AD8}\x{9AD9}\x{9ADA}\x{9ADB}\x{9ADC}\x{9ADD}' .
+'\x{9ADE}\x{9ADF}\x{9AE1}\x{9AE2}\x{9AE3}\x{9AE5}\x{9AE6}\x{9AE7}\x{9AEA}' .
+'\x{9AEB}\x{9AEC}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF2}\x{9AF3}\x{9AF4}' .
+'\x{9AF5}\x{9AF6}\x{9AF7}\x{9AF8}\x{9AF9}\x{9AFA}\x{9AFB}\x{9AFC}\x{9AFD}' .
+'\x{9AFE}\x{9AFF}\x{9B01}\x{9B03}\x{9B04}\x{9B05}\x{9B06}\x{9B07}\x{9B08}' .
+'\x{9B0A}\x{9B0B}\x{9B0C}\x{9B0D}\x{9B0E}\x{9B0F}\x{9B10}\x{9B11}\x{9B12}' .
+'\x{9B13}\x{9B15}\x{9B16}\x{9B17}\x{9B18}\x{9B19}\x{9B1A}\x{9B1C}\x{9B1D}' .
+'\x{9B1E}\x{9B1F}\x{9B20}\x{9B21}\x{9B22}\x{9B23}\x{9B24}\x{9B25}\x{9B26}' .
+'\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2B}\x{9B2C}\x{9B2D}\x{9B2E}\x{9B2F}' .
+'\x{9B30}\x{9B31}\x{9B32}\x{9B33}\x{9B35}\x{9B36}\x{9B37}\x{9B38}\x{9B39}' .
+'\x{9B3A}\x{9B3B}\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}\x{9B42}\x{9B43}\x{9B44}' .
+'\x{9B45}\x{9B46}\x{9B47}\x{9B48}\x{9B49}\x{9B4A}\x{9B4B}\x{9B4C}\x{9B4D}' .
+'\x{9B4E}\x{9B4F}\x{9B51}\x{9B52}\x{9B53}\x{9B54}\x{9B55}\x{9B56}\x{9B58}' .
+'\x{9B59}\x{9B5A}\x{9B5B}\x{9B5C}\x{9B5D}\x{9B5E}\x{9B5F}\x{9B60}\x{9B61}' .
+'\x{9B63}\x{9B64}\x{9B65}\x{9B66}\x{9B67}\x{9B68}\x{9B69}\x{9B6A}\x{9B6B}' .
+'\x{9B6C}\x{9B6D}\x{9B6E}\x{9B6F}\x{9B70}\x{9B71}\x{9B73}\x{9B74}\x{9B75}' .
+'\x{9B76}\x{9B77}\x{9B78}\x{9B79}\x{9B7A}\x{9B7B}\x{9B7C}\x{9B7D}\x{9B7E}' .
+'\x{9B7F}\x{9B80}\x{9B81}\x{9B82}\x{9B83}\x{9B84}\x{9B85}\x{9B86}\x{9B87}' .
+'\x{9B88}\x{9B8A}\x{9B8B}\x{9B8D}\x{9B8E}\x{9B8F}\x{9B90}\x{9B91}\x{9B92}' .
+'\x{9B93}\x{9B94}\x{9B95}\x{9B96}\x{9B97}\x{9B98}\x{9B9A}\x{9B9B}\x{9B9C}' .
+'\x{9B9D}\x{9B9E}\x{9B9F}\x{9BA0}\x{9BA1}\x{9BA2}\x{9BA3}\x{9BA4}\x{9BA5}' .
+'\x{9BA6}\x{9BA7}\x{9BA8}\x{9BA9}\x{9BAA}\x{9BAB}\x{9BAC}\x{9BAD}\x{9BAE}' .
+'\x{9BAF}\x{9BB0}\x{9BB1}\x{9BB2}\x{9BB3}\x{9BB4}\x{9BB5}\x{9BB6}\x{9BB7}' .
+'\x{9BB8}\x{9BB9}\x{9BBA}\x{9BBB}\x{9BBC}\x{9BBD}\x{9BBE}\x{9BBF}\x{9BC0}' .
+'\x{9BC1}\x{9BC3}\x{9BC4}\x{9BC5}\x{9BC6}\x{9BC7}\x{9BC8}\x{9BC9}\x{9BCA}' .
+'\x{9BCB}\x{9BCC}\x{9BCD}\x{9BCE}\x{9BCF}\x{9BD0}\x{9BD1}\x{9BD2}\x{9BD3}' .
+'\x{9BD4}\x{9BD5}\x{9BD6}\x{9BD7}\x{9BD8}\x{9BD9}\x{9BDA}\x{9BDB}\x{9BDC}' .
+'\x{9BDD}\x{9BDE}\x{9BDF}\x{9BE0}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}\x{9BE5}' .
+'\x{9BE6}\x{9BE7}\x{9BE8}\x{9BE9}\x{9BEA}\x{9BEB}\x{9BEC}\x{9BED}\x{9BEE}' .
+'\x{9BEF}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF3}\x{9BF4}\x{9BF5}\x{9BF7}\x{9BF8}' .
+'\x{9BF9}\x{9BFA}\x{9BFB}\x{9BFC}\x{9BFD}\x{9BFE}\x{9BFF}\x{9C02}\x{9C05}' .
+'\x{9C06}\x{9C07}\x{9C08}\x{9C09}\x{9C0A}\x{9C0B}\x{9C0C}\x{9C0D}\x{9C0E}' .
+'\x{9C0F}\x{9C10}\x{9C11}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C16}\x{9C17}' .
+'\x{9C18}\x{9C19}\x{9C1A}\x{9C1B}\x{9C1C}\x{9C1D}\x{9C1E}\x{9C1F}\x{9C20}' .
+'\x{9C21}\x{9C22}\x{9C23}\x{9C24}\x{9C25}\x{9C26}\x{9C27}\x{9C28}\x{9C29}' .
+'\x{9C2A}\x{9C2B}\x{9C2C}\x{9C2D}\x{9C2F}\x{9C30}\x{9C31}\x{9C32}\x{9C33}' .
+'\x{9C34}\x{9C35}\x{9C36}\x{9C37}\x{9C38}\x{9C39}\x{9C3A}\x{9C3B}\x{9C3C}' .
+'\x{9C3D}\x{9C3E}\x{9C3F}\x{9C40}\x{9C41}\x{9C43}\x{9C44}\x{9C45}\x{9C46}' .
+'\x{9C47}\x{9C48}\x{9C49}\x{9C4A}\x{9C4B}\x{9C4C}\x{9C4D}\x{9C4E}\x{9C50}' .
+'\x{9C52}\x{9C53}\x{9C54}\x{9C55}\x{9C56}\x{9C57}\x{9C58}\x{9C59}\x{9C5A}' .
+'\x{9C5B}\x{9C5C}\x{9C5D}\x{9C5E}\x{9C5F}\x{9C60}\x{9C62}\x{9C63}\x{9C65}' .
+'\x{9C66}\x{9C67}\x{9C68}\x{9C69}\x{9C6A}\x{9C6B}\x{9C6C}\x{9C6D}\x{9C6E}' .
+'\x{9C6F}\x{9C70}\x{9C71}\x{9C72}\x{9C73}\x{9C74}\x{9C75}\x{9C77}\x{9C78}' .
+'\x{9C79}\x{9C7A}\x{9C7C}\x{9C7D}\x{9C7E}\x{9C7F}\x{9C80}\x{9C81}\x{9C82}' .
+'\x{9C83}\x{9C84}\x{9C85}\x{9C86}\x{9C87}\x{9C88}\x{9C89}\x{9C8A}\x{9C8B}' .
+'\x{9C8C}\x{9C8D}\x{9C8E}\x{9C8F}\x{9C90}\x{9C91}\x{9C92}\x{9C93}\x{9C94}' .
+'\x{9C95}\x{9C96}\x{9C97}\x{9C98}\x{9C99}\x{9C9A}\x{9C9B}\x{9C9C}\x{9C9D}' .
+'\x{9C9E}\x{9C9F}\x{9CA0}\x{9CA1}\x{9CA2}\x{9CA3}\x{9CA4}\x{9CA5}\x{9CA6}' .
+'\x{9CA7}\x{9CA8}\x{9CA9}\x{9CAA}\x{9CAB}\x{9CAC}\x{9CAD}\x{9CAE}\x{9CAF}' .
+'\x{9CB0}\x{9CB1}\x{9CB2}\x{9CB3}\x{9CB4}\x{9CB5}\x{9CB6}\x{9CB7}\x{9CB8}' .
+'\x{9CB9}\x{9CBA}\x{9CBB}\x{9CBC}\x{9CBD}\x{9CBE}\x{9CBF}\x{9CC0}\x{9CC1}' .
+'\x{9CC2}\x{9CC3}\x{9CC4}\x{9CC5}\x{9CC6}\x{9CC7}\x{9CC8}\x{9CC9}\x{9CCA}' .
+'\x{9CCB}\x{9CCC}\x{9CCD}\x{9CCE}\x{9CCF}\x{9CD0}\x{9CD1}\x{9CD2}\x{9CD3}' .
+'\x{9CD4}\x{9CD5}\x{9CD6}\x{9CD7}\x{9CD8}\x{9CD9}\x{9CDA}\x{9CDB}\x{9CDC}' .
+'\x{9CDD}\x{9CDE}\x{9CDF}\x{9CE0}\x{9CE1}\x{9CE2}\x{9CE3}\x{9CE4}\x{9CE5}' .
+'\x{9CE6}\x{9CE7}\x{9CE8}\x{9CE9}\x{9CEA}\x{9CEB}\x{9CEC}\x{9CED}\x{9CEE}' .
+'\x{9CEF}\x{9CF0}\x{9CF1}\x{9CF2}\x{9CF3}\x{9CF4}\x{9CF5}\x{9CF6}\x{9CF7}' .
+'\x{9CF8}\x{9CF9}\x{9CFA}\x{9CFB}\x{9CFC}\x{9CFD}\x{9CFE}\x{9CFF}\x{9D00}' .
+'\x{9D01}\x{9D02}\x{9D03}\x{9D04}\x{9D05}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
+'\x{9D0A}\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}\x{9D13}\x{9D14}\x{9D15}\x{9D16}' .
+'\x{9D17}\x{9D18}\x{9D19}\x{9D1A}\x{9D1B}\x{9D1C}\x{9D1D}\x{9D1E}\x{9D1F}' .
+'\x{9D20}\x{9D21}\x{9D22}\x{9D23}\x{9D24}\x{9D25}\x{9D26}\x{9D28}\x{9D29}' .
+'\x{9D2B}\x{9D2D}\x{9D2E}\x{9D2F}\x{9D30}\x{9D31}\x{9D32}\x{9D33}\x{9D34}' .
+'\x{9D36}\x{9D37}\x{9D38}\x{9D39}\x{9D3A}\x{9D3B}\x{9D3D}\x{9D3E}\x{9D3F}' .
+'\x{9D40}\x{9D41}\x{9D42}\x{9D43}\x{9D45}\x{9D46}\x{9D47}\x{9D48}\x{9D49}' .
+'\x{9D4A}\x{9D4B}\x{9D4C}\x{9D4D}\x{9D4E}\x{9D4F}\x{9D50}\x{9D51}\x{9D52}' .
+'\x{9D53}\x{9D54}\x{9D55}\x{9D56}\x{9D57}\x{9D58}\x{9D59}\x{9D5A}\x{9D5B}' .
+'\x{9D5C}\x{9D5D}\x{9D5E}\x{9D5F}\x{9D60}\x{9D61}\x{9D62}\x{9D63}\x{9D64}' .
+'\x{9D65}\x{9D66}\x{9D67}\x{9D68}\x{9D69}\x{9D6A}\x{9D6B}\x{9D6C}\x{9D6E}' .
+'\x{9D6F}\x{9D70}\x{9D71}\x{9D72}\x{9D73}\x{9D74}\x{9D75}\x{9D76}\x{9D77}' .
+'\x{9D78}\x{9D79}\x{9D7A}\x{9D7B}\x{9D7C}\x{9D7D}\x{9D7E}\x{9D7F}\x{9D80}' .
+'\x{9D81}\x{9D82}\x{9D83}\x{9D84}\x{9D85}\x{9D86}\x{9D87}\x{9D88}\x{9D89}' .
+'\x{9D8A}\x{9D8B}\x{9D8C}\x{9D8D}\x{9D8E}\x{9D90}\x{9D91}\x{9D92}\x{9D93}' .
+'\x{9D94}\x{9D96}\x{9D97}\x{9D98}\x{9D99}\x{9D9A}\x{9D9B}\x{9D9C}\x{9D9D}' .
+'\x{9D9E}\x{9D9F}\x{9DA0}\x{9DA1}\x{9DA2}\x{9DA3}\x{9DA4}\x{9DA5}\x{9DA6}' .
+'\x{9DA7}\x{9DA8}\x{9DA9}\x{9DAA}\x{9DAB}\x{9DAC}\x{9DAD}\x{9DAF}\x{9DB0}' .
+'\x{9DB1}\x{9DB2}\x{9DB3}\x{9DB4}\x{9DB5}\x{9DB6}\x{9DB7}\x{9DB8}\x{9DB9}' .
+'\x{9DBA}\x{9DBB}\x{9DBC}\x{9DBE}\x{9DBF}\x{9DC1}\x{9DC2}\x{9DC3}\x{9DC4}' .
+'\x{9DC5}\x{9DC7}\x{9DC8}\x{9DC9}\x{9DCA}\x{9DCB}\x{9DCC}\x{9DCD}\x{9DCE}' .
+'\x{9DCF}\x{9DD0}\x{9DD1}\x{9DD2}\x{9DD3}\x{9DD4}\x{9DD5}\x{9DD6}\x{9DD7}' .
+'\x{9DD8}\x{9DD9}\x{9DDA}\x{9DDB}\x{9DDC}\x{9DDD}\x{9DDE}\x{9DDF}\x{9DE0}' .
+'\x{9DE1}\x{9DE2}\x{9DE3}\x{9DE4}\x{9DE5}\x{9DE6}\x{9DE7}\x{9DE8}\x{9DE9}' .
+'\x{9DEB}\x{9DEC}\x{9DED}\x{9DEE}\x{9DEF}\x{9DF0}\x{9DF1}\x{9DF2}\x{9DF3}' .
+'\x{9DF4}\x{9DF5}\x{9DF6}\x{9DF7}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFB}\x{9DFD}' .
+'\x{9DFE}\x{9DFF}\x{9E00}\x{9E01}\x{9E02}\x{9E03}\x{9E04}\x{9E05}\x{9E06}' .
+'\x{9E07}\x{9E08}\x{9E09}\x{9E0A}\x{9E0B}\x{9E0C}\x{9E0D}\x{9E0F}\x{9E10}' .
+'\x{9E11}\x{9E12}\x{9E13}\x{9E14}\x{9E15}\x{9E17}\x{9E18}\x{9E19}\x{9E1A}' .
+'\x{9E1B}\x{9E1D}\x{9E1E}\x{9E1F}\x{9E20}\x{9E21}\x{9E22}\x{9E23}\x{9E24}' .
+'\x{9E25}\x{9E26}\x{9E27}\x{9E28}\x{9E29}\x{9E2A}\x{9E2B}\x{9E2C}\x{9E2D}' .
+'\x{9E2E}\x{9E2F}\x{9E30}\x{9E31}\x{9E32}\x{9E33}\x{9E34}\x{9E35}\x{9E36}' .
+'\x{9E37}\x{9E38}\x{9E39}\x{9E3A}\x{9E3B}\x{9E3C}\x{9E3D}\x{9E3E}\x{9E3F}' .
+'\x{9E40}\x{9E41}\x{9E42}\x{9E43}\x{9E44}\x{9E45}\x{9E46}\x{9E47}\x{9E48}' .
+'\x{9E49}\x{9E4A}\x{9E4B}\x{9E4C}\x{9E4D}\x{9E4E}\x{9E4F}\x{9E50}\x{9E51}' .
+'\x{9E52}\x{9E53}\x{9E54}\x{9E55}\x{9E56}\x{9E57}\x{9E58}\x{9E59}\x{9E5A}' .
+'\x{9E5B}\x{9E5C}\x{9E5D}\x{9E5E}\x{9E5F}\x{9E60}\x{9E61}\x{9E62}\x{9E63}' .
+'\x{9E64}\x{9E65}\x{9E66}\x{9E67}\x{9E68}\x{9E69}\x{9E6A}\x{9E6B}\x{9E6C}' .
+'\x{9E6D}\x{9E6E}\x{9E6F}\x{9E70}\x{9E71}\x{9E72}\x{9E73}\x{9E74}\x{9E75}' .
+'\x{9E76}\x{9E77}\x{9E79}\x{9E7A}\x{9E7C}\x{9E7D}\x{9E7E}\x{9E7F}\x{9E80}' .
+'\x{9E81}\x{9E82}\x{9E83}\x{9E84}\x{9E85}\x{9E86}\x{9E87}\x{9E88}\x{9E89}' .
+'\x{9E8A}\x{9E8B}\x{9E8C}\x{9E8D}\x{9E8E}\x{9E91}\x{9E92}\x{9E93}\x{9E94}' .
+'\x{9E96}\x{9E97}\x{9E99}\x{9E9A}\x{9E9B}\x{9E9C}\x{9E9D}\x{9E9F}\x{9EA0}' .
+'\x{9EA1}\x{9EA3}\x{9EA4}\x{9EA5}\x{9EA6}\x{9EA7}\x{9EA8}\x{9EA9}\x{9EAA}' .
+'\x{9EAD}\x{9EAE}\x{9EAF}\x{9EB0}\x{9EB2}\x{9EB3}\x{9EB4}\x{9EB5}\x{9EB6}' .
+'\x{9EB7}\x{9EB8}\x{9EBB}\x{9EBC}\x{9EBD}\x{9EBE}\x{9EBF}\x{9EC0}\x{9EC1}' .
+'\x{9EC2}\x{9EC3}\x{9EC4}\x{9EC5}\x{9EC6}\x{9EC7}\x{9EC8}\x{9EC9}\x{9ECA}' .
+'\x{9ECB}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED1}\x{9ED2}\x{9ED3}' .
+'\x{9ED4}\x{9ED5}\x{9ED6}\x{9ED7}\x{9ED8}\x{9ED9}\x{9EDA}\x{9EDB}\x{9EDC}' .
+'\x{9EDD}\x{9EDE}\x{9EDF}\x{9EE0}\x{9EE1}\x{9EE2}\x{9EE3}\x{9EE4}\x{9EE5}' .
+'\x{9EE6}\x{9EE7}\x{9EE8}\x{9EE9}\x{9EEA}\x{9EEB}\x{9EED}\x{9EEE}\x{9EEF}' .
+'\x{9EF0}\x{9EF2}\x{9EF3}\x{9EF4}\x{9EF5}\x{9EF6}\x{9EF7}\x{9EF8}\x{9EF9}' .
+'\x{9EFA}\x{9EFB}\x{9EFC}\x{9EFD}\x{9EFE}\x{9EFF}\x{9F00}\x{9F01}\x{9F02}' .
+'\x{9F04}\x{9F05}\x{9F06}\x{9F07}\x{9F08}\x{9F09}\x{9F0A}\x{9F0B}\x{9F0C}' .
+'\x{9F0D}\x{9F0E}\x{9F0F}\x{9F10}\x{9F12}\x{9F13}\x{9F15}\x{9F16}\x{9F17}' .
+'\x{9F18}\x{9F19}\x{9F1A}\x{9F1B}\x{9F1C}\x{9F1D}\x{9F1E}\x{9F1F}\x{9F20}' .
+'\x{9F22}\x{9F23}\x{9F24}\x{9F25}\x{9F27}\x{9F28}\x{9F29}\x{9F2A}\x{9F2B}' .
+'\x{9F2C}\x{9F2D}\x{9F2E}\x{9F2F}\x{9F30}\x{9F31}\x{9F32}\x{9F33}\x{9F34}' .
+'\x{9F35}\x{9F36}\x{9F37}\x{9F38}\x{9F39}\x{9F3A}\x{9F3B}\x{9F3C}\x{9F3D}' .
+'\x{9F3E}\x{9F3F}\x{9F40}\x{9F41}\x{9F42}\x{9F43}\x{9F44}\x{9F46}\x{9F47}' .
+'\x{9F48}\x{9F49}\x{9F4A}\x{9F4B}\x{9F4C}\x{9F4D}\x{9F4E}\x{9F4F}\x{9F50}' .
+'\x{9F51}\x{9F52}\x{9F54}\x{9F55}\x{9F56}\x{9F57}\x{9F58}\x{9F59}\x{9F5A}' .
+'\x{9F5B}\x{9F5C}\x{9F5D}\x{9F5E}\x{9F5F}\x{9F60}\x{9F61}\x{9F63}\x{9F64}' .
+'\x{9F65}\x{9F66}\x{9F67}\x{9F68}\x{9F69}\x{9F6A}\x{9F6B}\x{9F6C}\x{9F6E}' .
+'\x{9F6F}\x{9F70}\x{9F71}\x{9F72}\x{9F73}\x{9F74}\x{9F75}\x{9F76}\x{9F77}' .
+'\x{9F78}\x{9F79}\x{9F7A}\x{9F7B}\x{9F7C}\x{9F7D}\x{9F7E}\x{9F7F}\x{9F80}' .
+'\x{9F81}\x{9F82}\x{9F83}\x{9F84}\x{9F85}\x{9F86}\x{9F87}\x{9F88}\x{9F89}' .
+'\x{9F8A}\x{9F8B}\x{9F8C}\x{9F8D}\x{9F8E}\x{9F8F}\x{9F90}\x{9F91}\x{9F92}' .
+'\x{9F93}\x{9F94}\x{9F95}\x{9F96}\x{9F97}\x{9F98}\x{9F99}\x{9F9A}\x{9F9B}' .
+'\x{9F9C}\x{9F9D}\x{9F9E}\x{9F9F}\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu');
diff --git a/zend/library/Zend/Validate/Hostname/Com.php b/zend/library/Zend/Validate/Hostname/Com.php
new file mode 100644
index 0000000..334949c
--- /dev/null
+++ b/zend/library/Zend/Validate/Hostname/Com.php
@@ -0,0 +1,198 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Com.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Ressource file for com and net idn validation
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+return array(
+ 1 => '/^[\x{002d}0-9\x{0400}-\x{052f}]{1,63}$/iu',
+ 2 => '/^[\x{002d}0-9\x{0370}-\x{03ff}]{1,63}$/iu',
+ 3 => '/^[\x{002d}0-9a-z\x{ac00}-\x{d7a3}]{1,17}$/iu',
+ 4 => '/^[\x{002d}0-9a-z·à-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž]{1,63}$/iu',
+ 5 => '/^[\x{002d}0-9A-Za-z\x{3400}-\x{3401}\x{3404}-\x{3406}\x{340C}\x{3416}\x{341C}' .
+'\x{3421}\x{3424}\x{3428}-\x{3429}\x{342B}-\x{342E}\x{3430}-\x{3434}\x{3436}' .
+'\x{3438}-\x{343C}\x{343E}\x{3441}-\x{3445}\x{3447}\x{3449}-\x{3451}\x{3453}' .
+'\x{3457}-\x{345F}\x{3463}-\x{3467}\x{346E}-\x{3471}\x{3473}-\x{3477}\x{3479}-\x{348E}\x{3491}-\x{3497}' .
+'\x{3499}-\x{34A1}\x{34A4}-\x{34AD}\x{34AF}-\x{34B0}\x{34B2}-\x{34BF}\x{34C2}-\x{34C5}\x{34C7}-\x{34CC}' .
+'\x{34CE}-\x{34D1}\x{34D3}-\x{34D8}\x{34DA}-\x{34E4}\x{34E7}-\x{34E9}\x{34EC}-\x{34EF}\x{34F1}-\x{34FE}' .
+'\x{3500}-\x{3507}\x{350A}-\x{3513}\x{3515}\x{3517}-\x{351A}\x{351C}-\x{351E}\x{3520}-\x{352A}' .
+'\x{352C}-\x{3552}\x{3554}-\x{355C}\x{355E}-\x{3567}\x{3569}-\x{3573}\x{3575}-\x{357C}\x{3580}-\x{3588}' .
+'\x{358F}-\x{3598}\x{359E}-\x{35AB}\x{35B4}-\x{35CD}\x{35D0}\x{35D3}-\x{35DC}\x{35E2}-\x{35ED}' .
+'\x{35F0}-\x{35F6}\x{35FB}-\x{3602}\x{3605}-\x{360E}\x{3610}-\x{3611}\x{3613}-\x{3616}\x{3619}-\x{362D}' .
+'\x{362F}-\x{3634}\x{3636}-\x{363B}\x{363F}-\x{3645}\x{3647}-\x{364B}\x{364D}-\x{3653}\x{3655}' .
+'\x{3659}-\x{365E}\x{3660}-\x{3665}\x{3667}-\x{367C}\x{367E}\x{3680}-\x{3685}\x{3687}' .
+'\x{3689}-\x{3690}\x{3692}-\x{3698}\x{369A}\x{369C}-\x{36AE}\x{36B0}-\x{36BF}\x{36C1}-\x{36C5}' .
+'\x{36C9}-\x{36CA}\x{36CD}-\x{36DE}\x{36E1}-\x{36E2}\x{36E5}-\x{36FE}\x{3701}-\x{3713}\x{3715}-\x{371E}' .
+'\x{3720}-\x{372C}\x{372E}-\x{3745}\x{3747}-\x{3748}\x{374A}\x{374C}-\x{3759}\x{375B}-\x{3760}' .
+'\x{3762}-\x{3767}\x{3769}-\x{3772}\x{3774}-\x{378C}\x{378F}-\x{379C}\x{379F}\x{37A1}-\x{37AD}' .
+'\x{37AF}-\x{37B7}\x{37B9}-\x{37C1}\x{37C3}-\x{37C5}\x{37C7}-\x{37D4}\x{37D6}-\x{37E0}\x{37E2}' .
+'\x{37E5}-\x{37ED}\x{37EF}-\x{37F6}\x{37F8}-\x{3802}\x{3804}-\x{381D}\x{3820}-\x{3822}\x{3825}-\x{382A}' .
+'\x{382D}-\x{382F}\x{3831}-\x{3832}\x{3834}-\x{384C}\x{384E}-\x{3860}\x{3862}-\x{3863}\x{3865}-\x{386B}' .
+'\x{386D}-\x{3886}\x{3888}-\x{38A1}\x{38A3}\x{38A5}-\x{38AA}\x{38AC}\x{38AE}-\x{38B0}' .
+'\x{38B2}-\x{38B6}\x{38B8}\x{38BA}-\x{38BE}\x{38C0}-\x{38C9}\x{38CB}-\x{38D4}\x{38D8}-\x{38E0}' .
+'\x{38E2}-\x{38E6}\x{38EB}-\x{38ED}\x{38EF}-\x{38F2}\x{38F5}-\x{38F7}\x{38FA}-\x{38FF}\x{3901}-\x{392A}' .
+'\x{392C}\x{392E}-\x{393B}\x{393E}-\x{3956}\x{395A}-\x{3969}\x{396B}-\x{397A}\x{397C}-\x{3987}' .
+'\x{3989}-\x{3998}\x{399A}-\x{39B0}\x{39B2}\x{39B4}-\x{39D0}\x{39D2}-\x{39DA}\x{39DE}-\x{39DF}' .
+'\x{39E1}-\x{39EF}\x{39F1}-\x{3A17}\x{3A19}-\x{3A2A}\x{3A2D}-\x{3A40}\x{3A43}-\x{3A4E}\x{3A50}' .
+'\x{3A52}-\x{3A5E}\x{3A60}-\x{3A6D}\x{3A6F}-\x{3A77}\x{3A79}-\x{3A82}\x{3A84}-\x{3A85}\x{3A87}-\x{3A89}' .
+'\x{3A8B}-\x{3A8F}\x{3A91}-\x{3A93}\x{3A95}-\x{3A96}\x{3A9A}\x{3A9C}-\x{3AA6}\x{3AA8}-\x{3AA9}' .
+'\x{3AAB}-\x{3AB1}\x{3AB4}-\x{3ABC}\x{3ABE}-\x{3AC5}\x{3ACA}-\x{3ACB}\x{3ACD}-\x{3AD5}\x{3AD7}-\x{3AE1}' .
+'\x{3AE4}-\x{3AE7}\x{3AE9}-\x{3AEC}\x{3AEE}-\x{3AFD}\x{3B01}-\x{3B10}\x{3B12}-\x{3B15}\x{3B17}-\x{3B1E}' .
+'\x{3B20}-\x{3B23}\x{3B25}-\x{3B27}\x{3B29}-\x{3B36}\x{3B38}-\x{3B39}\x{3B3B}-\x{3B3C}\x{3B3F}' .
+'\x{3B41}-\x{3B44}\x{3B47}-\x{3B4C}\x{3B4E}\x{3B51}-\x{3B55}\x{3B58}-\x{3B62}\x{3B68}-\x{3B72}' .
+'\x{3B78}-\x{3B88}\x{3B8B}-\x{3B9F}\x{3BA1}\x{3BA3}-\x{3BBA}\x{3BBC}\x{3BBF}-\x{3BD0}' .
+'\x{3BD3}-\x{3BE6}\x{3BEA}-\x{3BFB}\x{3BFE}-\x{3C12}\x{3C14}-\x{3C1B}\x{3C1D}-\x{3C37}\x{3C39}-\x{3C4F}' .
+'\x{3C52}\x{3C54}-\x{3C5C}\x{3C5E}-\x{3C68}\x{3C6A}-\x{3C76}\x{3C78}-\x{3C8F}\x{3C91}-\x{3CA8}' .
+'\x{3CAA}-\x{3CAD}\x{3CAF}-\x{3CBE}\x{3CC0}-\x{3CC8}\x{3CCA}-\x{3CD3}\x{3CD6}-\x{3CE0}\x{3CE4}-\x{3CEE}' .
+'\x{3CF3}-\x{3D0A}\x{3D0E}-\x{3D1E}\x{3D20}-\x{3D21}\x{3D25}-\x{3D38}\x{3D3B}-\x{3D46}\x{3D4A}-\x{3D59}' .
+'\x{3D5D}-\x{3D7B}\x{3D7D}-\x{3D81}\x{3D84}-\x{3D88}\x{3D8C}-\x{3D8F}\x{3D91}-\x{3D98}\x{3D9A}-\x{3D9C}' .
+'\x{3D9E}-\x{3DA1}\x{3DA3}-\x{3DB0}\x{3DB2}-\x{3DB5}\x{3DB9}-\x{3DBC}\x{3DBE}-\x{3DCB}\x{3DCD}-\x{3DDB}' .
+'\x{3DDF}-\x{3DE8}\x{3DEB}-\x{3DF0}\x{3DF3}-\x{3DF9}\x{3DFB}-\x{3DFC}\x{3DFE}-\x{3E05}\x{3E08}-\x{3E33}' .
+'\x{3E35}-\x{3E3E}\x{3E40}-\x{3E47}\x{3E49}-\x{3E67}\x{3E6B}-\x{3E6F}\x{3E71}-\x{3E85}\x{3E87}-\x{3E8C}' .
+'\x{3E8E}-\x{3E98}\x{3E9A}-\x{3EA1}\x{3EA3}-\x{3EAE}\x{3EB0}-\x{3EB5}\x{3EB7}-\x{3EBA}\x{3EBD}' .
+'\x{3EBF}-\x{3EC4}\x{3EC7}-\x{3ECE}\x{3ED1}-\x{3ED7}\x{3ED9}-\x{3EDA}\x{3EDD}-\x{3EE3}\x{3EE7}-\x{3EE8}' .
+'\x{3EEB}-\x{3EF2}\x{3EF5}-\x{3EFF}\x{3F01}-\x{3F02}\x{3F04}-\x{3F07}\x{3F09}-\x{3F44}\x{3F46}-\x{3F4E}' .
+'\x{3F50}-\x{3F53}\x{3F55}-\x{3F72}\x{3F74}-\x{3F75}\x{3F77}-\x{3F7B}\x{3F7D}-\x{3FB0}\x{3FB6}-\x{3FBF}' .
+'\x{3FC1}-\x{3FCF}\x{3FD1}-\x{3FD3}\x{3FD5}-\x{3FDF}\x{3FE1}-\x{400B}\x{400D}-\x{401C}\x{401E}-\x{4024}' .
+'\x{4027}-\x{403F}\x{4041}-\x{4060}\x{4062}-\x{4069}\x{406B}-\x{408A}\x{408C}-\x{40A7}\x{40A9}-\x{40B4}' .
+'\x{40B6}-\x{40C2}\x{40C7}-\x{40CF}\x{40D1}-\x{40DE}\x{40E0}-\x{40E7}\x{40E9}-\x{40EE}\x{40F0}-\x{40FB}' .
+'\x{40FD}-\x{4109}\x{410B}-\x{4115}\x{4118}-\x{411D}\x{411F}-\x{4122}\x{4124}-\x{4133}\x{4136}-\x{4138}' .
+'\x{413A}-\x{4148}\x{414A}-\x{4169}\x{416C}-\x{4185}\x{4188}-\x{418B}\x{418D}-\x{41AD}\x{41AF}-\x{41B3}' .
+'\x{41B5}-\x{41C3}\x{41C5}-\x{41C9}\x{41CB}-\x{41F2}\x{41F5}-\x{41FE}\x{4200}-\x{4227}\x{422A}-\x{4246}' .
+'\x{4248}-\x{4263}\x{4265}-\x{428B}\x{428D}-\x{42A1}\x{42A3}-\x{42C4}\x{42C8}-\x{42DC}\x{42DE}-\x{430A}' .
+'\x{430C}-\x{4335}\x{4337}\x{4342}-\x{435F}\x{4361}-\x{439A}\x{439C}-\x{439D}\x{439F}-\x{43A4}' .
+'\x{43A6}-\x{43EC}\x{43EF}-\x{4405}\x{4407}-\x{4429}\x{442B}-\x{4455}\x{4457}-\x{4468}\x{446A}-\x{446D}' .
+'\x{446F}-\x{4476}\x{4479}-\x{447D}\x{447F}-\x{4486}\x{4488}-\x{4490}\x{4492}-\x{4498}\x{449A}-\x{44AD}' .
+'\x{44B0}-\x{44BD}\x{44C1}-\x{44D3}\x{44D6}-\x{44E7}\x{44EA}\x{44EC}-\x{44FA}\x{44FC}-\x{4541}' .
+'\x{4543}-\x{454F}\x{4551}-\x{4562}\x{4564}-\x{4575}\x{4577}-\x{45AB}\x{45AD}-\x{45BD}\x{45BF}-\x{45D5}' .
+'\x{45D7}-\x{45EC}\x{45EE}-\x{45F2}\x{45F4}-\x{45FA}\x{45FC}-\x{461A}\x{461C}-\x{461D}\x{461F}-\x{4631}' .
+'\x{4633}-\x{4649}\x{464C}\x{464E}-\x{4652}\x{4654}-\x{466A}\x{466C}-\x{4675}\x{4677}-\x{467A}' .
+'\x{467C}-\x{4694}\x{4696}-\x{46A3}\x{46A5}-\x{46AB}\x{46AD}-\x{46D2}\x{46D4}-\x{4723}\x{4729}-\x{4732}' .
+'\x{4734}-\x{4758}\x{475A}\x{475C}-\x{478B}\x{478D}\x{4791}-\x{47B1}\x{47B3}-\x{47F1}' .
+'\x{47F3}-\x{480B}\x{480D}-\x{4815}\x{4817}-\x{4839}\x{483B}-\x{4870}\x{4872}-\x{487A}\x{487C}-\x{487F}' .
+'\x{4883}-\x{488E}\x{4890}-\x{4896}\x{4899}-\x{48A2}\x{48A4}-\x{48B9}\x{48BB}-\x{48C8}\x{48CA}-\x{48D1}' .
+'\x{48D3}-\x{48E5}\x{48E7}-\x{48F2}\x{48F4}-\x{48FF}\x{4901}-\x{4922}\x{4924}-\x{4928}\x{492A}-\x{4931}' .
+'\x{4933}-\x{495B}\x{495D}-\x{4978}\x{497A}\x{497D}\x{4982}-\x{4983}\x{4985}-\x{49A8}' .
+'\x{49AA}-\x{49AF}\x{49B1}-\x{49B7}\x{49B9}-\x{49BD}\x{49C1}-\x{49C7}\x{49C9}-\x{49CE}\x{49D0}-\x{49E8}' .
+'\x{49EA}\x{49EC}\x{49EE}-\x{4A19}\x{4A1B}-\x{4A43}\x{4A45}-\x{4A4D}\x{4A4F}-\x{4A9E}' .
+'\x{4AA0}-\x{4AA9}\x{4AAB}-\x{4B4E}\x{4B50}-\x{4B5B}\x{4B5D}-\x{4B69}\x{4B6B}-\x{4BC2}\x{4BC6}-\x{4BE8}' .
+'\x{4BEA}-\x{4BFA}\x{4BFC}-\x{4C06}\x{4C08}-\x{4C2D}\x{4C2F}-\x{4C32}\x{4C34}-\x{4C35}\x{4C37}-\x{4C69}' .
+'\x{4C6B}-\x{4C73}\x{4C75}-\x{4C86}\x{4C88}-\x{4C97}\x{4C99}-\x{4C9C}\x{4C9F}-\x{4CA3}\x{4CA5}-\x{4CB5}' .
+'\x{4CB7}-\x{4CF8}\x{4CFA}-\x{4D27}\x{4D29}-\x{4DAC}\x{4DAE}-\x{4DB1}\x{4DB3}-\x{4DB5}\x{4E00}-\x{4E54}' .
+'\x{4E56}-\x{4E89}\x{4E8B}-\x{4EEC}\x{4EEE}-\x{4FAC}\x{4FAE}-\x{503C}\x{503E}-\x{51E5}\x{51E7}-\x{5270}' .
+'\x{5272}-\x{56A1}\x{56A3}-\x{5840}\x{5842}-\x{58B5}\x{58B7}-\x{58CB}\x{58CD}-\x{5BC8}\x{5BCA}-\x{5C01}' .
+'\x{5C03}-\x{5C25}\x{5C27}-\x{5D5B}\x{5D5D}-\x{5F08}\x{5F0A}-\x{61F3}\x{61F5}-\x{63BA}\x{63BC}-\x{6441}' .
+'\x{6443}-\x{657C}\x{657E}-\x{663E}\x{6640}-\x{66FC}\x{66FE}-\x{6728}\x{672A}-\x{6766}\x{6768}-\x{67A8}' .
+'\x{67AA}-\x{685B}\x{685D}-\x{685E}\x{6860}-\x{68B9}\x{68BB}-\x{6AC8}\x{6ACA}-\x{6BB0}\x{6BB2}-\x{6C16}' .
+'\x{6C18}-\x{6D9B}\x{6D9D}-\x{6E12}\x{6E14}-\x{6E8B}\x{6E8D}-\x{704D}\x{704F}-\x{7113}\x{7115}-\x{713B}' .
+'\x{713D}-\x{7154}\x{7156}-\x{729F}\x{72A1}-\x{731E}\x{7320}-\x{7362}\x{7364}-\x{7533}\x{7535}-\x{7551}' .
+'\x{7553}-\x{7572}\x{7574}-\x{75E8}\x{75EA}-\x{7679}\x{767B}-\x{783E}\x{7840}-\x{7A62}\x{7A64}-\x{7AC2}' .
+'\x{7AC4}-\x{7B06}\x{7B08}-\x{7B79}\x{7B7B}-\x{7BCE}\x{7BD0}-\x{7D99}\x{7D9B}-\x{7E49}\x{7E4C}-\x{8132}' .
+'\x{8134}\x{8136}-\x{81D2}\x{81D4}-\x{8216}\x{8218}-\x{822D}\x{822F}-\x{83B4}\x{83B6}-\x{841F}' .
+'\x{8421}-\x{86CC}\x{86CE}-\x{874A}\x{874C}-\x{877E}\x{8780}-\x{8A32}\x{8A34}-\x{8B71}\x{8B73}-\x{8B8E}' .
+'\x{8B90}-\x{8DE4}\x{8DE6}-\x{8E9A}\x{8E9C}-\x{8EE1}\x{8EE4}-\x{8F0B}\x{8F0D}-\x{8FB9}\x{8FBB}-\x{9038}' .
+'\x{903A}-\x{9196}\x{9198}-\x{91A3}\x{91A5}-\x{91B7}\x{91B9}-\x{91C7}\x{91C9}-\x{91E0}\x{91E2}-\x{91FB}' .
+'\x{91FD}-\x{922B}\x{922D}-\x{9270}\x{9272}-\x{9420}\x{9422}-\x{9664}\x{9666}-\x{9679}\x{967B}-\x{9770}' .
+'\x{9772}-\x{982B}\x{982D}-\x{98ED}\x{98EF}-\x{99C4}\x{99C6}-\x{9A11}\x{9A14}-\x{9A27}\x{9A29}-\x{9D0D}' .
+'\x{9D0F}-\x{9D2B}\x{9D2D}-\x{9D8E}\x{9D90}-\x{9DC5}\x{9DC7}-\x{9E77}\x{9E79}-\x{9EB8}\x{9EBB}-\x{9F20}' .
+'\x{9F22}-\x{9F61}\x{9F63}-\x{9FA5}\x{FA28}]{1,20}$/iu',
+ 6 => '/^[\x{002d}0-9A-Za-z]{1,63}$/iu',
+ 7 => '/^[\x{00A1}-\x{00FF}]{1,63}$/iu',
+ 8 => '/^[\x{0100}-\x{017f}]{1,63}$/iu',
+ 9 => '/^[\x{0180}-\x{024f}]{1,63}$/iu',
+ 10 => '/^[\x{0250}-\x{02af}]{1,63}$/iu',
+ 11 => '/^[\x{02b0}-\x{02ff}]{1,63}$/iu',
+ 12 => '/^[\x{0300}-\x{036f}]{1,63}$/iu',
+ 13 => '/^[\x{0370}-\x{03ff}]{1,63}$/iu',
+ 14 => '/^[\x{0400}-\x{04ff}]{1,63}$/iu',
+ 15 => '/^[\x{0500}-\x{052f}]{1,63}$/iu',
+ 16 => '/^[\x{0530}-\x{058F}]{1,63}$/iu',
+ 17 => '/^[\x{0590}-\x{05FF}]{1,63}$/iu',
+ 18 => '/^[\x{0600}-\x{06FF}]{1,63}$/iu',
+ 19 => '/^[\x{0700}-\x{074F}]{1,63}$/iu',
+ 20 => '/^[\x{0780}-\x{07BF}]{1,63}$/iu',
+ 21 => '/^[\x{0900}-\x{097F}]{1,63}$/iu',
+ 22 => '/^[\x{0980}-\x{09FF}]{1,63}$/iu',
+ 23 => '/^[\x{0A00}-\x{0A7F}]{1,63}$/iu',
+ 24 => '/^[\x{0A80}-\x{0AFF}]{1,63}$/iu',
+ 25 => '/^[\x{0B00}-\x{0B7F}]{1,63}$/iu',
+ 26 => '/^[\x{0B80}-\x{0BFF}]{1,63}$/iu',
+ 27 => '/^[\x{0C00}-\x{0C7F}]{1,63}$/iu',
+ 28 => '/^[\x{0C80}-\x{0CFF}]{1,63}$/iu',
+ 29 => '/^[\x{0D00}-\x{0D7F}]{1,63}$/iu',
+ 30 => '/^[\x{0D80}-\x{0DFF}]{1,63}$/iu',
+ 31 => '/^[\x{0E00}-\x{0E7F}]{1,63}$/iu',
+ 32 => '/^[\x{0E80}-\x{0EFF}]{1,63}$/iu',
+ 33 => '/^[\x{0F00}-\x{0FFF}]{1,63}$/iu',
+ 34 => '/^[\x{1000}-\x{109F}]{1,63}$/iu',
+ 35 => '/^[\x{10A0}-\x{10FF}]{1,63}$/iu',
+ 36 => '/^[\x{1100}-\x{11FF}]{1,63}$/iu',
+ 37 => '/^[\x{1200}-\x{137F}]{1,63}$/iu',
+ 38 => '/^[\x{13A0}-\x{13FF}]{1,63}$/iu',
+ 39 => '/^[\x{1400}-\x{167F}]{1,63}$/iu',
+ 40 => '/^[\x{1680}-\x{169F}]{1,63}$/iu',
+ 41 => '/^[\x{16A0}-\x{16FF}]{1,63}$/iu',
+ 42 => '/^[\x{1700}-\x{171F}]{1,63}$/iu',
+ 43 => '/^[\x{1720}-\x{173F}]{1,63}$/iu',
+ 44 => '/^[\x{1740}-\x{175F}]{1,63}$/iu',
+ 45 => '/^[\x{1760}-\x{177F}]{1,63}$/iu',
+ 46 => '/^[\x{1780}-\x{17FF}]{1,63}$/iu',
+ 47 => '/^[\x{1800}-\x{18AF}]{1,63}$/iu',
+ 48 => '/^[\x{1E00}-\x{1EFF}]{1,63}$/iu',
+ 49 => '/^[\x{1F00}-\x{1FFF}]{1,63}$/iu',
+ 50 => '/^[\x{2070}-\x{209F}]{1,63}$/iu',
+ 51 => '/^[\x{2100}-\x{214F}]{1,63}$/iu',
+ 52 => '/^[\x{2150}-\x{218F}]{1,63}$/iu',
+ 53 => '/^[\x{2460}-\x{24FF}]{1,63}$/iu',
+ 54 => '/^[\x{2E80}-\x{2EFF}]{1,63}$/iu',
+ 55 => '/^[\x{2F00}-\x{2FDF}]{1,63}$/iu',
+ 56 => '/^[\x{2FF0}-\x{2FFF}]{1,63}$/iu',
+ 57 => '/^[\x{3040}-\x{309F}]{1,63}$/iu',
+ 58 => '/^[\x{30A0}-\x{30FF}]{1,63}$/iu',
+ 59 => '/^[\x{3100}-\x{312F}]{1,63}$/iu',
+ 60 => '/^[\x{3130}-\x{318F}]{1,63}$/iu',
+ 61 => '/^[\x{3190}-\x{319F}]{1,63}$/iu',
+ 62 => '/^[\x{31A0}-\x{31BF}]{1,63}$/iu',
+ 63 => '/^[\x{31F0}-\x{31FF}]{1,63}$/iu',
+ 64 => '/^[\x{3200}-\x{32FF}]{1,63}$/iu',
+ 65 => '/^[\x{3300}-\x{33FF}]{1,63}$/iu',
+ 66 => '/^[\x{3400}-\x{4DBF}]{1,63}$/iu',
+ 67 => '/^[\x{4E00}-\x{9FFF}]{1,63}$/iu',
+ 68 => '/^[\x{A000}-\x{A48F}]{1,63}$/iu',
+ 69 => '/^[\x{A490}-\x{A4CF}]{1,63}$/iu',
+ 70 => '/^[\x{AC00}-\x{D7AF}]{1,63}$/iu',
+ 71 => '/^[\x{D800}-\x{DB7F}]{1,63}$/iu',
+ 72 => '/^[\x{DC00}-\x{DFFF}]{1,63}$/iu',
+ 73 => '/^[\x{F900}-\x{FAFF}]{1,63}$/iu',
+ 74 => '/^[\x{FB00}-\x{FB4F}]{1,63}$/iu',
+ 75 => '/^[\x{FB50}-\x{FDFF}]{1,63}$/iu',
+ 76 => '/^[\x{FE20}-\x{FE2F}]{1,63}$/iu',
+ 77 => '/^[\x{FE70}-\x{FEFF}]{1,63}$/iu',
+ 78 => '/^[\x{FF00}-\x{FFEF}]{1,63}$/iu',
+ 79 => '/^[\x{20000}-\x{2A6DF}]{1,63}$/iu',
+ 80 => '/^[\x{2F800}-\x{2FA1F}]{1,63}$/iu'
+
+); \ No newline at end of file
diff --git a/zend/library/Zend/Validate/Hostname/Jp.php b/zend/library/Zend/Validate/Hostname/Jp.php
new file mode 100644
index 0000000..1a893a6
--- /dev/null
+++ b/zend/library/Zend/Validate/Hostname/Jp.php
@@ -0,0 +1,739 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Jp.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * Ressource file for japanese idn validation
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+return array(
+ 1 => '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}' .
+'\x{30A1}-\x{30F6}\x{30FC}' .
+'\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
+'\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' .
+'\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' .
+'\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' .
+'\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' .
+'\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' .
+'\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' .
+'\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' .
+'\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' .
+'\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' .
+'\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' .
+'\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' .
+'\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' .
+'\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' .
+'\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' .
+'\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' .
+'\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' .
+'\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' .
+'\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' .
+'\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' .
+'\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' .
+'\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' .
+'\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' .
+'\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' .
+'\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' .
+'\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' .
+'\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' .
+'\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' .
+'\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' .
+'\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' .
+'\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' .
+'\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' .
+'\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' .
+'\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' .
+'\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
+'\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' .
+'\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' .
+'\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' .
+'\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' .
+'\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' .
+'\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' .
+'\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' .
+'\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' .
+'\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' .
+'\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' .
+'\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' .
+'\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' .
+'\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' .
+'\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' .
+'\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' .
+'\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' .
+'\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' .
+'\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' .
+'\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' .
+'\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' .
+'\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' .
+'\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' .
+'\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' .
+'\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' .
+'\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' .
+'\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' .
+'\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' .
+'\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' .
+'\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' .
+'\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' .
+'\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' .
+'\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' .
+'\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' .
+'\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' .
+'\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' .
+'\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' .
+'\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' .
+'\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' .
+'\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' .
+'\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' .
+'\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' .
+'\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' .
+'\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' .
+'\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' .
+'\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' .
+'\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' .
+'\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' .
+'\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' .
+'\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' .
+'\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' .
+'\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' .
+'\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' .
+'\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' .
+'\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' .
+'\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' .
+'\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' .
+'\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' .
+'\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' .
+'\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' .
+'\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' .
+'\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' .
+'\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' .
+'\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' .
+'\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' .
+'\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' .
+'\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' .
+'\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' .
+'\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' .
+'\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' .
+'\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' .
+'\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' .
+'\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' .
+'\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' .
+'\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' .
+'\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' .
+'\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' .
+'\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' .
+'\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' .
+'\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' .
+'\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' .
+'\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' .
+'\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' .
+'\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' .
+'\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' .
+'\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' .
+'\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' .
+'\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' .
+'\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' .
+'\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' .
+'\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' .
+'\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' .
+'\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' .
+'\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' .
+'\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' .
+'\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' .
+'\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' .
+'\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' .
+'\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' .
+'\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' .
+'\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' .
+'\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' .
+'\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' .
+'\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' .
+'\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' .
+'\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' .
+'\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' .
+'\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' .
+'\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' .
+'\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' .
+'\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' .
+'\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' .
+'\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' .
+'\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' .
+'\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' .
+'\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' .
+'\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' .
+'\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' .
+'\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' .
+'\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' .
+'\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' .
+'\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' .
+'\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' .
+'\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' .
+'\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' .
+'\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' .
+'\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' .
+'\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' .
+'\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' .
+'\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' .
+'\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' .
+'\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' .
+'\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' .
+'\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' .
+'\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' .
+'\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' .
+'\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' .
+'\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' .
+'\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' .
+'\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' .
+'\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' .
+'\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' .
+'\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' .
+'\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' .
+'\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' .
+'\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' .
+'\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' .
+'\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' .
+'\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' .
+'\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' .
+'\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' .
+'\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' .
+'\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' .
+'\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' .
+'\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' .
+'\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' .
+'\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' .
+'\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' .
+'\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' .
+'\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' .
+'\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' .
+'\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' .
+'\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
+'\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' .
+'\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' .
+'\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' .
+'\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' .
+'\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' .
+'\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' .
+'\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' .
+'\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' .
+'\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' .
+'\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' .
+'\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' .
+'\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' .
+'\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' .
+'\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' .
+'\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' .
+'\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' .
+'\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' .
+'\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' .
+'\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' .
+'\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' .
+'\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' .
+'\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' .
+'\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' .
+'\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' .
+'\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' .
+'\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' .
+'\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' .
+'\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' .
+'\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' .
+'\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' .
+'\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' .
+'\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' .
+'\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' .
+'\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' .
+'\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' .
+'\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' .
+'\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' .
+'\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' .
+'\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' .
+'\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' .
+'\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' .
+'\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' .
+'\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' .
+'\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' .
+'\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' .
+'\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' .
+'\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' .
+'\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' .
+'\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' .
+'\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' .
+'\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' .
+'\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' .
+'\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' .
+'\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' .
+'\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' .
+'\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
+'\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' .
+'\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' .
+'\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' .
+'\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' .
+'\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' .
+'\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' .
+'\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' .
+'\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' .
+'\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' .
+'\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' .
+'\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' .
+'\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' .
+'\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' .
+'\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' .
+'\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' .
+'\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' .
+'\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' .
+'\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' .
+'\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' .
+'\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' .
+'\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' .
+'\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' .
+'\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' .
+'\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' .
+'\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' .
+'\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' .
+'\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' .
+'\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' .
+'\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' .
+'\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' .
+'\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' .
+'\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' .
+'\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' .
+'\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' .
+'\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' .
+'\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' .
+'\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' .
+'\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' .
+'\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' .
+'\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' .
+'\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' .
+'\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' .
+'\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' .
+'\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' .
+'\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' .
+'\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' .
+'\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' .
+'\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' .
+'\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' .
+'\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' .
+'\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' .
+'\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' .
+'\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' .
+'\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' .
+'\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' .
+'\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' .
+'\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' .
+'\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' .
+'\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' .
+'\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' .
+'\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' .
+'\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' .
+'\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' .
+'\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' .
+'\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' .
+'\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' .
+'\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' .
+'\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' .
+'\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' .
+'\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' .
+'\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' .
+'\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' .
+'\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' .
+'\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' .
+'\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' .
+'\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' .
+'\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' .
+'\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' .
+'\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' .
+'\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' .
+'\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' .
+'\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' .
+'\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' .
+'\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' .
+'\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' .
+'\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' .
+'\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' .
+'\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' .
+'\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' .
+'\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' .
+'\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' .
+'\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' .
+'\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' .
+'\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' .
+'\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' .
+'\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' .
+'\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' .
+'\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' .
+'\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' .
+'\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' .
+'\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' .
+'\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' .
+'\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' .
+'\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' .
+'\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' .
+'\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' .
+'\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' .
+'\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' .
+'\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' .
+'\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' .
+'\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' .
+'\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' .
+'\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' .
+'\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' .
+'\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' .
+'\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' .
+'\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' .
+'\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' .
+'\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' .
+'\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' .
+'\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' .
+'\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' .
+'\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' .
+'\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' .
+'\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' .
+'\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' .
+'\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' .
+'\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' .
+'\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' .
+'\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' .
+'\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' .
+'\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' .
+'\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' .
+'\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' .
+'\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' .
+'\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' .
+'\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' .
+'\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' .
+'\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' .
+'\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' .
+'\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' .
+'\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' .
+'\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' .
+'\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' .
+'\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' .
+'\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' .
+'\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' .
+'\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' .
+'\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' .
+'\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' .
+'\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' .
+'\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' .
+'\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' .
+'\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' .
+'\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' .
+'\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' .
+'\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' .
+'\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
+'\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' .
+'\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' .
+'\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' .
+'\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' .
+'\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' .
+'\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' .
+'\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' .
+'\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' .
+'\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' .
+'\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' .
+'\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' .
+'\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' .
+'\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' .
+'\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' .
+'\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' .
+'\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' .
+'\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' .
+'\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' .
+'\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' .
+'\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' .
+'\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' .
+'\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' .
+'\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' .
+'\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' .
+'\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' .
+'\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' .
+'\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' .
+'\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' .
+'\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' .
+'\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' .
+'\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' .
+'\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' .
+'\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' .
+'\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' .
+'\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' .
+'\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' .
+'\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' .
+'\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' .
+'\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' .
+'\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' .
+'\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' .
+'\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' .
+'\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' .
+'\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' .
+'\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' .
+'\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' .
+'\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' .
+'\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' .
+'\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' .
+'\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' .
+'\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' .
+'\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' .
+'\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' .
+'\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' .
+'\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' .
+'\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' .
+'\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' .
+'\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' .
+'\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' .
+'\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' .
+'\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' .
+'\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' .
+'\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' .
+'\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' .
+'\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' .
+'\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' .
+'\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' .
+'\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' .
+'\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' .
+'\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' .
+'\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' .
+'\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' .
+'\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' .
+'\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' .
+'\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' .
+'\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' .
+'\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' .
+'\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' .
+'\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' .
+'\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' .
+'\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' .
+'\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' .
+'\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' .
+'\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' .
+'\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' .
+'\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' .
+'\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' .
+'\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' .
+'\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' .
+'\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' .
+'\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' .
+'\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' .
+'\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' .
+'\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' .
+'\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' .
+'\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' .
+'\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' .
+'\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' .
+'\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' .
+'\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' .
+'\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' .
+'\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' .
+'\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' .
+'\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' .
+'\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' .
+'\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' .
+'\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' .
+'\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' .
+'\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' .
+'\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' .
+'\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' .
+'\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' .
+'\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' .
+'\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' .
+'\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' .
+'\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' .
+'\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' .
+'\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' .
+'\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' .
+'\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' .
+'\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' .
+'\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' .
+'\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' .
+'\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' .
+'\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' .
+'\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' .
+'\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' .
+'\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' .
+'\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' .
+'\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' .
+'\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' .
+'\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' .
+'\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' .
+'\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' .
+'\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' .
+'\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' .
+'\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' .
+'\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' .
+'\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' .
+'\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' .
+'\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' .
+'\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' .
+'\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' .
+'\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' .
+'\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' .
+'\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' .
+'\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' .
+'\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' .
+'\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' .
+'\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' .
+'\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' .
+'\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' .
+'\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' .
+'\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' .
+'\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' .
+'\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' .
+'\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' .
+'\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' .
+'\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' .
+'\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' .
+'\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' .
+'\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' .
+'\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' .
+'\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' .
+'\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' .
+'\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' .
+'\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' .
+'\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' .
+'\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' .
+'\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' .
+'\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' .
+'\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' .
+'\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' .
+'\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' .
+'\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' .
+'\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' .
+'\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' .
+'\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' .
+'\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' .
+'\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' .
+'\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' .
+'\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' .
+'\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' .
+'\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' .
+'\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' .
+'\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' .
+'\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' .
+'\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' .
+'\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' .
+'\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' .
+'\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' .
+'\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' .
+'\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' .
+'\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' .
+'\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' .
+'\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' .
+'\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' .
+'\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' .
+'\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' .
+'\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' .
+'\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' .
+'\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' .
+'\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' .
+'\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' .
+'\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' .
+'\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' .
+'\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' .
+'\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' .
+'\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' .
+'\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' .
+'\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' .
+'\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' .
+'\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' .
+'\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' .
+'\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' .
+'\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' .
+'\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' .
+'\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' .
+'\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' .
+'\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' .
+'\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' .
+'\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' .
+'\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' .
+'\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' .
+'\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' .
+'\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' .
+'\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' .
+'\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' .
+'\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' .
+'\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' .
+'\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' .
+'\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' .
+'\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' .
+'\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' .
+'\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' .
+'\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' .
+'\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' .
+'\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' .
+'\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' .
+'\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' .
+'\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' .
+'\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' .
+'\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' .
+'\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' .
+'\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' .
+'\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' .
+'\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' .
+'\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' .
+'\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' .
+'\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' .
+'\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' .
+'\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' .
+'\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' .
+'\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' .
+'\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' .
+'\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' .
+'\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' .
+'\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' .
+'\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' .
+'\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' .
+'\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' .
+'\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' .
+'\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' .
+'\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' .
+'\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' .
+'\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' .
+'\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' .
+'\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' .
+'\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' .
+'\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' .
+'\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' .
+'\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' .
+'\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' .
+'\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' .
+'\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' .
+'\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' .
+'\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' .
+'\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' .
+'\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
+'\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' .
+'\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' .
+'\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' .
+'\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' .
+'\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' .
+'\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' .
+'\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' .
+'\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' .
+'\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' .
+'\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' .
+'\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' .
+'\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' .
+'\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' .
+'\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' .
+'\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' .
+'\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' .
+'\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu');
diff --git a/zend/library/Zend/Validate/Interface.php b/zend/library/Zend/Validate/Interface.php
new file mode 100644
index 0000000..6f9a71a
--- /dev/null
+++ b/zend/library/Zend/Validate/Interface.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+interface Zend_Validate_Interface
+{
+ /**
+ * Returns true if and only if $value meets the validation requirements
+ *
+ * If $value fails validation, then this method returns false, and
+ * getMessages() will return an array of messages that explain why the
+ * validation failed.
+ *
+ * @param mixed $value
+ * @return boolean
+ * @throws Zend_Validate_Exception If validation of $value is impossible
+ */
+ public function isValid($value);
+
+ /**
+ * Returns an array of messages that explain why the most recent isValid()
+ * call returned false. The array keys are validation failure message identifiers,
+ * and the array values are the corresponding human-readable message strings.
+ *
+ * If isValid() was never called or if the most recent isValid() call
+ * returned true, then this method returns an empty array.
+ *
+ * @return array
+ */
+ public function getMessages();
+}
diff --git a/zend/library/Zend/Validate/Ip.php b/zend/library/Zend/Validate/Ip.php
new file mode 100644
index 0000000..e0740c0
--- /dev/null
+++ b/zend/library/Zend/Validate/Ip.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Ip.php 24593 2012-01-05 20:35:02Z matthew $
+ */
+
+/**
+ * @see Zend_Validate_Abstract
+ */
+require_once 'Zend/Validate/Abstract.php';
+
+/**
+ * @category Zend
+ * @package Zend_Validate
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Validate_Ip extends Zend_Validate_Abstract
+{
+ const INVALID = 'ipInvalid';
+ const NOT_IP_ADDRESS = 'notIpAddress';
+
+ /**
+ * @var array
+ */
+ protected $_messageTemplates = array(
+ self::INVALID => "Invalid type given. String expected",
+ self::NOT_IP_ADDRESS => "'%value%' does not appear to be a valid IP address",
+ );
+
+ /**
+ * internal options
+ *
+ * @var array
+ */
+ protected $_options = array(
+ 'allowipv6' => true,
+ 'allowipv4' => true
+ );
+
+ /**
+ * Sets validator options
+ *
+ * @param array $options OPTIONAL Options to set, see the manual for all available options
+ * @return void
+ */
+ public function __construct($options = array())
+ {
+ if ($options instanceof Zend_Config) {
+ $options = $options->toArray();
+ } else if (!is_array($options)) {
+ $options = func_get_args();
+ $temp['allowipv6'] = array_shift($options);
+ if (!empty($options)) {
+ $temp['allowipv4'] = array_shift($options);
+ }
+
+ $options = $temp;
+ }
+
+ $options += $this->_options;
+ $this->setOptions($options);
+ }
+
+ /**
+ * Returns all set options
+ *
+ * @return array
+ */
+ public function getOptions()
+ {
+ return $this->_options;
+ }
+
+ /**
+ * Sets the options for this validator
+ *
+ * @param array $options
+ * @return Zend_Validate_Ip
+ */
+ public function setOptions($options)
+ {
+ if (array_key_exists('allowipv6', $options)) {
+ $this->_options['allowipv6'] = (boolean) $options['allowipv6'];
+ }
+
+ if (array_key_exists('allowipv4', $options)) {
+ $this->_options['allowipv4'] = (boolean) $options['allowipv4'];
+ }
+
+ if (!$this->_options['allowipv4'] && !$this->_options['allowipv6']) {
+ require_once 'Zend/Validate/Exception.php';
+ throw new Zend_Validate_Exception('Nothing to validate. Check your options');
+ }
+
+ return $this;
+ }
+
+ /**
+ * Defined by Zend_Validate_Interface
+ *
+ * Returns true if and only if $value is a valid IP address
+ *
+ * @param mixed $value
+ * @return boolean
+ */
+ public function isValid($value)
+ {
+ if (!is_string($value)) {
+ $this->_error(self::INVALID);
+ return false;
+ }
+
+ $this->_setValue($value);
+ if (($this->_options['allowipv4'] && !$this->_options['allowipv6'] && !$this->_validateIPv4($value)) ||
+ (!$this->_options['allowipv4'] && $this->_options['allowipv6'] && !$this->_validateIPv6($value)) ||
+ ($this->_options['allowipv4'] && $this->_options['allowipv6'] && !$this->_validateIPv4($value) && !$this->_validateIPv6($value))) {
+ $this->_error(self::NOT_IP_ADDRESS);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Validates an IPv4 address
+ *
+ * @param string $value
+ */
+ protected function _validateIPv4($value) {
+ $ip2long = ip2long($value);
+ if($ip2long === false) {
+ return false;
+ }
+
+ return $value == long2ip($ip2long);
+ }
+
+ /**
+ * Validates an IPv6 address
+ *
+ * @param string $value Value to check against
+ * @return boolean True when $value is a valid ipv6 address
+ * False otherwise
+ */
+ protected function _validateIPv6($value) {
+ if (strlen($value) < 3) {
+ return $value == '::';
+ }
+
+ if (strpos($value, '.')) {
+ $lastcolon = strrpos($value, ':');
+ if (!($lastcolon && $this->_validateIPv4(substr($value, $lastcolon + 1)))) {
+ return false;
+ }
+
+ $value = substr($value, 0, $lastcolon) . ':0:0';
+ }
+
+ if (strpos($value, '::') === false) {
+ return preg_match('/\A(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}\z/i', $value);
+ }
+
+ $colonCount = substr_count($value, ':');
+ if ($colonCount < 8) {
+ return preg_match('/\A(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?\z/i', $value);
+ }
+
+ // special case with ending or starting double colon
+ if ($colonCount == 8) {
+ return preg_match('/\A(?:::)?(?:[a-f0-9]{1,4}:){6}[a-f0-9]{1,4}(?:::)?\z/i', $value);
+ }
+
+ return false;
+ }
+}
diff --git a/zend/library/Zend/Version.php b/zend/library/Zend/Version.php
new file mode 100644
index 0000000..4eda152
--- /dev/null
+++ b/zend/library/Zend/Version.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Version
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ * @version $Id: Version.php 25289 2013-03-13 16:51:14Z matthew $
+ */
+
+/**
+ * Class to store and retrieve the version of Zend Framework.
+ *
+ * @category Zend
+ * @package Zend_Version
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+final class Zend_Version
+{
+ /**
+ * Zend Framework version identification - see compareVersion()
+ */
+ const VERSION = '1.12.3';
+
+ /**
+ * The latest stable version Zend Framework available
+ *
+ * @var string
+ */
+ protected static $_latestVersion;
+
+ /**
+ * Compare the specified Zend Framework version string $version
+ * with the current Zend_Version::VERSION of Zend Framework.
+ *
+ * @param string $version A version string (e.g. "0.7.1").
+ * @return int -1 if the $version is older,
+ * 0 if they are the same,
+ * and +1 if $version is newer.
+ *
+ */
+ public static function compareVersion($version)
+ {
+ $version = strtolower($version);
+ $version = preg_replace('/(\d)pr(\d?)/', '$1a$2', $version);
+ return version_compare($version, strtolower(self::VERSION));
+ }
+
+ /**
+ * Fetches the version of the latest stable release
+ *
+ * @link http://framework.zend.com/download/latest
+ * @return string
+ */
+ public static function getLatest()
+ {
+ if (null === self::$_latestVersion) {
+ self::$_latestVersion = 'not available';
+
+ $handle = fopen('http://framework.zend.com/api/zf-version', 'r');
+ if (false !== $handle) {
+ self::$_latestVersion = stream_get_contents($handle);
+ fclose($handle);
+ }
+ }
+
+ return self::$_latestVersion;
+ }
+}