text:
HomeFront PagePromises, Promises: Affordable College in Pittsburgh and Across Pennsylvania
Promises, Promises: Affordable College in Pittsburgh and Across Pennsylvania
October 31, 2018 Lou Ryan Front Page, General, slideshow 0
Photo: "A Floor of Graduation Caps," by Raja Sambasivan, Flickr (CC BY-NC 2.0)
"Why not free college?"
Sen. Vincent J. Hughes asked this repeatedly when he introduced the Pennsylvania Promise to Pennsylvania's state legislature earlier this year. If passed, the legislation — introduced as Senate Bill 1111 and House Bill 2444 — would cover college costs for many Pennsylvania residents.
"I've heard from far too many college students who are struggling to make ends meet," said Sen. Hughes in a press release. "They're starving and some can't maintain stable housing throughout the school year. They need something like PA Promise to make college reality."
This program would be a more ambitious version of a scholarship that already exists in the state's second largest city. The Pittsburgh Promise, which started in 2007, grants students up to $5,000 per year to help pay for college. The statewide version, however, hopes to cover full tuition and fees.
Of course, Pittsburgh's scholarship — totalling $20,000 over four years — still goes a long way to reducing student loans. And there's no denying student loan debt is a major issue, especially in Pennsylvania, which has the highest average student loan debt in the nation. And that's not because Pennsylvania is poorer than other states: the Commonwealth's median household income is just below the national average, according to the Census Bureau.
The Pittsburgh Promise reduced the amount of student loan debt Pittsburgh CAPA alumna Shannon Chavez had when she graduated from Duquesne University. Hopefully, a statewide version can help reduce student loan debt across Pennsylvania. But to get a sense of how the Pittsburgh Promise would work statewide, it's important to understand how the two programs differ.
Both are "last-dollar" scholarships, meaning they cover balances left over after other eligible scholarships are accounted for. And both have the same basic goal: boost access to post-secondary education by reducing costs. But there are plenty of differences in where the money comes from, where it can be used, and who's eligible to use it.
How they're funded
When it comes to providing funding for these proposals, the first question most people ask is: Where does the money come from?
In Pittsburgh, the money comes from grants and fundraising efforts, and it's managed by a board of directors. The Pittsburgh Promise started in 2007 with a $100 million grant from UPMC. According to a 2007 Post-Gazette story, that grant was a way to showcase the nonprofit giant's benefit to its community and avoid scrutiny from the IRS.
"[Hospitals] are always looking to do things for the community, which is a good thing — philanthropy is a good thing," says Dr. Robert P. Strauss, a professor of economics and public policy at Carnegie Mellon University. "But the underlying causes should be teased out."
Nevertheless, that grant formed an organization that has since raised another $100 million through foundation, corporate and individual donations, according to the Pittsburgh Promise website.
The statewide version would be publicly funded through tax dollars. Beyond that, however, there isn't much detail on where the Pennsylvania Promise funding would come from.
"We don't want to get locked into the funding side of the equation at this particular moment," said Sen. Hughes at his June press conference. "The idea is to move the conversation and get people talking about the notion, and the idea, of free and affordable college for Pennsylvania students."
A January 2018 report from the Pennsylvania Budget and Policy Center and the Keystone Research Center lists some ideas for where the money could come from. According to researchers, the Pennsylvania Promise would cost:
One fourth of the revenue raised from increasing the Pennsylvania personal income tax rate by one percentage point. . .
About half of the revenue raised by a progressive tax proposal that cuts the personal income tax rate on wages and interest while raising it on the income derived from wealth. . .
Roughly the money raised by a severance tax like West Virginia's. . . [or]
The amount raised by a 0.054 percent flat tax on financial wealth ("net worth") — $540 annually for a taxpayer with $1 million in financial assets.
What they cover
As mentioned earlier, the Pittsburgh Promise provides students up to $5,000 per year to cover tuition, fees, room, board, and books. This can cover up to four years of post-secondary education, for a total of $20,000. According to the Pittsburgh Promise website, students can use these funds at "any accredited college, university, trade, or technical school in Pennsylvania." The scholarship cannot be used for graduate level courses.
The Pennsylvania Promise, on the other hand, aims to completely cover up to four years of tuition and fees for Pennsylvania residents. However, students wishing to take advantage of this program would be restricted to PASSHE schools, state-related schools, and public community colleges.
Who's eligible
The Pittsburgh Promise is available to high school seniors who live in the City of Pittsburgh and have attended Pittsburgh Public Schools (or its charters) continuously since the beginning of ninth grade. Students also need to meet attendance and GPA requirements, as outlined on the Pittsburgh Promise website.
Eligibility for the Pittsburgh Promise isn't income-based, but the Pennsylvania Promise would be. The proposed legislation would pay tuition and fees for recent high school graduates with a family income less than or equal to $110,000 per year. Those with annual family incomes of $48,000 or less would also qualify for funding to cover room and board, according to Sen. Hughes' website.
Additionally, Hughes wants everyone — not just recent high school graduates — to be able to benefit from the Pennsylvania Promise. That's why the bills hope to provide additional funding to "adults seeking in-demand skills and industry-recognized credentials," among other benefits.
For students in Pennsylvania wondering how they're going to afford increasingly expensive college educations, there's no denying the Pennsylvania Promise sounds like a dream come true.
Unfortunately, even the bills' biggest supporters say the odds of free college in Pennsylvania are extremely low. Kenneth Mash, president of the Association of Pennsylvania State College and University Faculties, is one of them.
"I'm not Pollyannaish. I don't think this is going to happen tomorrow or in this budget but if we don't start the conversation nothing will change," he told the Tribune-Review in June.
Gov. Tom Wolf signed a separate program into law late June to give Pennsylvanians a head start on college savings. That law established the Keystone Scholars Program, which will grant $100 toward a college savings fund to every baby born on or after January 1, 2019, in Pennsylvania.
According to the Morning Call, that investment is expected to grow to about $200 by the time children reach college age.
It's better than nothing, but $200 won't even cover one semester's worth of technology fees at PASSHE schools — let alone begin to touch tuition. And if Pennsylvania doesn't start investing more in its students, tuition and fees will continue to increase.
APSCUF
Pennsylvania Budget and Policy Center
Pennsylvania Promise
Pittsburgh Promise
Vincent Hughes


text:
Home»Life Onboard»The ships and cruises to get excited about in 2020
The ships and cruises to get excited about in 2020
By Cruise & Travel Asia on	 February 19, 2020 Life Onboard
The new year will usher in a wave of ultra-luxury, new-and-improved and wildly innovative ships heading to exciting and remote parts of the world. Here is a peek at the ships and destinations we're most excited about checking out in 2020.
Though not considered an ultra-luxury cruise line, there is much hype around billionaire entrepreneur Richard Branson's new baby.
Scarlet Lady (pictured above) debuts in April 2020 and is designed only for adults – 2,700 passengers and 1,160 crew – with a style of cruising described as "rebellious luxe". It's an adult playground at sea, with bars, clubs, live music venues, 24-hour dining and even a tattoo parlour.
At the top end, the 200-square-metre Massive Suite sleeps six and will have its own guitar-filled music room and a massive terrace with an outdoor shower, hot tub, hammocks and outdoor dining table (complete with stairs to encourage dancing on it).
Each music-themed suite will have a vinyl turntable, Peek-a-View showers, hammocks and tables designed specifically to hold your Champagne ice bucket.
Winner of our Readers' Choice Best for Service award, Regent Seven Seas has a new ship taking luxury to new heights in 2020. A voyage aboard the all-inclusive 750-guest Splendor includes unlimited shore excursions, unlimited fine dining and unlimited Champagne, plus excellent opportunities to marvel at expensive works of art. Her sister ship, Explorer, has Picassos, Mirós, a Chagall and a two-tonne Tibetan prayer wheel, and cruisers on Splendor can expect similar quality.
The top Regent suite, 412 square metres of palatial elegance, comes with an in-suite spa retreat with a personal sauna and steam room, a 120-square-metre wraparound veranda and a glass solarium sitting area. Splendor will be helmed by Captain Serena Melani.
Seven Seas Explorer, the first ship from Regent to be deemed the most luxurious ship at sea, will be Down Under next year for luxury punters to enjoy.
The luxury line has a brand new ship, Silver Moon, taking to the seas in August, offering new Arctic and Antarctic itineraries and overnights on all voyages of over seven nights. The 596-passenger vessel prides itself on small-ship intimacy and spacious, all-suite accommodation, the hallmarks of the Silversea experience. Initially she will cruise the Mediterranean visiting Barcelona, Lisbon, Venice and Athens before heading to Florida and South America.
Silver Moon will also have the first S.A.L.T. (Sea And Land Taste) immersive culinary concept onboard, allowing guests to travel deeper into a range of destination-based gastronomic experiences.
The much-anticipated Crystal Endeavour will be Crystal's first expedition ship, due to be launched in August next year. The purpose-built Polar-class yacht – some say a rival to Scenic's Eclipse – will feature 100 all-balcony suites and six fine dining restaurants, two helicopters and a submarine.
The 200-passenger ship will carry a team of up to 22 expert guides including biologists, naturalists, historians, geologists and ecologists. Her first itineraries will see her visit Alaska, Asia and South America before the ship heads to Australia and the Great Barrier Reef in October 2020.
In April, Celebrity will launch Celebrity Apex, the second of the four Edge-class liners, following sister ship Celebrity Edge. The 2,900-passenger Celebrity Apex will be homeported in Southampton and offer cruises to Northern Europe including the Norwegian Fjords and around the Mediterranean.
After her summer season, she will be homeported in Fort Lauderdale, Florida, and sail the Caribbean. Like Edge, she will have the Magic Carpet, a deck which travels up and down the side of the ship to serve different purposes, and a rooftop garden with a swanky barbeque joint for the evenings.
The line's newest Royal-class ship Enchanted Princess is set to sail in June on her inaugural Mediterranean cruise.
She will feature new five-guest Sky Suites on the top deck, each offering the largest private balconies on a Princess ship, with 270-degree panorama views. She will also have the Piazza hub of activity, Salty Dog Grill, Alfredo's Pizzeria and Movies under the Stars, a hallmark of the line.
P&O Cruises Australia
Pacific Adventure will be launching next year boasting favourite features alongside some never seen before on the all-Australian cruise line. She will have Luke Mangan, of course, and five-berth family cabins, and a swanky pool and a private beach club called Byron Beach club for guests in suites and mini-suites.
Broadway at sea: the shows that will add a sparkle to your cruise holiday
The best of farm to table dining in cruise
The Michelin-starred chefs on board your cruise

redpajama_set_name: RedPajamaCommonCrawl


text:
silverstripe-feedreader
=======================
[![License](https://poser.pugx.org/entidi/feedreader/license)](https://packagist.org/packages/entidi/feedreader)
[![Build Status](https://travis-ci.org/ntd/silverstripe-feedreader.svg?branch=master)](https://travis-ci.org/ntd/silverstripe-feedreader)
[![Code Quality](https://scrutinizer-ci.com/g/ntd/silverstripe-feedreader/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/ntd/silverstripe-feedreader/?branch=master)
[![Latest Stable Version](https://poser.pugx.org/entidi/feedreader/v/stable)](https://packagist.org/packages/entidi/feedreader)

The [silverstripe-feedreader](http://silverstripe.entidi.com/) module
implements a new page type (*FeedReaderPage*) that can access the data
contained in an external RSS 2.0 or ATOM 1.0 feed. The feed format is
automatically deduced from its content, that is if the `//channel/item`
[XPath](http://www.w3.org/TR/xpath/) expression resolves to a non-emtpy
list it is considered an RSS2 feed, otherwise it is considered ATOM1,
and the `//feed/entry` expression will be used instead.

The main developement is done in `dev`: that is merged into `master` when
stable enough. When this happens, an appropriate `2.*` release is tagged.
`dev` and `master` branches, together with any `2.*` release, are compatibles
with SilverStripe 4. For SilverStripe 3 you should take a look at the `ss3`
branch and `1.*` releases.

Installation
------------

With composer:

    composer require entidi/feedreader

Without composer, download [the tarball](https://github.com/ntd/silverstripe-feedreader/releases)
and unpack it under the base directory. This method is not really tested,
so it can be possible you will need to tweak something.

Usage
-----

The default template (`templates/eNTiDi/FeedReader/Layout/FeedReaderPage.ss`)
is compatible with [silverstrap](http://dev.entidi.com/p/silverstrap/) ^4.0
but it can be easily overriden by redefining the `FeedReaderPage.ss` file in
your own theme with higher priority.

To provide access to the latest news, you can define a function similar
to the following:

    public function LatestNews()
    {
        $news = DataObject::get_one('eNTiDi\FeedReader\FeedReaderPage');
        return $news ? $news->Items(1)->first() : null;
    }

Then you can enhance your feed page with a template snippet, e.g.:

    <% with $LatestNews %>

Latest news

$Date.Date: $Summary.XML

        More ...

    <% end_with %>

Support
-------

This project has been developed by [ntd](mailto:ntd@entidi.it). Its
[home page](http://silverstripe.entidi.com/) is shared by other
[SilverStripe](http://www.silverstripe.org/) modules and themes.

To check out the code, report issues or propose enhancements, go to the
[dedicated tracker](http://dev.entidi.com/p/silverstripe-feedreader).
Alternatively, you can do the same things by leveraging the official
[github repository](https://github.com/ntd/silverstripe-feedreader).

redpajama_set_name: RedPajamaGithub


text:
Public Release: 7-Feb-2018
Seafloor data point to global volcanism after Chicxulub meteor strike
University of Oregon geologists identify unusual seafloor structures that reflect a global pulse of volcanism coincident with the mass die-off of dinosaurs 66 million years ago
VIDEO: Video summarizes new findings from the University of Oregon that suggest the Chicxulub meteorite impact set off the release of magma along seafloor ridges around the world, adding a new... view more
Credit: Produced by Carla Schaffer, AAAS/Science Advances
EUGENE, Ore. - Feb. 7, 2018 - A record of volcanism preserved along ancient mid-ocean ridges provides evidence for heightened worldwide magmatic activity 66 million years ago just after the Chicxulub meteor struck Earth, according to University of Oregon scientists.
The research, published in Science Advances, points to changes in the strength of gravity above the seafloor, which indicate a transient period of increased volumes of magma being released along ridges that mark the oceanic boundaries of tectonic plates.
Lead author Joseph Byrnes, a former UO doctoral student, says that this global volcanic activity was likely triggered by strong seismic waves radiated from the meteorite impact site. Subsequently accelerated volcanism, he said, likely would have been active during the mass extinction of the world's non-avian dinosaurs.
Volcanism, particularly a massive outpouring of basalt recorded by the Deccan Traps in India, has been in and out of the extinction debate. Rare volcanic events at such a scale are known to cause catastrophic disturbances to Earth's climate and, when they occur, they are often linked to mass extinctions.
Since evidence of the meteor strike near present day Mexico surfaced in the 1980s, scientists have debated whether the impact or the Deccan Traps volcanic eruptions was the primary driver for extinction of the dinosaurs.
Progressively more accurate dating methods indicate that while the Deccan Traps eruptions were active during the mass extinction, they actually began significantly before the Chicxulub impact, said Leif Karlstrom, a professor in the UO's Department of Earth Sciences and co-author on the study with Byrnes.
The meteor is closely aligned in time with the onset of mass extinction, seeming to indicate a dominant role, he said. Still, the near coincidence in time of such globally catastrophic events continues to spur debate.
In 2015, researchers at the University of California, Berkeley, proposed that the two events might be connected. They suggested that Chixculub may have modulated distant volcanism by sending seismic waves through the Earth and accelerating volcanic activity in the Deccan Traps. Similar to the impacts that normal tectonic earthquakes sometimes have on wells and streams, Karlstrom said, the study proposed that powerful shaking liberated magma stored in the mantle beneath the Deccan Traps and caused the largest eruptions there.
The new National Science Foundation-supported study at the UO adds another layer to the story, said Karlstrom, who also co-authored on the UC-Berkeley research. It suggests that other volcanic activity around the world was triggered by the meteor. Seismic waves moving through the Earth, he said, may have accelerated volcanism already occurring along mid-ocean ridges.
"Our work suggests a connection between these exceedingly rare and catastrophic events, distributed over the entire planet," Karlstrom said. "The meteorite's impact may have influenced volcanic eruptions that were already going on, making for a one-two punch."
The findings emerged as Byrnes, now a postdoctoral researcher at the University of Minnesota, discovered the evidence for volcanic activity by analyzing publicly available global datasets, including two updated in the last decade, on free-air gravity, ocean floor topography and tectonic spreading rates.
In his analyses, Byrnes divided the seafloor into one-million-year old groupings, constructing a record back to 100 million years ago. At about 66 million years, he found evidence for a "short-lived pulse of marine magmatism" along ancient ocean ridges. This pulse is suggested by a spike in the rate of the occurrence of free-air gravity anomalies seen in the dataset.
Free-air gravity anomalies, measured in milligals, account for variations in gravitational acceleration, found from satellite measurements of additional seawater collecting where the Earth's gravity is stronger.
Excess matter on the ocean floor, such as new magma, is a primary cause of elevated marine gravity anomalies. A gal reflects a change in the rate of motion of a centimeter, about 0.4 of an inch, per second squared. Byrnes and Karlstrom found changes in free-air gravity anomalies of between five and 20 milligals associated with seafloor created in the first million years after the meteor.
"We found evidence for a previously unknown period of globally heighted volcanic activity during the mass-extinction event," Byrnes said. "This study does not say precisely that this volcanic activity is what killed the dinosaurs. What we are adding to the conversation is global volcanic activity during the known environmental crisis."
The gravity data analyzed in the research came from the Scripps Institution of Oceanography at the University of California, San Diego, the seafloor ages from the EarthByte group at the University of Sydney, and seafloor elevation from the National Geophysical Data Center of the National Oceanic and Atmospheric Administration.
Sources: Leif Karlstrom, assistant professor, Department of Earth Sciences, University of Oregon, 541-346-4323, leif@uoregon.edu, and Joseph Byrnes, postdoctoral researcher, Department of Earth Sciences, University of Minnesota, 612-626-3697, jsbyrnes@umn.edu
Note: The UO is equipped with an on-campus television studio with a point-of-origin Vyvx connection, which provides broadcast-quality video to networks worldwide via fiber optic network. There also is video access to satellite uplink and audio access to an ISDN codec for broadcast-quality radio interviews.
About Leif Karlstrom: http://pages.uoregon.edu/leif/
Department of Earth Sciences: https://earthsciences.uoregon.edu/
Jim Barlow
jebarlow@uoregon.edu
@UOregonNews
http://around.uoregon.edu
Science Advances
GEOPHYSICS/GRAVITY
Worldwide Volcanism 66 Million Years Ago (VIDEO)
Seafloor Changes (IMAGE)
Mid-ocean Ridges (IMAGE)
http://dx.doi.org/10.1126/sciadv.aao2994
More in Earth Science
NASA water vapor imagery shows Tino's heavy rain potential over Fiji NASA/Goddard Space Flight Center
Mobile protected areas needed to protect biodiversity in the high seas University of Washington
In death of dinosaurs, it was all about the asteroid -- not volcanoes Yale University
Machine learning greatly reduces uncertainty in understanding of paleozoic biodiversity American Association for the Advancement of Science
View all in Earth Science


text:
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: firestore/local/maybe_document.proto

#include "firestore/local/maybe_document.pb.h"

#include <algorithm>

#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/wire_format_lite.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
extern PROTOBUF_INTERNAL_EXPORT_firestore_2flocal_2fmaybe_5fdocument_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_NoDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_firestore_2flocal_2fmaybe_5fdocument_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_UnknownDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_google_2ffirestore_2fv1_2fdocument_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2ftimestamp_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto;
namespace firestore {
namespace client {
class NoDocumentDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<NoDocument> _instance;
} _NoDocument_default_instance_;
class UnknownDocumentDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<UnknownDocument> _instance;
} _UnknownDocument_default_instance_;
class MaybeDocumentDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<MaybeDocument> _instance;
  const ::firestore::client::NoDocument* no_document_;
  const ::google::firestore::v1::Document* document_;
  const ::firestore::client::UnknownDocument* unknown_document_;
} _MaybeDocument_default_instance_;
}  // namespace client
}  // namespace firestore
static void InitDefaultsscc_info_MaybeDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::firestore::client::_MaybeDocument_default_instance_;
    new (ptr) ::firestore::client::MaybeDocument();
    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
  }
  ::firestore::client::MaybeDocument::InitAsDefaultInstance();
}

::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<3> scc_info_MaybeDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto =
    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 3, 0, InitDefaultsscc_info_MaybeDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto}, {
      &scc_info_NoDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base,
      &scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto.base,
      &scc_info_UnknownDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base,}};

static void InitDefaultsscc_info_NoDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::firestore::client::_NoDocument_default_instance_;
    new (ptr) ::firestore::client::NoDocument();
    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
  }
  ::firestore::client::NoDocument::InitAsDefaultInstance();
}

::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_NoDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto =
    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, 0, InitDefaultsscc_info_NoDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto}, {
      &scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto.base,}};

static void InitDefaultsscc_info_UnknownDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::firestore::client::_UnknownDocument_default_instance_;
    new (ptr) ::firestore::client::UnknownDocument();
    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
  }
  ::firestore::client::UnknownDocument::InitAsDefaultInstance();
}

::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_UnknownDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto =
    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, 0, InitDefaultsscc_info_UnknownDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto}, {
      &scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto.base,}};

static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_firestore_2flocal_2fmaybe_5fdocument_2eproto[3];
static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_firestore_2flocal_2fmaybe_5fdocument_2eproto = nullptr;
static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_firestore_2flocal_2fmaybe_5fdocument_2eproto = nullptr;

const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_firestore_2flocal_2fmaybe_5fdocument_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::firestore::client::NoDocument, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  PROTOBUF_FIELD_OFFSET(::firestore::client::NoDocument, name_),
  PROTOBUF_FIELD_OFFSET(::firestore::client::NoDocument, read_time_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::firestore::client::UnknownDocument, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  PROTOBUF_FIELD_OFFSET(::firestore::client::UnknownDocument, name_),
  PROTOBUF_FIELD_OFFSET(::firestore::client::UnknownDocument, version_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::firestore::client::MaybeDocument, _internal_metadata_),
  ~0u,  // no _extensions_
  PROTOBUF_FIELD_OFFSET(::firestore::client::MaybeDocument, _oneof_case_[0]),
  ~0u,  // no _weak_field_map_
  offsetof(::firestore::client::MaybeDocumentDefaultTypeInternal, no_document_),
  offsetof(::firestore::client::MaybeDocumentDefaultTypeInternal, document_),
  offsetof(::firestore::client::MaybeDocumentDefaultTypeInternal, unknown_document_),
  PROTOBUF_FIELD_OFFSET(::firestore::client::MaybeDocument, has_committed_mutations_),
  PROTOBUF_FIELD_OFFSET(::firestore::client::MaybeDocument, document_type_),
};
static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
  { 0, -1, sizeof(::firestore::client::NoDocument)},
  { 7, -1, sizeof(::firestore::client::UnknownDocument)},
  { 14, -1, sizeof(::firestore::client::MaybeDocument)},
};

static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::firestore::client::_NoDocument_default_instance_),
  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::firestore::client::_UnknownDocument_default_instance_),
  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::firestore::client::_MaybeDocument_default_instance_),
};

const char descriptor_table_protodef_firestore_2flocal_2fmaybe_5fdocument_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
  "\n$firestore/local/maybe_document.proto\022\020"
  "firestore.client\032\"google/firestore/v1/do"
  "cument.proto\032\037google/protobuf/timestamp."
  "proto\"I\n\nNoDocument\022\014\n\004name\030\001 \001(\t\022-\n\trea"
  "d_time\030\002 \001(\0132\032.google.protobuf.Timestamp"
  "\"L\n\017UnknownDocument\022\014\n\004name\030\001 \001(\t\022+\n\007ver"
  "sion\030\002 \001(\0132\032.google.protobuf.Timestamp\"\350"
  "\001\n\rMaybeDocument\0223\n\013no_document\030\001 \001(\0132\034."
  "firestore.client.NoDocumentH\000\0221\n\010documen"
  "t\030\002 \001(\0132\035.google.firestore.v1.DocumentH\000"
  "\022=\n\020unknown_document\030\003 \001(\0132!.firestore.c"
  "lient.UnknownDocumentH\000\022\037\n\027has_committed"
  "_mutations\030\004 \001(\010B\017\n\rdocument_typeB/\n#com"
  ".google.firebase.firestore.protoP\001\242\002\005FST"
  "PBb\006proto3"
  ;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto_deps[2] = {
  &::descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto,
  &::descriptor_table_google_2fprotobuf_2ftimestamp_2eproto,
};
static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto_sccs[3] = {
  &scc_info_MaybeDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base,
  &scc_info_NoDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base,
  &scc_info_UnknownDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base,
};
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto_once;
static bool descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto_initialized = false;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto = {
  &descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto_initialized, descriptor_table_protodef_firestore_2flocal_2fmaybe_5fdocument_2eproto, "firestore/local/maybe_document.proto", 570,
  &descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto_once, descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto_sccs, descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto_deps, 3, 2,
  schemas, file_default_instances, TableStruct_firestore_2flocal_2fmaybe_5fdocument_2eproto::offsets,
  file_level_metadata_firestore_2flocal_2fmaybe_5fdocument_2eproto, 3, file_level_enum_descriptors_firestore_2flocal_2fmaybe_5fdocument_2eproto, file_level_service_descriptors_firestore_2flocal_2fmaybe_5fdocument_2eproto,
};

// Force running AddDescriptors() at dynamic initialization time.
static bool dynamic_init_dummy_firestore_2flocal_2fmaybe_5fdocument_2eproto = (  ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptors(&descriptor_table_firestore_2flocal_2fmaybe_5fdocument_2eproto), true);
namespace firestore {
namespace client {

// ===================================================================

void NoDocument::InitAsDefaultInstance() {
  ::firestore::client::_NoDocument_default_instance_._instance.get_mutable()->read_time_ = const_cast< PROTOBUF_NAMESPACE_ID::Timestamp*>(
      PROTOBUF_NAMESPACE_ID::Timestamp::internal_default_instance());
}
class NoDocument::_Internal {
 public:
  static const PROTOBUF_NAMESPACE_ID::Timestamp& read_time(const NoDocument* msg);
};

const PROTOBUF_NAMESPACE_ID::Timestamp&
NoDocument::_Internal::read_time(const NoDocument* msg) {
  return *msg->read_time_;
}
void NoDocument::clear_read_time() {
  if (GetArenaNoVirtual() == nullptr && read_time_ != nullptr) {
    delete read_time_;
  }
  read_time_ = nullptr;
}
NoDocument::NoDocument()
  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
  SharedCtor();
  // @@protoc_insertion_point(constructor:firestore.client.NoDocument)
}
NoDocument::NoDocument(const NoDocument& from)
  : ::PROTOBUF_NAMESPACE_ID::Message(),
      _internal_metadata_(nullptr) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (!from._internal_name().empty()) {
    name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_);
  }
  if (from._internal_has_read_time()) {
    read_time_ = new PROTOBUF_NAMESPACE_ID::Timestamp(*from.read_time_);
  } else {
    read_time_ = nullptr;
  }
  // @@protoc_insertion_point(copy_constructor:firestore.client.NoDocument)
}

void NoDocument::SharedCtor() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_NoDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base);
  name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  read_time_ = nullptr;
}

NoDocument::~NoDocument() {
  // @@protoc_insertion_point(destructor:firestore.client.NoDocument)
  SharedDtor();
}

void NoDocument::SharedDtor() {
  name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (this != internal_default_instance()) delete read_time_;
}

void NoDocument::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const NoDocument& NoDocument::default_instance() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_NoDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base);
  return *internal_default_instance();
}

void NoDocument::Clear() {
// @@protoc_insertion_point(message_clear_start:firestore.client.NoDocument)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (GetArenaNoVirtual() == nullptr && read_time_ != nullptr) {
    delete read_time_;
  }
  read_time_ = nullptr;
  _internal_metadata_.Clear();
}

const char* NoDocument::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
    CHK_(ptr);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "firestore.client.NoDocument.name"));
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .google.protobuf.Timestamp read_time = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
          ptr = ctx->ParseMessage(_internal_mutable_read_time(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      default: {
      handle_unusual:
        if ((tag & 7) == 4 || tag == 0) {
          ctx->SetLastTag(tag);
          goto success;
        }
        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
        CHK_(ptr != nullptr);
        continue;
      }
    }  // switch
  }  // while
success:
  return ptr;
failure:
  ptr = nullptr;
  goto success;
#undef CHK_
}

::PROTOBUF_NAMESPACE_ID::uint8* NoDocument::_InternalSerialize(
    ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:firestore.client.NoDocument)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (this->name().size() > 0) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "firestore.client.NoDocument.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // .google.protobuf.Timestamp read_time = 2;
  if (this->has_read_time()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        2, _Internal::read_time(this), target, stream);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:firestore.client.NoDocument)
  return target;
}

size_t NoDocument::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:firestore.client.NoDocument)
  size_t total_size = 0;

  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // string name = 1;
  if (this->name().size() > 0) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // .google.protobuf.Timestamp read_time = 2;
  if (this->has_read_time()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
        *read_time_);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
        _internal_metadata_, total_size, &_cached_size_);
  }
  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void NoDocument::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:firestore.client.NoDocument)
  GOOGLE_DCHECK_NE(&from, this);
  const NoDocument* source =
      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<NoDocument>(
          &from);
  if (source == nullptr) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:firestore.client.NoDocument)
    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:firestore.client.NoDocument)
    MergeFrom(*source);
  }
}

void NoDocument::MergeFrom(const NoDocument& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:firestore.client.NoDocument)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.name().size() > 0) {

    name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_);
  }
  if (from.has_read_time()) {
    _internal_mutable_read_time()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_read_time());
  }
}

void NoDocument::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:firestore.client.NoDocument)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void NoDocument::CopyFrom(const NoDocument& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:firestore.client.NoDocument)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool NoDocument::IsInitialized() const {
  return true;
}

void NoDocument::InternalSwap(NoDocument* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
  name_.Swap(&other->name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(read_time_, other->read_time_);
}

::PROTOBUF_NAMESPACE_ID::Metadata NoDocument::GetMetadata() const {
  return GetMetadataStatic();
}

// ===================================================================

void UnknownDocument::InitAsDefaultInstance() {
  ::firestore::client::_UnknownDocument_default_instance_._instance.get_mutable()->version_ = const_cast< PROTOBUF_NAMESPACE_ID::Timestamp*>(
      PROTOBUF_NAMESPACE_ID::Timestamp::internal_default_instance());
}
class UnknownDocument::_Internal {
 public:
  static const PROTOBUF_NAMESPACE_ID::Timestamp& version(const UnknownDocument* msg);
};

const PROTOBUF_NAMESPACE_ID::Timestamp&
UnknownDocument::_Internal::version(const UnknownDocument* msg) {
  return *msg->version_;
}
void UnknownDocument::clear_version() {
  if (GetArenaNoVirtual() == nullptr && version_ != nullptr) {
    delete version_;
  }
  version_ = nullptr;
}
UnknownDocument::UnknownDocument()
  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
  SharedCtor();
  // @@protoc_insertion_point(constructor:firestore.client.UnknownDocument)
}
UnknownDocument::UnknownDocument(const UnknownDocument& from)
  : ::PROTOBUF_NAMESPACE_ID::Message(),
      _internal_metadata_(nullptr) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (!from._internal_name().empty()) {
    name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_);
  }
  if (from._internal_has_version()) {
    version_ = new PROTOBUF_NAMESPACE_ID::Timestamp(*from.version_);
  } else {
    version_ = nullptr;
  }
  // @@protoc_insertion_point(copy_constructor:firestore.client.UnknownDocument)
}

void UnknownDocument::SharedCtor() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_UnknownDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base);
  name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  version_ = nullptr;
}

UnknownDocument::~UnknownDocument() {
  // @@protoc_insertion_point(destructor:firestore.client.UnknownDocument)
  SharedDtor();
}

void UnknownDocument::SharedDtor() {
  name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (this != internal_default_instance()) delete version_;
}

void UnknownDocument::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const UnknownDocument& UnknownDocument::default_instance() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_UnknownDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base);
  return *internal_default_instance();
}

void UnknownDocument::Clear() {
// @@protoc_insertion_point(message_clear_start:firestore.client.UnknownDocument)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (GetArenaNoVirtual() == nullptr && version_ != nullptr) {
    delete version_;
  }
  version_ = nullptr;
  _internal_metadata_.Clear();
}

const char* UnknownDocument::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
    CHK_(ptr);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "firestore.client.UnknownDocument.name"));
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .google.protobuf.Timestamp version = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
          ptr = ctx->ParseMessage(_internal_mutable_version(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      default: {
      handle_unusual:
        if ((tag & 7) == 4 || tag == 0) {
          ctx->SetLastTag(tag);
          goto success;
        }
        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
        CHK_(ptr != nullptr);
        continue;
      }
    }  // switch
  }  // while
success:
  return ptr;
failure:
  ptr = nullptr;
  goto success;
#undef CHK_
}

::PROTOBUF_NAMESPACE_ID::uint8* UnknownDocument::_InternalSerialize(
    ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:firestore.client.UnknownDocument)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (this->name().size() > 0) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "firestore.client.UnknownDocument.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // .google.protobuf.Timestamp version = 2;
  if (this->has_version()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        2, _Internal::version(this), target, stream);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:firestore.client.UnknownDocument)
  return target;
}

size_t UnknownDocument::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:firestore.client.UnknownDocument)
  size_t total_size = 0;

  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // string name = 1;
  if (this->name().size() > 0) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // .google.protobuf.Timestamp version = 2;
  if (this->has_version()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
        *version_);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
        _internal_metadata_, total_size, &_cached_size_);
  }
  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void UnknownDocument::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:firestore.client.UnknownDocument)
  GOOGLE_DCHECK_NE(&from, this);
  const UnknownDocument* source =
      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<UnknownDocument>(
          &from);
  if (source == nullptr) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:firestore.client.UnknownDocument)
    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:firestore.client.UnknownDocument)
    MergeFrom(*source);
  }
}

void UnknownDocument::MergeFrom(const UnknownDocument& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:firestore.client.UnknownDocument)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.name().size() > 0) {

    name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_);
  }
  if (from.has_version()) {
    _internal_mutable_version()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_version());
  }
}

void UnknownDocument::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:firestore.client.UnknownDocument)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void UnknownDocument::CopyFrom(const UnknownDocument& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:firestore.client.UnknownDocument)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool UnknownDocument::IsInitialized() const {
  return true;
}

void UnknownDocument::InternalSwap(UnknownDocument* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
  name_.Swap(&other->name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(version_, other->version_);
}

::PROTOBUF_NAMESPACE_ID::Metadata UnknownDocument::GetMetadata() const {
  return GetMetadataStatic();
}

// ===================================================================

void MaybeDocument::InitAsDefaultInstance() {
  ::firestore::client::_MaybeDocument_default_instance_.no_document_ = const_cast< ::firestore::client::NoDocument*>(
      ::firestore::client::NoDocument::internal_default_instance());
  ::firestore::client::_MaybeDocument_default_instance_.document_ = const_cast< ::google::firestore::v1::Document*>(
      ::google::firestore::v1::Document::internal_default_instance());
  ::firestore::client::_MaybeDocument_default_instance_.unknown_document_ = const_cast< ::firestore::client::UnknownDocument*>(
      ::firestore::client::UnknownDocument::internal_default_instance());
}
class MaybeDocument::_Internal {
 public:
  static const ::firestore::client::NoDocument& no_document(const MaybeDocument* msg);
  static const ::google::firestore::v1::Document& document(const MaybeDocument* msg);
  static const ::firestore::client::UnknownDocument& unknown_document(const MaybeDocument* msg);
};

const ::firestore::client::NoDocument&
MaybeDocument::_Internal::no_document(const MaybeDocument* msg) {
  return *msg->document_type_.no_document_;
}
const ::google::firestore::v1::Document&
MaybeDocument::_Internal::document(const MaybeDocument* msg) {
  return *msg->document_type_.document_;
}
const ::firestore::client::UnknownDocument&
MaybeDocument::_Internal::unknown_document(const MaybeDocument* msg) {
  return *msg->document_type_.unknown_document_;
}
void MaybeDocument::set_allocated_no_document(::firestore::client::NoDocument* no_document) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  clear_document_type();
  if (no_document) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      no_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, no_document, submessage_arena);
    }
    set_has_no_document();
    document_type_.no_document_ = no_document;
  }
  // @@protoc_insertion_point(field_set_allocated:firestore.client.MaybeDocument.no_document)
}
void MaybeDocument::set_allocated_document(::google::firestore::v1::Document* document) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  clear_document_type();
  if (document) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, document, submessage_arena);
    }
    set_has_document();
    document_type_.document_ = document;
  }
  // @@protoc_insertion_point(field_set_allocated:firestore.client.MaybeDocument.document)
}
void MaybeDocument::clear_document() {
  if (_internal_has_document()) {
    delete document_type_.document_;
    clear_has_document_type();
  }
}
void MaybeDocument::set_allocated_unknown_document(::firestore::client::UnknownDocument* unknown_document) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  clear_document_type();
  if (unknown_document) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      unknown_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, unknown_document, submessage_arena);
    }
    set_has_unknown_document();
    document_type_.unknown_document_ = unknown_document;
  }
  // @@protoc_insertion_point(field_set_allocated:firestore.client.MaybeDocument.unknown_document)
}
MaybeDocument::MaybeDocument()
  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
  SharedCtor();
  // @@protoc_insertion_point(constructor:firestore.client.MaybeDocument)
}
MaybeDocument::MaybeDocument(const MaybeDocument& from)
  : ::PROTOBUF_NAMESPACE_ID::Message(),
      _internal_metadata_(nullptr) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  has_committed_mutations_ = from.has_committed_mutations_;
  clear_has_document_type();
  switch (from.document_type_case()) {
    case kNoDocument: {
      _internal_mutable_no_document()->::firestore::client::NoDocument::MergeFrom(from._internal_no_document());
      break;
    }
    case kDocument: {
      _internal_mutable_document()->::google::firestore::v1::Document::MergeFrom(from._internal_document());
      break;
    }
    case kUnknownDocument: {
      _internal_mutable_unknown_document()->::firestore::client::UnknownDocument::MergeFrom(from._internal_unknown_document());
      break;
    }
    case DOCUMENT_TYPE_NOT_SET: {
      break;
    }
  }
  // @@protoc_insertion_point(copy_constructor:firestore.client.MaybeDocument)
}

void MaybeDocument::SharedCtor() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_MaybeDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base);
  has_committed_mutations_ = false;
  clear_has_document_type();
}

MaybeDocument::~MaybeDocument() {
  // @@protoc_insertion_point(destructor:firestore.client.MaybeDocument)
  SharedDtor();
}

void MaybeDocument::SharedDtor() {
  if (has_document_type()) {
    clear_document_type();
  }
}

void MaybeDocument::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const MaybeDocument& MaybeDocument::default_instance() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_MaybeDocument_firestore_2flocal_2fmaybe_5fdocument_2eproto.base);
  return *internal_default_instance();
}

void MaybeDocument::clear_document_type() {
// @@protoc_insertion_point(one_of_clear_start:firestore.client.MaybeDocument)
  switch (document_type_case()) {
    case kNoDocument: {
      delete document_type_.no_document_;
      break;
    }
    case kDocument: {
      delete document_type_.document_;
      break;
    }
    case kUnknownDocument: {
      delete document_type_.unknown_document_;
      break;
    }
    case DOCUMENT_TYPE_NOT_SET: {
      break;
    }
  }
  _oneof_case_[0] = DOCUMENT_TYPE_NOT_SET;
}

void MaybeDocument::Clear() {
// @@protoc_insertion_point(message_clear_start:firestore.client.MaybeDocument)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  has_committed_mutations_ = false;
  clear_document_type();
  _internal_metadata_.Clear();
}

const char* MaybeDocument::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
    CHK_(ptr);
    switch (tag >> 3) {
      // .firestore.client.NoDocument no_document = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
          ptr = ctx->ParseMessage(_internal_mutable_no_document(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .google.firestore.v1.Document document = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
          ptr = ctx->ParseMessage(_internal_mutable_document(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .firestore.client.UnknownDocument unknown_document = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
          ptr = ctx->ParseMessage(_internal_mutable_unknown_document(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // bool has_committed_mutations = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 32)) {
          has_committed_mutations_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      default: {
      handle_unusual:
        if ((tag & 7) == 4 || tag == 0) {
          ctx->SetLastTag(tag);
          goto success;
        }
        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
        CHK_(ptr != nullptr);
        continue;
      }
    }  // switch
  }  // while
success:
  return ptr;
failure:
  ptr = nullptr;
  goto success;
#undef CHK_
}

::PROTOBUF_NAMESPACE_ID::uint8* MaybeDocument::_InternalSerialize(
    ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:firestore.client.MaybeDocument)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .firestore.client.NoDocument no_document = 1;
  if (_internal_has_no_document()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        1, _Internal::no_document(this), target, stream);
  }

  // .google.firestore.v1.Document document = 2;
  if (_internal_has_document()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        2, _Internal::document(this), target, stream);
  }

  // .firestore.client.UnknownDocument unknown_document = 3;
  if (_internal_has_unknown_document()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        3, _Internal::unknown_document(this), target, stream);
  }

  // bool has_committed_mutations = 4;
  if (this->has_committed_mutations() != 0) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteBoolToArray(4, this->_internal_has_committed_mutations(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:firestore.client.MaybeDocument)
  return target;
}

size_t MaybeDocument::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:firestore.client.MaybeDocument)
  size_t total_size = 0;

  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // bool has_committed_mutations = 4;
  if (this->has_committed_mutations() != 0) {
    total_size += 1 + 1;
  }

  switch (document_type_case()) {
    // .firestore.client.NoDocument no_document = 1;
    case kNoDocument: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *document_type_.no_document_);
      break;
    }
    // .google.firestore.v1.Document document = 2;
    case kDocument: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *document_type_.document_);
      break;
    }
    // .firestore.client.UnknownDocument unknown_document = 3;
    case kUnknownDocument: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *document_type_.unknown_document_);
      break;
    }
    case DOCUMENT_TYPE_NOT_SET: {
      break;
    }
  }
  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
        _internal_metadata_, total_size, &_cached_size_);
  }
  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void MaybeDocument::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:firestore.client.MaybeDocument)
  GOOGLE_DCHECK_NE(&from, this);
  const MaybeDocument* source =
      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<MaybeDocument>(
          &from);
  if (source == nullptr) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:firestore.client.MaybeDocument)
    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:firestore.client.MaybeDocument)
    MergeFrom(*source);
  }
}

void MaybeDocument::MergeFrom(const MaybeDocument& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:firestore.client.MaybeDocument)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_committed_mutations() != 0) {
    _internal_set_has_committed_mutations(from._internal_has_committed_mutations());
  }
  switch (from.document_type_case()) {
    case kNoDocument: {
      _internal_mutable_no_document()->::firestore::client::NoDocument::MergeFrom(from._internal_no_document());
      break;
    }
    case kDocument: {
      _internal_mutable_document()->::google::firestore::v1::Document::MergeFrom(from._internal_document());
      break;
    }
    case kUnknownDocument: {
      _internal_mutable_unknown_document()->::firestore::client::UnknownDocument::MergeFrom(from._internal_unknown_document());
      break;
    }
    case DOCUMENT_TYPE_NOT_SET: {
      break;
    }
  }
}

void MaybeDocument::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:firestore.client.MaybeDocument)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void MaybeDocument::CopyFrom(const MaybeDocument& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:firestore.client.MaybeDocument)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool MaybeDocument::IsInitialized() const {
  return true;
}

void MaybeDocument::InternalSwap(MaybeDocument* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(has_committed_mutations_, other->has_committed_mutations_);
  swap(document_type_, other->document_type_);
  swap(_oneof_case_[0], other->_oneof_case_[0]);
}

::PROTOBUF_NAMESPACE_ID::Metadata MaybeDocument::GetMetadata() const {
  return GetMetadataStatic();
}

// @@protoc_insertion_point(namespace_scope)
}  // namespace client
}  // namespace firestore
PROTOBUF_NAMESPACE_OPEN
template<> PROTOBUF_NOINLINE ::firestore::client::NoDocument* Arena::CreateMaybeMessage< ::firestore::client::NoDocument >(Arena* arena) {
  return Arena::CreateInternal< ::firestore::client::NoDocument >(arena);
}
template<> PROTOBUF_NOINLINE ::firestore::client::UnknownDocument* Arena::CreateMaybeMessage< ::firestore::client::UnknownDocument >(Arena* arena) {
  return Arena::CreateInternal< ::firestore::client::UnknownDocument >(arena);
}
template<> PROTOBUF_NOINLINE ::firestore::client::MaybeDocument* Arena::CreateMaybeMessage< ::firestore::client::MaybeDocument >(Arena* arena) {
  return Arena::CreateInternal< ::firestore::client::MaybeDocument >(arena);
}
PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)
#include <google/protobuf/port_undef.inc>


text:
Shoojit Sircar on 'Gulabo Sitabo' and why there should be a change in Indian cinema
The director's much-awaited 'Gulabo Sitabo', with Amitabh Bachchan and Ayushmann Khurrana in the lead, is set to release on Amazon Prime Video on June 12.
All images: Amazon Prime Video
Flix Interview Wednesday, June 03, 2020 - 15:19
Sanyukta Dharmadhikari Follow @dramadhikari
In the middle of a two-month-long lockdown, even as film industries try to teeter back to normalcy, director Shoojit Sircar has been busy. He has a new release just days away, and perhaps for the first time, a big-ticket Hindi movie has skipped a theatrical release to premiere on a digital OTT (over-the-top) platform.
The director's much-awaited Gulabo Sitabo, with Amitabh Bachchan and Ayushmann Khurrana in the lead, is set to release on Amazon Prime Video on June 12.
TNM caught up with Shoojit over the phone to talk about his upcoming release, why he decided to go digital, and his memories of actor Irrfan who passed away in April this year.
Can you tell us about Gulabo Sitabo and what inspired you to tell this story?
Well, the film is set in Lucknow. The story — which is what you see in the trailer also — indulges in a few characters and a few families; there is one haveli, and there are many other locations that are there. It peeps into their everyday life, their living, their struggles, and you can see that they come from an economically lower group and they have much more struggle in their life.
I have tried to present this film as a social satire. I have never experimented with satire and this is the first time that I'm doing so. Satires are sometimes a little difficult and sometimes a little easy. For me, it was difficult because satire becomes a comment (on society) but I think I enjoyed this process. And this film is about lots and lots of characters. It is an ensemble cast and has some fascinating performances — and it is coming from the same stable of me and Ronnie (Lahiri), the kind of movies that we have made earlier.
You are working with Amitabh Bachchan again. Can you tell us what it is like to work with him?
This is the fourth film that I have done with him and I have worked with him on many campaigns also. He is extremely obedient and disciplined. He is absolutely true to the script. He takes everything very seriously, whatever we have envisioned.
It is very important that an actor like him completely gives in to the director's vision and the script's vision, and that experience is quite fascinating. For example, we were working in Lucknow, it was the month of June-July and it was the peak of the summer of Uttar Pradesh. And wearing all his clothes and makeup, he would still perform. I would tell him, 'Sir, break lele kya (shall we take a break?), should we wait for two-three days and then start, it is too hot,' but he would say 'No, I will work. I will go.' Then I would shut up and start shooting. Sometimes I'd shout, saying, 'Please sir, please go to your van, you don't have a shot now, I will manage.' But no, he would sit there on a chair - he would be sweating (laughs) but he would still sit there. So, I think this is the experience and the dedication that he has, which is fascinating.
Amitabh Bachchan in Gulabo Sitabo
Your second lead in Gulabo is Ayushmann Khurana, whom you launched in Vicky Donor. You're working with him again after eight years. What do you think of him as an actor and how does it feel to be working again with him?
I have been in touch with him since Vicky Donor, so we have been quite close. I haven't watched all his films, I just watched one film, Article 15. But whatever I have heard from people and read, he is doing quite well. So for us to work together again, it was nothing new, it was just for us to start off. I think for him, it was quite new to work with Amitabh Bachchan. I think that must have been really more enjoyable, because a lot of people want to work with Mr Bachchan. He was absolutely true to the character. We were sure that he would not play to the gallery, in the script also and in the treatment also. And that's what happened.
Amitabh and Ayushmann in a still from Gulabo Sitabo
Are you apprehensive about the response to Gulabo Sitabo now that it is releasing on an OTT platform?
When the cinema theatres issued a letter on public platforms about the film releasing on an OTT platform, I said that I understand their objection and that they are unhappy, but my point is that I will know how my film will turn out. We must all understand that the situation is like this. If there was no pandemic and no lockdown on April 17, my film would have released, nobody knows. But nothing is planned and you have to adapt to situations.
I was not apprehensive at all, I was very sure that I was going to go with digital once the lockdown started. I had been shooting all around the world and so I knew what was coming up, I had a little sense that this pandemic is coming and that it is going to be a long haul possibly. I put it on my social media as well that it was going to be a long haul. So when it came to deciding and going with digital media, I did not have any apprehension. Once I decided, I stood by it and I still stand by it.
Amitabh and Shoojit on sets of Gulabo Sitabo
Speaking of the lockdown, will India see a rise in movies with low budget, but high production values? Do you think the pandemic may change the process of filmmaking?
I think it depends, if the uncertainties continue like this for some time, then maybe. But there is no small budget film or big budget film. A film is a film. I do not see them like that, the way cinema rolls out. But having said that, we will have to wait and see, because we are unable to shoot. Lots of films are not complete. I took this call because I wanted the film to go to the audience as fast as possible. But I think the decision is based absolutely on who can hold and who cannot hold (onto the film). Different producers will have different mindsets and discussions amongst themselves. So, I think they will have to decide among themselves.
You're among the filmmakers who are making the offbeat the mainstream, with the success of films like Piku, October etc. Do you think Bollywood will eventually stop making the big, glitzy films that it's been long known for?
I think this is a normal film. I call those films offbeat films. I have grown up watching these kinds of films of Satyajit Ray, Ghatak, Bimal Roy and Mrinal Sen; even in Hollywood, I have watched Woody Allen to (Andrei) Tarkovsky to (Luis) Buñuel and so many other filmmakers. So I don't think that this is something out of the box that has appeared. I think there have been some fascinating filmmakers who have been making normal films just like these, like Hrishikesh Mukherjee, Sai Paranjype, Govind Nihalani, Shyam Benegal — so many are there. All of them have made films that are so normal.
You have also worked with Irrfan Khan, who passed away earlier this year, and you worked with him in Piku. What do you remember most about him? Do you have any memories you'd like to share?
Everyone asks me this (laughs softly). It's difficult to forget Irrfan. His memory is so vibrant. Just now I was talking to someone about how difficult it was to break the news that Irrfan is no more... It was very tough. We had been following up for the past 7-8 days and at 11 am, his older son called me and told me this… it was quite devastating. For me, Piku was the first film in which I worked with him and one where I started interacting with him. Generally, what you see, what he speaks, he is absolutely genuine. Most artists sometimes are not genuine... But Irrfan was an absolute gem, an absolute, genuine person. Whatever he spoke, there was a lot of truth to it. That is why he was such a great artist. And you can only be a great artist when you are genuine and truthful. These were some of his beautiful, magical qualities. It is a big loss. We keep saying 'loss, loss,' but I think he was the real loss.
Irfaan.
A post shared by Shoojit Sircar (@shoojitsircar) on
May 6, 2020 at 1:58am PDT
For the coming months, what would you like to see in Indian cinema? And what do you think 2020, or even 2021, has in store?
I hope that there is a change. I hope there is a change for good in terms of the thinking, in terms of the vision and in terms of the making. Because the world is going through a changing phase. This is going to haunt us for a long, long time. And I hope we come out of basic differences, human differences, we come out of hatred — there is possibly love and peace, and I hope cinemas somewhere down the line take such roots somewhere and help societies to form. I hope that change happens.
Do you feel that many movies shy away from having a 'message,' perhaps because they are not considered commercial successes?
I don't think I agree with that. I have an audience which is my own. There are a lot of films that are released and there is a huge amount of audience. I cannot cater to everyone, you know. Some people will like it, some may not, that is fine, but that does not mean that takes an audience out.
The right way of seeing this is that every film has got its own life and own state. If not today, tomorrow someone will see that film. The problem is that people in our industry have made the box-office a milestone. That is not a milestone of a good or bad cinema. I think cinema decides its own milestones. Otherwise in Hollywood, nobody would have remembered Satyajit Ray. He made films in 1955. Today if people come to India, they talk about Satyajit Ray, you tell me how that is possible? Nobody saw his films at the time, they did not release in theatres on this scale. If you ask anyone in Hollywood, they will first talk about Satyajit Ray or they'll talk about Mahatma Gandhi. How? We must understand that if something is good, nobody can stop it.


Facilitator: It appears that even Wolverine is not immune from this very common condition. Dr Ian Katz is one of Australia's leading experts in skin cancer prevention, detection, treatment and education and he has established the Southern Sun Skin Cancer Clinics about 11 years ago which has now developed into Australia's largest independent group of skin cancer clinics with 14 clinics throughout Australia and I am delighted to say he is on the line.
Ian Katz: Hi, how are you?
Facilitator: Very well thanks mate, and yourself?
Ian Katz: Very well thank you.
Facilitator: Excellent. Well, look let's talk about skin cancer because it's so common. How many people in Australia actually suffer from skin cancer?
Ian Katz: Well, believe it or not, more than 50 per cent of Australians will eventually get skin cancer it is believed, so it's an extremely – in fact it's the most common cancer in Australia.
Facilitator: Right, so who actually gets it?
Ian Katz: People who have Anglo-Saxon Celtic type skin are most at risk of skin cancer and as you get older you are more at risk but essentially anyone who has a significant amount of sun exposure can get skin cancer.
David Prior: Oh, yeah, that's my skin.
Facilitator: …and you should see David's complexion and I've already had my skin cancer. What happened to me Ian was that I played soccer and squash until I was 52 and despite them destroying my knee, I always used to put sunscreen everyone apart from the bridge of my nose and have a guess where I got the skin cancer.
Ian Katz: Yeah, that's the thing and people – and I saw Hugh Jackman pushing sunscreen but remember that – that the problem with sunscreen is that people don't use enough sunscreen. You are supposed to use about a teaspoon of sunscreen on each part of the body so essentially you should use about 5ml times maybe seven or eight so you should like 40ml of sunscreen every time you apply sunscreen.
Facilitator: Hang on, did you say 40ml?
Ian Katz: Yeah and the problem is with sunscreen is people don't put enough sunscreen on. So, you know, down the beach if you have like a 120ml bottle of sunscreen you should be really be using most of the bottle per person and there is no way that most Australians do that.
Facilitator: We were chatting off air before this and one of the things I found quite astounding, because I must say, we look at the use by date on food but there is a bit of a use by date on sunscreen as well.
Ian Katz: Absolutely. I mean certainly in our house we've got like five or six bottles of sunscreen and they gradually go out of date and when they're out of date they can be pretty much useless. I found a bottle that we were trying to sell in one of our clinics that was out date, so you just need to be so careful about the use by date of sunscreens as well.
Facilitator: Absolutely. Because all you need is one really bad sunburn and that can be enough to spark off a cancer can't it.
Ian Katz: Yeah and the problem if you are using 30 plus or 50 plus sunscreen and you don't put enough on it is equivalent to using maybe a 5 or 4 sunscreen so essentially you are probably only getting 10 percent of the effectiveness.
Facilitator: You see this is a message that I don't think is being pushed enough. I think people just feel if they put a little bit of sunscreen on well they're fine and I really think this is so important, probably one of the most important things I've heard said about prevention of skin cancer. We just need to use more sunscreen. I mean 40ml when you are out in the sun, that's a lot of sunscreen.
Ian Katz: Yeah, you do but keep in mind though that sunscreen is only one part of the thing you do. I mean the most important thing you can really do with skin cancer actually is stay out of the skin totally. You know, then cover up as much as possible and sunscreen is sort of the last thing you do when you can't stay out of the sun and cover up as much as possible. So don't forget the first two.
Facilitator: Right, yeah, I mean of course I think it's important to do that but unfortunately this is Australia and most of us like to spend our summers down by the beach and that's one of the big issues of course. Look, just on that, what about the standard beach umbrella, how much sun protection do you get from that?
Ian Katz: No, it's actually really good. Beach umbrellas are – again they have a standard and they actually protect you pretty well but keep in mind when you're on a beach and you're with the white sand and the water there's a huge amount of reflection as well and you can get pretty much 30 or 40 per cent of your sun exposure from reflection as well so don't only think that just because you're there under the umbrella that you're going to get fully protected, you won't.
Facilitator: Well, it happened to me. I went to the cricket last year. I was sitting up in the stand and I was out of the sun and I went home and my son in law said, you've got some sunburn there today. You out in the sun? And I said I wasn't out in the sun at all and I peeled for the next few days, it was just really dreadful.
Ian Katz: Absolutely. Well reflection is really bad as well.
Facilitator: So, okay. For those of us who are getting beyond a certain age, say the age of 35 say, how often should we be getting checked?
Ian Katz: Well you should probably start getting your skin checked every year. What was quite interesting with Hugh Jackman for example is first of all he's come out during National Skin Cancer Awareness Week so it's really good. It's not good that he had skin cancer but it's good that he's come out this week. The second thing is he had a spot on his nose which his wife brought up. Now that's very common actually that the lady or the partner gets the man to come to have his skin checked. Third, of course it's November which is all about men's health and one thing that men are really bad at is getting their skin checked so we should push in November, we should push men to get their skin checked as well.
Facilitator: The other important thing there is really you can only see half your body anyhow.
Ian Katz: Absolutely. Even if you come in and have your skin checked at a skin cancer clinic or get your GP to get your skin checked, you've got to keep an eye on your skin or someone's got to keep an eye on your skin throughout the rest of the year. You've got to know what things to watch out for and come and see us or see your GP or dermatologist if there are any concerns.
Facilitator: Well I think it's so important that you get an expert to have a look at your skin because what you might think is okay might be actually not.
Ian Katz: Yes, absolutely and often people will come in with a spot on their left arm which they think is a concern and we'll say, no that's actually nothing it's just an aging spot or something like that and we'll say well just let's give you a full skin check and the chances are we're going to find something else on their left arm or their back. Most people don't know what's happening on their back.
Facilitator: So, of course, short of having things cut out, what treatments are we using now for skin cancers or say some pre-cancerous lesions?
Ian Katz: There are quite a few topical treatments you can use nowadays. You don't have to have things cut out. Obviously the earlier you catch them, the more likely that the topical creams like, can I mention brand names?
Facilitator: Of course you can.
Ian Katz: Efudix, Aldara or even freezing things. So you can actually treat things early with topical creams before you even need to have them cut out.
Facilitator: But I think the real message here, you must get to things early.
Ian Katz: Absolutely, the earlier you catch skin cancer the better your chance of them cured. Absolutely.
Facilitator: Okay. So there are a lot people listening to this, we're going into summer, as you say it's National Skin Cancer Awareness Week. How can people find out more about your clinics and what you're doing?
Ian Katz: Well, we're Southern Sun Skin Cancer Clinics. You can go to southernsun.com.au. You can obviously go to the National Cancer Council. If they want to go to southernsun.com.au they can click on the first available appointment to make an appointment on line straight away.
Facilitator: So you can make an online appointment through first available, so that's firstavailable.com.au?
Ian Katz: Yeah, with 1st Available. It's a new online booking service that's really handy for patients.
Facilitator: Okay. Now for the, shall we say the dinosaurs amongst us who don't have an internet, is there is a phone number people can ring?
Ian Katz: Sure, in Sydney if you can call one of our clinics, for example in Hornsby it is 029 4825400 and that's the Hornsby clinic but they will give you the number of any of our other clinics.
Facilitator: And you can get any clinics around that. Well look, Ian this has been wonderful information and I think very timely with summer just around the corner and it seems like it's going to be a very hot summer, so some really important messages. I think the best one for me is that we need 40ml of sunscreen every time we apply it. That's really – I haven't heard that one before and I think it's a really important message. So, Ian Katz from Southern Sun Skin Cancer Clinics, I'd like to thank you so much for being on the show tonight.
Ian Katz: No worries enjoy the rest of your summer.
Top 10 safety tips for summer – don't skip number 8!


text: This directory represents a shared network location.


The Newborn Essential Solutions and Technologies (NEST) program at College of Medicine aims to implement comprehensive newborn care through innovative lifesaving technologies, the provision of both technical and clinical capacity-building, implementation of clinical and technical educational programs and the building of a sustainable distribution network.
The program driver will be responsible for driving around the driving project staff for all program-related activities including field visits, meetings, airport pick-ups and drop offs, and other duties as required by the program.
Ensure that project vehicles are in kept clean, in good working condition and maintained regularly.
Manage service, maintenance and activity logs for all vehicles.
Responsible for ensuring that all vehicle-related documents, including insurance renewals and certificates of fitness are up to date at all times.
The project driver reports directly to the Administrative Officer.


A fundamental key to becoming a better artist is by developing strong roots in drawing. Compositional layout, value, line quality, and perspective are just a few of the skills gained from attending this class.
CALL NOW! For up to date pricing & start date 615-822-0789.
Discounts are offered to MACC Members.
The six week course costs are $210 for members and $240 for non-members. Canvases and all materials can be provided for an additional single payment of $50, payable to the instructor.
Please make all payments (Check, cash, or credit) payable to Monthaven Arts and Cultural Center. To secure your spot, full payment must be received at time of registration.
I release any person working in this program and agree to indemnify and hold harmless the City of Hendersonville, Monthaven Mansion, Monthaven Arts and Cultural Center, its staff, board members and all other persons involved with the program for any liability they have to me or the student I am signing on behalf of for any injury received while participating in this program. I agree to pay the registration fee before the first class. Make-up classes are scheduled for all cancellations excluding the observance of federal holidays. With my signature, I have read and agree with all of the above.
To receive a refund for cancellations, you must give 48 hours notice unless otherwise noted.


When Google first launched Google Now back in 2012, they said that their goal for this feature is that it will give you the information you need without even searching for them. They will do it by asking you what you're interested in then tailoring the cards that will appear according to your taste. While we've been enjoying a fair bit of that, there are still a lot of things missing, and now it seems that Google will be solving that issue through the new Explore Interests feature.
Some users have already reported seeing this new feature called Explore Interests and basically it is your way of telling Google the things and issues you're interested in so they can bring you more tailor-fit cards in Google Now. There are various categories here including People where you can add the celebrities, personalities, politicians, that you want to follow, Sports, TV, Movies, Musicians, and even Stocks. You will also be able to add specific items in these categories.
The current set-up is pretty much limited to sports teams, items of interest when it comes to news, but with the addition of Explore Interests, then you'll be able to expand the scope of your Google Now cards. You won't need any third-party news aggregation apps since you'll be able to see the most relevant items to your interests eventually.
The Explore Interests feature has not been officially rolled out, although some users have reported seeing it already. Let's wait fro news from Google before we start complaining that we don't have it yet.


5x magnification for a detailed image especially useful if you wear glasses.
1x magnification for a true view image.
Can be handheld or stood on a table top leaving both hands free.
Protected mirror edge will not chip.
Manufactured by our specialist supplier FRASCO.


The Orange County Regional History Center will host Genome: Unlocking Life's Code, an exhibition from the National Museum of Natural History. A multimedia exhibition, Genome explores how the genomic revolution is influencing people's lives and the extraordinary impact it is having on science, medicine and nature.
The exhibition looks at the complexities of the genome—the complete set of genetic or hereditary material of a living organism—and chronicles the remarkable breakthroughs that have taken place since the completion of the Human Genome Project 10 years ago. With cutting-edge interactives, 3-D models, custom animation and engaging videos of real-life stories, the exhibition examines both the benefits and the challenges that genomics presents to modern society.


Data analytics is growing at a rapid pace. More organizations across industries are leveraging analytics to make strategic decisions and stay competitive.
With this trend there's also a great demand for Data Scientists. According to the study from Glassdoor, Data Scientist has been named the best job in America for three years running.
And while demand is high there's shortage of supply because data science is still new and there's not enough people exploiting the opportunities in this industry.
But for simple analytics your team doesn't need a Data Scientist. Here's how you can leverage your team to enable analytics in your organization.


Elizabeth Lawrence ( 1904-1985) is an internationally known garden writer and was the first female graduate of the first program of landscape architecture ever offered in the South . She is listed amongst the top twenty-five gardeners of all time!
Last week a friend and I went to tour Elizabeth Lawrence's House and Garden in Charlotte.
Elizabeth Lawrence is my inspiration as a gardener and landscape designer. When I first started gardening in the South in 1996, I realized that it was going to be very different from gardening in Great Britain when I had to wield a pick axe to break into the heavy clay soil. I almost gave up in despair until I found Elizabeth Lawrence's book "The Southern Garden ." I needed help in selecting suitable plants that would survive the acidic clay soil and intense summer heat and this book does that and more. The writing style is very knowledgeable, practical and soothing and focused on the very real conditions of gardening in the South. Elizabeth Lawrence used her garden as a laboratory for growing trees, shrubs and plants to find out their best growing conditions and with this information, she could design landscapes with the optimum plants for the landscape. She had a huge network of gardeners and nursery people who sent her plants to trial and test out in her garden, which she would then write about in her books and garden columns.
Like Elizabeth, I keep my own records of when plants bloom, in a small notebook that I put together every year. I jot down the earliest blooms, brief notes about the weather, notes on when the plants stop blooming and any ideas for improvements for the next year. Sometimes I print out photos of different plant combos that look good together in the garden. This information is invaluable for designing landscapes and for planning horticultural therapy activities.
She really was ahead of her time, and was able to trace back many of the plants she grew to the actual person who brought the original plants to America !! It seems now that it would be impossible to keep track of the new plants are introduced by "plant hunters" from all over the globe- and to keep track of all the new plant hybrids that are developed every year by the different nurseries and universities.
Next Next post: Master Gardener Sale Tomorrow- September 21!


text:
In R.I. domestic-violence cases, suspects often keep guns
A review of all domestic violence restraining orders issued in Rhode Island for the past two years found that judges rarely require suspects to turn in their firearms, even when the alleged victims say there are firearms present or that they've been threatened with a gun.
By Amanda Milkovits
Providence Journal Staff Writer
PROVIDENCE, R.I. — A review of all domestic violence restraining orders issued in Rhode Island for the past two years found that judges rarely require suspects to turn in their firearms, even when the alleged victims say there are firearms present or that they've been threatened with a gun.
Of the 1,609 protective orders granted from 2012 to 2014, Rhode Island judges ordered the suspects to surrender firearms in just 5 percent of the cases. The results varied from court to court, with Kent County District Court and Washington County District Court judges ordering guns surrendered at far higher rates than judges in the remaining six district and family courts.
The research comes from Everytown for Gun Safety, a group that has lobbied for gun-control bills now languishing at the General Assembly, including legislation that would require people convicted of domestic violence crimes and subject to restraining orders to surrender their firearms. Everytown released the research and its data to The Journal first.
While federal law prohibits people under domestic violence protective orders from buying or possessing guns, there's no provision for how the guns are surrendered, and in Rhode Island, the matter is left to a judge's discretion. Everytown wanted to see how that discretion is applied, said its research director, Ted Alcorn.
What they found, Alcorn said, was a "wake-up call."
Visiting each courthouse, the researchers collected the 1,609 final protective orders, totaling more than 22,000 pages. They reviewed all of the handwritten complaints and the judges' final orders, looking for key points, Alcorn said. Did the person seeking the order mention the presence of guns, threats against themselves or their children, or ask the court to remove the guns? When the judge granted the restraining order, was the suspect also told to surrender any firearms?
"When you see the narratives, they tell a powerful story," Alcorn said.
One was a Providence woman with young children, who wrote that her estranged husband broke into her home and said he was going back to his truck to get his guns. In another, a woman said the man threatened to "blow my head off" and made her lay on the floor of his apartment with a gun to her head and "said he could put a bullet in my head and leave me there." In both cases, the judges granted restraining orders but didn't require the men to surrender their firearms.
The findings
Firearms were mentioned in 23 percent of all cases, Alcorn said. Judges ordered guns surrendered in 13 percent of cases when told the suspect had access to a gun or threatened to get a gun to hurt the complainant. Overall, judges ordered firearms removed in 5 percent of cases, according to the research.
Everytown lawyer Luke Entelis said the findings were striking. "These people are prohibited by federal law from possessing firearms, and Rhode Island courts are allowed to order them to turn in their guns," Luke said.
But they don't. "It just doesn't make sense why the decision would be left in the hands of the court," Luke Entelis said.
The Journal shared Everytown's initial report with Craig Berke, spokesman for the Rhode Island Judiciary, who cautioned that the numbers don't reveal all. While Everytown collected the documents, the group didn't listen to the recordings of the hearings, when Berke said evidence would have been presented. A "mention" or "indication" of firearms in the narrative of a complaint isn't evidence, he said, it's just an allegation.
Every case is different and has its own unique set of facts," Berke said. "Our judges have to weigh evidence and apply the law, and apply it evenly on both sides. These numbers get your attention, but they don't tell the whole story."
As for why different courts show different results, Berke said, "not only is every single case different, every judge is different."
The legislation
The Rhode Island Judiciary is not taking a position on the bills sponsored by South Kingstown Rep. Teresa Tanzi and Barrington Sen. Cynthia Coyne that would prohibit gun possession by people convicted of domestic violence and those subject to protective orders, during the length of the order. The legislation requires the state courts to order the surrender of firearms in those cases. The legislative session is waning, and the two bills — House Bill 5655 and Senate Bill 503 — haven't advanced since they were heard in April. There's little indication that the legislation will move forward.
Gun rights advocates came out by the dozens to oppose these bills and other legislation that targeted firearms, calling them "overly broad." For Tanzi, the Everytown report helped build a strong case for the bills. "It was a relief to finally have quality information, because people on both sides of the issue are very passionate, so it gives me more confidence to move forward based on facts," Tanzi said.
Tanzi said she understands the data doesn't show the complexity of the cases. However, 15 other states, including Massachusetts and Connecticut, have closed the loophole left by federal law. Why not Rhode Island?
"People tend to view this as a gun bill. To me, it's a domestic violence bill," Tanzi said. "When we get people to see this isn't a Second Amendment right, this is about a right for families to feel safe, then I think we do have a strong chance. Letting convicted abusers stay armed doesn't make sense."
The Journal shared the study with Deborah DeBare, executive director of the Rhode Island Coalition Against Domestic Violence, who said she was "astounded" by the findings. "I feel that it's the legal system's responsibility to provide blanket protection to make sure firearms are removed," she said Monday.
amilkovi@providencejournal.com
On Twitter: @AmandaMilkovits